Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
8ddc110
feat: JWT 인증 필터에서 검증 토큰 처리 로직 개선 및 쿠키 삭제 기능 추가
fivedragon5 Jan 4, 2026
d689717
feat: JWT 인증 필터에서 검증 토큰 쿠키에 보안 속성 추가
fivedragon5 Jan 4, 2026
1fa4e98
Merge pull request #401 from JECT-Study/feat/343-feat-jwtexceptionhan…
fivedragon5 Jan 4, 2026
73d25a3
feat: JWT 인증 필터에서 검증 토큰 처리 로직 개선
fivedragon5 Jan 4, 2026
a436a08
feat: JWT 인증 필터에서 검증 토큰 처리 로직 간소화
fivedragon5 Jan 4, 2026
f9659c3
Merge pull request #402 from JECT-Study/feat/343-feat-jwtexceptionhan…
fivedragon5 Jan 4, 2026
9a60b24
feat: JWT 인증 필터에서 액세스 토큰 및 검증 토큰 처리 로직 개선
fivedragon5 Jan 4, 2026
9a2de7a
Merge pull request #403 from JECT-Study/feat/343-feat-jwtexceptionhan…
fivedragon5 Jan 4, 2026
8e63b2e
feat: 관리자 로그인 및 서포터 토큰 발급 이벤트를 발행하도록 알림 시스템을 이벤트 기반으로 리팩토링 (#405)
fivedragon5 Jan 6, 2026
810aef9
feat: 미니 스터디 설명 필드 추가 (#408)
023-dev Jan 6, 2026
4f50d17
feat: 관리자 지원서 조회 API에 기수 파라미터 추가 (#409)
023-dev Jan 7, 2026
4ffa70b
feat: Jectalk 엔티티 스펙 변경 (#412)
023-dev Jan 8, 2026
88e4818
feat: n8n에 지원서 제출 이벤트 발행 기능 추가 (#415)
fivedragon5 Jan 11, 2026
49db849
feat: 제출된 지원서 응답에 지역, 경력 사항, 경험 기간 및 관심 분야 추가
fivedragon5 Jan 14, 2026
36765d5
feat: 지원서 응답에 관심 분야가 null일 경우 빈 리스트로 처리하도록 수정
fivedragon5 Jan 14, 2026
2b691a7
Merge pull request #419 from JECT-Study/hotfix/418-submission-applica…
fivedragon5 Jan 14, 2026
439074f
feat: 질문에 subtitle 컬럼 추가 및 초기화 쿼리 작성 (#421)
023-dev Jan 14, 2026
5d59af1
Merge branch 'main' into dev
023-dev Jan 14, 2026
af98598
refactor: deprecated 처리된 temporary apply 관련 코드 삭제 (#429)
023-dev Jan 31, 2026
c59f842
refactor: 사용하지 않는 review 코드 삭제 (#428)
023-dev Jan 31, 2026
6946e29
refactor: n8n 관련 코드 및 이벤트 발행 로직 제거 (#433)
fivedragon5 Feb 2, 2026
9ced583
refactor: Redis 캐시 설정 및 연결 구성 수정 (#434)
fivedragon5 Feb 2, 2026
d1c3f7b
feat: 인증번호 재설정 이메일 발송 시 전송 횟수 제한 기능 추가 (#430)
023-dev Feb 2, 2026
47bb1a1
chore: Dockerfile 베이스 이미지 JRE로 변경 및 메모리 설정 최적화 (#432)
023-dev Feb 2, 2026
d526aa9
fix: CI/Testcontainers 안정화 (#438)
023-dev Feb 20, 2026
43a5cd1
feat: 다직군/다기수 지원을 위한 TeamMember 기반 리팩토링 (#439)
023-dev Feb 21, 2026
96674d3
Merge branch 'main' into dev
023-dev Feb 25, 2026
e861e02
refactor: 사용되지 않는 DynamoDB 컴포넌트 제거 및 정리 (#444)
023-dev Mar 4, 2026
a1bbc89
Merge branch 'main' into dev
023-dev Mar 4, 2026
f9ae231
feat: AI 어시스턴트 GitHub 템플릿(Issue/PR) 설계 적용 (#450) (#451)
023-dev Mar 6, 2026
02e53ac
feat: 지원상태 확인 API 수정 (#447)
fivedragon5 Mar 6, 2026
4441bc6
[FUNC_APL_MGT_01] 제출 완료된 지원서 목록 조회하기 #449 (#452)
023-dev Mar 9, 2026
76d4b88
chore: VPC 내부망 통신을 위한 Redis SSL 설정 제거 (#459)
023-dev Mar 10, 2026
157a781
refactor: 제출 완료된 지원서 삭제 로직 품질 개선 (#460)
023-dev Mar 10, 2026
a7a229f
feat: 지원서 상세 조회 기능 추가 (Issue #454) (#458)
023-dev Mar 10, 2026
bcc6665
Merge branch 'main' into dev
023-dev Mar 10, 2026
084ffb3
feat: 임시 지원서 지원서 조회 기능 개선 및 요구사항 적용 (#470)
023-dev Mar 11, 2026
d92ee0c
feat:관리자 로그아웃 기능 구현 (#472)
fivedragon5 Mar 11, 2026
9de9535
feat: 임시 저장된 지원서 상세 조회 기능 개선 및 요구사항 적용 (#473)
023-dev Mar 11, 2026
7b66ecf
feat: 임시 저장된 지원서 삭제 기능 개선 및 요구사항 적용 (#479)
023-dev Mar 15, 2026
fab7a24
feat: 지원서 제출 동시성 이슈 해결 (비관적 락 적용)
023-dev Mar 19, 2026
f8b8d16
Merge pull request #481 from JECT-Study/feat/issue-480-submit-lock
023-dev Mar 19, 2026
77d44af
Revert "Merge pull request #481 from JECT-Study/feat/issue-480-submit…
023-dev Mar 19, 2026
4968ab9
feat:관리자 로그인 구현 (#503)
fivedragon5 Mar 23, 2026
f7dc48e
feat: Redis SSL 연결 설정 추가 (#505)
023-dev Mar 23, 2026
475aec8
feat: 직군별 단건 조회 최적화 및 캐싱 적용 (#510)
023-dev Mar 23, 2026
0522e9d
fix: 지원서 제출 동시성 이슈 해결 (#482)
023-dev Mar 26, 2026
acb9788
feat: Redis SPOF 방어를 위한 Circuitbreaker 적용 (#511)
023-dev Mar 31, 2026
134732c
refactor: Bulk Delete(Update) 로직 성능 최적화 (#515)
023-dev Apr 4, 2026
98c4515
feat:백오피스 관련 역할 권한 추가 (#514)
fivedragon5 Apr 5, 2026
f0e8c9a
refactor(apply): 지원서 제출 동시성 제어를 비관적 락에서 낙관적 락으로 전환 (#524)
023-dev Apr 14, 2026
f62f3a6
feat(mail): 관리자 메일 템플릿 관리 기능 추가 (#523)
023-dev Apr 16, 2026
cf35c29
feat:백오피스의 관리자 계정 추가하기 기능 구현 (#525)
fivedragon5 Apr 17, 2026
27e4d41
feat:관리자 Role 업데이트 기능 구현 (#526)
fivedragon5 Apr 17, 2026
f349e2a
feat:관리자 계정 활성화/비활성화 기능 추가 (#527)
fivedragon5 Apr 20, 2026
3904b77
feat:관리자 계정 수정하기 구현 (#528)
fivedragon5 Apr 23, 2026
6555743
feat: 모집 공고 타입 기본 모델 확장 (#531)
023-dev Apr 28, 2026
3dc434f
fix:관리자 계정 수정 - 이메일 수정 제외 (#533)
fivedragon5 Apr 28, 2026
3491d45
feat: 활성 모집 공고 목록 API 추가 (#535)
023-dev Apr 30, 2026
d87d55d
feat: 모집 공고 API 리팩토링 (#537)
023-dev May 3, 2026
6f3a447
feat: 확장된 모집 공고 기준으로 지원 프로필 저장 (#543)
023-dev May 4, 2026
3c1f170
Keep temporary applications scoped to recruit (#545)
023-dev May 6, 2026
37a521a
feat: 모집 공고 기준으로 지원서 제출 및 상태 API 분리 (#547)
023-dev May 8, 2026
ef98114
Enable admin applicant filtering by recruitment (#551)
023-dev May 10, 2026
ddb50eb
feat: 어드민 회원 필터 확장 (#553)
023-dev May 13, 2026
31d55f9
feat: 모집 기간 검증 공고 기준 확장 (#555)
023-dev May 19, 2026
e172b89
feat: 사용하지 않는 지원 조회 경로 제거 (#566)
023-dev May 21, 2026
1ebdb26
feat:관리자 계정 목록 조회 구현 (#567)
fivedragon5 May 22, 2026
387c70c
[feat] member 데이터 분리 및 활동 관리 테이블 추가 (#569)
kangkings May 26, 2026
e22944b
[refactor] Member의 지원자/계정 역할을 applicant로 이전 (#574)
kangkings Jun 12, 2026
cc6a1bc
[refactor] 구성원 테이블 분리 후속 정리 (#576)
kangkings Jun 17, 2026
ff59fa9
[feat] 일반 구성원 추가 기능 구현 (#578)
kangkings Jun 23, 2026
168f976
[feat] 일반 구성원 목록 조회 구현 (#579)
kangkings Jul 2, 2026
6d4d5f4
[feat] APP JobFamily 추가 (#584)
kangkings Jul 2, 2026
610c310
[feat] 운영서포터즈 JobFamily 세분화 (#587)
kangkings Jul 9, 2026
d18a7e2
feat: 프로젝트 GitHub URL 및 4기 카테고리 추가 (#589) (#590)
023-dev Jul 14, 2026
c17c6e1
[feat] 프로젝트 상세 조회 팀원 이름 조회 연결 (#594)
kangkings Jul 14, 2026
9972446
[fix] conflict 해결
kangkings Jul 17, 2026
0a9ba05
Merge pull request #596 from JECT-Study/merge/resolve-conflict
kangkings Jul 17, 2026
bfccbc9
[FEAT] 일반 구성원 조회/등록 개선 및 프로젝트 페이징 수정 (#600)
kangkings Jul 21, 2026
5846a93
[FIX] 프로젝트 상세 팀원 이름 조회 활동 상태 필터 추가 (#602)
kangkings Jul 21, 2026
0c4667b
[merge] conflict 해결
kangkings Jul 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.ject.support.admin.member.dto.request;

import java.util.List;

import org.ject.support.domain.member.ActivityStatus;
import org.ject.support.domain.member.CareerDetails;
import org.ject.support.domain.member.JobFamily;
Expand Down Expand Up @@ -29,16 +27,17 @@ public record MemberSemesterSearchCondition(
// 기수
@Positive
Long semesterId,
// 직군 (다중 선택)
List<JobFamily> jobFamilies,
// 모집 단위 (다중 선택)
List<RecruitTypeDetail> recruitTypeDetails,
// 신분 (다중 선택)
List<CareerDetails> careerDetails,
// 팀 (다중 선택)
List<@Positive Long> teamIds,
// 활동 상태 (다중 선택)
List<ActivityStatus> statuses
// 직군
JobFamily jobFamily,
// 모집 단위
RecruitTypeDetail recruitTypeDetail,
// 신분
CareerDetails careerDetails,
// 팀
@Positive
Long teamId,
// 활동 상태
ActivityStatus status
) {
//size가 없으면 기본 30개
public int getSizeOrDefault() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public class AdminMemberService {
/*
(2026.06.23)
1. email로 삭제 포함 구성원 신상 전부 조회
2. 삭제된 구성원 존재시: isDeleted를 복구하고 새로 입력받은 값으로 덮어쓰기
3. 활성 구성원 존재시: 기존 값 재사용 Todo: 대체 가능한 값은 새로운 입력으로 대체
2. 삭제된 구성원 존재시: isDeleted 복구
3. 활성 구성원 존재시: 새로 입력받은 값으로 덮어쓰기
4. 미 존재시: 새로 생성
*/

Expand All @@ -28,18 +28,13 @@ public Long findOrCreateMember(CreateMemberSemesterRequest request) {
.orElseGet(() -> createMember(request));
}

// 기존 구성원 상태에 따라 재사용 또는 복구
// 기존 구성원 복구 후 신상정보 갱신
private Long useExistingMember(Member member, CreateMemberSemesterRequest request) {
if (member.getIsDeleted()) {
return restoreMember(member, request);
member.restore();
}

return member.getId();
}

// 삭제된 구성원 신상정보 갱신 후 복구
private Long restoreMember(Member member, CreateMemberSemesterRequest request) {
member.restore(
member.updateProfile(
request.name(),
request.phoneNumber(),
request.interestedDomains(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import static org.ject.support.domain.member.exception.MemberErrorCode.*;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.ject.support.admin.member.dto.projection.SearchMemberSemesterProjection;
import org.ject.support.admin.member.dto.request.CreateMemberSemesterRequest;
Expand Down Expand Up @@ -35,7 +33,7 @@ public class AdminMemberUseCase {
public void createMemberSemester(CreateMemberSemesterRequest request) {
// 유효성 검증
semesterInquiryUsecase.getSemester(request.semesterId());
validateTeam(request.semesterId(), request.teamId());
validateCreateTeam(request.semesterId(), request.teamId());

// email 기준 기존 Member 조회 또는 신규 생성
Long memberId = adminMemberService.findOrCreateMember(request);
Expand All @@ -52,8 +50,8 @@ public CursorPageResponse<SearchMemberSemesterResponse> searchMemberSemester(
) {
// 유효성 검증
validateSemester(condition.semesterId());
validateTeams(condition.semesterId(), condition.teamIds());
validateStatuses(condition.statuses(), MemberType.SEMESTER);
validateSearchTeam(condition.semesterId(), condition.teamId());
validateStatus(condition.status(), MemberType.SEMESTER);
// size만큼 조회 + 전체 행 수 조회
SearchMemberSemesterPageResult pageResult = adminMemberActivityService.searchMemberSemesterList(condition);
// 페이징 값 처리
Expand Down Expand Up @@ -95,7 +93,7 @@ private void validateSemester(Long semesterId) {
}

// 선택한 팀의 기수 소속 검증
private void validateTeam(Long semesterId, Long teamId) {
private void validateCreateTeam(Long semesterId, Long teamId) {
if (teamId == null) {
return;
}
Expand All @@ -105,9 +103,9 @@ private void validateTeam(Long semesterId, Long teamId) {
}
}

// 넘겨받은 팀 목록 전체의 기수 소속 및 유효성 검증
private void validateTeams(Long semesterId, List<Long> teamIds) {
if(teamIds == null || teamIds.isEmpty()){
// 조회 필터 팀의 기수 소속 및 유효성 검증
private void validateSearchTeam(Long semesterId, Long teamId) {
if(teamId == null){
return;
}

Expand All @@ -116,18 +114,15 @@ private void validateTeams(Long semesterId, List<Long> teamIds) {
throw new MemberException(REQUIRED_SEMESTER_FOR_TEAM_FILTER);
}

Set<Long> validTeamIds = new HashSet<>(
adminMemberTeamService.getTeamIdsBySemesterId(semesterId)
);

if(!validTeamIds.containsAll(teamIds)) {
List<Long> validTeamIds = adminMemberTeamService.getTeamIdsBySemesterId(semesterId);
if(!validTeamIds.contains(teamId)) {
throw new MemberException(NOT_FOUND_TEAM_OF_SEMESTER);
}
}

// 구성원 유형에서 허용되는 활동 상태인지 검증
private void validateStatuses(List<ActivityStatus> statuses, MemberType type) {
if (!ActivityStatus.isAllAvailableFor(statuses, type)) {
private void validateStatus(ActivityStatus status, MemberType type) {
if (status != null && !status.isAvailableFor(type)) {
throw new MemberException(INVALID_ACTIVITY_STATUS);
}
}
Expand Down
10 changes: 7 additions & 3 deletions src/main/java/org/ject/support/domain/member/entity/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,18 @@ public static Member create(
.build();
}

// 삭제된 구성원 정보가 있는 경우 복구한 뒤 새로 입력한 값으로 덮어쓰기
public void restore(
// 삭제된 구성원 복구
public void restore() {
this.isDeleted = false;
}

// 기존 구성원 신상정보를 새 입력값으로 갱신
public void updateProfile(
String name,
String phoneNumber,
List<String> interestedDomains,
Region region
) {
this.isDeleted = false;
this.name = name;
this.phoneNumber = phoneNumber;
this.interestedDomains = interestedDomains;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class MemberActivityQueryRepositoryImpl implements MemberActivityQueryRep

private final JPAQueryFactory jpaQueryFactory;

//다중 값은 in, 단일 값은 eq로 필터링
// 단일 값 기준으로 일반 구성원 필터링
//id기준 내림차순 - 최신순
//size+1개 조회
@Override
Expand All @@ -47,12 +47,12 @@ public List<SearchMemberSemesterProjection> searchMemberSemesters(MemberSemester
.join(memberSemester).on(memberSemester.id.eq(memberActivity.id))
.where(
cursorLt(condition.cursor()),
semesterIdIn(condition.semesterId()),
jobFamilyIn(condition.jobFamilies()),
careerDetailsIn(condition.careerDetails()),
teamIdIn(condition.teamIds()),
recruitTypeDetailIn(condition.recruitTypeDetails()),
statusIn(condition.statuses()),
semesterIdEq(condition.semesterId()),
jobFamilyEq(condition.jobFamily()),
careerDetailsEq(condition.careerDetails()),
teamIdEq(condition.teamId()),
recruitTypeDetailEq(condition.recruitTypeDetail()),
statusEq(condition.status()),
member.isDeleted.isFalse(),
memberActivity.isDeleted.isFalse(),
memberActivity.memberType.eq(MemberType.SEMESTER)
Expand All @@ -68,12 +68,12 @@ public long countMemberSemesters(MemberSemesterSearchCondition condition) {
.join(member).on(member.id.eq(memberActivity.memberId))
.join(memberSemester).on(memberSemester.id.eq(memberActivity.id))
.where(
semesterIdIn(condition.semesterId()),
jobFamilyIn(condition.jobFamilies()),
careerDetailsIn(condition.careerDetails()),
teamIdIn(condition.teamIds()),
recruitTypeDetailIn(condition.recruitTypeDetails()),
statusIn(condition.statuses()),
semesterIdEq(condition.semesterId()),
jobFamilyEq(condition.jobFamily()),
careerDetailsEq(condition.careerDetails()),
teamIdEq(condition.teamId()),
recruitTypeDetailEq(condition.recruitTypeDetail()),
statusEq(condition.status()),
member.isDeleted.isFalse(),
memberActivity.isDeleted.isFalse(),
memberActivity.memberType.eq(MemberType.SEMESTER)
Expand All @@ -93,6 +93,7 @@ public TeamMemberNames findMemberNamesByTeamId(Long teamId) {
.where(
memberSemester.teamId.eq(teamId),
memberActivity.memberType.eq(MemberType.SEMESTER),
memberActivity.activityStatus.in(ActivityStatus.ACTIVE, ActivityStatus.COMPLETED),
member.isDeleted.isFalse(),
memberActivity.isDeleted.isFalse(),
member.name.isNotNull()
Expand Down Expand Up @@ -120,38 +121,33 @@ private BooleanExpression cursorLt(Long cursor){
return cursor == null ? null : memberActivity.id.lt(cursor);
}

private BooleanExpression semesterIdIn(Long semesterId) {
private BooleanExpression semesterIdEq(Long semesterId) {
return semesterId == null ? null
: memberSemester.semesterId.eq(semesterId);
}

private BooleanExpression jobFamilyIn(List<JobFamily> jobFamilies) {
return jobFamilies == null || jobFamilies.isEmpty()
? null
: memberActivity.jobFamily.in(jobFamilies);
private BooleanExpression jobFamilyEq(JobFamily jobFamily) {
return jobFamily == null ? null
: memberActivity.jobFamily.eq(jobFamily);
}

private BooleanExpression careerDetailsIn(List<CareerDetails> careerDetails) {
return careerDetails == null || careerDetails.isEmpty()
? null
: memberActivity.careerDetails.in(careerDetails);
private BooleanExpression careerDetailsEq(CareerDetails careerDetails) {
return careerDetails == null ? null
: memberActivity.careerDetails.eq(careerDetails);
}

private BooleanExpression teamIdIn(List<Long> teamIds) {
return teamIds == null || teamIds.isEmpty()
? null
: memberSemester.teamId.in(teamIds);
private BooleanExpression teamIdEq(Long teamId) {
return teamId == null ? null
: memberSemester.teamId.eq(teamId);
}

private BooleanExpression recruitTypeDetailIn(List<RecruitTypeDetail> recruitTypeDetails) {
return recruitTypeDetails == null || recruitTypeDetails.isEmpty()
? null
: memberActivity.recruitTypeDetail.in(recruitTypeDetails);
private BooleanExpression recruitTypeDetailEq(RecruitTypeDetail recruitTypeDetail) {
return recruitTypeDetail == null ? null
: memberActivity.recruitTypeDetail.eq(recruitTypeDetail);
}

private BooleanExpression statusIn(List<ActivityStatus> statuses) {
return statuses == null || statuses.isEmpty()
? null
: memberActivity.activityStatus.in(statuses);
private BooleanExpression statusEq(ActivityStatus status) {
return status == null ? null
: memberActivity.activityStatus.eq(status);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ public Page<ProjectResponse> findProjectsByCategory(final Category category,

JPAQuery<Long> countQuery = queryFactory
.select(project.count())
.from(project);
.from(project)
.where(eqCategory(category));

return PageResponse.from(content, pageable, countQuery.fetchFirst());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,11 +230,11 @@ class AdminMemberSemesterControllerTest {
mockMvc.perform(get("/admin/members/semester")
.param("size", "30")
.param("semesterId", String.valueOf(semester.getId()))
.param("jobFamilies", "BE")
.param("recruitTypeDetails", "REGULAR")
.param("jobFamily", "BE")
.param("recruitTypeDetail", "REGULAR")
.param("careerDetails", "EMPLOYEE")
.param("teamIds", String.valueOf(team.getId()))
.param("statuses", ActivityStatus.ACTIVE.name()))
.param("teamId", String.valueOf(team.getId()))
.param("status", ActivityStatus.ACTIVE.name()))
.andExpect(status().isOk())
.andExpect(jsonPath("$.status").value("SUCCESS"))
.andExpect(jsonPath("$.data.content", hasSize(1)))
Expand All @@ -248,7 +248,7 @@ class AdminMemberSemesterControllerTest {
void 팀_필터만_있으면_일반_구성원_목록을_조회하지_않는다() throws Exception {
// when & then
mockMvc.perform(get("/admin/members/semester")
.param("teamIds", "1"))
.param("teamId", "1"))
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.status").value(MemberErrorCode.REQUIRED_SEMESTER_FOR_TEAM_FILTER.getCode()));
}
Expand All @@ -258,7 +258,7 @@ class AdminMemberSemesterControllerTest {
void 잘못된_enum_값이면_일반_구성원_목록을_조회하지_않는다() throws Exception {
// when & then
mockMvc.perform(get("/admin/members/semester")
.param("jobFamilies", "WRONG"))
.param("jobFamily", "WRONG"))
.andExpect(status().isBadRequest());
}

Expand All @@ -267,7 +267,7 @@ class AdminMemberSemesterControllerTest {
void 일반_구성원에서_사용할_수_없는_활동_상태면_목록을_조회하지_않는다() throws Exception {
// when & then
mockMvc.perform(get("/admin/members/semester")
.param("statuses", ActivityStatus.DROPOUT.name()))
.param("status", ActivityStatus.DROPOUT.name()))
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.status").value(MemberErrorCode.INVALID_ACTIVITY_STATUS.getCode()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,18 +105,18 @@ class AdminMemberActivityServiceTest {
*/

@Test
@DisplayName("다중 필터를 적용해서 일반 구성원 목록을 조회한다")
void 다중_필터를_적용해서_일반_구성원_목록을_조회한다() {
@DisplayName("단일 필터를 적용해서 일반 구성원 목록을 조회한다")
void 단일_필터를_적용해서_일반_구성원_목록을_조회한다() {
// given
MemberSemesterSearchCondition condition = new MemberSemesterSearchCondition(
null,
20,
1L,
List.of(JobFamily.BE),
List.of(RecruitTypeDetail.REGULAR),
List.of(CareerDetails.EMPLOYEE),
List.of(1L,2L,3L),
List.of(ActivityStatus.ACTIVE)
JobFamily.BE,
RecruitTypeDetail.REGULAR,
CareerDetails.EMPLOYEE,
1L,
ActivityStatus.ACTIVE
);

List<SearchMemberSemesterProjection> projections = List.of(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,18 @@ private CreateMemberSemesterRequest createMemberSemesterRequest() {
}

@Test
@DisplayName("입력한 이메일로 기존 구성원이 존재하면 새로 저장하지 않는다")
void 입력한_이메일로_기존_구성원이_존재하면_새로_저장하지_않는다() {
@DisplayName("입력한 이메일로 기존 구성원이 존재하면 값을 덮어쓰고 새로 저장하지 않는다")
void 입력한_이메일로_기존_구성원이_존재하면_값을_덮어쓰고_새로_저장하지_않는다() {
// given
CreateMemberSemesterRequest request = createMemberSemesterRequest();
Member existMember = mock(Member.class);
given(existMember.getId()).willReturn(3L);
given(existMember.getIsDeleted()).willReturn(false);
Member existMember = Member.create(
"기존 구성원",
request.email(),
"01087654321",
List.of("COMMERCE"),
Region.BUSAN
);
ReflectionTestUtils.setField(existMember, "id", 3L);

given(memberRepository.findByEmailIncludingDeleted(request.email())).willReturn(Optional.of(existMember));

Expand All @@ -95,6 +100,10 @@ private CreateMemberSemesterRequest createMemberSemesterRequest() {

// then
assertThat(memberId).isEqualTo(existMember.getId());
assertThat(existMember.getName()).isEqualTo(request.name());
assertThat(existMember.getPhoneNumber()).isEqualTo(request.phoneNumber());
assertThat(existMember.getInterestedDomains()).containsExactlyElementsOf(request.interestedDomains());
assertThat(existMember.getRegion()).isEqualTo(request.region());
verify(memberRepository).findByEmailIncludingDeleted(request.email());
verify(memberRepository, never()).save(any(Member.class));
}
Expand Down
Loading
Loading