Skip to content

Feat/#193 calendar poll#194

Merged
yeongsinkeem merged 7 commits intodev_tempfrom
feat-#193-calendar-poll
Feb 18, 2026
Merged

Feat/#193 calendar poll#194
yeongsinkeem merged 7 commits intodev_tempfrom
feat-#193-calendar-poll

Conversation

@tishakong
Copy link
Collaborator

이슈 번호

#193

작업 내용

  • 투표 관련 API를 구현했습니다. 현재 redis 적용 등 최적화 상태가 되어 있지 않아 추후 성능 부분에서 리팩토링 진행해야 합니다.
  • 투표 생성: POST /api/polls
  • 투표 삭제: DELETE /api/polls/{pollId}
  • 투표 수정: PATCH /api/polls/{pollId}
  • 투표 상세 조회: GET /api/polls/{pollId}
  • 월간 투표 조회: GET /api/polls/monthly?orgId=3&year=2025&month=12
  • 캘린더 화면 사이드바 투표(마감임박/진행중) 조회: GET /api/polls/active?orgId=3
  • 투표하기(투표/재투표/투표취소): POST /api/polls/{pollId}/vote

- 기존 토큰에서 member_id를 받아 memberOrg가 존재하는지 확인하는 형태에서, MemberOrgId를 헤더에서 추출해 해당 id로 MemberOrg를 반환하는 방식으로 수정했습니다.
- ApiResponse 객체를 만들어 controller에서 공통 형태로 response 반환을 할 수 있도록 했습니다. 현재는 성공했을 경우에 대한 반환 처리만 되어 있어 추후 exception 관련해서도 처리를 해야합니다.
- 기존의 Event 폴더 밑에 있던 EventParticipantDto를 member 폴더 밑의 SimpleMemberProfileDto로 변경했습니다. 투표 등 타 도메인에서도 동일한 DTO를 사용하기에 중복 제거를 위해 변경했습니다.
- 기존에 EventService에 있던 validateExecutive 등 활동 회원 멤버/운영진 여부 체크 메서드를 MemberOrgValidator 파일로 분리했습니다. 투표 혹은 게시글에서도 해당 기능을 공통적으로 활용해 권한 체크할 예정입니다.
- 다중 투표가 가능함에 따라 PollParticipant - Vote 형식으로 테이블을 나누어 구현했습니다. PollParticipant는 투표 참여 여부만을 관리하고 Vote에서 투표 내용을 관리합니다.
- PollTarget은 전체 참여 투표가 아니라 일부 참여일 때 참석 대상자를 관리하는 테이블입니다.
- 구현할 poll 관련 API의 DTO를 구현했습니다.
1. 구현된 API 경로
- 투표 생성: POST /api/polls
- 투표 삭제: DELETE /api/polls/{pollId}
- 투표 수정: PATCH /api/polls/{pollId}
- 투표 상세 조회: GET /api/polls/{pollId}
- 월간 투표 조회: GET /api/polls/monthly?orgId=3&year=2025&month=12
- 캘린더 화면 사이드바 투표(마감임박/진행중) 조회: GET /api/polls/active?orgId=3
- 투표하기(투표/재투표/투표취소): POST /api/polls/{pollId}/vote
@tishakong tishakong self-assigned this Feb 17, 2026
@tishakong tishakong linked an issue Feb 17, 2026 that may be closed by this pull request
14 tasks
@tishakong tishakong changed the title Feat #193 calendar poll Feat/#193 calendar poll Feb 17, 2026
@gemini-code-assist
Copy link

Summary of Changes

Hello @tishakong, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly refactors the user and organization management system, introducing a robust multi-profile architecture. It also integrates new calendar and polling features to enhance collaborative functionalities within different organizations. The changes aim to provide a more flexible and scalable foundation for user interactions and content management.

Highlights

  • Multi-Profile and Organization System: Implemented a new architecture separating core user accounts ('Member') from organization-specific profiles ('MemberOrg'), allowing users to manage multiple identities across different organizations. This involves new entities for organizations, schools, and member-organization relationships.
  • Calendar and Polling Features: Introduced a full suite of functionalities for creating, managing, and participating in events and polls within organizations. This includes API endpoints for poll creation, deletion, modification, detailed viewing, monthly views, sidebar views for active polls, and voting mechanisms.
  • Active Profile Argument Resolver: Developed a custom argument resolver ('@ActiveProfile') to easily access the currently active organization-specific profile ('ProfileContext') from HTTP request headers in controller methods, streamlining multi-profile handling.
  • Extensive Refactoring: Updated numerous existing services, controllers, and repositories across various board types (Free, QnA, Tip, Notice) and admin functionalities to integrate with the new 'MemberOrg' entity and 'AccountStatus' enum, ensuring consistent data handling and access control.
  • Enhanced Authentication and Authorization: Modified the authentication flow to support multi-profile login, token generation with organization-specific IDs, and updated user detail services to reflect the new member and organization structure.
