From 6e8a76c16a4000a6cce8c571bca6ed3138fc5a68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=8F=99=ED=9B=88?= <2dh2@naver.com> Date: Wed, 28 Jan 2026 16:59:14 +0900 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20=EB=8F=99=EC=95=84=EB=A6=AC=20?= =?UTF-8?q?=ED=83=9C=EA=B7=B8=20=EA=B4=80=EB=A0=A8=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/db/migration/V16__drop_club_tag_tables.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main/resources/db/migration/V16__drop_club_tag_tables.sql diff --git a/src/main/resources/db/migration/V16__drop_club_tag_tables.sql b/src/main/resources/db/migration/V16__drop_club_tag_tables.sql new file mode 100644 index 00000000..922db819 --- /dev/null +++ b/src/main/resources/db/migration/V16__drop_club_tag_tables.sql @@ -0,0 +1,2 @@ +DROP TABLE IF EXISTS club_tag_map; +DROP TABLE IF EXISTS club_tag; From d55502f1f2a7a88c8712827744c23070029c84c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=8F=99=ED=9B=88?= <2dh2@naver.com> Date: Wed, 28 Jan 2026 16:59:34 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20=EB=8F=99=EC=95=84=EB=A6=AC=20?= =?UTF-8?q?=ED=83=9C=EA=B7=B8=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/club/controller/ClubApi.java | 5 -- .../club/controller/ClubController.java | 7 --- .../domain/club/dto/ClubDetailResponse.java | 11 ----- .../club/dto/ClubProfileUpdateRequest.java | 10 +--- .../domain/club/dto/ClubTagResponse.java | 16 ------- .../domain/club/dto/ClubTagsResponse.java | 18 -------- .../konect/domain/club/dto/ClubsResponse.java | 8 +--- .../domain/club/model/ClubSummaryInfo.java | 4 +- .../konect/domain/club/model/ClubTag.java | 44 ------------------ .../konect/domain/club/model/ClubTagMap.java | 42 ----------------- .../domain/club/model/ClubTagMapId.java | 29 ------------ .../club/repository/ClubQueryRepository.java | 46 ++----------------- .../club/repository/ClubTagMapRepository.java | 20 -------- .../club/repository/ClubTagRepository.java | 26 ----------- .../domain/club/service/ClubService.java | 30 +----------- .../konect/global/code/ApiResponseCode.java | 1 - 16 files changed, 8 insertions(+), 309 deletions(-) delete mode 100644 src/main/java/gg/agit/konect/domain/club/dto/ClubTagResponse.java delete mode 100644 src/main/java/gg/agit/konect/domain/club/dto/ClubTagsResponse.java delete mode 100644 src/main/java/gg/agit/konect/domain/club/model/ClubTag.java delete mode 100644 src/main/java/gg/agit/konect/domain/club/model/ClubTagMap.java delete mode 100644 src/main/java/gg/agit/konect/domain/club/model/ClubTagMapId.java delete mode 100644 src/main/java/gg/agit/konect/domain/club/repository/ClubTagMapRepository.java delete mode 100644 src/main/java/gg/agit/konect/domain/club/repository/ClubTagRepository.java diff --git a/src/main/java/gg/agit/konect/domain/club/controller/ClubApi.java b/src/main/java/gg/agit/konect/domain/club/controller/ClubApi.java index 738ad597..988747fc 100644 --- a/src/main/java/gg/agit/konect/domain/club/controller/ClubApi.java +++ b/src/main/java/gg/agit/konect/domain/club/controller/ClubApi.java @@ -36,7 +36,6 @@ import gg.agit.konect.domain.club.dto.ClubRecruitmentCreateRequest; import gg.agit.konect.domain.club.dto.ClubRecruitmentResponse; import gg.agit.konect.domain.club.dto.ClubRecruitmentUpdateRequest; -import gg.agit.konect.domain.club.dto.ClubTagsResponse; import gg.agit.konect.domain.club.dto.ClubsResponse; import gg.agit.konect.domain.club.dto.MyManagedClubResponse; import gg.agit.konect.domain.club.dto.MemberPositionChangeRequest; @@ -138,10 +137,6 @@ ResponseEntity updateBasicInfo( @UserId Integer userId ); - @Operation(summary = "사용 가능한 전체 태그 목록을 조회한다.") - @GetMapping("/tags") - ResponseEntity getTags(); - @Operation(summary = "가입한 동아리 리스트를 조회한다.") @GetMapping("/joined") ResponseEntity getJoinedClubs( diff --git a/src/main/java/gg/agit/konect/domain/club/controller/ClubController.java b/src/main/java/gg/agit/konect/domain/club/controller/ClubController.java index 2409842a..aed79034 100644 --- a/src/main/java/gg/agit/konect/domain/club/controller/ClubController.java +++ b/src/main/java/gg/agit/konect/domain/club/controller/ClubController.java @@ -32,7 +32,6 @@ import gg.agit.konect.domain.club.dto.ClubRecruitmentCreateRequest; import gg.agit.konect.domain.club.dto.ClubRecruitmentResponse; import gg.agit.konect.domain.club.dto.ClubRecruitmentUpdateRequest; -import gg.agit.konect.domain.club.dto.ClubTagsResponse; import gg.agit.konect.domain.club.dto.ClubsResponse; import gg.agit.konect.domain.club.dto.MyManagedClubResponse; import gg.agit.konect.domain.club.dto.MemberPositionChangeRequest; @@ -111,12 +110,6 @@ public ResponseEntity updateBasicInfo( return ResponseEntity.noContent().build(); } - @Override - public ResponseEntity getTags() { - ClubTagsResponse response = clubService.getTags(); - return ResponseEntity.ok(response); - } - @Override public ResponseEntity getJoinedClubs(@UserId Integer userId) { ClubMembershipsResponse response = clubService.getJoinedClubs(userId); diff --git a/src/main/java/gg/agit/konect/domain/club/dto/ClubDetailResponse.java b/src/main/java/gg/agit/konect/domain/club/dto/ClubDetailResponse.java index dd8e1925..a278a3f8 100644 --- a/src/main/java/gg/agit/konect/domain/club/dto/ClubDetailResponse.java +++ b/src/main/java/gg/agit/konect/domain/club/dto/ClubDetailResponse.java @@ -4,13 +4,11 @@ import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; import java.time.LocalDate; -import java.util.List; import gg.agit.konect.domain.club.enums.RecruitmentStatus; import gg.agit.konect.domain.club.model.Club; import gg.agit.konect.domain.club.model.ClubMember; import gg.agit.konect.domain.club.model.ClubRecruitment; -import gg.agit.konect.domain.club.model.ClubTagMap; import io.swagger.v3.oas.annotations.media.Schema; public record ClubDetailResponse( @@ -54,9 +52,6 @@ public record ClubDetailResponse( @Schema(description = "동아리 회장 이름", example = "김철수", requiredMode = REQUIRED) String presidentName, - @Schema(description = "동아리 태그 목록", requiredMode = REQUIRED) - List tags, - @Schema(description = "동아리 소속 여부", example = "true", requiredMode = REQUIRED) Boolean isMember, @@ -88,14 +83,9 @@ public static ClubDetailResponse of( Integer memberCount, ClubRecruitment clubRecruitment, ClubMember president, - List clubTagMaps, Boolean isMember, Boolean isApplied ) { - List tags = clubTagMaps.stream() - .map(tagMap -> ClubTagResponse.from(tagMap.getTag())) - .toList(); - return new ClubDetailResponse( club.getId(), club.getName(), @@ -107,7 +97,6 @@ public static ClubDetailResponse of( memberCount, InnerRecruitment.from(clubRecruitment), president.getUser().getName(), - tags, isMember, isApplied ); diff --git a/src/main/java/gg/agit/konect/domain/club/dto/ClubProfileUpdateRequest.java b/src/main/java/gg/agit/konect/domain/club/dto/ClubProfileUpdateRequest.java index 42191333..e9fc51d9 100644 --- a/src/main/java/gg/agit/konect/domain/club/dto/ClubProfileUpdateRequest.java +++ b/src/main/java/gg/agit/konect/domain/club/dto/ClubProfileUpdateRequest.java @@ -1,10 +1,7 @@ package gg.agit.konect.domain.club.dto; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; public record ClubProfileUpdateRequest( @@ -18,11 +15,6 @@ public record ClubProfileUpdateRequest( requiredMode = Schema.RequiredMode.REQUIRED) @NotBlank(message = "이미지 URL은 필수 입력입니다.") @Size(max = 255, message = "이미지 URL은 255자 이하여야 합니다.") - String imageUrl, - - @Schema(description = "동아리 태그 ID 목록", example = "[1, 2, 3]", - requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "태그 목록은 필수 입력입니다.") - List tagIds + String imageUrl ) { } diff --git a/src/main/java/gg/agit/konect/domain/club/dto/ClubTagResponse.java b/src/main/java/gg/agit/konect/domain/club/dto/ClubTagResponse.java deleted file mode 100644 index c9d67f7a..00000000 --- a/src/main/java/gg/agit/konect/domain/club/dto/ClubTagResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package gg.agit.konect.domain.club.dto; - -import gg.agit.konect.domain.club.model.ClubTag; -import io.swagger.v3.oas.annotations.media.Schema; - -public record ClubTagResponse( - @Schema(description = "태그 ID", example = "1", requiredMode = Schema.RequiredMode.REQUIRED) - Integer id, - - @Schema(description = "태그 이름", example = "웹개발", requiredMode = Schema.RequiredMode.REQUIRED) - String name -) { - public static ClubTagResponse from(ClubTag clubTag) { - return new ClubTagResponse(clubTag.getId(), clubTag.getName()); - } -} diff --git a/src/main/java/gg/agit/konect/domain/club/dto/ClubTagsResponse.java b/src/main/java/gg/agit/konect/domain/club/dto/ClubTagsResponse.java deleted file mode 100644 index 44ff85e1..00000000 --- a/src/main/java/gg/agit/konect/domain/club/dto/ClubTagsResponse.java +++ /dev/null @@ -1,18 +0,0 @@ -package gg.agit.konect.domain.club.dto; - -import java.util.List; - -import gg.agit.konect.domain.club.model.ClubTag; -import io.swagger.v3.oas.annotations.media.Schema; - -public record ClubTagsResponse( - @Schema(description = "태그 목록", requiredMode = Schema.RequiredMode.REQUIRED) - List tags -) { - public static ClubTagsResponse from(List clubTags) { - List tags = clubTags.stream() - .map(ClubTagResponse::from) - .toList(); - return new ClubTagsResponse(tags); - } -} diff --git a/src/main/java/gg/agit/konect/domain/club/dto/ClubsResponse.java b/src/main/java/gg/agit/konect/domain/club/dto/ClubsResponse.java index ebeec3e0..ece557bc 100644 --- a/src/main/java/gg/agit/konect/domain/club/dto/ClubsResponse.java +++ b/src/main/java/gg/agit/konect/domain/club/dto/ClubsResponse.java @@ -58,10 +58,7 @@ public record InnerClubResponse( @Schema(description = "지원 마감일(상시 모집이거나 모집 공고가 없으면 null)", example = "2025.12.31", requiredMode = NOT_REQUIRED) @JsonFormat(pattern = "yyyy.MM.dd") - LocalDate applicationDeadline, - - @Schema(description = "동아리 태그 리스트", example = "[\"IT\", \"프로그래밍\"]", requiredMode = REQUIRED) - List tags + LocalDate applicationDeadline ) { public static InnerClubResponse from(ClubSummaryInfo clubSummaryInfo, boolean isPendingApproval) { return new InnerClubResponse( @@ -73,8 +70,7 @@ public static InnerClubResponse from(ClubSummaryInfo clubSummaryInfo, boolean is clubSummaryInfo.status(), isPendingApproval, clubSummaryInfo.isAlwaysRecruiting(), - clubSummaryInfo.applicationDeadline(), - clubSummaryInfo.tags() + clubSummaryInfo.applicationDeadline() ); } } diff --git a/src/main/java/gg/agit/konect/domain/club/model/ClubSummaryInfo.java b/src/main/java/gg/agit/konect/domain/club/model/ClubSummaryInfo.java index 9cc4b8ca..c9be3da7 100644 --- a/src/main/java/gg/agit/konect/domain/club/model/ClubSummaryInfo.java +++ b/src/main/java/gg/agit/konect/domain/club/model/ClubSummaryInfo.java @@ -1,7 +1,6 @@ package gg.agit.konect.domain.club.model; import java.time.LocalDate; -import java.util.List; import gg.agit.konect.domain.club.enums.RecruitmentStatus; @@ -13,8 +12,7 @@ public record ClubSummaryInfo( String description, RecruitmentStatus status, Boolean isAlwaysRecruiting, - LocalDate applicationDeadline, - List tags + LocalDate applicationDeadline ) { } diff --git a/src/main/java/gg/agit/konect/domain/club/model/ClubTag.java b/src/main/java/gg/agit/konect/domain/club/model/ClubTag.java deleted file mode 100644 index 5e21e090..00000000 --- a/src/main/java/gg/agit/konect/domain/club/model/ClubTag.java +++ /dev/null @@ -1,44 +0,0 @@ -package gg.agit.konect.domain.club.model; - -import static jakarta.persistence.GenerationType.IDENTITY; -import static lombok.AccessLevel.PROTECTED; - -import gg.agit.konect.global.model.BaseEntity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import jakarta.persistence.UniqueConstraint; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Entity -@Table( - name = "club_tag", - uniqueConstraints = { - @UniqueConstraint( - name = "uq_club_tag_name", - columnNames = {"name"} - ) - } -) -@NoArgsConstructor(access = PROTECTED) -public class ClubTag extends BaseEntity { - - @Id - @GeneratedValue(strategy = IDENTITY) - @Column(name = "id", nullable = false, updatable = false, unique = true) - private Integer id; - - @Column(name = "name", length = 50, nullable = false, unique = true) - private String name; - - @Builder - private ClubTag(Integer id, String name) { - this.id = id; - this.name = name; - } -} diff --git a/src/main/java/gg/agit/konect/domain/club/model/ClubTagMap.java b/src/main/java/gg/agit/konect/domain/club/model/ClubTagMap.java deleted file mode 100644 index 349574f2..00000000 --- a/src/main/java/gg/agit/konect/domain/club/model/ClubTagMap.java +++ /dev/null @@ -1,42 +0,0 @@ -package gg.agit.konect.domain.club.model; - -import static jakarta.persistence.FetchType.LAZY; -import static lombok.AccessLevel.PROTECTED; - -import gg.agit.konect.global.model.BaseEntity; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.MapsId; -import jakarta.persistence.Table; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Entity -@Table(name = "club_tag_map") -@NoArgsConstructor(access = PROTECTED) -public class ClubTagMap extends BaseEntity { - - @EmbeddedId - private ClubTagMapId id; - - @MapsId(value = "clubId") - @ManyToOne(fetch = LAZY) - @JoinColumn(name = "club_id", nullable = false, updatable = false) - private Club club; - - @MapsId(value = "tagId") - @ManyToOne(fetch = LAZY) - @JoinColumn(name = "tag_id", nullable = false, updatable = false) - private ClubTag tag; - - @Builder - private ClubTagMap(Club club, ClubTag tag) { - this.id = new ClubTagMapId(club.getId(), tag.getId()); - this.club = club; - this.tag = tag; - } -} diff --git a/src/main/java/gg/agit/konect/domain/club/model/ClubTagMapId.java b/src/main/java/gg/agit/konect/domain/club/model/ClubTagMapId.java deleted file mode 100644 index e30f042c..00000000 --- a/src/main/java/gg/agit/konect/domain/club/model/ClubTagMapId.java +++ /dev/null @@ -1,29 +0,0 @@ -package gg.agit.konect.domain.club.model; - -import static lombok.AccessLevel.PROTECTED; - -import java.io.Serializable; - -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Embeddable -@EqualsAndHashCode -@NoArgsConstructor(access = PROTECTED) -public class ClubTagMapId implements Serializable { - - @Column(name = "club_id", nullable = false, updatable = false) - private Integer clubId; - - @Column(name = "tag_id", nullable = false, updatable = false) - private Integer tagId; - - public ClubTagMapId(Integer clubId, Integer tagId) { - this.clubId = clubId; - this.tagId = tagId; - } -} diff --git a/src/main/java/gg/agit/konect/domain/club/repository/ClubQueryRepository.java b/src/main/java/gg/agit/konect/domain/club/repository/ClubQueryRepository.java index 6f6f6484..a920f19b 100644 --- a/src/main/java/gg/agit/konect/domain/club/repository/ClubQueryRepository.java +++ b/src/main/java/gg/agit/konect/domain/club/repository/ClubQueryRepository.java @@ -2,14 +2,10 @@ import static gg.agit.konect.domain.club.model.QClub.club; import static gg.agit.konect.domain.club.model.QClubRecruitment.clubRecruitment; -import static gg.agit.konect.domain.club.model.QClubTag.clubTag; -import static gg.agit.konect.domain.club.model.QClubTagMap.clubTagMap; -import static java.util.stream.Collectors.*; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -17,7 +13,6 @@ import org.springframework.stereotype.Repository; import com.querydsl.core.BooleanBuilder; -import com.querydsl.core.Tuple; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.CaseBuilder; @@ -44,8 +39,7 @@ public Page findAllByFilter( List> orders = createClubSortOrders(isRecruiting); List clubs = fetchClubs(pageable, condition, orders); - Map> clubTagsMap = fetchClubTags(clubs); - List content = convertToSummaryInfo(clubs, clubTagsMap); + List content = convertToSummaryInfo(clubs); Long total = countClubs(condition, isRecruiting); return new PageImpl<>(content, pageable, total); @@ -75,38 +69,6 @@ private Long countClubs(BooleanBuilder condition, Boolean isRecruiting) { return query.where(condition).fetchOne(); } - private Map> fetchClubTags(List clubs) { - List clubIds = clubs.stream() - .map(Club::getId) - .toList(); - - if (clubIds.isEmpty()) { - return Map.of(); - } - - List tagResults = jpaQueryFactory - .select(clubTagMap.club.id, clubTag.name) - .from(clubTagMap) - .innerJoin(clubTagMap.tag, clubTag) - .where(clubTagMap.club.id.in(clubIds)) - .fetch(); - - return tagResults.stream() - .collect(groupingBy( - tuple -> tuple.get(clubTagMap.club.id), - mapping(tuple -> tuple.get(clubTag.name), toList()) - )); - } - - /* 서브 쿼리 */ - private JPAQuery createClubIdsByTagNameSubquery(String normalizedQuery) { - return jpaQueryFactory - .select(clubTagMap.club.id) - .from(clubTagMap) - .innerJoin(clubTagMap.tag, clubTag) - .where(clubTag.name.lower().contains(normalizedQuery)); - } - /* 검색 조건 */ private BooleanBuilder createClubSearchCondition(String query, Boolean isRecruiting, Integer universityId) { BooleanBuilder condition = new BooleanBuilder(); @@ -130,7 +92,6 @@ private void addQuerySearchCondition(BooleanBuilder condition, String query) { String normalizedQuery = query.trim().toLowerCase(); BooleanBuilder searchCondition = new BooleanBuilder(); searchCondition.or(club.name.lower().contains(normalizedQuery)); - searchCondition.or(club.id.in(createClubIdsByTagNameSubquery(normalizedQuery))); condition.and(searchCondition); } @@ -197,7 +158,7 @@ private void addDefaultSortOrder(List> orders) { } /* DTO 변환 */ - private List convertToSummaryInfo(List clubs, Map> clubTagsMap) { + private List convertToSummaryInfo(List clubs) { return clubs.stream() .map(club -> { ClubRecruitment recruitment = club.getClubRecruitment(); @@ -217,8 +178,7 @@ private List convertToSummaryInfo(List clubs, Map { - - @Query("SELECT ctm FROM ClubTagMap ctm JOIN FETCH ctm.tag WHERE ctm.club.id = :clubId") - List findAllByClubId(@Param("clubId") Integer clubId); - - void deleteByClubId(Integer clubId); - - ClubTagMap save(ClubTagMap clubTagMap); -} diff --git a/src/main/java/gg/agit/konect/domain/club/repository/ClubTagRepository.java b/src/main/java/gg/agit/konect/domain/club/repository/ClubTagRepository.java deleted file mode 100644 index 4345cfd2..00000000 --- a/src/main/java/gg/agit/konect/domain/club/repository/ClubTagRepository.java +++ /dev/null @@ -1,26 +0,0 @@ -package gg.agit.konect.domain.club.repository; - -import java.util.List; -import java.util.Optional; - -import org.springframework.data.repository.Repository; - -import gg.agit.konect.domain.club.model.ClubTag; -import gg.agit.konect.global.code.ApiResponseCode; -import gg.agit.konect.global.exception.CustomException; - -public interface ClubTagRepository extends Repository { - - Optional findById(Integer id); - - default ClubTag getById(Integer id) { - return findById(id) - .orElseThrow(() -> CustomException.of(ApiResponseCode.NOT_FOUND_CLUB_TAG)); - } - - List findAll(); - - List findAllByIdIn(List ids); - - ClubTag save(ClubTag clubTag); -} diff --git a/src/main/java/gg/agit/konect/domain/club/service/ClubService.java b/src/main/java/gg/agit/konect/domain/club/service/ClubService.java index de552fbb..ec72beef 100644 --- a/src/main/java/gg/agit/konect/domain/club/service/ClubService.java +++ b/src/main/java/gg/agit/konect/domain/club/service/ClubService.java @@ -41,7 +41,6 @@ import gg.agit.konect.domain.club.dto.ClubRecruitmentCreateRequest; import gg.agit.konect.domain.club.dto.ClubRecruitmentResponse; import gg.agit.konect.domain.club.dto.ClubRecruitmentUpdateRequest; -import gg.agit.konect.domain.club.dto.ClubTagsResponse; import gg.agit.konect.domain.club.dto.ClubsResponse; import gg.agit.konect.domain.club.dto.MyManagedClubResponse; import gg.agit.konect.domain.club.enums.ClubPositionGroup; @@ -56,8 +55,6 @@ import gg.agit.konect.domain.club.model.ClubRecruitment; import gg.agit.konect.domain.club.model.ClubRecruitmentImage; import gg.agit.konect.domain.club.model.ClubSummaryInfo; -import gg.agit.konect.domain.club.model.ClubTag; -import gg.agit.konect.domain.club.model.ClubTagMap; import gg.agit.konect.domain.club.repository.ClubApplyAnswerRepository; import gg.agit.konect.domain.club.repository.ClubApplyQuestionRepository; import gg.agit.konect.domain.club.repository.ClubApplyRepository; @@ -66,8 +63,6 @@ import gg.agit.konect.domain.club.repository.ClubQueryRepository; import gg.agit.konect.domain.club.repository.ClubRecruitmentRepository; import gg.agit.konect.domain.club.repository.ClubRepository; -import gg.agit.konect.domain.club.repository.ClubTagMapRepository; -import gg.agit.konect.domain.club.repository.ClubTagRepository; import gg.agit.konect.domain.user.model.User; import gg.agit.konect.domain.user.repository.UserRepository; import gg.agit.konect.global.exception.CustomException; @@ -97,8 +92,6 @@ public class ClubService { private final ClubApplyAnswerRepository clubApplyAnswerRepository; private final UserRepository userRepository; private final BankRepository bankRepository; - private final ClubTagRepository clubTagRepository; - private final ClubTagMapRepository clubTagMapRepository; public ClubsResponse getClubs(ClubCondition condition, Integer userId) { User user = userRepository.getById(userId); @@ -140,12 +133,11 @@ public ClubDetailResponse getClubDetail(Integer clubId, Integer userId) { ClubMember president = clubMembers.getPresident(); Integer memberCount = clubMembers.getCount(); ClubRecruitment recruitment = club.getClubRecruitment(); - List clubTagMaps = clubTagMapRepository.findAllByClubId(clubId); boolean isMember = clubMembers.contains(userId); Boolean isApplied = isMember || clubApplyRepository.existsByClubIdAndUserId(clubId, userId); - return ClubDetailResponse.of(club, memberCount, recruitment, president, clubTagMaps, isMember, isApplied); + return ClubDetailResponse.of(club, memberCount, recruitment, president, isMember, isApplied); } @Transactional @@ -188,21 +180,6 @@ public void updateProfile(Integer clubId, Integer userId, ClubProfileUpdateReque } club.updateProfile(request.introduce(), request.imageUrl()); - - clubTagMapRepository.deleteByClubId(clubId); - - List tags = clubTagRepository.findAllByIdIn(request.tagIds()); - if (tags.size() != request.tagIds().size()) { - throw CustomException.of(NOT_FOUND_CLUB_TAG); - } - - tags.forEach(tag -> { - ClubTagMap tagMap = ClubTagMap.builder() - .club(club) - .tag(tag) - .build(); - clubTagMapRepository.save(tagMap); - }); } @Transactional @@ -230,11 +207,6 @@ public void updateBasicInfo(Integer clubId, Integer userId, ClubBasicInfoUpdateR club.updateBasicInfo(request.name(), request.clubCategory()); } - public ClubTagsResponse getTags() { - List tags = clubTagRepository.findAll(); - return ClubTagsResponse.from(tags); - } - public ClubMembershipsResponse getJoinedClubs(Integer userId) { List clubMembers = clubMemberRepository.findAllByUserId(userId); return ClubMembershipsResponse.from(clubMembers); diff --git a/src/main/java/gg/agit/konect/global/code/ApiResponseCode.java b/src/main/java/gg/agit/konect/global/code/ApiResponseCode.java index 9b61c7ee..9c9cfb3a 100644 --- a/src/main/java/gg/agit/konect/global/code/ApiResponseCode.java +++ b/src/main/java/gg/agit/konect/global/code/ApiResponseCode.java @@ -55,7 +55,6 @@ public enum ApiResponseCode { // 404 Not Found (리소스를 찾을 수 없음) NO_HANDLER_FOUND(HttpStatus.NOT_FOUND, "유효하지 않은 API 경로입니다."), NOT_FOUND_CLUB(HttpStatus.NOT_FOUND, "동아리를 찾을 수 없습니다."), - NOT_FOUND_CLUB_TAG(HttpStatus.NOT_FOUND, "동아리 태그를 찾을 수 없습니다."), NOT_FOUND_CLUB_MEMBER(HttpStatus.NOT_FOUND, "해당하는 동아리 원을 찾을 수 없습니다."), NOT_FOUND_CLUB_PRESIDENT(HttpStatus.NOT_FOUND, "동아리 회장을 찾을 수 없습니다."), NOT_FOUND_CLUB_POSITION(HttpStatus.NOT_FOUND, "동아리 직책을 찾을 수 없습니다."), From 288ac7696b87dfa56cf35a9883c7d05b175fc84d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=8F=99=ED=9B=88?= <2dh2@naver.com> Date: Wed, 28 Jan 2026 16:59:38 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20=EB=8F=99=EC=95=84=EB=A6=AC=20?= =?UTF-8?q?=ED=83=9C=EA=B7=B8=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/data.sql | 59 ------------------------------------- 1 file changed, 59 deletions(-) diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index f6fb1eed..d02641f2 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -74,65 +74,6 @@ WHERE id = 1; INSERT INTO club_apply_question (club_id, question, is_required) VALUES (1, '지원 동기를 입력해주세요.', TRUE), (1, '동아리에서 기대하는 점을 적어주세요.', FALSE); --- 태그 -INSERT INTO club_tag (name) -VALUES ('IT'), - ('프로그래밍'), - ('스터디'), - ('프로젝트'), - ('탁구'), - ('운동'), - ('음악'), - ('합주'), - ('공연'), - ('클라이밍'), - ('자율주행'), - ('연구'), - ('대회'), - ('스쿼시'), - ('테니스'), - ('가톨릭'), - ('종교'), - ('봉사'), - ('기타'), - ('사진'), - ('촬영'), - ('연극'), - ('예술'), - ('풍물'), - ('전통'); - --- 동아리 태그 매핑 -INSERT INTO club_tag_map (club_id, tag_id) -VALUES (1, 1), - (1, 2), - (1, 3), - (1, 4), - (2, 5), - (2, 6), - (3, 7), - (3, 8), - (3, 9), - (4, 10), - (4, 6), - (5, 11), - (5, 12), - (5, 13), - (6, 14), - (6, 6), - (7, 15), - (7, 6), - (8, 16), - (8, 17), - (9, 7), - (9, 9), - (9, 19), - (10, 20), - (10, 21), - (11, 22), - (11, 23), - (12, 24), - (12, 25); -- 동아리 직책 INSERT INTO club_position (club_id, name, club_position_group)