Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Expand Up @@ -186,4 +186,15 @@ public ResponseEntity<BaseResponse<Void>> agreeTerms(
return ResponseEntity.status(HttpStatus.OK)
.body(BaseResponse.ok("약관 동의 저장에 성공했습니다."));
}

@Operation(summary = "온보딩, 약관동의 여부 조회")
@CustomExceptionDescription(GET_COMPLETION)
@GetMapping("completion")
public ResponseEntity<BaseResponse<MemberCompletionResponse>> getMemberCompletionStatus(
@AuthenticationPrincipal Long memberId
){
return ResponseEntity.status(HttpStatus.OK)
.body(BaseResponse.ok(memberService.getCompletion(memberId), "온보딩/약관동의 여부 조회에 성공하였습니다,"));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.sopt.kareer.domain.member.dto.response;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;

@Builder
public record MemberCompletionResponse(
@Schema(description = "온보딩 여부")
boolean onboardingRequired,

@Schema(description = "약관 동의 여부")
boolean agreeTerm
) {
public static MemberCompletionResponse of(boolean onboardingRequired, boolean agreeTerm){
return MemberCompletionResponse.builder()
.onboardingRequired(onboardingRequired)
.agreeTerm(agreeTerm)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,23 +20,15 @@ public record MemberStatusResponse(
LocalDate expectedGraduationDate,

@Schema(description = "졸업일")
LocalDate graduationDate,

@Schema(description = "온보딩 여부", example = "true")
boolean onboardingRequired,

@Schema(description = "약관 동의 여부", example = "true")
boolean agreedTerm
LocalDate graduationDate

) {
public static MemberStatusResponse from(Member member, MemberVisa visa, boolean onboardingRequired, boolean agreedTerm) {
public static MemberStatusResponse from(Member member, MemberVisa visa) {
return MemberStatusResponse.builder()
.visaType(visa.getVisaType())
.visaExpiredAt(visa.getVisaExpiredAt())
.graduationDate(member.getGraduationDate())
.expectedGraduationDate(member.getExpectedGraduationDate())
.onboardingRequired(onboardingRequired)
.agreedTerm(agreedTerm)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
package org.sopt.kareer.domain.member.service;

import lombok.RequiredArgsConstructor;
import org.sopt.kareer.domain.member.dto.response.*;
import org.sopt.kareer.domain.member.entity.enums.*;
import org.sopt.kareer.domain.member.service.dto.request.MypageCommand;
import org.sopt.kareer.domain.member.dto.request.MemberOnboardRequest;
import org.sopt.kareer.domain.member.dto.request.MemberOnboardV2Request;
import org.sopt.kareer.domain.member.dto.request.MemberTermsRequest;
import org.sopt.kareer.domain.member.dto.response.*;
import org.sopt.kareer.domain.member.entity.Member;
import org.sopt.kareer.domain.member.entity.MemberTerm;
import org.sopt.kareer.domain.member.entity.MemberVisa;
import org.sopt.kareer.domain.member.entity.enums.LocalizedOnboardCategoryType;
import org.sopt.kareer.domain.member.entity.enums.MemberStatus;
import org.sopt.kareer.domain.member.exception.MemberErrorCode;
import org.sopt.kareer.domain.member.exception.MemberException;
import org.sopt.kareer.domain.member.repository.MemberRepository;
import org.sopt.kareer.domain.member.repository.MemberTermRepository;
import org.sopt.kareer.domain.member.repository.MemberVisaRepository;
import org.sopt.kareer.domain.member.service.dto.request.MypageCommand;
import org.sopt.kareer.domain.member.util.PassportOcrParser;
import org.sopt.kareer.domain.member.util.VisaOcrParser;
import org.sopt.kareer.domain.term.entity.Term;
Expand Down Expand Up @@ -177,10 +177,7 @@ public MemberStatusResponse getMemberStatus(Long memberId) {
MemberVisa memberVisa = memberVisaRepository.findActiveByMemberId(memberId)
.orElseThrow(() -> new MemberException(MemberErrorCode.VISA_NOT_FOUND));

boolean onboardingRequired = member.getStatus().equals(MemberStatus.PENDING);
boolean agreedTerm = memberTermRepository.existsByMemberIdAndAgreedTrue(memberId);

return MemberStatusResponse.from(member, memberVisa, onboardingRequired, agreedTerm);
return MemberStatusResponse.from(member, memberVisa);
}

public MypageResponse getMypage(Long memberId) {
Expand Down Expand Up @@ -308,4 +305,17 @@ public void agreeTerms(Long memberId, MemberTermsRequest request) {

memberTermRepository.saveAll(memberTerms);
}


public MemberCompletionResponse getCompletion(Long memberId){
Member member = getById(memberId);

MemberVisa memberVisa = memberVisaRepository.findActiveByMemberId(memberId)
.orElseThrow(() -> new MemberException(MemberErrorCode.VISA_NOT_FOUND));

boolean onboardingRequired = member.getStatus().equals(MemberStatus.PENDING);
boolean agreedTerm = memberTermRepository.existsByMemberIdAndAgreedTrue(memberId);

return MemberCompletionResponse.of(onboardingRequired, agreedTerm);
}
}
Original file line number Diff line number Diff line change
@@ -1,39 +1,20 @@
package org.sopt.kareer.global.config.swagger;

import static org.sopt.kareer.domain.jobposting.exception.JobPostingErrorCode.JOB_POSTING_NOT_FOUND;
import static org.sopt.kareer.domain.jobposting.exception.JobPostingErrorCode.RESUME_CONTEXT_FAILED;
import static org.sopt.kareer.domain.jobposting.exception.JobPostingErrorCode.TOO_MANY_FILES;
import static org.sopt.kareer.domain.member.exception.MemberErrorCode.INVALID_COUNTRY;
import static org.sopt.kareer.domain.member.exception.MemberErrorCode.INVALID_VISA_POINT;
import static org.sopt.kareer.domain.member.exception.MemberErrorCode.MEMBER_NOT_FOUND;
import static org.sopt.kareer.domain.member.exception.MemberErrorCode.ONBOARDING_ALREADY_COMPLETED;
import static org.sopt.kareer.domain.member.exception.MemberErrorCode.ONBOARDING_REQUIRED;
import static org.sopt.kareer.domain.member.exception.MemberErrorCode.VISA_NOT_FOUND;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.ACTION_ITEM_INACTIVE;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.ACTION_ITEM_NOT_FOUND;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.ACTION_ITEM_TYPE_BLANK;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.ACTION_ITEM_TYPE_INVALID;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.PHASE_ACTION_ALREADY_COMPLETED;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.PHASE_ACTION_NOT_FOUND;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.PHASE_ACTION_TYPE_BLANK;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.PHASE_ACTION_TYPE_INVALID;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.PHASE_NOT_FOUND;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.PHASE_STATUS_BLANK;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.PHASE_STATUS_INVALID;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.TODO_ALREADY_ADDED;
import lombok.Getter;
import org.sopt.kareer.global.exception.errorcode.ErrorCode;
import org.sopt.kareer.global.exception.errorcode.GlobalErrorCode;

import java.util.LinkedHashSet;
import java.util.Set;

import static org.sopt.kareer.domain.jobposting.exception.JobPostingErrorCode.*;
import static org.sopt.kareer.domain.member.exception.MemberErrorCode.*;
import static org.sopt.kareer.domain.roadmap.exception.RoadmapErrorCode.*;
import static org.sopt.kareer.domain.term.exception.TermErrorCode.*;
import static org.sopt.kareer.global.auth.exception.AuthErrorCode.LOGIN_CODE_ALREADY_USED;
import static org.sopt.kareer.global.auth.exception.AuthErrorCode.LOGIN_CODE_NOT_FOUND;
import static org.sopt.kareer.global.external.ai.exception.LlmErrorCode.LLM_JSON_PARSING_FAILED;
import static org.sopt.kareer.global.external.ai.exception.RagErrorCode.DOCUMENTS_RETRIEVED_EMPTY;
import static org.sopt.kareer.global.external.ai.exception.RagErrorCode.EMBEDDING_FAILED;
import static org.sopt.kareer.global.external.ai.exception.RagErrorCode.EXTRACT_TEXT_FAILED;

import java.util.LinkedHashSet;
import java.util.Set;
import lombok.Getter;
import org.sopt.kareer.global.exception.errorcode.ErrorCode;
import org.sopt.kareer.global.exception.errorcode.GlobalErrorCode;
import static org.sopt.kareer.global.external.ai.exception.RagErrorCode.*;

@Getter
public enum SwaggerResponseDescription {
Expand Down Expand Up @@ -128,6 +109,10 @@ public enum SwaggerResponseDescription {
DUPLICATE_TERM,
MISSING_TERM,
REQUIRED_TERM_NOT_AGREED
))),
GET_COMPLETION(new LinkedHashSet<>(Set.of(
MEMBER_NOT_FOUND,
VISA_NOT_FOUND
)))
;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public class OnboardingRestrictionFilter extends OncePerRequestFilter {
"/api/v1/members/roadmap/test",
"/api/v1/terms",
"/api/v1/members/term-agreements",
"/api/v1/members/completion",
"/v3/api-docs/**"
);

Expand Down
Loading