Changelog
  • src/main/java/org/example/tackit/common/aop/logging/LoggingAspect.java
    • Updated imports for FreeMemberJPARepository and MemberLogRepository.
    • Commented out UserLogRepository and related logging logic.
    • Removed MemberRole and MemberType local variables.
  • src/main/java/org/example/tackit/common/dto/ActiveProfile.java
    • Added new annotation for active profile resolution.
  • src/main/java/org/example/tackit/common/dto/ProfileContext.java
    • Added new record for active profile context.
  • src/main/java/org/example/tackit/common/homePopular/HomePopularPostController.java
    • Imported ActiveProfile and ProfileContext.
    • Modified getPopularPosts to use ProfileContext for orgId.
  • src/main/java/org/example/tackit/common/homePopular/HomePopularPostService.java
    • Updated imports for board repositories to new package names.
    • Changed getPopularPosts method signature from String organization to Long orgId.
    • Refactored popular post retrieval logic to use orgId and findTop3PopularByOrg query.
    • Commented out old getPopularPosts implementation.
  • src/main/java/org/example/tackit/config/AdminDataInitializer.java
    • Removed.
  • src/main/java/org/example/tackit/config/CommonDataInitializer.java
    • Added new initializer for common data, including admin and school.
  • src/main/java/org/example/tackit/config/FreeTagInitializer.java
    • Updated import for FreeTagRepository and commented out @component.
  • src/main/java/org/example/tackit/config/QnATagInitializer.java
    • Updated import for QnATagRepository and commented out @component.
  • src/main/java/org/example/tackit/config/Resolver/ProfileContextResolver.java
    • Added new argument resolver for ActiveProfile.
  • src/main/java/org/example/tackit/config/TipTagInitializer.java
    • Updated import for TipTagRepository and commented out @component.
  • src/main/java/org/example/tackit/config/WebConfig.java
    • Added new configuration to register ProfileContextResolver.
  • src/main/java/org/example/tackit/config/jwt/TokenProvider.java
    • Updated import for Status to AccountStatus.
    • Removed role from TokenDto creation.
    • Modified getAuthentication to use AccountStatus and simplified CustomUserDetails constructor.
    • Added generateTokenDtoWithProfile method for organization-specific tokens.
  • src/main/java/org/example/tackit/domain/Free_board/Free_comment/service/FreeCommentService.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Free_board/Free_post/repository/FreePostJPARepository.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Free_board/Free_post/repository/FreePostReportRepository.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Free_board/Free_post/repository/FreeScrapJPARepository.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Free_board/Free_post/service/FreePostService.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Free_board/Free_tag/repository/FreeTagCustomRepository.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Notice_board/Notice_comment/service/NoticeCommentService.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Notice_board/Notice_post/service/NoticePostService.java
    • Removed.
  • src/main/java/org/example/tackit/domain/QnA_board/QnA_comment/controller/QnACommentController.java
    • Removed.
  • src/main/java/org/example/tackit/domain/QnA_board/QnA_comment/service/QnACommentService.java
    • Removed.
  • src/main/java/org/example/tackit/domain/QnA_board/QnA_post/repository/QnAPostRepository.java
    • Removed.
  • src/main/java/org/example/tackit/domain/QnA_board/QnA_post/service/QnAPostService.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Tip_board/Tip_comment/controller/TipCommentController.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Tip_board/Tip_comment/service/TipCommentService.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Tip_board/Tip_post/repository/TipPostRepository.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Tip_board/Tip_post/repository/TipScrapRepository.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Tip_board/Tip_post/service/TipPostService.java
    • Removed.
  • src/main/java/org/example/tackit/domain/Tip_board/Tip_tag/repository/TipTagCustomRepository.java
    • Removed.
  • src/main/java/org/example/tackit/domain/admin/controller/AdminDashboardController.java
    • Commented out methods for DAU/MAU and member statistics.
  • src/main/java/org/example/tackit/domain/admin/controller/AdminMemberController.java
    • Commented out methods for getting all users and deleted members.
  • src/main/java/org/example/tackit/domain/admin/dto/DeletedMemberDTO.java
    • Updated import for Status to AccountStatus.
    • Removed nickname from from method.
    • Changed status field to accountStatus.
  • src/main/java/org/example/tackit/domain/admin/dto/MemberDTO.java
    • Changed status field to accountStatus.
  • src/main/java/org/example/tackit/domain/admin/dto/ReportedPostDTO.java
    • Imported MemberOrg.
    • Removed organization field.
    • Updated fromEntity to use MemberOrg for writer.
  • src/main/java/org/example/tackit/domain/admin/model/ReportablePost.java
    • Updated getWriter() return type from Member to MemberOrg.
    • Removed getOrganization() method.
  • src/main/java/org/example/tackit/domain/admin/repository/AdminFreePostRepository.java
    • Changed findAllByStatusAndReportCountGreaterThanEqual to findAllByAccountStatusAndReportCountGreaterThanEqual.
  • src/main/java/org/example/tackit/domain/admin/repository/AdminMemberRepository.java
    • Updated import for Status to AccountStatus.
    • Changed findByStatus parameter type to AccountStatus.
    • Commented out bulkUpdateType and existsByNickname methods.
  • src/main/java/org/example/tackit/domain/admin/repository/AdminQnAPostRepository.java
    • Changed findAllByStatusAndReportCountGreaterThanEqual to findAllByAccountStatusAndReportCountGreaterThanEqual.
  • src/main/java/org/example/tackit/domain/admin/repository/AdminTipPostRepository.java
    • Changed findAllByStatusAndReportCountGreaterThanEqual to findAllByAccountStatusAndReportCountGreaterThanEqual.
  • src/main/java/org/example/tackit/domain/admin/repository/MemberLogRepository.java
    • Renamed from UserLogRepository.java.
    • Commented out DAU/MAU queries.
  • src/main/java/org/example/tackit/domain/admin/service/AdminDashboardService.java
    • Updated imports for board repositories to new package names.
    • Changed UserLogRepository to MemberLogRepository.
    • Commented out methods for getPostsCount, getDau, getMau, getDeletedPostsByReport, findAllReports, getReportedContentInfo.
    • Updated ReportedContentInfo record to use AccountStatus.
  • src/main/java/org/example/tackit/domain/admin/service/AdminFreePostService.java
    • Changed findAllByStatusAndReportCountGreaterThanEqual to findAllByAccountStatusAndReportCountGreaterThanEqual.
  • src/main/java/org/example/tackit/domain/admin/service/AdminMemberService.java
    • Updated import for Status to AccountStatus.
    • Commented out getAllMembersOrderByStatus method.
    • Changed findByStatus parameter type to AccountStatus.
  • src/main/java/org/example/tackit/domain/admin/service/AdminQnAPostService.java
    • Changed findAllByStatusAndReportCountGreaterThanEqual to findAllByAccountStatusAndReportCountGreaterThanEqual.
  • src/main/java/org/example/tackit/domain/admin/service/AdminTipPostService.java
    • Changed findAllByStatusAndReportCountGreaterThanEqual to findAllByAccountStatusAndReportCountGreaterThanEqual.
  • src/main/java/org/example/tackit/domain/auth/login/controller/AuthController.java
    • Modified signIn to return SignInResponse and use authService.signIn.
    • Commented out findEmail method.
  • src/main/java/org/example/tackit/domain/auth/login/controller/CheckController.java
    • Commented out checkNickname method.
  • src/main/java/org/example/tackit/domain/auth/login/dto/MultiProfileDto.java
    • Added new DTO for multi-profile information.
  • src/main/java/org/example/tackit/domain/auth/login/dto/SignInResponse.java
    • Added new DTO for sign-in response, including multi-profile list.
  • src/main/java/org/example/tackit/domain/auth/login/dto/SignUpDto.java
    • Removed organization-specific fields like nickname, organization, memberRole, memberType, joinedYear.
  • src/main/java/org/example/tackit/domain/auth/login/dto/TokenDto.java
    • Commented out role field.
  • src/main/java/org/example/tackit/domain/auth/login/repository/MemberRepository.java
    • Removed.
  • src/main/java/org/example/tackit/domain/auth/login/security/CustomUserDetails.java
    • Removed organization and memberType fields.
    • Simplified constructor.
  • src/main/java/org/example/tackit/domain/auth/login/service/AuthService.java
    • Injected MemberOrgRepository.
    • Simplified signup method to only create a base Member.
    • Refactored signIn to return SignInResponse and handle multi-profile retrieval.
    • Added selectProfile method for choosing an active profile.
    • Commented out old signIn and findEmailbyOrgAndNickname methods.
  • src/main/java/org/example/tackit/domain/auth/login/service/CheckService.java
    • Updated MemberRepository import to new package.
    • Commented out isNicknameDuplicated method.
  • src/main/java/org/example/tackit/domain/auth/login/service/CustomUserDetailsService.java
    • Updated MemberRepository import to new package.
    • Changed Status to AccountStatus.
    • Simplified createUserDetails to assign only ROLE_USER.
  • src/main/java/org/example/tackit/domain/auth/login/service/RejoinCheckService.java
    • Updated MemberRepository import to new package.
    • Changed Status to AccountStatus.
  • src/main/java/org/example/tackit/domain/auth/logout/repository/LogoutRepository.java
    • Removed Status import.
  • src/main/java/org/example/tackit/domain/auth/logout/service/WithdrawService.java
    • Removed unused imports.
  • src/main/java/org/example/tackit/domain/entity/AccountStatus.java
    • Renamed from Status.java.
  • src/main/java/org/example/tackit/domain/entity/Event.java
    • Added new entity for calendar events.
  • src/main/java/org/example/tackit/domain/entity/EventParticipant.java
    • Added new entity for event participants.
  • src/main/java/org/example/tackit/domain/entity/EventScope.java
    • Added new enum for event scope.
  • src/main/java/org/example/tackit/domain/entity/FreeComment.java
    • Changed writer from Member to MemberOrg.
  • src/main/java/org/example/tackit/domain/entity/FreePost.java
    • Imported MemberOrg and Organization.
    • Changed writer from Member to MemberOrg.
    • Changed organization from String to Organization entity.
    • Changed status to accountStatus.
    • Updated delete, increaseReportCount, activate methods to use accountStatus.
  • src/main/java/org/example/tackit/domain/entity/FreeReport.java
    • Changed member from Member to MemberOrg.
  • src/main/java/org/example/tackit/domain/entity/FreeScrap.java
    • Changed member from Member to MemberOrg.
  • src/main/java/org/example/tackit/domain/entity/Member.java
    • Removed organization-specific fields (nickname, organization, profileImageUrl, memberRole, memberType, joinedYear, status).
    • Added accountStatus field.
    • Commented out calculateYearsOfService, generateMypageResponse, updateNickname methods.
    • Updated deactivate to use accountStatus.
  • src/main/java/org/example/tackit/domain/entity/MemberLog.java
    • Imported MemberOrg.
    • Removed memberId, memberRole, memberType, organization fields.
    • Added member, memberOrg, orgName fields.
  • src/main/java/org/example/tackit/domain/entity/NoticeComment.java
    • Changed writer from Member to MemberOrg.
  • src/main/java/org/example/tackit/domain/entity/NoticePost.java
    • Changed writer from Member to MemberOrg.
    • Removed organization field.
  • src/main/java/org/example/tackit/domain/entity/Notification.java
    • Added memberOrgId and fromMemberOrgId fields.
    • Removed fromMemberId.
  • src/main/java/org/example/tackit/domain/entity/Org/MemberOrg.java
    • Added new entity to link Member to Organization with organization-specific details.
  • src/main/java/org/example/tackit/domain/entity/Org/OrgStatus.java
    • Added new enum for organization status.
  • src/main/java/org/example/tackit/domain/entity/Org/OrgType.java
    • Added new enum for organization type.
  • src/main/java/org/example/tackit/domain/entity/Org/Organization.java
    • Added new entity for organizations.
  • src/main/java/org/example/tackit/domain/entity/Org/School.java
    • Added new entity for schools.
  • src/main/java/org/example/tackit/domain/entity/Org/SchoolType.java
    • Added new enum for school type.
  • src/main/java/org/example/tackit/domain/entity/QnAComment.java
    • Changed writer from Member to MemberOrg.
    • Changed status to accountStatus.
  • src/main/java/org/example/tackit/domain/entity/QnAPost.java
    • Changed writer from Member to MemberOrg.
    • Changed status to accountStatus.
  • src/main/java/org/example/tackit/domain/entity/QnAReport.java
    • Changed member from Member to MemberOrg.
  • src/main/java/org/example/tackit/domain/entity/Report.java
    • Changed reporter from Member to MemberOrg.
  • src/main/java/org/example/tackit/domain/entity/TipComment.java
    • Changed writer from Member to MemberOrg.
    • Changed status to accountStatus.
  • src/main/java/org/example/tackit/domain/entity/TipPost.java
    • Changed writer from Member to MemberOrg.
    • Changed status to accountStatus.
    • Removed organization field.
  • src/main/java/org/example/tackit/domain/entity/TipReport.java
    • Changed member to reporter and type from Member to MemberOrg.
  • src/main/java/org/example/tackit/domain/entity/TipScrap.java
    • Changed member to memberOrg and type from Member to MemberOrg.
  • src/main/java/org/example/tackit/domain/entity/poll/Poll.java
    • Added new entity for polls.
  • src/main/java/org/example/tackit/domain/entity/poll/PollOption.java
    • Added new entity for poll options.
  • src/main/java/org/example/tackit/domain/entity/poll/PollParticipant.java
    • Added new entity for poll participants.
  • src/main/java/org/example/tackit/domain/entity/poll/PollScope.java
    • Added new enum for poll scope.
  • src/main/java/org/example/tackit/domain/entity/poll/PollStatus.java
    • Added new enum for poll status.
  • src/main/java/org/example/tackit/domain/entity/poll/PollTarget.java
    • Added new entity for poll targets.
  • src/main/java/org/example/tackit/domain/entity/poll/PollType.java
    • Added new enum for poll type.
  • src/main/java/org/example/tackit/domain/entity/poll/Vote.java
    • Added new entity for votes.
  • src/main/java/org/example/tackit/domain/event/controller/EventController.java
    • Added new controller for events.
  • src/main/java/org/example/tackit/domain/event/dto/EventCreateReqDto.java
    • Added new DTO for event creation.
  • src/main/java/org/example/tackit/domain/event/dto/EventDetailResDto.java
    • Added new DTO for event details.
  • src/main/java/org/example/tackit/domain/event/dto/EventSimpleResDto.java
    • Added new DTO for simple event representation.
  • src/main/java/org/example/tackit/domain/event/dto/EventUpdateReqDto.java
    • Added new DTO for event updates.
  • src/main/java/org/example/tackit/domain/event/repository/EventRepository.java
    • Added new repository for events.
  • src/main/java/org/example/tackit/domain/event/service/EventService.java
    • Added new service for event management.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_comment/controller/FreeCommentController.java
    • Renamed from domain/Free_board/Free_comment/controller/FreeCommentController.java.
    • Updated to use ActiveProfile and ProfileContext for orgId.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_comment/dto/req/FreeCommentCreateDto.java
    • Renamed from domain/Free_board/Free_comment/dto/req/FreeCommentCreateDto.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_comment/dto/req/FreeCommentUpdateDto.java
    • Renamed from domain/Free_board/Free_comment/dto/req/FreeCommentUpdateDto.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_comment/dto/resp/FreeCommentRespDto.java
    • Renamed from domain/Free_board/Free_comment/dto/resp/FreeCommentRespDto.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_comment/repository/FreeCommentRepository.java
    • Renamed from domain/Free_board/Free_comment/repository/FreeCommentRepository.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_comment/service/FreeCommentService.java
    • Added new service for free comments.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/controller/FreePostController.java
    • Renamed from domain/Free_board/Free_post/controller/FreePostController.java.
    • Updated to use ActiveProfile and ProfileContext for orgId.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/dto/request/FreePostReqDto.java
    • Renamed from domain/Free_board/Free_post/dto/request/FreePostReqDto.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/dto/request/UpdateFreeReqDto.java
    • Renamed from domain/Free_board/Free_post/dto/request/UpdateFreeReqDto.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/dto/response/FreePopularPostRespDto.java
    • Renamed from domain/Free_board/Free_post/dto/response/FreePopularPostRespDto.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/dto/response/FreePostRespDto.java
    • Renamed from domain/Free_board/Free_post/dto/response/FreePostRespDto.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/dto/response/FreeScrapResponseDto.java
    • Renamed from domain/Free_board/Free_post/dto/response/FreeScrapResponseDto.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/repository/FreeMemberJPARepository.java
    • Renamed from domain/Free_board/Free_post/repository/FreeMemberJPARepository.java.
    • Removed findByEmailAndOrganization.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/repository/FreePostImageRepository.java
    • Renamed from domain/Free_board/Free_post/repository/FreePostImageRepository.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/repository/FreePostJPARepository.java
    • Added new repository for free posts.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/repository/FreePostReportRepository.java
    • Added new repository for free post reports.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/repository/FreeScrapJPARepository.java
    • Added new repository for free scraps.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/service/FreePostService.java
    • Added new service for free post management.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_post/service/FreePostTagService.java
    • Renamed from domain/Free_board/Free_post/service/FreePostTagService.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_tag/controller/FreeTagController.java
    • Renamed from domain/Free_board/Free_tag/controller/FreeTagController.java.
    • Commented out getPostsByTag.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_tag/dto/response/FreeTagPostResponseDto.java
    • Renamed from domain/Free_board/Free_tag/dto/response/FreeTagPostResponseDto.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_tag/dto/response/FreeTagResponseDto.java
    • Renamed from domain/Free_board/Free_tag/dto/response/FreeTagResponseDto.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_tag/repository/FreePostTagMapRepository.java
    • Renamed from domain/Free_board/Free_tag/repository/FreePostTagMapRepository.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_tag/repository/FreeTagCustomRepository.java
    • Added new custom repository for free tags.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_tag/repository/FreeTagCustomRepositoryImpl.java
    • Renamed from domain/Free_board/Free_tag/repository/FreeTagCustomRepositoryImpl.java.
    • Updated queries to use accountStatus and removed organization from where clause.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_tag/repository/FreeTagRepository.java
    • Renamed from domain/Free_board/Free_tag/repository/FreeTagRepository.java.
  • src/main/java/org/example/tackit/domain/freeBoard/Free_tag/service/FreeTagService.java
    • Renamed from domain/Free_board/Free_tag/service/FreeTagService.java.
    • Commented out getFreePostsByTag.
  • src/main/java/org/example/tackit/domain/member/component/MemberOrgValidator.java
    • Added new component for validating member organization profiles.
  • src/main/java/org/example/tackit/domain/member/dto/SimpleMemberProfileDto.java
    • Added new DTO for simple member profile.
  • src/main/java/org/example/tackit/domain/member/repository/MemberOrgRepository.java
    • Added new repository for MemberOrg entities.
  • src/main/java/org/example/tackit/domain/member/repository/MemberRepository.java
    • Added new repository for Member entities.
  • src/main/java/org/example/tackit/domain/mypage/controller/MemberController.java
    • Commented out the entire controller.
  • src/main/java/org/example/tackit/domain/mypage/controller/MypageFreeController.java
    • Commented out methods for getMyFreeScraps and getMyFreeComments.
  • src/main/java/org/example/tackit/domain/mypage/controller/MypageQnAController.java
    • Updated to use ActiveProfile and ProfileContext for orgId.
  • src/main/java/org/example/tackit/domain/mypage/controller/MypageTipController.java
    • Commented out methods for getMyTipScraps and getMyTipPosts.
  • src/main/java/org/example/tackit/domain/mypage/dto/response/MemberMypageResponse.java
    • Commented out the entire DTO.
  • src/main/java/org/example/tackit/domain/mypage/dto/response/QnAMyCommentResponseDto.java
    • Added a newline.
  • src/main/java/org/example/tackit/domain/mypage/service/MemberScheduler.java
    • Commented out updateSeniorMembers method.
  • src/main/java/org/example/tackit/domain/mypage/service/MemberService.java
    • Commented out the entire service.
  • src/main/java/org/example/tackit/domain/mypage/service/MyPageFreeService.java
    • Updated imports for board repositories to new package names.
    • Commented out getScrapListByMember and getMyComments.
    • Changed findByWriterAndStatus to use AccountStatus.
  • src/main/java/org/example/tackit/domain/mypage/service/MyPageQnAService.java
    • Updated imports for board repositories to new package names.
    • Changed qnAMemberRepository to memberOrgRepository.
    • Updated getMyPosts and getMyComments to use Long orgId and MemberOrg.
    • Changed findByWriterAndStatus to use AccountStatus.
  • src/main/java/org/example/tackit/domain/mypage/service/MyPageTipService.java
    • Updated imports for board repositories to new package names.
    • Changed tipMemberRepository to memberOrgRepository.
    • Commented out getScrapListByMember, getMyPosts, getMyComments.
    • Changed findByWriterAndStatus to use AccountStatus.
  • src/main/java/org/example/tackit/domain/mypage/service/UpdateMemberService.java
    • Commented out the entire service.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_comment/controller/NoticeCommentController.java
    • Renamed from domain/Notice_board/Notice_comment/controller/NoticeCommentController.java.
    • Updated to use ActiveProfile and ProfileContext for orgId.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_comment/dto/req/NoticeCommentCreateDto.java
    • Renamed from domain/Notice_board/Notice_comment/dto/req/NoticeCommentCreateDto.java.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_comment/dto/req/NoticeCommentUpdateDto.java
    • Renamed from domain/Notice_board/Notice_comment/dto/req/NoticeCommentUpdateDto.java.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_comment/dto/resp/NoticeCommentRespDto.java
    • Renamed from domain/Notice_board/Notice_comment/dto/resp/NoticeCommentRespDto.java.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_comment/repository/NoticeCommentRepository.java
    • Renamed from domain/Notice_board/Notice_comment/repository/NoticeCommentRepository.java.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_comment/service/NoticeCommentService.java
    • Added new service for notice comments.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_post/controller/NoticePostController.java
    • Renamed from domain/Notice_board/Notice_post/controller/NoticePostController.java.
    • Updated to use ActiveProfile and ProfileContext for orgId.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_post/dto/request/NoticePostReqDto.java
    • Renamed from domain/Notice_board/Notice_post/dto/request/NoticePostReqDto.java.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_post/dto/request/UpdateNoticeReqDto.java
    • Renamed from domain/Notice_board/Notice_post/dto/request/UpdateNoticeReqDto.java.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_post/dto/response/NoticePostRespDto.java
    • Renamed from domain/Notice_board/Notice_post/dto/response/NoticePostRespDto.java.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_post/dto/response/NoticeScrapRespDto.java
    • Renamed from domain/Notice_board/Notice_post/dto/response/NoticeScrapRespDto.java.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_post/repository/NoticePostImageRepository.java
    • Renamed from domain/Notice_board/Notice_post/repository/NoticePostImageRepository.java.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_post/repository/NoticePostRepository.java
    • Renamed from domain/Notice_board/Notice_post/repository/NoticePostRepository.java.
    • Changed findByOrganization to findByWriterId.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_post/repository/NoticeScrapRepository.java
    • Renamed from domain/Notice_board/Notice_post/repository/NoticeScrapRepository.java.
  • src/main/java/org/example/tackit/domain/noticeBoard/Notice_post/service/NoticePostService.java
    • Added new service for notice post management.
  • src/main/java/org/example/tackit/domain/notification/controller/NotificationController.java
    • Updated getAllNotifications to use ProfileContext.
  • src/main/java/org/example/tackit/domain/notification/repository/NotificationRepository.java
    • Added findAllByMemberIdAndMemberOrgIdOrderByCreatedAtDesc method.
  • src/main/java/org/example/tackit/domain/notification/service/NotificationService.java
    • Injected MemberOrgRepository.
    • Updated findAllNotifications to use ProfileContext and memberOrgId.
  • src/main/java/org/example/tackit/domain/organization/controller/OrganizationController.java
    • Added new controller for organization management.
  • src/main/java/org/example/tackit/domain/organization/dto/req/OrgCreateReqDto.java
    • Added new DTO for organization creation.
  • src/main/java/org/example/tackit/domain/organization/dto/req/OrgJoinReqDto.java
    • Added new DTO for organization joining.
  • src/main/java/org/example/tackit/domain/organization/dto/resp/OrgRespDto.java
    • Added new DTO for organization response.
  • src/main/java/org/example/tackit/domain/organization/repository/OrganizationRepository.java
    • Added new repository for organizations.
  • src/main/java/org/example/tackit/domain/organization/repository/SchoolRepository.java
    • Added new repository for schools.
  • src/main/java/org/example/tackit/domain/organization/service/OrganizationService.java
    • Added new service for organization management.
  • src/main/java/org/example/tackit/domain/poll/controller/PollController.java
    • Added new controller for poll management.
  • src/main/java/org/example/tackit/domain/poll/dto/PollCreateReqDto.java
    • Added new DTO for poll creation.
  • src/main/java/org/example/tackit/domain/poll/dto/PollDetailResDto.java
    • Added new DTO for poll details.
  • src/main/java/org/example/tackit/domain/poll/dto/PollSidebarResDto.java
    • Added new DTO for poll sidebar.
  • src/main/java/org/example/tackit/domain/poll/dto/PollSimpleResDto.java
    • Added new DTO for simple poll representation.
  • src/main/java/org/example/tackit/domain/poll/dto/PollUpdateReqDto.java
    • Added new DTO for poll updates.
  • src/main/java/org/example/tackit/domain/poll/dto/VoteReqDto.java
    • Added new DTO for voting.
  • src/main/java/org/example/tackit/domain/poll/repository/PollOptionRepository.java
    • Added new repository for poll options.
  • src/main/java/org/example/tackit/domain/poll/repository/PollParticipantRepository.java
    • Added new repository for poll participants.
  • src/main/java/org/example/tackit/domain/poll/repository/PollRepository.java
    • Added new repository for polls.
  • src/main/java/org/example/tackit/domain/poll/repository/PollTargetRepository.java
    • Added new repository for poll targets.
  • src/main/java/org/example/tackit/domain/poll/repository/VoteRepository.java
    • Added new repository for votes.
  • src/main/java/org/example/tackit/domain/poll/service/PollService.java
    • Added new service for poll management.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_comment/controller/QnACommentController.java
    • Added new controller for QnA comments.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_comment/dto/request/QnACommentCreateDto.java
    • Renamed from domain/QnA_board/QnA_comment/dto/request/QnACommentCreateDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_comment/dto/request/QnACommentUpdateDto.java
    • Renamed from domain/QnA_board/QnA_comment/dto/request/QnACommentUpdateDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_comment/dto/response/QnACommentResponseDto.java
    • Renamed from domain/QnA_board/QnA_comment/dto/response/QnACommentResponseDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_comment/repository/QnACommentRepository.java
    • Renamed from domain/QnA_board/QnA_comment/repository/QnACommentRepository.java.
    • Changed findByWriter parameter type to MemberOrg.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_comment/service/QnACommentService.java
    • Added new service for QnA comments.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/controller/QnAPostController.java
    • Renamed from domain/QnA_board/QnA_post/controller/QnAPostController.java.
    • Updated to use ActiveProfile and ProfileContext for orgId.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/controller/QnAPostScrapController.java
    • Renamed from domain/QnA_board/QnA_post/controller/QnAPostScrapController.java.
    • Commented out the entire controller.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/dto/request/QnAPostReqDto.java
    • Renamed from domain/QnA_board/QnA_post/dto/request/QnAPostReqDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/dto/request/UpdateQnARequestDto.java
    • Renamed from domain/QnA_board/QnA_post/dto/request/UpdateQnARequestDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/dto/response/QnACheckScrapResponseDto.java
    • Renamed from domain/QnA_board/QnA_post/dto/response/QnACheckScrapResponseDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/dto/response/QnAPopularPostRespDto.java
    • Renamed from domain/QnA_board/QnA_post/dto/response/QnAPopularPostRespDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/dto/response/QnAPostRespDto.java
    • Renamed from domain/QnA_board/QnA_post/dto/response/QnAPostRespDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/dto/response/QnAScrapResponseDto.java
    • Renamed from domain/QnA_board/QnA_post/dto/response/QnAScrapResponseDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/repository/QnAMemberRepository.java
    • Renamed from domain/QnA_board/QnA_post/repository/QnAMemberRepository.java.
    • Removed findByEmailAndOrganization.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/repository/QnAPostReportRepository.java
    • Renamed from domain/QnA_board/QnA_post/repository/QnAPostReportRepository.java.
    • Added existsByMemberAndQnaPost(MemberOrg, QnAPost).
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/repository/QnAPostRepository.java
    • Added new repository for QnA posts.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/repository/QnAScrapRepository.java
    • Renamed from domain/QnA_board/QnA_post/repository/QnAScrapRepository.java.
    • Commented out findByMemberAndQnaPost_Status.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/service/QnAPostService.java
    • Added new service for QnA post management.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_post/service/QnAPostTagService.java
    • Renamed from domain/QnA_board/QnA_post/service/QnAPostTagService.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_tag/controller/QnATagController.java
    • Renamed from domain/QnA_board/QnA_tag/controller/QnATagController.java.
    • Commented out the entire controller.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_tag/dto/response/QnATagPostResponseDto.java
    • Renamed from domain/QnA_board/QnA_tag/dto/response/QnATagPostResponseDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_tag/dto/response/QnATagResponseDto.java
    • Renamed from domain/QnA_board/QnA_tag/dto/response/QnATagResponseDto.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_tag/repository/QnAPostTagMapRepository.java
    • Renamed from domain/QnA_board/QnA_tag/repository/QnAPostTagMapRepository.java.
    • Removed QnATag import.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_tag/repository/QnATagCustomRepository.java
    • Renamed from domain/QnA_board/QnA_tag/repository/QnATagCustomRepository.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_tag/repository/QnATagCustomRepositoryImpl.java
    • Renamed from domain/QnA_board/QnA_tag/repository/QnATagCustomRepositoryImpl.java.
    • Updated queries to use accountStatus and removed organization from where clause.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_tag/repository/QnATagRepository.java
    • Renamed from domain/QnA_board/QnA_tag/repository/QnATagRepository.java.
  • src/main/java/org/example/tackit/domain/qnaBoard/QnA_tag/service/QnATagService.java
    • Renamed from domain/QnA_board/QnA_tag/service/QnATagService.java.
  • src/main/java/org/example/tackit/domain/report/controller/ReportController.java
    • Commented out createReport method.
  • src/main/java/org/example/tackit/domain/report/dto/ReportContentDetailDto.java
    • Changed Status to AccountStatus.
  • src/main/java/org/example/tackit/domain/report/dto/ReportListDto.java
    • Changed Status to AccountStatus.
  • src/main/java/org/example/tackit/domain/report/service/ReportService.java
    • Commented out createReport method.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_comment/controller/TipCommentController.java
    • Added new controller for Tip comments.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_comment/dto/req/TipCommentCreateDto.java
    • Renamed from domain/Tip_board/Tip_comment/dto/req/TipCommentCreateDto.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_comment/dto/req/TipCommentUpdateDto.java
    • Renamed from domain/Tip_board/Tip_comment/dto/req/TipCommentUpdateDto.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_comment/dto/resp/TipCommentResponseDto.java
    • Renamed from domain/Tip_board/Tip_comment/dto/resp/TipCommentResponseDto.java.
    • Changed id type to Long.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_comment/repository/TipCommentRepository.java
    • Renamed from domain/Tip_board/Tip_comment/repository/TipCommentRepository.java.
    • Changed findByWriter parameter type to MemberOrg.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_comment/service/TipCommentService.java
    • Added new service for Tip comments.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/controller/TipController.java
    • Renamed from domain/Tip_board/Tip_post/controller/TipController.java.
    • Updated to use ActiveProfile and ProfileContext for orgId.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/dto/request/TipPostReqDto.java
    • Renamed from domain/Tip_board/Tip_post/dto/request/TipPostReqDto.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/dto/request/TipPostUpdateDto.java
    • Renamed from domain/Tip_board/Tip_post/dto/request/TipPostUpdateDto.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/dto/response/TipPopularPostRespDto.java
    • Renamed from domain/Tip_board/Tip_post/dto/response/TipPopularPostRespDto.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/dto/response/TipPostRespDto.java
    • Renamed from domain/Tip_board/Tip_post/dto/response/TipPostRespDto.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/dto/response/TipScrapRespDto.java
    • Renamed from domain/Tip_board/Tip_post/dto/response/TipScrapRespDto.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/repository/TipMemberRepository.java
    • Renamed from domain/Tip_board/Tip_post/repository/TipMemberRepository.java.
    • Removed findByEmailAndOrganization.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/repository/TipPostReportRepository.java
    • Renamed from domain/Tip_board/Tip_post/repository/TipPostReportRepository.java.
    • Changed existsByMemberAndTipPost to existsByReporterAndTipPost and parameter type to MemberOrg.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/repository/TipPostRepository.java
    • Added new repository for Tip posts.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/repository/TipScrapRepository.java
    • Added new repository for Tip scraps.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/service/TipPostService.java
    • Added new service for Tip post management.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_post/service/TipTagService.java
    • Renamed from domain/Tip_board/Tip_post/service/TipTagService.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_tag/controller/TipTagController.java
    • Renamed from domain/Tip_board/Tip_tag/controller/TipTagController.java.
    • Commented out the entire controller.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_tag/dto/response/TipTagPostResponseDto.java
    • Renamed from domain/Tip_board/Tip_tag/dto/response/TipTagPostResponseDto.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_tag/dto/response/TipTagResponseDto.java
    • Renamed from domain/Tip_board/Tip_tag/dto/response/TipTagResponseDto.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_tag/repository/TipPostTagMapRepository.java
    • Renamed from domain/Tip_board/Tip_tag/repository/TipPostTagMapRepository.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_tag/repository/TipTagCustomRepository.java
    • Added new custom repository for Tip tags.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_tag/repository/TipTagCustomRepositoryImpl.java
    • Renamed from domain/Tip_board/Tip_tag/repository/TipTagCustomRepositoryImpl.java.
    • Updated queries to use accountStatus and removed organization from where clause.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_tag/repository/TipTagRepository.java
    • Renamed from domain/Tip_board/Tip_tag/repository/TipTagRepository.java.
  • src/main/java/org/example/tackit/domain/tipBoard/Tip_tag/service/TipTagService.java
    • Renamed from domain/Tip_board/Tip_tag/service/TipTagService.java.
  • src/main/java/org/example/tackit/global/response/ApiResponse.java
    • Added new utility class for API responses.
  • src/test/java/org/example/tackit/MemberSchedulerTest.java
    • Changed Status to AccountStatus and commented out the test.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a significant refactoring to support a multi-profile and multi-organization system. Key changes include the introduction of ActiveProfile and ProfileContext for handling organization-specific contexts via HTTP headers, and a new MemberOrg entity to manage member details (like nickname, role, type, and profile image) within specific organizations. The Member entity is simplified to hold only core user account information, with its status field renamed to accountStatus for clarity and consistency. Consequently, many existing services, controllers, and repositories across free, QnA, and tip boards, as well as admin and notification modules, have been updated to utilize the new MemberOrg entity and ProfileContext for operations like post creation, retrieval, and reporting. The old MemberRepository and several board-specific member repositories have been replaced or refactored. Additionally, new entities and services for event and poll management (Event, EventParticipant, Poll, PollOption, PollParticipant, PollTarget, Vote) have been added, all integrating with the new multi-profile structure. Several initializers and admin dashboard features have been commented out or removed, indicating ongoing development or temporary deactivation. Review comments highlight the need to consolidate redundant status fields in the Member entity, enforce uniqueness constraints on Organization names at the database level to prevent race conditions, and validate participant IDs when creating partial scope polls to ensure they are valid and belong to the correct organization.

