member tag update

This commit is contained in:
youbeen 2025-06-16 14:46:52 +09:00
parent e61e98ed7d
commit 1ddcfc3ad3
5 changed files with 131 additions and 38 deletions

View File

@ -1,15 +1,19 @@
package com.ktds.hi.member.domain; package com.ktds.hi.member.domain;
import java.util.Arrays;
/** /**
* 태그 유형 열거형 * 태그 유형 열거형
* 취향 태그의 카테고리를 정의 * 취향 태그의 카테고리를 정의
*/ */
public enum TagType { public enum TagType {
CUISINE("음식 종류"), TASTE(""),
FLAVOR(""),
DIETARY("식이 제한"),
ATMOSPHERE("분위기"), ATMOSPHERE("분위기"),
PRICE("가격대"); ALLERGY("알러지"),
SERVICE("서비스"),
PRICE_RANGE("가격대"),
CUISINE_TYPE("음식 종류"),
HEALTH_INFO("건강 정보");
private final String description; private final String description;
@ -20,4 +24,25 @@ public enum TagType {
public String getDescription() { public String getDescription() {
return description; return description;
} }
/**
* 설명으로 TagType 찾기
*/
public static TagType fromDescription(String description) {
for (TagType type : TagType.values()) {
if (type.description.equals(description)) {
return type;
}
}
throw new IllegalArgumentException("Unknown tag type description: " + description);
}
/**
* 모든 태그 타입 설명 목록 반환
*/
public static String[] getAllDescriptions() {
return Arrays.stream(TagType.values())
.map(TagType::getDescription)
.toArray(String[]::new);
}
} }

View File

@ -0,0 +1,21 @@
package com.ktds.hi.member.repository.entity;
public enum TagCategory {
TASTE(""), // 매운맛, 단맛, 짠맛
ATMOSPHERE("분위기"), // 깨끗한, 혼밥, 데이트
ALLERGY("알러지"), // 유제품, 견과류, 갑각류
SERVICE("서비스"), // 빠른서비스, 친절한, 조용한
PRICE("가격대"), // 저렴한, 합리적인, 가성비
FOOD_TYPE("음식 종류"), // 한식, 중식, 일식
HEALTH("건강 정보"); // 저염, 저당, 글루텐프리
private final String description;
TagCategory(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}

View File

@ -0,0 +1,37 @@
package com.ktds.hi.member.repository.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "tags")
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TagEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "tag_name", nullable = false, length = 50)
private String tagName; // 매운맛, 깨끗한, 유제품
@Enumerated(EnumType.STRING)
@Column(name = "tag_category", nullable = false)
private TagCategory tagCategory; // TASTE, ATMOSPHERE, ALLERGY
@Column(name = "tag_color", length = 7)
private String tagColor; // #FF5722
@Column(name = "sort_order")
private Integer sortOrder;
@Column(name = "is_active")
@Builder.Default
private Boolean isActive = true;
}

View File

@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
* 취향 태그 엔티티 클래스 * 취향 태그 엔티티 클래스
* 데이터베이스 taste_tags 테이블과 매핑되는 JPA 엔티티 * 데이터베이스 taste_tags 테이블과 매핑되는 JPA 엔티티
*/ */
// TasteTagEntity.java
@Entity @Entity
@Table(name = "taste_tags") @Table(name = "taste_tags")
@Getter @Getter
@ -24,7 +25,17 @@ public class TasteTagEntity {
private Long id; private Long id;
@Column(name = "tag_name", unique = true, nullable = false, length = 50) @Column(name = "tag_name", unique = true, nullable = false, length = 50)
private String tagName; private String tagName; // 매운맛, 단맛, 짠맛
@Column(name = "tag_color", length = 7)
private String tagColor; // #FF5722
@Column(name = "sort_order")
private Integer sortOrder;
@Column(name = "is_active")
@Builder.Default
private Boolean isActive = true;
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
@Column(name = "tag_type", nullable = false) @Column(name = "tag_type", nullable = false)
@ -33,7 +44,7 @@ public class TasteTagEntity {
@Column(length = 200) @Column(length = 200)
private String description; private String description;
@Column(name = "is_active") @Enumerated(EnumType.STRING)
@Builder.Default @Column(name = "tag_category", nullable = false)
private Boolean isActive = true; private TagCategory tagCategory; // 추가된 필드
} }

View File

@ -1,31 +1,30 @@
/*
*/
package com.ktds.hi.member.repository.jpa; package com.ktds.hi.member.repository.jpa;
import com.ktds.hi.member.domain.TagType; import com.ktds.hi.member.domain.TagType;
import com.ktds.hi.member.repository.entity.TagCategory;
import com.ktds.hi.member.repository.entity.TasteTagEntity; import com.ktds.hi.member.repository.entity.TasteTagEntity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
import java.util.Optional;
/**
* 취향 태그 JPA 리포지토리 인터페이스
* 취향 태그 데이터의 CRUD 작업을 담당
*/
@Repository @Repository
public interface TasteTagRepository extends JpaRepository<TasteTagEntity, Long> { public interface TasteTagRepository extends JpaRepository<TasteTagEntity, Long> {
/**
* 활성화된 태그 목록 조회
*/
List<TasteTagEntity> findByIsActiveTrue();
/**
* 태그 유형별 태그 목록 조회
*/
List<TasteTagEntity> findByTagTypeAndIsActiveTrue(TagType tagType); List<TasteTagEntity> findByTagTypeAndIsActiveTrue(TagType tagType);
/** List<TasteTagEntity> findByIsActiveTrue();
* 태그명으로 태그 조회
*/
List<TasteTagEntity> findByTagNameIn(List<String> tagNames); List<TasteTagEntity> findByTagNameIn(List<String> tagNames);
List<TasteTagEntity> findByTagCategoryAndIsActiveTrue(TagCategory tagCategory);
List<TasteTagEntity> findByIsActiveTrueOrderBySortOrder();
Optional<TasteTagEntity> findByTagNameAndTagCategory(String tagName, TagCategory tagCategory);
boolean existsByTagNameAndTagCategory(String tagName, TagCategory tagCategory);
} }