From 022ea65ebe932d99648a8c2c13782c2bf05d9266 Mon Sep 17 00:00:00 2001 From: Chaerim1001 <89819254+Chaerim1001@users.noreply.github.com> Date: Thu, 28 Sep 2023 14:34:25 +0900 Subject: [PATCH] refactor: modify api with university certification status (#152) * refactor(team): remove college student authentication conditions from team creation conditions * refactor: add emailAuthenticated data to response * chore: add openapi --- .../heart/HeartCustomRepositoryImpl.java | 6 +- .../meeting/MeetingReadRepositoryImpl.java | 63 +- .../com/e2i/wemeet/domain/member/Member.java | 7 +- .../domain/team/TeamCustomRepositoryImpl.java | 6 +- .../team/data/suggestion/TeamLeaderData.java | 3 +- .../suggestion/SuggestionRepositoryImpl.java | 6 +- .../wemeet/dto/dsl/MeetingInformationDto.java | 13 +- .../dto/dsl/MeetingRequestInformationDto.java | 14 +- .../dto/response/LeaderResponseDto.java | 16 +- .../member/MemberDetailResponseDto.java | 4 +- .../suggestion/SuggestionResponseDto.java | 1 + .../suggestion/TeamLeaderResponseDto.java | 4 +- .../team/MyTeamDetailResponseDto.java | 4 +- .../resources/static/swagger-ui/openapi3.yaml | 1477 ++++++++--------- .../controller/heart/HeartControllerTest.java | 12 +- .../meeting/MeetingControllerTest.java | 50 +- .../member/MemberControllerTest.java | 2 +- .../suggestion/SuggestionControllerTest.java | 8 + .../controller/team/TeamControllerTest.java | 9 +- .../service/member/MemberServiceTest.java | 2 +- .../wemeet/service/team/TeamServiceTest.java | 21 - 21 files changed, 880 insertions(+), 848 deletions(-) diff --git a/src/main/java/com/e2i/wemeet/domain/heart/HeartCustomRepositoryImpl.java b/src/main/java/com/e2i/wemeet/domain/heart/HeartCustomRepositoryImpl.java index 6c9e2af7..48a29087 100644 --- a/src/main/java/com/e2i/wemeet/domain/heart/HeartCustomRepositoryImpl.java +++ b/src/main/java/com/e2i/wemeet/domain/heart/HeartCustomRepositoryImpl.java @@ -40,7 +40,8 @@ public List findSentHeart(Long teamId, member.mbti, member.profileImage.basicUrl.as("profileImageUrl"), member.collegeInfo.collegeCode.codeValue.as("college"), - member.collegeInfo.admissionYear.as("admissionYear") + member.collegeInfo.admissionYear.as("admissionYear"), + member.email.isNotNull().as("emailAuthenticated") ))) .from(heart) .join(team).on(heart.team.teamId.eq(team.teamId)) @@ -73,7 +74,8 @@ public List findReceivedHeart(Long teamId, Projections.constructor(TeamLeaderData.class, member.nickname, member.mbti, member.profileImage.basicUrl.as("profileImageUrl"), member.collegeInfo.collegeCode.codeValue.as("college"), - member.collegeInfo.admissionYear.as("admissionYear")))) + member.collegeInfo.admissionYear.as("admissionYear"), + member.email.isNotNull().as("emailAuthenticated")))) .from(heart) .join(team).on(heart.partnerTeam.teamId.eq(team.teamId)) .join(heart.team.teamLeader, member) diff --git a/src/main/java/com/e2i/wemeet/domain/meeting/MeetingReadRepositoryImpl.java b/src/main/java/com/e2i/wemeet/domain/meeting/MeetingReadRepositoryImpl.java index 760fb105..1f0edc83 100644 --- a/src/main/java/com/e2i/wemeet/domain/meeting/MeetingReadRepositoryImpl.java +++ b/src/main/java/com/e2i/wemeet/domain/meeting/MeetingReadRepositoryImpl.java @@ -79,7 +79,8 @@ public List findAcceptedMeetingList(final Long membe .map(meetingInformation -> AcceptedMeetingResponseDto.of( meetingInformation, findTeamProfileImageUrl(meetingInformation.getTeamId()) )) - .sorted(Comparator.comparing(AcceptedMeetingResponseDto::getMeetingAcceptTime).reversed()) + .sorted( + Comparator.comparing(AcceptedMeetingResponseDto::getMeetingAcceptTime).reversed()) .toList(); } @@ -204,10 +205,65 @@ private JPAQuery selectMeetingInformationDto() { code.codeValue.as("partnerLeaderCollegeName"), partnerTeamLeader.collegeInfo.collegeType.as("partnerLeaderCollegeType"), partnerTeamLeader.collegeInfo.admissionYear.as("partnerLeaderAdmissionYear"), - partnerTeamLeader.profileImage.imageAuth.as("partnerLeaderImageAuth") + partnerTeamLeader.profileImage.imageAuth.as("partnerLeaderImageAuth"), + partnerTeamLeader.email.isNotNull().as("emailAuthenticated") )); } + // 보낸 미팅 신청 조회 + @Override + public List findSentRequestList(final Long memberId) { + List meetingRequestList = selectMeetingRequestInformationDto() + .from(meetingRequest) + // My Team & Partner Team + .join(meetingRequest.team, team).on(team.deletedAt.isNull()) + .join(meetingRequest.partnerTeam, partnerTeam) + // Me & Partner Team Leader + .join(team.teamLeader, member) + .join(partnerTeam.teamLeader, partnerTeamLeader) + // Partner Team Leader College + .join(partnerTeamLeader.collegeInfo.collegeCode, code) + .where( + member.memberId.eq(memberId), + member.deletedAt.isNull() + ) + .fetch(); + + return meetingRequestList.stream() + .map(meetingRequestInformation -> SentMeetingResponseDto.of( + meetingRequestInformation, + findTeamProfileImageUrl(meetingRequestInformation.getTeamId()) + )) + .toList(); + } + + // 받은 미팅 신청 조회 + @Override + public List findReceiveRequestList(final Long memberId) { + List meetingReceivedList = selectMeetingRequestInformationDto() + .from(meetingRequest) + // PartnerTeam == RequestReceivedTeam == My Team + .join(meetingRequest.team, partnerTeam) + .join(meetingRequest.partnerTeam, team).on(team.deletedAt.isNull()) + // Me & Partner Team Leader + .join(team.teamLeader, member) + .join(partnerTeam.teamLeader, partnerTeamLeader) + // Partner Team Leader College + .join(partnerTeamLeader.collegeInfo.collegeCode, code) + .where( + member.memberId.eq(memberId), + member.deletedAt.isNull() + ) + .fetch(); + + return meetingReceivedList.stream() + .map(meetingRequestInformation -> ReceivedMeetingResponseDto.of( + meetingRequestInformation, + findTeamProfileImageUrl(meetingRequestInformation.getTeamId()) + )) + .toList(); + } + private JPAQuery selectMeetingRequestInformationDto() { return queryFactory.select( new QMeetingRequestInformationDto( @@ -226,7 +282,8 @@ private JPAQuery selectMeetingRequestInformationDt code.codeValue.as("partnerLeaderCollegeName"), partnerTeamLeader.collegeInfo.collegeType.as("partnerLeaderCollegeType"), partnerTeamLeader.collegeInfo.admissionYear.as("partnerLeaderAdmissionYear"), - partnerTeamLeader.profileImage.imageAuth.as("partnerLeaderImageAuth") + partnerTeamLeader.profileImage.imageAuth.as("partnerLeaderImageAuth"), + partnerTeamLeader.email.isNotNull().as("emailAuthenticated") )); } diff --git a/src/main/java/com/e2i/wemeet/domain/member/Member.java b/src/main/java/com/e2i/wemeet/domain/member/Member.java index e34fe816..4a3c5a39 100644 --- a/src/main/java/com/e2i/wemeet/domain/member/Member.java +++ b/src/main/java/com/e2i/wemeet/domain/member/Member.java @@ -20,7 +20,6 @@ import com.e2i.wemeet.exception.badrequest.TeamNotExistsException; import com.e2i.wemeet.exception.unauthorized.CreditNotEnoughException; import com.e2i.wemeet.exception.unauthorized.UnAuthorizedRoleException; -import com.e2i.wemeet.exception.unauthorized.UnAuthorizedUnivException; import com.e2i.wemeet.util.validator.CustomFormatValidator; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; @@ -221,11 +220,7 @@ public void validateTeamCreation() { if (this.team.stream().anyMatch(t -> t.getDeletedAt() == null)) { throw new TeamExistsException(); } - - if (!isEmailAuthenticated()) { - throw new UnAuthorizedUnivException(); - } - + if (!isProfileImageExists()) { throw new ProfileImageNotExistsException(); } diff --git a/src/main/java/com/e2i/wemeet/domain/team/TeamCustomRepositoryImpl.java b/src/main/java/com/e2i/wemeet/domain/team/TeamCustomRepositoryImpl.java index 2cc4dd7e..20fff849 100644 --- a/src/main/java/com/e2i/wemeet/domain/team/TeamCustomRepositoryImpl.java +++ b/src/main/java/com/e2i/wemeet/domain/team/TeamCustomRepositoryImpl.java @@ -53,7 +53,8 @@ public Optional findLeaderByTeamId(final Long teamId) { member.collegeInfo.collegeType.as("collegeType"), member.collegeInfo.admissionYear, member.profileImage.lowUrl.as("leaderLowProfileImageUrl"), - member.profileImage.imageAuth.as("imageAuth") + member.profileImage.imageAuth.as("imageAuth"), + member.email.isNotNull().as("emailAuthenticated") ) ) .from(team) @@ -64,7 +65,8 @@ public Optional findLeaderByTeamId(final Long teamId) { } @Override - public Optional findTeamInformationByTeamId(final Long memberLeaderId, final Long teamId, final LocalDateTime readTime) { + public Optional findTeamInformationByTeamId(final Long memberLeaderId, + final Long teamId, final LocalDateTime readTime) { com.e2i.wemeet.domain.team.QTeam myTeam = new com.e2i.wemeet.domain.team.QTeam("myTeam"); TeamInformationDto teamInformationDto = Optional.ofNullable(queryFactory .select(Projections.constructor(TeamInformationDto.class, diff --git a/src/main/java/com/e2i/wemeet/domain/team/data/suggestion/TeamLeaderData.java b/src/main/java/com/e2i/wemeet/domain/team/data/suggestion/TeamLeaderData.java index 6d44b57d..1526aac0 100644 --- a/src/main/java/com/e2i/wemeet/domain/team/data/suggestion/TeamLeaderData.java +++ b/src/main/java/com/e2i/wemeet/domain/team/data/suggestion/TeamLeaderData.java @@ -9,7 +9,8 @@ public record TeamLeaderData( Mbti mbti, String profileImageUrl, String college, - String admissionYear + String admissionYear, + Boolean emailAuthenticated ) { } diff --git a/src/main/java/com/e2i/wemeet/domain/team/suggestion/SuggestionRepositoryImpl.java b/src/main/java/com/e2i/wemeet/domain/team/suggestion/SuggestionRepositoryImpl.java index 8cb816dc..5bf0dce2 100644 --- a/src/main/java/com/e2i/wemeet/domain/team/suggestion/SuggestionRepositoryImpl.java +++ b/src/main/java/com/e2i/wemeet/domain/team/suggestion/SuggestionRepositoryImpl.java @@ -49,7 +49,8 @@ public List findSuggestionTeamForUser(Long memberId, Gender Projections.constructor(TeamLeaderData.class, member.nickname, member.mbti, member.profileImage.lowUrl.as("profileImageUrl"), member.collegeInfo.collegeCode.codeValue.as("college"), - member.collegeInfo.admissionYear.as("admissionYear")) + member.collegeInfo.admissionYear.as("admissionYear"), + member.email.isNotNull().as("emailAuthenticated")) ) ) .from(team) @@ -105,7 +106,8 @@ public List findSuggestionHistoryTeam(Long memberId, Projections.constructor(TeamLeaderData.class, member.nickname, member.mbti, member.profileImage.lowUrl.as("profileImageUrl"), member.collegeInfo.collegeCode.codeValue.as("college"), - member.collegeInfo.admissionYear.as("admissionYear")) + member.collegeInfo.admissionYear.as("admissionYear"), + member.email.isNotNull().as("emailAuthenticated")) ) ) .from(history) diff --git a/src/main/java/com/e2i/wemeet/dto/dsl/MeetingInformationDto.java b/src/main/java/com/e2i/wemeet/dto/dsl/MeetingInformationDto.java index 44a6597e..f88c5d36 100644 --- a/src/main/java/com/e2i/wemeet/dto/dsl/MeetingInformationDto.java +++ b/src/main/java/com/e2i/wemeet/dto/dsl/MeetingInformationDto.java @@ -28,12 +28,17 @@ public class MeetingInformationDto { private CollegeType partnerLeaderCollegeType; private String partnerLeaderAdmissionYear; private Boolean partnerLeaderImageAuth; + private Boolean emailAuthenticated; @QueryProjection - public MeetingInformationDto(Long meetingId, LocalDateTime meetingAcceptTime, boolean isOver, LocalDateTime deletedAt, Long teamId, + public MeetingInformationDto(Long meetingId, LocalDateTime meetingAcceptTime, boolean isOver, + LocalDateTime deletedAt, Long teamId, int memberCount, - Region region, Long partnerLeaderId, String partnerLeaderNickname, Mbti partnerLeaderMbti, String partnerLeaderLowProfileUrl, - String partnerLeaderCollegeName, CollegeType partnerLeaderCollegeType, String partnerLeaderAdmissionYear, Boolean partnerLeaderImageAuth) { + Region region, Long partnerLeaderId, String partnerLeaderNickname, Mbti partnerLeaderMbti, + String partnerLeaderLowProfileUrl, + String partnerLeaderCollegeName, CollegeType partnerLeaderCollegeType, + String partnerLeaderAdmissionYear, Boolean partnerLeaderImageAuth, + Boolean emailAuthenticated) { this.meetingId = meetingId; this.meetingAcceptTime = meetingAcceptTime; this.isOver = isOver; @@ -49,6 +54,7 @@ public MeetingInformationDto(Long meetingId, LocalDateTime meetingAcceptTime, bo this.partnerLeaderCollegeType = partnerLeaderCollegeType; this.partnerLeaderAdmissionYear = partnerLeaderAdmissionYear; this.partnerLeaderImageAuth = partnerLeaderImageAuth; + this.emailAuthenticated = emailAuthenticated; } public boolean isOver() { @@ -70,6 +76,7 @@ public String toString() { ", partnerLeaderMbti=" + partnerLeaderMbti + ", partnerLeaderLowProfileUrl='" + partnerLeaderLowProfileUrl + '\'' + ", partnerLeaderCollegeName='" + partnerLeaderCollegeName + '\'' + + ", emailAuthenticated='" + emailAuthenticated + '\'' + '}'; } } diff --git a/src/main/java/com/e2i/wemeet/dto/dsl/MeetingRequestInformationDto.java b/src/main/java/com/e2i/wemeet/dto/dsl/MeetingRequestInformationDto.java index b6487d3f..be644aa1 100644 --- a/src/main/java/com/e2i/wemeet/dto/dsl/MeetingRequestInformationDto.java +++ b/src/main/java/com/e2i/wemeet/dto/dsl/MeetingRequestInformationDto.java @@ -30,12 +30,16 @@ public class MeetingRequestInformationDto { private CollegeType partnerLeaderCollegeType; private String partnerLeaderAdmissionYear; private Boolean partnerLeaderImageAuth; + private Boolean emailAuthenticated; @QueryProjection - public MeetingRequestInformationDto(Long meetingRequestId, LocalDateTime requestSentTime, String message, AcceptStatus acceptStatus, Long teamId, - int memberCount, Region region, LocalDateTime deletedAt, Long partnerLeaderId, String partnerLeaderNickname, Mbti partnerLeaderMbti, - String partnerLeaderLowProfileUrl, String partnerLeaderCollegeName, CollegeType partnerLeaderCollegeType, String partnerLeaderAdmissionYear, - Boolean partnerLeaderImageAuth) { + public MeetingRequestInformationDto(Long meetingRequestId, LocalDateTime requestSentTime, + String message, AcceptStatus acceptStatus, Long teamId, + int memberCount, Region region, LocalDateTime deletedAt, Long partnerLeaderId, + String partnerLeaderNickname, Mbti partnerLeaderMbti, + String partnerLeaderLowProfileUrl, String partnerLeaderCollegeName, + CollegeType partnerLeaderCollegeType, String partnerLeaderAdmissionYear, + Boolean partnerLeaderImageAuth, Boolean emailAuthenticated) { this.meetingRequestId = meetingRequestId; this.requestSentTime = requestSentTime; this.message = message; @@ -52,6 +56,7 @@ public MeetingRequestInformationDto(Long meetingRequestId, LocalDateTime request this.partnerLeaderCollegeType = partnerLeaderCollegeType; this.partnerLeaderAdmissionYear = partnerLeaderAdmissionYear; this.partnerLeaderImageAuth = partnerLeaderImageAuth; + this.emailAuthenticated = emailAuthenticated; } @Override @@ -68,6 +73,7 @@ public String toString() { ", partnerLeaderMbti=" + partnerLeaderMbti + ", partnerLeaderLowProfileUrl='" + partnerLeaderLowProfileUrl + '\'' + ", partnerLeaderCollegeName='" + partnerLeaderCollegeName + '\'' + + ", emailAuthenticated='" + emailAuthenticated + '\'' + '}'; } diff --git a/src/main/java/com/e2i/wemeet/dto/response/LeaderResponseDto.java b/src/main/java/com/e2i/wemeet/dto/response/LeaderResponseDto.java index c8e03681..a570936c 100644 --- a/src/main/java/com/e2i/wemeet/dto/response/LeaderResponseDto.java +++ b/src/main/java/com/e2i/wemeet/dto/response/LeaderResponseDto.java @@ -14,7 +14,8 @@ public record LeaderResponseDto( CollegeType collegeType, String admissionYear, String leaderLowProfileImageUrl, - Boolean imageAuth + Boolean imageAuth, + Boolean emailAuthenticated ) { @@ -27,7 +28,8 @@ public static LeaderResponseDto of(final Member leader) { leader.getCollegeInfo().getCollegeType(), leader.getCollegeInfo().getAdmissionYear(), leader.getProfileImage().getLowUrl(), - leader.getProfileImage().getImageAuth() + leader.getProfileImage().getImageAuth(), + (leader.getEmail() != null) ); } @@ -40,11 +42,13 @@ public static LeaderResponseDto of(final MeetingInformationDto meetingInformatio meetingInformationDto.getPartnerLeaderCollegeType(), meetingInformationDto.getPartnerLeaderAdmissionYear(), meetingInformationDto.getPartnerLeaderLowProfileUrl(), - meetingInformationDto.getPartnerLeaderImageAuth() + meetingInformationDto.getPartnerLeaderImageAuth(), + meetingInformationDto.getEmailAuthenticated() ); } - public static LeaderResponseDto of(final MeetingRequestInformationDto meetingRequestInformationDto) { + public static LeaderResponseDto of( + final MeetingRequestInformationDto meetingRequestInformationDto) { return new LeaderResponseDto( meetingRequestInformationDto.getPartnerLeaderId(), meetingRequestInformationDto.getPartnerLeaderNickname(), @@ -53,7 +57,8 @@ public static LeaderResponseDto of(final MeetingRequestInformationDto meetingReq meetingRequestInformationDto.getPartnerLeaderCollegeType(), meetingRequestInformationDto.getPartnerLeaderAdmissionYear(), meetingRequestInformationDto.getPartnerLeaderLowProfileUrl(), - meetingRequestInformationDto.getPartnerLeaderImageAuth() + meetingRequestInformationDto.getPartnerLeaderImageAuth(), + meetingRequestInformationDto.getEmailAuthenticated() ); } @@ -68,6 +73,7 @@ public String toString() { ", admissionYear='" + admissionYear + '\'' + ", leaderLowProfileImageUrl='" + leaderLowProfileImageUrl + '\'' + ", imageAuth=" + imageAuth + + ", emailAuthentication=" + emailAuthenticated + '}'; } } diff --git a/src/main/java/com/e2i/wemeet/dto/response/member/MemberDetailResponseDto.java b/src/main/java/com/e2i/wemeet/dto/response/member/MemberDetailResponseDto.java index 0c3ecedb..caab9084 100644 --- a/src/main/java/com/e2i/wemeet/dto/response/member/MemberDetailResponseDto.java +++ b/src/main/java/com/e2i/wemeet/dto/response/member/MemberDetailResponseDto.java @@ -14,7 +14,7 @@ public record MemberDetailResponseDto( String collegeType, String admissionYear, ProfileImageResponseDto profileImage, - Boolean authUnivStatus + Boolean emailAuthenticated ) { public static MemberDetailResponseDto of(final Member member, final String college) { @@ -28,7 +28,7 @@ public static MemberDetailResponseDto of(final Member member, final String colle .collegeType(member.getCollegeInfo().getCollegeType().getDescription()) .admissionYear(member.getCollegeInfo().getAdmissionYear()) .profileImage(profileImage) - .authUnivStatus(member.getEmail() != null) + .emailAuthenticated(member.getEmail() != null) .build(); } } diff --git a/src/main/java/com/e2i/wemeet/dto/response/suggestion/SuggestionResponseDto.java b/src/main/java/com/e2i/wemeet/dto/response/suggestion/SuggestionResponseDto.java index 924ff537..6a78339e 100644 --- a/src/main/java/com/e2i/wemeet/dto/response/suggestion/SuggestionResponseDto.java +++ b/src/main/java/com/e2i/wemeet/dto/response/suggestion/SuggestionResponseDto.java @@ -26,6 +26,7 @@ public static SuggestionResponseDto of(SuggestionTeamData data) { .nickname(data.teamLeader().nickname()) .mbti(data.teamLeader().mbti().name()) .admissionYear(data.teamLeader().admissionYear()) + .emailAuthenticated(data.teamLeader().emailAuthenticated()) .build() ).build(); } diff --git a/src/main/java/com/e2i/wemeet/dto/response/suggestion/TeamLeaderResponseDto.java b/src/main/java/com/e2i/wemeet/dto/response/suggestion/TeamLeaderResponseDto.java index 9fc39f90..229dd541 100644 --- a/src/main/java/com/e2i/wemeet/dto/response/suggestion/TeamLeaderResponseDto.java +++ b/src/main/java/com/e2i/wemeet/dto/response/suggestion/TeamLeaderResponseDto.java @@ -8,7 +8,8 @@ public record TeamLeaderResponseDto( String nickname, String mbti, String college, - String admissionYear + String admissionYear, + Boolean emailAuthenticated ) { public static TeamLeaderResponseDto of(TeamLeaderData data) { @@ -17,6 +18,7 @@ public static TeamLeaderResponseDto of(TeamLeaderData data) { .mbti(data.mbti().name()) .college(data.college()) .admissionYear(data.admissionYear()) + .emailAuthenticated(data.emailAuthenticated()) .build(); } } diff --git a/src/main/java/com/e2i/wemeet/dto/response/team/MyTeamDetailResponseDto.java b/src/main/java/com/e2i/wemeet/dto/response/team/MyTeamDetailResponseDto.java index 23f09229..8b8dfda6 100644 --- a/src/main/java/com/e2i/wemeet/dto/response/team/MyTeamDetailResponseDto.java +++ b/src/main/java/com/e2i/wemeet/dto/response/team/MyTeamDetailResponseDto.java @@ -42,7 +42,9 @@ public static MyTeamDetailResponseDto of(Team team, List teamImag .nickname(teamLeader.getNickname()) .mbti(teamLeader.getMbti().name()) .college(teamLeader.getCollegeInfo().getCollegeCode().getCodeValue()) - .admissionYear(teamLeader.getCollegeInfo().getAdmissionYear()).build() + .admissionYear(teamLeader.getCollegeInfo().getAdmissionYear()) + .emailAuthenticated(teamLeader.getEmail() != null) + .build() ) .images( teamImages.stream() diff --git a/src/main/resources/static/swagger-ui/openapi3.yaml b/src/main/resources/static/swagger-ui/openapi3.yaml index f3fe787e..94e2da55 100644 --- a/src/main/resources/static/swagger-ui/openapi3.yaml +++ b/src/main/resources/static/swagger-ui/openapi3.yaml @@ -4,50 +4,22 @@ info: description: We:meet API Documentation version: 0.1.0 servers: - - url: http://localhost:8080 - description: LOCAL server - - url: http://ec2-52-78-215-171.ap-northeast-2.compute.amazonaws.com:8080 - description: Develop Server - - url: http://wemeet-elb-1696815651.ap-northeast-2.elb.amazonaws.com - description: Production Server -tags: [ ] +- url: http://localhost:8080 + description: LOCAL server +- url: http://ec2-52-78-215-171.ap-northeast-2.compute.amazonaws.com:8080 + description: Develop Server +- url: http://wemeet-elb-1696815651.ap-northeast-2.elb.amazonaws.com + description: Production Server +tags: [] paths: - /test/access/{memberId}: - post: - tags: - - Admin API - summary: 유저의 ID로 Access Token을 발급합니다. - description: 유저의 ID로 Access Token을 발급합니다. 응답으로 'AccessToken' 헤더에 토큰이 반환됩니다. - operationId: getAccessToken - security: - - AccessToken: [ ] - parameters: - - name: memberId - in: path - description: "" - required: true - schema: - type: string - responses: - "200": - description: OK - headers: - AccessToken: - description: 재생성된 Access Token - schema: - type: string - examples: - value: Bearer asdnfoavnoacklasdnvwnefowlansdfaovvz /v1/credit: get: tags: - - 크레딧 관련 API + - 크레딧 관련 API summary: 로그인한 사용자의 크레딧을 조회합니다 description: |2 로그인한 사용자의 크레딧을 조회합니다. operationId: 크레딧 조회 - security: - - AccessToken: [ ] responses: "200": description: "200" @@ -62,14 +34,12 @@ paths: /v1/meeting: post: tags: - - 미팅 관련 API + - 미팅 관련 API summary: 상대 이성 팀에게 미팅을 신청합니다. description: |2 상대 이성 팀에게 미팅을 신청합니다. 지정된 개수 만큼의 크레딧이 소모됩니다. (10) operationId: 미팅 신청 - security: - - AccessToken: [ ] requestBody: content: application/json;charset=UTF-8: @@ -149,30 +119,28 @@ paths: /v1/member: get: tags: - - 회원 관련 API + - 회원 관련 API summary: 로그인된 사용자의 정보를 조회합니다 description: |2 AccessToken 을 통해 로그인된 사용자의 상세 정보를 조회합니다. operationId: 회원 상세 정보 조회 - security: - - AccessToken: [ ] responses: "200": description: "200" content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-member1730613022' + $ref: '#/components/schemas/v1-member-995118165' examples: 회원 상세 정보 조회: value: "{\"status\":\"SUCCESS\",\"message\":\"Get Member-detail\ \ Success\",\"data\":{\"nickname\":\"카이\",\"gender\":\"MAN\",\"\ mbti\":\"INFJ\",\"college\":\"안양대\",\"collegeType\":\"인문사회\",\"\ admissionYear\":\"17\",\"profileImage\":{\"basicUrl\":\"/v1/asdf\"\ - ,\"lowUrl\":\"/v1/kai\"}}}" + ,\"lowUrl\":\"/v1/kai\"},\"emailAuthenticated\":true}}" post: tags: - - 회원 관련 API + - 회원 관련 API summary: 회원가입 API 입니다. description: |2 회원 정보를 통해 회원가입을 진행합니다. @@ -181,12 +149,13 @@ paths: content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-member1256817410' + $ref: '#/components/schemas/v1-member1362466055' examples: 회원가입: value: "{\"nickname\":\"카이\",\"gender\":\"MAN\",\"phoneNumber\":\"\ +821011112222\",\"collegeInfo\":{\"collegeCode\":\"CE-081\",\"collegeType\"\ - :\"SOCIAL\",\"admissionYear\":\"17\"},\"mbti\":\"INFJ\", \"allowMarketing\":\"true\"}" + :\"SOCIAL\",\"admissionYear\":\"17\"},\"mbti\":\"INFJ\",\"allowMarketing\"\ + :true}" responses: "200": description: "200" @@ -200,13 +169,11 @@ paths: ,\"data\":null}" delete: tags: - - 회원 관련 API + - 회원 관련 API summary: 회원 탈퇴 API 입니다. description: |2 회원 탈퇴를 수행합니다. (deleteAt 컬럼에 현재 시간을 기록합니다.) operationId: 회원 탈퇴 - security: - - AccessToken: [ ] responses: "200": description: "200" @@ -220,14 +187,12 @@ paths: ,\"data\":null}" patch: tags: - - 회원 관련 API + - 회원 관련 API summary: 회원 상세 정보를 수정합니다 description: |2 회원의 상세 정보를 수정합니다. nickname 과 mbti 를 수정할 수 있습니다. operationId: 회원 상세 정보 수정 - security: - - AccessToken: [ ] requestBody: content: application/json;charset=UTF-8: @@ -247,49 +212,73 @@ paths: 회원 상세 정보 수정: value: "{\"status\":\"SUCCESS\",\"message\":\"Update Member Success\"\ ,\"data\":null}" + /v1/recommend: + post: + tags: + - 회원 관련 API + summary: 추천인을 등록합니다. + description: |2 + 위밋을 추천해준 추천인의 전화번호를 입력하여 추천인으로 등록합니다. + 계정당 1번만 가능하고 추천인 상대에게 20코인을 지급합니다. + operationId: 추천인 등록 + requestBody: + content: + application/json;charset=UTF-8: + schema: + $ref: '#/components/schemas/v1-recommend-330443167' + examples: + 추천인 등록: + value: "{\"phoneNumber\":\"+821012345678\"}" + responses: + "200": + description: "200" + content: + application/json;charset=UTF-8: + schema: + $ref: '#/components/schemas/v1-member-1162606117' + examples: + 추천인 등록: + value: "{\"status\":\"SUCCESS\",\"message\":\"Recommend Success\"\ + ,\"data\":null}" /v1/suggestion: get: tags: - - 추천 관련 API + - 추천 관련 API summary: 오늘의 추천 받기 API 입니다. description: |2 오늘의 추천 정보를 반환합니다. 하루 3개의 추천 팀 정보를 받아올 수 있습니다. (오후 11:11 갱신) operationId: 오늘의 추천 받기 - security: - - AccessToken: [ ] responses: "200": description: "200" content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-suggestion-1113310091' + $ref: '#/components/schemas/v1-suggestion1159884028' examples: 오늘의 추천 받기: value: "{\"status\":\"SUCCESS\",\"message\":\"Get Suggestion Success\"\ ,\"data\":[{\"teamId\":1,\"memberNum\":2,\"region\":\"홍대\",\"\ profileImageURL\":\"testImageUrl.jpg\",\"mainImageURL\":\"testImageUrl.jpg\"\ ,\"leader\":{\"nickname\":\"짱구\",\"mbti\":\"ENFP\",\"college\"\ - :\"서울대학교\"}}]}" + :\"서울대학교\",\"admissionYear\":\"19\",\"emailAuthenticated\":true}}]}" /v1/team: get: tags: - - 팀 관련 API + - 팀 관련 API summary: 내 팀 정보를 조회합니다. description: |2 내 팀 정보를 조회합니다. operationId: 마이 팀 조회 - security: - - AccessToken: [ ] responses: "200": description: "200" content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-team-1407123040' + $ref: '#/components/schemas/v1-team1017300237' examples: 마이 팀 조회: value: "{\"status\":\"SUCCESS\",\"message\":\"Get My Team Detail\ @@ -300,10 +289,11 @@ paths: ,\"profileImageURL\":\"/v1/rim\",\"images\":[{\"url\":\"testUrl\"\ }],\"members\":[{\"college\":\"인하대\",\"collegeType\":\"자연공학\"\ ,\"admissionYear\":\"22\",\"mbti\":\"INTJ\"}],\"leader\":{\"nickname\"\ - :\"째림\",\"mbti\":\"ISFJ\",\"college\":\"서울여대\"}}}}" + :\"째림\",\"mbti\":\"ISFJ\",\"college\":\"서울여대\",\"admissionYear\"\ + :\"23\",\"emailAuthenticated\":true}}}}" put: tags: - - 팀 관련 API + - 팀 관련 API summary: 팀 수정 API 입니다. description: " 나의 팀 정보를 수정합니다.\n multipart/form-data 데이터로 보내주어야함 (data는\ \ json!)\n part - 'images': 사진 파일\n part - 'data': 팀 수정 요청 데이터\n\n \ @@ -327,8 +317,6 @@ paths: \ : String, //not null\n },\n\n \"images\": File[], // 최소 1장, 최대 10장\ \n" operationId: 팀 수정 - security: - - AccessToken: [ ] responses: "200": description: "200" @@ -342,7 +330,7 @@ paths: ,\"data\":null}" post: tags: - - 팀 관련 API + - 팀 관련 API summary: 팀 생성 API 입니다. description: " 팀을 생성합니다.\n multipart/form-data 데이터로 보내주어야함 (data는 json!)\n\ \ part - 'images': 사진 파일\n part - 'data': 팀 수정 요청 데이터\n\n 성공 시 AccessToken\ @@ -367,8 +355,6 @@ paths: \ : String, //not null\n },\n\n \"images\": File[], // 최소 1장, 최대 10장\ \n" operationId: 팀 생성 - security: - - AccessToken: [ ] responses: "200": description: "200" @@ -382,7 +368,7 @@ paths: ,\"data\":null}" delete: tags: - - 팀 관련 API + - 팀 관련 API summary: 팀 삭제 API 입니다. description: |2 현재 속한 팀을 삭제합니다. @@ -390,8 +376,6 @@ paths: 성공 시 AccessToken & RefershToken 재발급되어 Header에 함께 전송됨 사용자 권한 변경 MANAGER -> USER operationId: 팀 삭제 - security: - - AccessToken: [ ] responses: "200": description: "200" @@ -406,13 +390,11 @@ paths: /v1/auth/persist: get: tags: - - 토큰 관련 API + - 토큰 관련 API summary: AccessToken 을 통해 유저의 상태 정보를 반환합니다. description: |2 AccessToken 을 통해 유저의 상태 정보를 반환합니다. operationId: PERSIST LOGIN 요청 - security: - - AccessToken: [ ] responses: "200": description: "200" @@ -430,29 +412,27 @@ paths: /v1/auth/refresh: post: tags: - - 토큰 관련 API - summary: "RefreshToken 을 사용하여 AccessToken과 Refresh Token을 갱신합니다." - description: " Access Token & RefreshToken 을 사용하여 AccessToken, Refresh Token을\ + - 토큰 관련 API + summary: "RefreshToken 을 사용하여 Access, Refresh Token을 갱신합니다." + description: " Access Token & RefreshToken 을 사용하여 Access, Refresh Token을\ \ 갱신합니다. \n\n Access Token과 Refresh Token 을 Header 에 넘겨주어야합니다.\n Access\ \ Token 은 유저의 값을 받아오는 용도이기 때문에 만료된 상태여도 상관 없습니다.\n" operationId: Refresh Token - security: - - AccessToken: [ ] parameters: - - name: AccessToken - in: header - description: Access Token - required: true - schema: - type: string - example: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJBQ0NFU1MiLCJpc3MiOiJXRTpNRUVUIiwiZXhwIjoxNjk0NDU5NjY5LCJpZCI6MTAwLCJyb2xlIjoiVVNFUiJ9.ADf0nclZd-hqQ9GY-20Oy_rh2uvvLMXvzz51KvnAgjsYjZ0ALVxd6kdI1NazGS0qA3JZpdh8qPDTxP5xkHb6uw - - name: RefreshToken - in: header - description: Refresh Token - required: true - schema: - type: string - example: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJSRUZSRVNIIiwiaXNzIjoiV0U6TUVFVCIsImV4cCI6MTY5NzA0OTg2OX0.btOHRe7aOR54MawGo3uTG54NDI_Ma3D1wcMnWz1mF4puR8BjKnO80a4R4c-N3Z2Cs25EjgJAly_SdJ5cLtclRg + - name: AccessToken + in: header + description: Access Token + required: true + schema: + type: string + example: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJBQ0NFU1MiLCJpc3MiOiJXRTpNRUVUIiwiZXhwIjoxNjk1ODE3NzczLCJpZCI6MTAwLCJyb2xlIjoiVVNFUiJ9._zTVKoaeQTfv4wPq2PMLGT0pTCqD3x2xbLjOdYiz579irv-Fa9v-hpcK3Qpm88B5v2-N28840CQ3Ko0qpLpXQQ + - name: RefreshToken + in: header + description: Refresh Token + required: true + schema: + type: string + example: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJSRUZSRVNIIiwiaXNzIjoiV0U6TUVFVCIsImV4cCI6MTY5ODQwNzk3M30.jGzhlJ522p0fJkls5ihAZRQG4K7NQvrpOCX1DCdHKN0h77Ylhy4oG-Cxs9DMPepm10WuGYUpkvqF292gFSh5Hg responses: "200": description: "200" @@ -476,73 +456,69 @@ paths: /v1/heart/received: get: tags: - - 좋아요 관련 API + - 좋아요 관련 API summary: 받은 좋아요 내역을 조회합니다. description: |2 나의 팀이 받은 좋아요 내역을 조회합니다. 팀이 없는 경우 조회되지 않습니다. operationId: 받은 좋아요 조회 - security: - - AccessToken: [ ] responses: "200": description: "200" content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-heart-received1518558698' + $ref: '#/components/schemas/v1-heart-received2038359125' examples: 받은 좋아요 조회: value: "{\"status\":\"SUCCESS\",\"message\":\"Get Received Heart\ \ Detail Success\",\"data\":[{\"teamId\":1,\"memberNum\":3,\"\ region\":\"신촌\",\"profileImageURL\":\"https://test.image.com\"\ ,\"mainImageURL\":\"https://test.image.com\",\"receivedTime\"\ - :\"2023-09-11T17:37:55.821759\",\"leader\":{\"nickname\":\"팀장님\ - \",\"mbti\":\"ENFP\",\"college\":\"서울대\"}}]}" + :\"2023-09-27T20:59:51.500162\",\"leader\":{\"nickname\":\"팀장님\ + \",\"mbti\":\"ENFP\",\"college\":\"서울대\",\"admissionYear\":\"\ + 19\",\"emailAuthenticated\":true}}]}" /v1/heart/sent: get: tags: - - 좋아요 관련 API + - 좋아요 관련 API summary: 보낸 좋아요 내역을 조회합니다. description: |2 내가 보낸 좋아요 내역을 조회합니다. 팀이 없는 경우 조회되지 않습니다. operationId: 보낸 좋아요 조회 - security: - - AccessToken: [ ] responses: "200": description: "200" content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-heart-sent-306379489' + $ref: '#/components/schemas/v1-heart-sent1644510391' examples: 보낸 좋아요 조회: value: "{\"status\":\"SUCCESS\",\"message\":\"Get Sent Heart Detail\ - \ Success\",\"data\":{\"teamId\":1,\"memberNum\":3,\"region\"\ + \ Success\",\"data\":[{\"teamId\":1,\"memberNum\":3,\"region\"\ :\"신촌\",\"profileImageURL\":\"https://test.image.com\",\"mainImageURL\"\ - :\"https://test.image.com\",\"sentTime\":\"2023-09-11T17:37:55.775483\"\ + :\"https://test.image.com\",\"sentTime\":\"2023-09-27T20:59:51.244415\"\ ,\"leader\":{\"nickname\":\"팀장님\",\"mbti\":\"ENFP\",\"college\"\ - :\"서울대\"}}}" + :\"서울대\",\"admissionYear\":\"19\",\"emailAuthenticated\":true}}]}" /v1/heart/{partnerTeamId}: post: tags: - - 좋아요 관련 API + - 좋아요 관련 API summary: 상대 팀에게 좋아요를 보냅니다. description: |2+ 상대 팀에게 좋아요를 보냅니다. 하루에 한 번 가능하며, 본인 팀에게는 보낼 수 없습니다. + operationId: 좋아요 보내기 - security: - - AccessToken: [ ] parameters: - - name: partnerTeamId - in: path - description: "" - required: true - schema: - type: string + - name: partnerTeamId + in: path + description: "" + required: true + schema: + type: string responses: "200": description: "200" @@ -557,50 +533,48 @@ paths: /v1/meeting/accepted: get: tags: - - 미팅 관련 API + - 미팅 관련 API summary: 성사된 미팅 리스트를 조회합니다. description: |2 성사된 미팅 리스트를 조회합니다. 상대 팀이 삭제되었거나, 미팅 유효기간이 만료된 경우에는 리스트에 포함되지 않습니다. 최신순으로 정렬되어 반환됩니다. operationId: 성사된 미팅 리스트 조회 - security: - - AccessToken: [ ] responses: "200": description: "200" content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-meeting-accepted487111904' + $ref: '#/components/schemas/v1-meeting-accepted499303008' examples: 성사된 미팅 리스트 조회: value: "{\"status\":\"SUCCESS\",\"message\":\"Get accepted meeting\ \ list success\",\"data\":[{\"meetingId\":1,\"teamId\":1,\"memberCount\"\ - :2,\"region\":\"HONGDAE\",\"meetingAcceptTime\":\"2023-09-11T17:37:55.982963\"\ + :2,\"region\":\"HONGDAE\",\"meetingAcceptTime\":\"2023-09-27T20:59:52.113967\"\ ,\"teamProfileImageUrl\":[\"https://profile1.com\"],\"leader\"\ :{\"leaderId\":1,\"nickname\":\"채원\",\"mbti\":\"INFP\",\"collegeName\"\ :\"고려대학교\",\"collegeType\":\"ENGINEERING\",\"admissionYear\":\"\ 2022\",\"leaderLowProfileImageUrl\":\"https://profile.com\",\"\ - imageAuth\":true},\"deleted\":false,\"expired\":false},{\"meetingId\"\ - :2,\"teamId\":2,\"memberCount\":2,\"region\":\"HONGDAE\",\"meetingAcceptTime\"\ - :\"2023-09-11T17:37:55.983017\",\"teamProfileImageUrl\":[\"https://profile2.com\"\ - ],\"leader\":{\"leaderId\":2,\"nickname\":\"째림\",\"mbti\":\"INFJ\"\ - ,\"collegeName\":\"서울대학교\",\"collegeType\":\"ARTS\",\"admissionYear\"\ - :\"2019\",\"leaderLowProfileImageUrl\":\"https://profile.com\"\ - ,\"imageAuth\":true},\"deleted\":false,\"expired\":false}]}" + imageAuth\":true,\"emailAuthenticated\":false},\"expired\":false,\"\ + deleted\":false},{\"meetingId\":2,\"teamId\":2,\"memberCount\"\ + :2,\"region\":\"HONGDAE\",\"meetingAcceptTime\":\"2023-09-27T20:59:52.114124\"\ + ,\"teamProfileImageUrl\":[\"https://profile2.com\"],\"leader\"\ + :{\"leaderId\":2,\"nickname\":\"째림\",\"mbti\":\"INFJ\",\"collegeName\"\ + :\"서울대학교\",\"collegeType\":\"ARTS\",\"admissionYear\":\"2019\"\ + ,\"leaderLowProfileImageUrl\":\"https://profile.com\",\"imageAuth\"\ + :true,\"emailAuthenticated\":false},\"expired\":false,\"deleted\"\ + :false}]}" /v1/meeting/message: post: tags: - - 미팅 관련 API + - 미팅 관련 API summary: 상대 이성 팀에게 쪽지와 함께 미팅을 신청합니다. description: |2 상대 이성 팀에게 쪽지와 함께 미팅을 신청합니다. 지정된 개수 만큼의 크레딧이 소모됩니다. (12) 메시지는 최대 50자까지 입력할 수 있습니다. operationId: 쪽지와 미팅 신청 - security: - - AccessToken: [ ] requestBody: content: application/json;charset=UTF-8: @@ -623,83 +597,81 @@ paths: /v1/meeting/received: get: tags: - - 미팅 관련 API + - 미팅 관련 API summary: 받은 미팅 신청 리스트를 조회합니다. description: |2 우리 팀이 받은 미팅 신청 리스트를 조회합니다. 상대 팀이 삭제되었거나, 미팅 유효기간이 만료된 경우에는 리스트에 포함되지 않습니다. 최신순으로 정렬되어 반환됩니다. operationId: 받은 미팅 신청 리스트 조회 - security: - - AccessToken: [ ] responses: "200": description: "200" content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-meeting-received9272768' + $ref: '#/components/schemas/v1-meeting-received792022336' examples: 받은 미팅 신청 리스트 조회: value: "{\"status\":\"SUCCESS\",\"message\":\"Get receive meeting\ \ request list success\",\"data\":[{\"meetingRequestId\":1,\"\ - acceptStatus\":\"PENDING\",\"requestTime\":\"2023-09-11T17:37:56.01846\"\ + acceptStatus\":\"PENDING\",\"requestTime\":\"2023-09-27T20:59:52.217267\"\ ,\"partnerTeamDeleted\":false,\"teamId\":1,\"memberCount\":4,\"\ region\":\"HONGDAE\",\"message\":\"재미있게 놀아요!\",\"teamProfileImageUrl\"\ :[\"https://profile1.com\"],\"leader\":{\"leaderId\":1,\"nickname\"\ :\"채원\",\"mbti\":\"INFP\",\"collegeName\":\"고려대학교\",\"collegeType\"\ :\"ENGINEERING\",\"admissionYear\":\"2022\",\"leaderLowProfileImageUrl\"\ - :\"https://profile.com\",\"imageAuth\":true},\"deleted\":false,\"\ - pending\":true},{\"meetingRequestId\":2,\"acceptStatus\":\"PENDING\"\ - ,\"requestTime\":\"2023-09-11T17:37:56.018466\",\"partnerTeamDeleted\"\ - :false,\"teamId\":2,\"memberCount\":4,\"region\":\"HONGDAE\",\"\ - message\":\"재미있게 놀아요!\",\"teamProfileImageUrl\":[\"https://profile2.com\"\ - ],\"leader\":{\"leaderId\":2,\"nickname\":\"쨰림\",\"mbti\":\"INFJ\"\ - ,\"collegeName\":\"서울대학교\",\"collegeType\":\"ARTS\",\"admissionYear\"\ - :\"2019\",\"leaderLowProfileImageUrl\":\"https://profile.com\"\ - ,\"imageAuth\":true},\"deleted\":false,\"pending\":true}]}" + :\"https://profile.com\",\"imageAuth\":true,\"emailAuthenticated\"\ + :true},\"deleted\":false,\"pending\":true},{\"meetingRequestId\"\ + :2,\"acceptStatus\":\"PENDING\",\"requestTime\":\"2023-09-27T20:59:52.217284\"\ + ,\"partnerTeamDeleted\":false,\"teamId\":2,\"memberCount\":4,\"\ + region\":\"HONGDAE\",\"message\":\"재미있게 놀아요!\",\"teamProfileImageUrl\"\ + :[\"https://profile2.com\"],\"leader\":{\"leaderId\":2,\"nickname\"\ + :\"쨰림\",\"mbti\":\"INFJ\",\"collegeName\":\"서울대학교\",\"collegeType\"\ + :\"ARTS\",\"admissionYear\":\"2019\",\"leaderLowProfileImageUrl\"\ + :\"https://profile.com\",\"imageAuth\":true,\"emailAuthenticated\"\ + :true},\"deleted\":false,\"pending\":true}]}" /v1/meeting/sent: get: tags: - - 미팅 관련 API + - 미팅 관련 API summary: 보낸 미팅 신청 리스트를 조회합니다. description: |2 보낸 미팅 신청 리스트를 조회합니다. 상대 팀이 삭제되었거나, 미팅 유효기간이 만료된 경우에는 리스트에 포함되지 않습니다. 최신순으로 정렬되어 반환됩니다. operationId: 보낸 신청 리스트 조회 - security: - - AccessToken: [ ] responses: "200": description: "200" content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-meeting-received9272768' + $ref: '#/components/schemas/v1-meeting-received792022336' examples: 보낸 신청 리스트 조회: value: "{\"status\":\"SUCCESS\",\"message\":\"Get sent meeting request\ \ list success\",\"data\":[{\"meetingRequestId\":1,\"acceptStatus\"\ - :\"PENDING\",\"requestTime\":\"2023-09-11T17:37:55.921896\",\"\ + :\"PENDING\",\"requestTime\":\"2023-09-27T20:59:51.802963\",\"\ partnerTeamDeleted\":false,\"teamId\":1,\"memberCount\":4,\"region\"\ :\"HONGDAE\",\"message\":\"재미있게 놀아요!\",\"teamProfileImageUrl\"\ :[\"https://profile1.com\"],\"leader\":{\"leaderId\":1,\"nickname\"\ :\"채원\",\"mbti\":\"INFP\",\"collegeName\":\"고려대학교\",\"collegeType\"\ :\"ENGINEERING\",\"admissionYear\":\"2022\",\"leaderLowProfileImageUrl\"\ - :\"https://profile.com\",\"imageAuth\":true},\"deleted\":false,\"\ - pending\":true},{\"meetingRequestId\":2,\"acceptStatus\":\"PENDING\"\ - ,\"requestTime\":\"2023-09-11T17:37:55.921966\",\"partnerTeamDeleted\"\ - :false,\"teamId\":2,\"memberCount\":4,\"region\":\"HONGDAE\",\"\ - message\":\"재미있게 놀아요!\",\"teamProfileImageUrl\":[\"https://profile2.com\"\ - ],\"leader\":{\"leaderId\":2,\"nickname\":\"쨰림\",\"mbti\":\"INFJ\"\ - ,\"collegeName\":\"서울대학교\",\"collegeType\":\"ARTS\",\"admissionYear\"\ - :\"2019\",\"leaderLowProfileImageUrl\":\"https://profile.com\"\ - ,\"imageAuth\":true},\"deleted\":false,\"pending\":true}]}" + :\"https://profile.com\",\"imageAuth\":true,\"emailAuthenticated\"\ + :true},\"deleted\":false,\"pending\":true},{\"meetingRequestId\"\ + :2,\"acceptStatus\":\"PENDING\",\"requestTime\":\"2023-09-27T20:59:51.803127\"\ + ,\"partnerTeamDeleted\":false,\"teamId\":2,\"memberCount\":4,\"\ + region\":\"HONGDAE\",\"message\":\"재미있게 놀아요!\",\"teamProfileImageUrl\"\ + :[\"https://profile2.com\"],\"leader\":{\"leaderId\":2,\"nickname\"\ + :\"쨰림\",\"mbti\":\"INFJ\",\"collegeName\":\"서울대학교\",\"collegeType\"\ + :\"ARTS\",\"admissionYear\":\"2019\",\"leaderLowProfileImageUrl\"\ + :\"https://profile.com\",\"imageAuth\":true,\"emailAuthenticated\"\ + :true},\"deleted\":false,\"pending\":true}]}" /v1/member/profile-image: post: tags: - - 회원 관련 API + - 회원 관련 API summary: 회원 프로필 등록 API 입니다. description: |2 회원의 프로필 사진을 등록합니다. @@ -709,8 +681,6 @@ paths: "file": "test" } operationId: 회원 프로필 사진 등록 - security: - - AccessToken: [ ] responses: "200": description: "200" @@ -725,13 +695,11 @@ paths: /v1/member/role: get: tags: - - 회원 관련 API + - 회원 관련 API summary: 회원 Role 정보 조회 API 입니다. description: |2 사용자의 팀장 여부와 팀 소속 여부를 조회할 수 있습니다. operationId: 회원 Role 조회 - security: - - AccessToken: [ ] responses: "200": description: "200" @@ -743,54 +711,22 @@ paths: 회원 Role 조회: value: "{\"status\":\"SUCCESS\",\"message\":\"Get Member Role Success\"\ ,\"data\":{\"isManager\":true,\"hasTeam\":true}}" - /v1/recommend: - post: - tags: - - 회원 관련 API - summary: 추천인을 등록합니다. - description: |2 - 위밋을 추천해준 추천인의 전화번호를 입력하여 추천인으로 등록합니다. - 계정당 1번만 가능하고 추천인 상대에게 20코인을 지급합니다. - operationId: 추천인 등록 - security: - - AccessToken: [ ] - requestBody: - content: - application/json;charset=UTF-8: - schema: - $ref: '#/components/schemas/v1-recommend-330443167' - examples: - 추천인 등록: - value: "{\"phoneNumber\":\"+821012345678\"}" - responses: - "200": - description: "200" - content: - application/json;charset=UTF-8: - schema: - $ref: '#/components/schemas/v1-member-1162606117' - examples: - 추천인 등록: - value: "{\"status\":\"SUCCESS\",\"message\":\"Recommend Success\"\ - ,\"data\":null}" /v1/suggestion/check: get: tags: - - 추천 관련 API + - 추천 관련 API summary: 오늘의 추천 받기 여부 확인 API 입니다. description: |2 오늘의 추천을 받았는지에 대한 정보를 확인할 수 있습니다. 추천을 받았다면, isReceivedSuggestion은 true이고 추천 팀 정보가 반환됩니다. operationId: 오늘의 추천 여부 확인 - security: - - AccessToken: [ ] responses: "200": description: "200" content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-suggestion-check652744771' + $ref: '#/components/schemas/v1-suggestion-check-1067270736' examples: 오늘의 추천 여부 확인: value: "{\"status\":\"SUCCESS\",\"message\":\"Check Suggestion Success\"\ @@ -798,63 +734,19 @@ paths: :1,\"isLiked\":false,\"memberNum\":2,\"region\":\"홍대\",\"profileImageURL\"\ :\"testImageUrl.jpg\",\"mainImageURL\":\"testImageUrl.jpg\",\"\ leader\":{\"nickname\":\"짱구\",\"mbti\":\"ENFP\",\"college\":\"\ - 서울대학교\"}}]}}" - /v1/team/{teamId}: - get: - tags: - - 팀 관련 API - summary: 팀 상세 정보 조회 API 입니다. - description: |2 - 팀 ID로 상세정보를 조회합니다. - operationId: 팀 상세 정보 조회 - security: - - AccessToken: [ ] - parameters: - - name: teamId - in: path - description: "" - required: true - schema: - type: string - responses: - "200": - description: "200" - content: - application/json;charset=UTF-8: - schema: - $ref: '#/components/schemas/v1-team-teamId1238987508' - examples: - 팀 상세 정보 조회: - value: "{\"status\":\"SUCCESS\",\"message\":\"Get Team Detail Success\"\ - ,\"data\":{\"teamId\":1,\"isDeleted\":false,\"isLiked\":true,\"\ - meetingRequestStatus\":\"PENDING\",\"memberHasTeam\":true,\"memberNum\"\ - :4,\"region\":\"HONGDAE\",\"drinkRate\":\"LOW\",\"drinkWithGame\"\ - :\"ANY\",\"additionalActivity\":\"CAFE\",\"introduction\":\"안녕\ - 하세요! 반가워요! 홍대팀 1입니다!!\",\"chatLink\":\"https://open.kakao.com/o/ajsds1ik\"\ - ,\"teamImageUrls\":[\"/v1/test1\",\"/v1/test2\",\"/v1/test3\"\ - ],\"teamMembers\":[{\"college\":\"고려대\",\"collegeType\":\"자연공학\ - \",\"admissionYear\":\"18\",\"mbti\":\"ENFJ\"},{\"college\":\"\ - 고려대\",\"collegeType\":\"자연공학\",\"admissionYear\":\"18\",\"mbti\"\ - :\"ENFP\"},{\"college\":\"인하대\",\"collegeType\":\"자연공학\",\"admissionYear\"\ - :\"22\",\"mbti\":\"ESFJ\"}],\"leader\":{\"leaderId\":1,\"nickname\"\ - :\"카이\",\"mbti\":\"INFJ\",\"collegeName\":\"안양대\",\"collegeType\"\ - :\"SOCIAL\",\"admissionYear\":\"17\",\"leaderLowProfileImageUrl\"\ - :\"/v1/kai\",\"imageAuth\":false}}}" + 서울대학교\",\"admissionYear\":\"19\",\"emailAuthenticated\":true}}]}}" /v1/team/image: put: tags: - - 팀 관련 API + - 팀 관련 API summary: 팀 이미지를 업데이트합니다. + description: | + 팀 이미지를 업데이트합니다. + 기존 이미지를 모두 삭제한 뒤, 새로운 이미지를 저장합니다. - description: |2 - 팀 이미지를 업데이트합니다. - 기존 이미지를 모두 삭제한 뒤, 새로운 이미지를 저장합니다. - - - multipart/form-data 데이터로 보내주어야함 (data는 json!) - - "images": File[], // 최소 1장, 최대 10장 + multipart/form-data 데이터로 보내주어야함 (data는 json!) + "images": File[], // 최소 1장, 최대 10장 operationId: 팀 이미지 업데이트 - security: - - AccessToken: [ ] responses: "200": description: "200" @@ -871,18 +763,16 @@ paths: ]}" post: tags: - - 팀 관련 API + - 팀 관련 API summary: 팀 이미지를 업로드합니다. - description: |2 - 팀 이미지를 업로드 합니다. - 새로 업로드하는 이미지는 기존 이미지 뒤에 위치합니다. - 한 팀당 최대 10개의 이미지를 업로드 할 수 있습니다. - - - multipart/form-data 데이터로 보내주어야함 (data는 json!) - - "images": File[], // 기존 이미지 + 업로드 이미지 개수가 10개를 넘지 않아야 함 + description: | + 팀 이미지를 업로드 합니다. + 새로 업로드하는 이미지는 기존 이미지 뒤에 위치합니다. + 한 팀당 최대 10개의 이미지를 업로드 할 수 있습니다. + + multipart/form-data 데이터로 보내주어야함 (data는 json!) + "images": File[], // 기존 이미지 + 업로드 이미지 개수가 10개를 넘지 않아야 함 operationId: 팀 이미지 업로드 - security: - - AccessToken: [ ] responses: "200": description: "200" @@ -899,14 +789,12 @@ paths: ]}" delete: tags: - - 팀 관련 API + - 팀 관련 API summary: 팀 이미지를 삭제합니다. - description: |2 - 팀 이미지를 삭제합니다. - 삭제할 url을 전달받아, 해당 이미지를 팀에서 삭제합니다. + description: | + 팀 이미지를 삭제합니다. + 삭제할 url을 전달받아, 해당 이미지를 팀에서 삭제합니다. operationId: 팀 이미지 삭제 - security: - - AccessToken: [ ] requestBody: content: application/json;charset=UTF-8: @@ -928,16 +816,53 @@ paths: 팀 이미지 삭제: value: "{\"status\":\"SUCCESS\",\"message\":\"Delete Team Image\ \ Success\",\"data\":null}" + /v1/team/{teamId}: + get: + tags: + - 팀 관련 API + summary: 팀 상세 정보 조회 API 입니다. + description: |2 + 팀 ID로 상세정보를 조회합니다. + operationId: 팀 상세 정보 조회 + parameters: + - name: teamId + in: path + description: "" + required: true + schema: + type: string + responses: + "200": + description: "200" + content: + application/json;charset=UTF-8: + schema: + $ref: '#/components/schemas/v1-team-teamId700704606' + examples: + 팀 상세 정보 조회: + value: "{\"status\":\"SUCCESS\",\"message\":\"Get Team Detail Success\"\ + ,\"data\":{\"teamId\":1,\"isDeleted\":false,\"isLiked\":true,\"\ + meetingRequestStatus\":\"PENDING\",\"memberHasTeam\":true,\"memberNum\"\ + :4,\"region\":\"HONGDAE\",\"drinkRate\":\"LOW\",\"drinkWithGame\"\ + :\"ANY\",\"additionalActivity\":\"CAFE\",\"introduction\":\"안녕\ + 하세요! 반가워요! 홍대팀 1입니다!!\",\"chatLink\":\"https://open.kakao.com/o/ajsds1ik\"\ + ,\"teamImageUrls\":[\"/v1/test1\",\"/v1/test2\",\"/v1/test3\"\ + ],\"teamMembers\":[{\"college\":\"고려대\",\"collegeType\":\"자연공학\ + \",\"admissionYear\":\"18\",\"mbti\":\"ENFJ\"},{\"college\":\"\ + 고려대\",\"collegeType\":\"자연공학\",\"admissionYear\":\"18\",\"mbti\"\ + :\"ENFP\"},{\"college\":\"인하대\",\"collegeType\":\"자연공학\",\"admissionYear\"\ + :\"22\",\"mbti\":\"ESFJ\"}],\"leader\":{\"leaderId\":1,\"nickname\"\ + :\"카이\",\"mbti\":\"INFJ\",\"collegeName\":\"안양대\",\"collegeType\"\ + :\"SOCIAL\",\"admissionYear\":\"17\",\"leaderLowProfileImageUrl\"\ + :\"/v1/kai\",\"imageAuth\":false,\"emailAuthenticated\":true}}}" /v1/auth/mail/request: post: tags: - - 인증 관련 API + - 인증 관련 API summary: 이메일 인증번호를 발급하는 API 입니다. description: |2 mail 값으로 넘어온 이메일에 인증 번호를 발송합니다. operationId: 이메일 인증번호 발급 - security: - - AccessToken: [ ] requestBody: content: application/json: @@ -961,13 +886,11 @@ paths: /v1/auth/mail/validate: post: tags: - - 인증 관련 API + - 인증 관련 API summary: 이메일 인증번호가 일치하는지 검증합니다 description: |2 이메일로 전송했던 인증 번호가 일치하는지 검증합니다. operationId: 이메일 인증번호 검증 - security: - - AccessToken: [ ] requestBody: content: application/json: @@ -975,7 +898,7 @@ paths: $ref: '#/components/schemas/v1-auth-mail-validate521266742' examples: 이메일 인증번호 검증: - value: "{\"mail\":\"ghkdalsgus0809@swu.ac.kr\",\"authCode\":\"725768\"\ + value: "{\"mail\":\"ghkdalsgus0809@swu.ac.kr\",\"authCode\":\"465910\"\ }" responses: "200": @@ -991,7 +914,7 @@ paths: /v1/auth/phone/issue: post: tags: - - 인증 관련 API + - 인증 관련 API summary: 휴대폰 인증번호를 발급하는 API 입니다. description: |2 target 값으로 넘어온 휴대폰 번호에 SMS 인증 번호를 발송합니다. @@ -1018,7 +941,7 @@ paths: /v1/auth/phone/validate: post: tags: - - 인증 관련 API + - 인증 관련 API summary: 휴대폰 인증번호가 일치하는지 검증하는 API 입니다. description: " SMS 인증 번호를 확인하는 API 입니다 \n\n 인증 번호가 일치하면 AccessToken 과\ \ RefreshToken을 반환합니다 \n\n 인증 번호가 일치하지만 회원가입 되어있지 않은 사용자라면 Token을 반환하지\ @@ -1031,7 +954,7 @@ paths: $ref: '#/components/schemas/v1-auth-phone-validate1564587931' examples: 휴대폰 인증번호 검증: - value: "{\"phone\":\"+821088990011\",\"credential\":\"155201\"}" + value: "{\"phone\":\"+821088990011\",\"credential\":\"552196\"}" responses: "200": description: "200" @@ -1047,22 +970,20 @@ paths: /v1/meeting/accept/{meetingRequestId}: post: tags: - - 미팅 관련 API + - 미팅 관련 API summary: 미팅 신청을 수락합니다. description: |2 상대 이성 팀으로부터 받은 미팅 신청을 수락합니다. 지정된 개수 만큼의 크레딧이 소모됩니다. (5) data 에는 미팅 ID가 반환됩니다. operationId: 미팅 신청 수락 - security: - - AccessToken: [ ] parameters: - - name: meetingRequestId - in: path - description: "" - required: true - schema: - type: string + - name: meetingRequestId + in: path + description: "" + required: true + schema: + type: string responses: "200": description: "200" @@ -1077,38 +998,32 @@ paths: /v1/meeting/reject/{meetingRequestId}: post: tags: - - 미팅 관련 API + - 미팅 관련 API summary: 미팅 신청을 거절합니다. description: |2 상대 이성 팀으로부터 받은 미팅 신청을 거절합니다. operationId: 미팅 신청 거절 - security: - - AccessToken: [ ] parameters: - - name: meetingRequestId - in: path - description: "" - required: true - schema: - type: string + - name: meetingRequestId + in: path + description: "" + required: true + schema: + type: string responses: "200": description: "200" content: application/json;charset=UTF-8: schema: - $ref: '#/components/schemas/v1-meeting-reject-meetingRequestId486549215' + $ref: '#/components/schemas/v1-team-image486549215' examples: 미팅 신청 거절: value: "{\"status\":\"SUCCESS\",\"message\":\"Meeting request successfully\ \ Rejected\",\"data\":\"REJECT\"}" components: - securitySchemes: - AccessToken: - type: apiKey - name: AccessToken - in: header schemas: + v1-auth-mail-validate2112268002: v1-member-block-61521594: type: object properties: @@ -1140,92 +1055,53 @@ components: type: string description: 응답 상태 v1-team-1407123040: + type: object + properties: + data: + type: boolean + description: 인증번호 일치 여부 + message: + type: string + description: 응답 메시지 + status: + type: string + description: 응답 상태 + v1-member-995118165: type: object properties: data: type: object properties: - team: - type: object - properties: - leader: - type: object - properties: - college: - type: string - description: 팀장 대학교 정보 - nickname: - type: string - description: 팀장 닉네임 - mbti: - type: string - description: 팀장 MBTI - images: - type: array - description: 팀 사진 정보 - items: - type: object - properties: - url: - type: string - description: 팀 사진 URL - drinkWithGame: - type: string - description: 술게임 여부 - members: - type: array - description: 팀원 정보 - items: - type: object - properties: - college: - type: string - description: 팀원 대학교 - collegeType: - type: string - description: 팀원 학과 타입 - admissionYear: - type: string - description: 팀원 학번 - mbti: - type: string - description: 팀원 MBTI - drinkRate: - type: string - description: 음주 수치 - additionalActivity: - type: string - description: 추가 활동 - chatLink: - type: string - description: 카카오톡 오픈 채팅방 링크 - region: - type: string - description: 선호 지역 - memberNum: - type: number - description: 팀 인원수 - profileImageURL: + college: + type: string + description: 대학교명 + gender: + type: string + description: 성별 + emailAuthenticated: + type: boolean + description: 대학 인증 여부 + collegeType: + type: string + description: 학과 정보 + admissionYear: + type: string + description: 학번 + nickname: + type: string + description: 닉네임 + mbti: + type: string + description: 본인 MBTI + profileImage: + type: object + properties: + basicUrl: type: string - description: 팀장 프로필 사진 - introduction: + description: 회원 개인 프로필 사진 원본 + lowUrl: type: string - description: 팀 소개 - hasTeam: - type: boolean - description: 팀 소속 여부 - message: - type: string - description: 응답 메시지 - status: - type: string - description: 응답 상태 - v1-auth-mail-validate2112268002: - type: object - properties: - data: - type: boolean - description: 인증번호 일치 여부 + description: 회원 개인 프로필 사진 저해상도 message: type: string description: 응답 메시지 @@ -1241,25 +1117,7 @@ components: mail: type: string description: 메일 주소 - v1-credit1610375099: - type: object - properties: - data: - type: number - description: 사용자의 크레딧 개수가 반환됩니다. - message: - type: string - description: 응답 메시지 - status: - type: string - description: 응답 상태 - v1-meeting-374462745: - type: object - properties: - partnerTeamId: - type: number - description: 상대 이성 팀 ID - v1-auth-phone-validate1303346532: + v1-auth-phone-validate-214253953: type: object properties: data: @@ -1276,6 +1134,9 @@ components: isRegistered: type: boolean description: 회원 가입 여부 + withdrawal: + type: boolean + description: 회원 탈퇴 여부 description: 회원 가입이 되어있지 않은 사용자의 경우 null로 채워서 반환됨 message: type: string @@ -1283,6 +1144,24 @@ components: status: type: string description: 응답 상태 + v1-credit1610375099: + type: object + properties: + data: + type: number + description: 사용자의 크레딧 개수가 반환됩니다. + message: + type: string + description: 응답 메시지 + status: + type: string + description: 응답 상태 + v1-meeting-374462745: + type: object + properties: + partnerTeamId: + type: number + description: 상대 이성 팀 ID v1-meeting-message-738424585: type: object properties: @@ -1310,129 +1189,63 @@ components: status: type: string description: 응답 상태 - v1-meeting-received9272768: + v1-suggestion-check-1067270736: type: object properties: data: - type: array - description: "보낸 미팅 신청 목록 [배열로 반환]" - items: - type: object - properties: - requestTime: - type: string - description: 미팅 신청 시간 - leader: + type: object + properties: + teams: + type: array + items: type: object properties: - collegeName: - type: string - description: 팀장 대학교 이름 - leaderLowProfileImageUrl: - type: string - description: 팀장 프로필 이미지 URL - collegeType: - type: string - description: 팀장 학과 - admissionYear: - type: string - description: 팀장 학번 - nickname: - type: string - description: 팀장 닉네임 - mbti: + leader: + type: object + properties: + college: + type: string + description: 추천 팀 팀장 대학교 + emailAuthenticated: + type: boolean + description: 추천 팀 팀장 대학 인증 여부 + admissionYear: + type: string + description: 추천 팀 팀장 학번 + nickname: + type: string + description: 추천 팀 팀장 닉네임 + mbti: + type: string + description: 추천 팀 팀장 MBTI + mainImageURL: type: string - description: 팀장 MBTI - imageAuth: + description: 추천 팀 대표 이미지 + teamId: + type: number + description: 추천 팀 아이디 + isLiked: type: boolean - description: 팀장 프로필 인증 여부 - leaderId: + description: 좋아요 여부 + region: + type: string + description: 추천 팀 선호 지역 + memberNum: type: number - description: 팀장 ID - deleted: - type: boolean - description: 미팅 신청 삭제 여부 - partnerTeamDeleted: - type: boolean - description: 상대 팀 삭제 여부 - pending: - type: boolean - description: 미팅 신청 대기 여부 - memberCount: - type: number - description: 팀 인원 수 - teamId: - type: number - description: 팀 ID - meetingRequestId: - type: number - description: 미팅 신청 ID - acceptStatus: - type: string - description: 응답 상태 - message: - type: string - description: 쪽지 내용 - region: - type: string - description: 지역 - teamProfileImageUrl: - type: array - description: 팀 프로필 이미지 URL - items: - oneOf: - - type: object - - type: boolean - - type: string - - type: number + description: 추천 팀 인원수 + profileImageURL: + type: string + description: 추천 팀 팀장 프로필 이미지 + isReceivedSuggestion: + type: boolean + description: 오늘의 추천 여부 message: type: string description: 응답 메시지 status: type: string description: 응답 상태 - v1-suggestion-1113310091: - type: object - properties: - data: - type: array - items: - type: object - properties: - leader: - type: object - properties: - college: - type: string - description: 추천 팀 팀장 대학교 - nickname: - type: string - description: 추천 팀 팀장 닉네임 - mbti: - type: string - description: 추천 팀 팀장 MBTI - mainImageURL: - type: string - description: 추천 팀 대표 이미지 - teamId: - type: number - description: 추천 팀 아이디 - region: - type: string - description: 추천 팀 선호 지역 - memberNum: - type: number - description: 추천 팀 인원수 - profileImageURL: - type: string - description: 추천 팀 팀장 프로필 이미지 - message: - type: string - description: 응답 메시지 - status: - type: string - description: 응답 상태 - v1-auth-persist667894108: + v1-auth-persist667894108: type: object properties: data: @@ -1478,18 +1291,7 @@ components: phone: type: string description: 휴대폰 번호 - v1-meeting-reject-meetingRequestId486549215: - type: object - v1-member-88903508: - type: object - properties: - nickname: - type: string - description: 닉네임 - mbti: - type: string - description: 본인 MBTI - v1-heart-sent-306379489: + v1-team-teamId700704606: type: object properties: data: @@ -1498,76 +1300,166 @@ components: leader: type: object properties: - college: + collegeName: + type: string + description: 팀장 대학교 + leaderLowProfileImageUrl: + type: string + description: 팀장 프로필 사진 + emailAuthenticated: + type: boolean + description: 팀장 프로필 사진 인증 여부 + collegeType: + type: string + description: 팀장 학과 + admissionYear: type: string - description: 상대 팀 팀장 대학교 + description: 팀장 학번 nickname: type: string - description: 상대 팀 팀장 닉네임 + description: 팀장 닉네임 mbti: type: string - description: 상대 팀 팀장 MBTI - mainImageURL: + description: 팀장 MBTI + imageAuth: + type: boolean + description: 팀장 프로필 사진 인증 여부 + leaderId: + type: number + description: 팀장 ID + isLiked: + type: boolean + description: 팀 좋아요 여부 + additionalActivity: type: string - description: 상대 팀 메인 이미지 URL - teamId: + description: 취미 및 관심사 + teamMembers: + type: array + items: + type: object + properties: + college: + type: string + description: 대학교 명 + collegeType: + type: string + description: 학과 + admissionYear: + type: string + description: 학번 + mbti: + type: string + description: MBTI + memberNum: type: number - description: 상대 팀 아이디 - sentTime: + description: 팀 인원수 + drinkWithGame: type: string - description: 좋아요 보낸 시간 - memberNum: + description: 술게임 여부 + isDeleted: + type: boolean + description: 팀 삭제 여부 + drinkRate: + type: string + description: 음주 수치 + teamId: type: number - description: 상대 팀 인원 수 + description: 팀 ID + chatLink: + type: string + description: 카카오톡 오픈 채팅방 링크 + memberHasTeam: + type: boolean + description: 요청을 한 유저가 팀에 속해있는지 여부를 반환합니다. + meetingRequestStatus: + type: string + description: |2 + 미팅 요청 상태 + ACCEPT (미팅 성사됨), + PENDING (요청 대기중), + REJECT (요청 거절당함), + EXPIRED (요청 만료됨), + null (요청 내역 없음) 중 하나 region: type: string - description: 상대 팀 선호 지역 - profileImageURL: + description: 선호 지역 + introduction: type: string - description: 상대 팀 팀장 프로필 이미지 URL + description: 팀 소개 + teamImageUrls: + type: array + description: 팀 사진 URL + items: + oneOf: + - type: object + - type: boolean + - type: string + - type: number message: type: string description: 응답 메시지 status: type: string description: 응답 상태 - v1-auth-phone-validate-214253953: + v1-suggestion1159884028: type: object properties: data: - type: object - properties: - role: - type: array - items: + type: array + items: + type: object + properties: + leader: type: object properties: - authority: + college: type: string - description: 회원 권한 - isRegistered: - type: boolean - description: 회원 가입 여부 - withdrawal: - type: boolean - description: 회원 탈퇴 여부 - description: 회원 가입이 되어있지 않은 사용자의 경우 null로 채워서 반환됨 + description: 추천 팀 팀장 대학교 + emailAuthenticated: + type: boolean + description: 추천 팀 팀장 대학 인증 여부 + admissionYear: + type: string + description: 추천 팀 팀장 학번 + nickname: + type: string + description: 추천 팀 팀장 닉네임 + mbti: + type: string + description: 추천 팀 팀장 MBTI + mainImageURL: + type: string + description: 추천 팀 대표 이미지 + teamId: + type: number + description: 추천 팀 아이디 + region: + type: string + description: 추천 팀 선호 지역 + memberNum: + type: number + description: 추천 팀 인원수 + profileImageURL: + type: string + description: 추천 팀 팀장 프로필 이미지 message: type: string description: 응답 메시지 status: type: string description: 응답 상태 - v1-auth-mail-validate521266742: + v1-team-image486549215: + type: object + v1-member-88903508: type: object properties: - authCode: + nickname: type: string - description: 인증 번호 - mail: + description: 닉네임 + mbti: type: string - description: 메일 주소 - v1-meeting-accepted487111904: + description: 본인 MBTI + v1-meeting-accepted499303008: type: object properties: data: @@ -1584,6 +1476,9 @@ components: leaderLowProfileImageUrl: type: string description: 팀장 저화질 프로필 이미지 URL + emailAuthenticated: + type: boolean + description: 팀장 대학 인증 여부 collegeType: type: string description: 팀장 학과 @@ -1628,17 +1523,32 @@ components: description: 팀 프로필 이미지 URL items: oneOf: - - type: object - - type: boolean - - type: string - - type: number + - type: object + - type: boolean + - type: string + - type: number message: type: string description: 응답 메시지 status: type: string description: 응답 상태 - v1-heart-received1518558698: + v1-auth-mail-validate521266742: + type: object + properties: + authCode: + type: string + description: 인증 번호 + mail: + type: string + description: 메일 주소 + v1-auth-phone-issue-817510993: + type: object + properties: + target: + type: string + description: 휴대폰 번호 + v1-heart-received2038359125: type: object properties: data: @@ -1652,6 +1562,12 @@ components: college: type: string description: 상대 팀 팀장 대학교 + emailAuthenticated: + type: boolean + description: 상대 팀 팀장 대학 인증 여부 + admissionYear: + type: string + description: 상대 팀 팀장 학번 nickname: type: string description: 상대 팀 팀장 닉네임 @@ -1682,220 +1598,190 @@ components: status: type: string description: 응답 상태 - v1-auth-phone-issue-817510993: + v1-recommend-330443167: type: object properties: - target: + phoneNumber: type: string - description: 휴대폰 번호 - v1-suggestion-check652744771: + description: 위밋을 추천해준 추천인 전화번호 (+82101234xxxx) + v1-member-1162606117: type: object properties: - data: - type: object - properties: - teams: - type: array - items: - type: object - properties: - leader: - type: object - properties: - college: - type: string - description: 추천 팀 팀장 대학교 - nickname: - type: string - description: 추천 팀 팀장 닉네임 - mbti: - type: string - description: 추천 팀 팀장 MBTI - mainImageURL: - type: string - description: 추천 팀 대표 이미지 - teamId: - type: number - description: 추천 팀 아이디 - isLiked: - type: boolean - description: 좋아요 여부 - region: - type: string - description: 추천 팀 선호 지역 - memberNum: - type: number - description: 추천 팀 인원수 - profileImageURL: - type: string - description: 추천 팀 팀장 프로필 이미지 - isReceivedSuggestion: - type: boolean - description: 오늘의 추천 여부 message: type: string description: 응답 메시지 status: type: string description: 응답 상태 - v1-member1256817410: + v1-team1017300237: type: object properties: - phoneNumber: - type: string - description: 핸드폰 번호 - collegeInfo: + data: type: object properties: - collegeType: - type: string - description: 학과 (ENGINEERING) - admissionYear: - type: string - description: 학번 (17) - collegeCode: - type: string - description: 대학교 코드 (CE-001) - gender: - type: string - description: 성별 - nickname: - type: string - description: 닉네임 - mbti: - type: string - description: 본인 MBTI - allowMarketing: - type: boolean - description: 마케팅 수신 동의 여부 - v1-team-image486549215: - type: object - v1-team-image-453865333: - type: object - properties: - data: - type: array - description: 업로드된 이미지 URL 목록을 반환합니다. - items: - oneOf: - - type: object - - type: boolean - - type: string - - type: number + team: + type: object + properties: + leader: + type: object + properties: + college: + type: string + description: 팀장 대학교 정보 + emailAuthenticated: + type: boolean + description: 팀장 대학 인증 여부 + admissionYear: + type: string + description: 팀장 학번 + nickname: + type: string + description: 팀장 닉네임 + mbti: + type: string + description: 팀장 MBTI + images: + type: array + description: 팀 사진 정보 + items: + type: object + properties: + url: + type: string + description: 팀 사진 URL + drinkWithGame: + type: string + description: 술게임 여부 + members: + type: array + description: 팀원 정보 + items: + type: object + properties: + college: + type: string + description: 팀원 대학교 + collegeType: + type: string + description: 팀원 학과 타입 + admissionYear: + type: string + description: 팀원 학번 + mbti: + type: string + description: 팀원 MBTI + drinkRate: + type: string + description: 음주 수치 + additionalActivity: + type: string + description: 추가 활동 + chatLink: + type: string + description: 카카오톡 오픈 채팅방 링크 + region: + type: string + description: 선호 지역 + memberNum: + type: number + description: 팀 인원수 + profileImageURL: + type: string + description: 팀장 프로필 사진 + introduction: + type: string + description: 팀 소개 + hasTeam: + type: boolean + description: 팀 소속 여부 message: type: string description: 응답 메시지 status: type: string description: 응답 상태 - v1-team-teamId1238987508: + v1-member1362466055: type: object properties: - data: + phoneNumber: + type: string + description: 핸드폰 번호 + collegeInfo: type: object properties: - leader: - type: object - properties: - collegeName: - type: string - description: 팀장 대학교 - leaderLowProfileImageUrl: - type: string - description: 팀장 프로필 사진 - collegeType: - type: string - description: 팀장 학과 - admissionYear: - type: string - description: 팀장 학번 - nickname: - type: string - description: 팀장 닉네임 - mbti: - type: string - description: 팀장 MBTI - imageAuth: - type: boolean - description: 팀장 프로필 사진 인증 여부 - leaderId: - type: number - description: 팀장 ID - isLiked: - type: boolean - description: 팀 좋아요 여부 - additionalActivity: + collegeType: type: string - description: 취미 및 관심사 - teamMembers: - type: array - items: + description: 학과 (ENGINEERING) + admissionYear: + type: string + description: 학번 (17) + collegeCode: + type: string + description: 대학교 코드 (CE-001) + gender: + type: string + description: 성별 + allowMarketing: + type: boolean + description: 마케팅 수신 동의 여부 + nickname: + type: string + description: 닉네임 + mbti: + type: string + description: 본인 MBTI + v1-heart-sent1644510391: + type: object + properties: + data: + type: array + items: + type: object + properties: + leader: type: object properties: college: type: string - description: 대학교 명 - collegeType: - type: string - description: 학과 + description: 상대 팀 팀장 대학교 + emailAuthenticated: + type: boolean + description: 상대 팀 팀장 대학 인증 여부 admissionYear: type: string - description: 학번 + description: 상대 팀 팀장 학번 + nickname: + type: string + description: 상대 팀 팀장 닉네임 mbti: type: string - description: MBTI - memberNum: - type: number - description: 팀 인원수 - drinkWithGame: - type: string - description: 술게임 여부 - isDeleted: - type: boolean - description: 팀 삭제 여부 - drinkRate: - type: string - description: 음주 수치 - teamId: - type: number - description: 팀 ID - chatLink: - type: string - description: 카카오톡 오픈 채팅방 링크 - memberHasTeam: - type: boolean - description: 요청을 한 유저가 팀에 속해있는지 여부를 반환합니다. - meetingRequestStatus: - type: string - description: |2 - 미팅 요청 상태 - ACCEPT (미팅 성사됨), - PENDING (요청 대기중), - REJECT (요청 거절당함), - EXPIRED (요청 만료됨), - null (요청 내역 없음) 중 하나 - region: - type: string - description: 선호 지역 - introduction: - type: string - description: 팀 소개 - teamImageUrls: - type: array - description: 팀 사진 URL - items: - oneOf: - - type: object - - type: boolean - - type: string - - type: number + description: 상대 팀 팀장 MBTI + mainImageURL: + type: string + description: 상대 팀 메인 이미지 URL + teamId: + type: number + description: 상대 팀 아이디 + sentTime: + type: string + description: 좋아요 보낸 시간 + memberNum: + type: number + description: 상대 팀 인원 수 + region: + type: string + description: 상대 팀 선호 지역 + profileImageURL: + type: string + description: 상대 팀 팀장 프로필 이미지 URL message: type: string description: 응답 메시지 status: type: string description: 응답 상태 - v1-member-1162606117: + member-profile-image-upload: + title: member-profile-image-upload type: object properties: message: @@ -1904,55 +1790,102 @@ components: status: type: string description: 응답 상태 - v1-recommend-330443167: - type: object - properties: - phoneNumber: - type: string - description: 위밋을 추천해준 추천인 전화번호 (+82101234xxxx) - member-profile-image-upload: - title: member-profile-image-upload + v1-meeting-received792022336: type: object properties: + data: + type: array + description: "보낸 미팅 신청 목록 [배열로 반환]" + items: + type: object + properties: + requestTime: + type: string + description: 미팅 신청 시간 + leader: + type: object + properties: + collegeName: + type: string + description: 팀장 대학교 이름 + leaderLowProfileImageUrl: + type: string + description: 팀장 프로필 이미지 URL + emailAuthenticated: + type: boolean + description: 팀장 대학 인증 여부 + collegeType: + type: string + description: 팀장 학과 + admissionYear: + type: string + description: 팀장 학번 + nickname: + type: string + description: 팀장 닉네임 + mbti: + type: string + description: 팀장 MBTI + imageAuth: + type: boolean + description: 팀장 프로필 인증 여부 + leaderId: + type: number + description: 팀장 ID + deleted: + type: boolean + description: 미팅 신청 삭제 여부 + partnerTeamDeleted: + type: boolean + description: 상대 팀 삭제 여부 + pending: + type: boolean + description: 미팅 신청 대기 여부 + memberCount: + type: number + description: 팀 인원 수 + teamId: + type: number + description: 팀 ID + meetingRequestId: + type: number + description: 미팅 신청 ID + acceptStatus: + type: string + description: 응답 상태 + message: + type: string + description: 쪽지 내용 + region: + type: string + description: 지역 + teamProfileImageUrl: + type: array + description: 팀 프로필 이미지 URL + items: + oneOf: + - type: object + - type: boolean + - type: string + - type: number message: type: string description: 응답 메시지 status: type: string description: 응답 상태 - v1-member1730613022: + v1-team-image-453865333: type: object properties: data: - type: object - properties: - college: - type: string - description: 대학교명 - gender: - type: string - description: 성별 - collegeType: - type: string - description: 학과 정보 - admissionYear: - type: string - description: 학번 - nickname: - type: string - description: 닉네임 - mbti: - type: string - description: 본인 MBTI - profileImage: - type: object - properties: - basicUrl: - type: string - description: 회원 개인 프로필 사진 원본 - lowUrl: - type: string - description: 회원 개인 프로필 사진 저해상도 + type: array + description: 업로드된 이미지 URL 목록을 반환합니다. + items: + oneOf: + - type: object + - type: boolean + - type: string + - type: number message: type: string description: 응답 메시지 diff --git a/src/test/java/com/e2i/wemeet/controller/heart/HeartControllerTest.java b/src/test/java/com/e2i/wemeet/controller/heart/HeartControllerTest.java index 0327b447..20bfe47a 100644 --- a/src/test/java/com/e2i/wemeet/controller/heart/HeartControllerTest.java +++ b/src/test/java/com/e2i/wemeet/controller/heart/HeartControllerTest.java @@ -109,6 +109,7 @@ void getSentHeart() throws Exception { .college("서울대") .mbti("ENFP") .admissionYear("19") + .emailAuthenticated(true) .build()) .build(); @@ -173,7 +174,10 @@ private void getSentHeartWriteRestDocs(ResultActions perform) throws Exception { fieldWithPath("data[].leader.mbti").type(JsonFieldType.STRING) .description("상대 팀 팀장 MBTI"), fieldWithPath("data[].leader.admissionYear").type(JsonFieldType.STRING) - .description("상대 팀 팀장 학번") + .description("상대 팀 팀장 학번"), + fieldWithPath("data[].leader.emailAuthenticated").type( + JsonFieldType.BOOLEAN) + .description("상대 팀 팀장 대학 인증 여부") ))); } @@ -197,6 +201,7 @@ void getReceivedHeart() throws Exception { .college("서울대") .mbti("ENFP") .admissionYear("19") + .emailAuthenticated(true) .build()) .build(); @@ -261,7 +266,10 @@ private void getReceivedHeartWriteRestDocs(ResultActions perform) throws Excepti fieldWithPath("data[].leader.mbti").type(JsonFieldType.STRING) .description("상대 팀 팀장 MBTI"), fieldWithPath("data[].leader.admissionYear").type(JsonFieldType.STRING) - .description("상대 팀 팀장 학번") + .description("상대 팀 팀장 학번"), + fieldWithPath("data[].leader.emailAuthenticated").type( + JsonFieldType.BOOLEAN) + .description("상대 팀 팀장 대학 인증 여부") ))); } } diff --git a/src/test/java/com/e2i/wemeet/controller/meeting/MeetingControllerTest.java b/src/test/java/com/e2i/wemeet/controller/meeting/MeetingControllerTest.java index 2163bf20..3af33b04 100644 --- a/src/test/java/com/e2i/wemeet/controller/meeting/MeetingControllerTest.java +++ b/src/test/java/com/e2i/wemeet/controller/meeting/MeetingControllerTest.java @@ -206,13 +206,15 @@ void acceptMeetingRequest() throws Exception { // given final Long memberId = 1L; final Long meetingRequestId = 1L; - given(meetingHandleService.acceptRequest(anyLong(), anyLong(), any(LocalDateTime.class))) + given( + meetingHandleService.acceptRequest(anyLong(), anyLong(), any(LocalDateTime.class))) .willReturn(1L); // when - ResultActions perform = mockMvc.perform(post("/v1/meeting/accept/{meetingRequestId}", meetingRequestId) - .with(csrf()) - .contentType(MediaType.APPLICATION_JSON)); + ResultActions perform = mockMvc.perform( + post("/v1/meeting/accept/{meetingRequestId}", meetingRequestId) + .with(csrf()) + .contentType(MediaType.APPLICATION_JSON)); // then perform @@ -222,7 +224,8 @@ void acceptMeetingRequest() throws Exception { jsonPath("$.message").value("Meeting was successfully matched"), jsonPath("$.data").value(1L) ); - verify(meetingHandleService).acceptRequest(anyLong(), anyLong(), any(LocalDateTime.class)); + verify(meetingHandleService).acceptRequest(anyLong(), anyLong(), + any(LocalDateTime.class)); acceptMeetingRequestWriteRestDocs(perform); } @@ -238,9 +241,10 @@ void rejectMeetingRequest() throws Exception { .willReturn(AcceptStatus.REJECT); // when - ResultActions perform = mockMvc.perform(post("/v1/meeting/reject/{meetingRequestId}", meetingRequestId) - .with(csrf()) - .contentType(MediaType.APPLICATION_JSON)); + ResultActions perform = mockMvc.perform( + post("/v1/meeting/reject/{meetingRequestId}", meetingRequestId) + .with(csrf()) + .contentType(MediaType.APPLICATION_JSON)); // then perform @@ -273,7 +277,8 @@ private void acceptMeetingRequestWriteRestDocs(ResultActions perform) throws Exc parameterWithName("meetingRequestId").description("미팅 신청 ID") ) .responseFields( - fieldWithPath("status").type(JsonFieldType.STRING).description("응답 상태"), + fieldWithPath("status").type(JsonFieldType.STRING) + .description("응답 상태"), fieldWithPath("message").type(JsonFieldType.STRING) .description("응답 메시지"), fieldWithPath("data").type(JsonFieldType.NUMBER) @@ -298,7 +303,8 @@ private void rejectMeetingRequestWriteRestDocs(ResultActions perform) throws Exc parameterWithName("meetingRequestId").description("미팅 신청 ID") ) .responseFields( - fieldWithPath("status").type(JsonFieldType.STRING).description("응답 상태"), + fieldWithPath("status").type(JsonFieldType.STRING) + .description("응답 상태"), fieldWithPath("message").type(JsonFieldType.STRING) .description("응답 메시지"), fieldWithPath("data").type(JsonFieldType.STRING) @@ -322,13 +328,13 @@ void getAcceptedMeetingList() throws Exception { Region.HONGDAE, 1L, "채원", Mbti.INFP, "https://profile.com", "고려대학교", - CollegeType.ENGINEERING, "2022", true); + CollegeType.ENGINEERING, "2022", true, false); final MeetingInformationDto meetingInformationDto2 = new MeetingInformationDto(2L, LocalDateTime.now(), false, null, 2L, 2, Region.HONGDAE, 2L, "째림", Mbti.INFJ, "https://profile.com", "서울대학교", - CollegeType.ARTS, "2019", true); + CollegeType.ARTS, "2019", true, false); List responseDtos = List.of( AcceptedMeetingResponseDto.of(meetingInformationDto1, @@ -384,14 +390,14 @@ void getSentMeetingRequestList() throws Exception { Region.HONGDAE, null, 1L, "채원", Mbti.INFP, "https://profile.com", "고려대학교", - CollegeType.ENGINEERING, "2022", true); + CollegeType.ENGINEERING, "2022", true, true); final MeetingRequestInformationDto requestInformationDto2 = new MeetingRequestInformationDto( 2L, LocalDateTime.now(), "재미있게 놀아요!", PENDING, 2L, 4, Region.HONGDAE, null, 2L, "쨰림", Mbti.INFJ, "https://profile.com", "서울대학교", - CollegeType.ARTS, "2019", true); + CollegeType.ARTS, "2019", true, true); List sentMeetingResponseDtos = List.of( SentMeetingResponseDto.of(requestInformationDto1, List.of("https://profile1.com")), @@ -424,7 +430,8 @@ void getSentMeetingRequestList() throws Exception { jsonPath("$.data[0].leader.nickname").value("채원"), jsonPath("$.data[0].leader.mbti").value(Mbti.INFP.name()), jsonPath("$.data[0].leader.collegeName").value("고려대학교"), - jsonPath("$.data[0].leader.leaderLowProfileImageUrl").value("https://profile.com"), + jsonPath("$.data[0].leader.leaderLowProfileImageUrl").value( + "https://profile.com"), jsonPath("$.data[0].leader.collegeType").value(CollegeType.ENGINEERING.name()), jsonPath("$.data[0].leader.admissionYear").value("2022"), jsonPath("$.data[0].leader.imageAuth").value(true) @@ -446,7 +453,7 @@ void getReceiveMeetingRequestList() throws Exception { Region.HONGDAE, null, 1L, "채원", Mbti.INFP, "https://profile.com", "고려대학교", - CollegeType.ENGINEERING, "2022", true); + CollegeType.ENGINEERING, "2022", true, true); final MeetingRequestInformationDto requestInformationDto2 = new MeetingRequestInformationDto( 2L, LocalDateTime.now(), "재미있게 놀아요!", PENDING, @@ -454,7 +461,7 @@ void getReceiveMeetingRequestList() throws Exception { Region.HONGDAE, null, 2L, "쨰림", Mbti.INFJ, "https://profile.com", "서울대학교", - CollegeType.ARTS, "2019", true); + CollegeType.ARTS, "2019", true, true); List receivedMeetingResponseDtos = List.of( ReceivedMeetingResponseDto.of(requestInformationDto1, @@ -544,6 +551,9 @@ private void getAcceptMeetingListWriteRestDocs(ResultActions perform) throws Exc .description("팀장 프로필 인증 여부"), fieldWithPath("data[].leader.leaderLowProfileImageUrl").type( JsonFieldType.STRING).description("팀장 저화질 프로필 이미지 URL"), + fieldWithPath("data[].leader.emailAuthenticated").type( + JsonFieldType.BOOLEAN) + .description("팀장 대학 인증 여부"), fieldWithPath("data[].expired").type(JsonFieldType.BOOLEAN) .description("미팅 만료 여부") ) @@ -603,6 +613,9 @@ private void getSentMeetingListWriteRestDocs(ResultActions perform) throws Excep .description("팀장 학번"), fieldWithPath("data[].leader.imageAuth").type(JsonFieldType.BOOLEAN) .description("팀장 프로필 인증 여부"), + fieldWithPath("data[].leader.emailAuthenticated").type( + JsonFieldType.BOOLEAN) + .description("팀장 대학 인증 여부"), fieldWithPath("data[].pending").type(JsonFieldType.BOOLEAN) .description("미팅 신청 대기 여부"), fieldWithPath("data[].deleted").type(JsonFieldType.BOOLEAN) @@ -664,6 +677,9 @@ private void getReceivedMeetingListWriteRestDocs(ResultActions perform) throws E .description("팀장 학번"), fieldWithPath("data[].leader.imageAuth").type(JsonFieldType.BOOLEAN) .description("팀장 프로필 인증 여부"), + fieldWithPath("data[].leader.emailAuthenticated").type( + JsonFieldType.BOOLEAN) + .description("팀장 대학 인증 여부"), fieldWithPath("data[].pending").type(JsonFieldType.BOOLEAN) .description("미팅 신청 대기 여부"), fieldWithPath("data[].deleted").type(JsonFieldType.BOOLEAN) diff --git a/src/test/java/com/e2i/wemeet/controller/member/MemberControllerTest.java b/src/test/java/com/e2i/wemeet/controller/member/MemberControllerTest.java index 1f096fec..062f8bcc 100644 --- a/src/test/java/com/e2i/wemeet/controller/member/MemberControllerTest.java +++ b/src/test/java/com/e2i/wemeet/controller/member/MemberControllerTest.java @@ -289,7 +289,7 @@ private void getMemberDetailWriteRestDocs(ResultActions perform) throws Exceptio .description("회원 개인 프로필 사진 원본"), fieldWithPath("data.profileImage.lowUrl").type(JsonFieldType.STRING) .description("회원 개인 프로필 사진 저해상도"), - fieldWithPath("data.authUnivStatus").type(JsonFieldType.BOOLEAN) + fieldWithPath("data.emailAuthenticated").type(JsonFieldType.BOOLEAN) .description("대학 인증 여부") ) )); diff --git a/src/test/java/com/e2i/wemeet/controller/suggestion/SuggestionControllerTest.java b/src/test/java/com/e2i/wemeet/controller/suggestion/SuggestionControllerTest.java index aea06ec0..240e64e4 100644 --- a/src/test/java/com/e2i/wemeet/controller/suggestion/SuggestionControllerTest.java +++ b/src/test/java/com/e2i/wemeet/controller/suggestion/SuggestionControllerTest.java @@ -43,6 +43,7 @@ void readSuggestion_Success() throws Exception { .mbti(Mbti.ENFP.name()) .nickname("짱구") .admissionYear("19") + .emailAuthenticated(true) .build()) .build(); @@ -87,6 +88,7 @@ void checkTodaySuggestionHistory_Success() throws Exception { .mbti(Mbti.ENFP.name()) .nickname("짱구") .admissionYear("19") + .emailAuthenticated(true) .build()) .build() ) @@ -143,6 +145,9 @@ private void readSuggestionRestDocs(ResultActions perform) throws Exception { fieldWithPath("data[].leader.college").type( JsonFieldType.STRING) .description("추천 팀 팀장 대학교"), + fieldWithPath("data[].leader.emailAuthenticated").type( + JsonFieldType.BOOLEAN) + .description("추천 팀 팀장 대학 인증 여부"), fieldWithPath("data[].leader.admissionYear").type( JsonFieldType.STRING) .description("추천 팀 팀장 학번") @@ -186,6 +191,9 @@ private void checkTodaySuggestionHistoryRestDocs(ResultActions perform) throws E .description("추천 팀 팀장 MBTI"), fieldWithPath("data.teams[].leader.college").type(JsonFieldType.STRING) .description("추천 팀 팀장 대학교"), + fieldWithPath("data.teams[].leader.emailAuthenticated").type( + JsonFieldType.BOOLEAN) + .description("추천 팀 팀장 대학 인증 여부"), fieldWithPath("data.teams[].leader.admissionYear").type( JsonFieldType.STRING) .description("추천 팀 팀장 학번") diff --git a/src/test/java/com/e2i/wemeet/controller/team/TeamControllerTest.java b/src/test/java/com/e2i/wemeet/controller/team/TeamControllerTest.java index ffc18da0..bcaa36ad 100644 --- a/src/test/java/com/e2i/wemeet/controller/team/TeamControllerTest.java +++ b/src/test/java/com/e2i/wemeet/controller/team/TeamControllerTest.java @@ -150,7 +150,7 @@ void deleteTeam_Success() throws Exception { deleteTeamWriteRestDocs(perform); } - @DisplayName("팀을 조회할 수 있다.") + @DisplayName("나의 팀을 조회할 수 있다.") @WithCustomMockUser(role = "MANAGER") @Test void readTeam_Success() throws Exception { @@ -460,7 +460,10 @@ private void readTeamWriteRestDocs(ResultActions perform) throws Exception { fieldWithPath("data.team.leader.college").type(JsonFieldType.STRING) .description("팀장 대학교 정보"), fieldWithPath("data.team.leader.admissionYear").type(JsonFieldType.STRING) - .description("팀장 학번") + .description("팀장 학번"), + fieldWithPath("data.team.leader.emailAuthenticated").type( + JsonFieldType.BOOLEAN) + .description("팀장 대학 인증 여부") ) )); } @@ -536,6 +539,8 @@ private void readByTeamIdWriteRestDocs(ResultActions perform) throws Exception { JsonFieldType.STRING) .description("팀장 프로필 사진"), fieldWithPath("data.leader.imageAuth").type(JsonFieldType.BOOLEAN) + .description("팀장 프로필 사진 인증 여부"), + fieldWithPath("data.leader.emailAuthenticated").type(JsonFieldType.BOOLEAN) .description("팀장 프로필 사진 인증 여부") ) )); diff --git a/src/test/java/com/e2i/wemeet/service/member/MemberServiceTest.java b/src/test/java/com/e2i/wemeet/service/member/MemberServiceTest.java index 44c068c0..846c2a5a 100644 --- a/src/test/java/com/e2i/wemeet/service/member/MemberServiceTest.java +++ b/src/test/java/com/e2i/wemeet/service/member/MemberServiceTest.java @@ -215,7 +215,7 @@ void readMemberInfo_Success() { kai.getMemberId()); assertThat(memberDetailResponseDto).isNotNull() .extracting("nickname", "college", "collegeType", "mbti", "admissionYear", - "authUnivStatus") + "emailAuthenticated") .contains(kai.getNickname(), "안양대", "인문사회", Mbti.INFJ, "17", true); } diff --git a/src/test/java/com/e2i/wemeet/service/team/TeamServiceTest.java b/src/test/java/com/e2i/wemeet/service/team/TeamServiceTest.java index 2edd0c99..149ef1dc 100644 --- a/src/test/java/com/e2i/wemeet/service/team/TeamServiceTest.java +++ b/src/test/java/com/e2i/wemeet/service/team/TeamServiceTest.java @@ -31,7 +31,6 @@ import com.e2i.wemeet.exception.badrequest.ProfileImageNotExistsException; import com.e2i.wemeet.exception.badrequest.TeamExistsException; import com.e2i.wemeet.exception.badrequest.TeamNotExistsException; -import com.e2i.wemeet.exception.unauthorized.UnAuthorizedUnivException; import com.e2i.wemeet.service.aws.s3.S3Service; import com.e2i.wemeet.support.fixture.MemberFixture; import com.e2i.wemeet.support.fixture.TeamFixture; @@ -125,26 +124,6 @@ void createTeam_ExistedTeam() { verify(memberRepository).findByMemberId(1L); } - @DisplayName("대학생 인증이 안된 사용자라면 팀을 생성할 수 없다.") - @Test - void createTeam_UncertifiedEmail() { - // given - Member teamLeader = MemberFixture.RIM.create_with_id(1L); - CreateTeamRequestDto requestDto = TeamFixture.WOMAN_TEAM.createTeamRequestDto_2_members(); - List teamImages = List.of( - new MockMultipartFile("test", "test".getBytes())); - - teamLeader.saveEmail(null); - - // when - when(memberRepository.findByMemberId(anyLong())).thenReturn(Optional.of(teamLeader)); - - // then - assertThatThrownBy(() -> teamService.createTeam(1L, requestDto, teamImages)) - .isExactlyInstanceOf(UnAuthorizedUnivException.class); - verify(memberRepository).findByMemberId(1L); - } - @DisplayName("사진 등록이 안된 사용자라면 팀을 생성할 수 없다.") @Test void createTeam_NotExistedProfileImage() {