Comment on lines 31 to 35
private AccountStatus status;

private Status status;
private LocalDateTime createdAt = LocalDateTime.now();

private AccountStatus accountStatus; // 탈퇴 계정을 위해

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

There are two status fields in the Member entity: status and accountStatus. This is redundant and can lead to bugs. For example, deactivate() updates accountStatus, but repository methods like findByStatus will query against the status field.

Please consolidate this into a single field, for example accountStatus, and use it consistently across the application. You will also need to update other parts of the code that reference the removed field, such as CommonDataInitializer and repository methods.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

accountStatus : soft/hard delete를 위해 존재(ex. 신고로 인한 게시글 비활성화 및 탈퇴 회원 관리 등)
orgStatus : 해당 조직에 허용/반려되었는지 확인하기 위해 존재

현재 제 코드에서도 Member 엔티티에 accountStatus가 중복된 점 확인했습니다
운영진 API PR 올릴 때 해당 문제 반영하겠습니다 !

Comment on lines 11 to 16
@Entity
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Organization {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The Organization entity lacks a unique constraint on its name. While the service layer checks for duplicates before creating a new organization, this is not sufficient to prevent race conditions that could lead to duplicate entries. It's best practice to enforce this uniqueness at the database level.

I recommend adding a @Table(uniqueConstraints = ...) annotation. For CLUB type, the constraint should probably be on (name, school_id). For COMMUNITY, it could be on name.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

서비스 계층에서 동아리/소모임 이름 중복을 확인해도 동시성 문제가 발생할 수 있으니,
엔티티 내에서 @Table 어노테이션으로 제약 조건 설정하라는 문제인 것 같아요 !
해당 부분도 리팩토링 때 반영하면 좋을 것 같습니다

Comment on lines 88 to 97
if (reqDto.getVoteScope() == PollScope.PARTIAL) {
//TODO events에 있는 리스트에 있는 인원이 멤버가 맞는지 검증하는 로직을 공통으로 빼내서 검증 로직 추가
List<Long> targets = reqDto.getParticipants().stream().distinct().toList();
for (Long targetId : targets) {
pollTargetRepository.save(PollTarget.builder()
.poll(poll)
.memberOrgId(targetId)
.build());
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

When creating a poll with PollScope.PARTIAL, the provided participant IDs are not validated. This could lead to PollTarget entries being created for non-existent MemberOrg IDs or for members who do not belong to the poll's organization.

You should add validation to ensure all participant IDs are valid and belong to the correct organization before creating PollTarget records. You can look at EventService.addParticipants for an example of how to implement this.

@tishakong tishakong changed the base branch from main to dev_temp February 17, 2026 11:46
@yeongsinkeem yeongsinkeem merged commit e1e6848 into dev_temp Feb 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] 캘린더 투표 생성

2 participants