diff --git a/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/aggregates/Application.kt b/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/aggregates/Application.kt index 85d09158..2bef60ca 100644 --- a/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/aggregates/Application.kt +++ b/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/aggregates/Application.kt @@ -22,7 +22,6 @@ data class Application( val birthDate: String?, val applicationType: ApplicationType, val educationalStatus: EducationalStatus, - val status: ApplicationStatus, val streetAddress: String?, val submittedAt: LocalDateTime, val reviewedAt: LocalDateTime?, diff --git a/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationContract.kt b/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationContract.kt index e7f366e0..467e7315 100644 --- a/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationContract.kt +++ b/casper-application-domain/src/main/kotlin/hs/kr/entrydsm/domain/application/interfaces/ApplicationContract.kt @@ -8,7 +8,5 @@ interface ApplicationContract : QueryAllFirstRoundPassedApplicationContract { fun getApplicationByReceiptCode(receiptCode: Long): Application? - fun updateApplicationStatus(receiptCode: Long, status: hs.kr.entrydsm.domain.status.values.ApplicationStatus) - fun delete(application: Application) } \ No newline at end of file diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/ApplicationPersistenceAdapter.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/ApplicationPersistenceAdapter.kt index cea40ee2..5749433d 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/ApplicationPersistenceAdapter.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/ApplicationPersistenceAdapter.kt @@ -75,22 +75,6 @@ class ApplicationPersistenceAdapter( .orElse(null) } - /** - * 원서 상태를 업데이트합니다. - * - * @param receiptCode 접수번호 - * @param status 변경할 상태 - */ - override fun updateApplicationStatus( - receiptCode: Long, - status: hs.kr.entrydsm.domain.status.values.ApplicationStatus, - ) { - applicationJpaRepository.findByReceiptCode(receiptCode).ifPresent { applicationEntity -> - applicationEntity.status = status - applicationJpaRepository.save(applicationEntity) - } - } - override fun delete(application: Application) { applicationJpaRepository.delete(applicationMapper.toEntity(application)) } diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/entity/ApplicationJpaEntity.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/entity/ApplicationJpaEntity.kt index 87f2f14f..4410bc9a 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/entity/ApplicationJpaEntity.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/entity/ApplicationJpaEntity.kt @@ -29,7 +29,6 @@ import java.util.UUID indexes = [ Index(name = "idx_user_id", columnList = "user_id"), Index(name = "idx_receipt_code", columnList = "receipt_code"), - Index(name = "idx_status", columnList = "status"), Index(name = "idx_application_type", columnList = "application_type"), Index(name = "idx_submitted_at", columnList = "submitted_at"), ], @@ -57,13 +56,8 @@ class ApplicationJpaEntity( @Enumerated(EnumType.STRING) @Column(name = "educational_status", nullable = false, length = 50) val educationalStatus: EducationalStatus, - @Enumerated(EnumType.STRING) - @Column(name = "status", nullable = false, length = 20) - var status: ApplicationStatus, @Column(name = "is_daejeon", nullable = false) val isDaejeon: Boolean, - @Column(name = "is_arrived", nullable = false) - var isArrived: Boolean = false, // ===== 보호자 및 주소 정보 ===== @Column(name = "parent_name", length = 100) val parentName: String?, @@ -125,9 +119,7 @@ class ApplicationJpaEntity( birthDate = null, applicationType = ApplicationType.COMMON, educationalStatus = EducationalStatus.PROSPECTIVE_GRADUATE, - status = ApplicationStatus.SUBMITTED, isDaejeon = false, - isArrived = false, parentName = null, parentTel = null, parentRelation = null, diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/mapper/ApplicationMapper.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/mapper/ApplicationMapper.kt index 3406eb94..52bc9bdb 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/mapper/ApplicationMapper.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/mapper/ApplicationMapper.kt @@ -87,9 +87,7 @@ class ApplicationMapper( birthDate = model.birthDate, applicationType = model.applicationType, educationalStatus = model.educationalStatus, - status = model.status, isDaejeon = model.isDaejeon ?: false, - isArrived = false, parentName = model.parentName, parentTel = model.parentTel, parentRelation = model.parentRelation, @@ -134,7 +132,6 @@ class ApplicationMapper( birthDate = entity.birthDate, applicationType = entity.applicationType, educationalStatus = entity.educationalStatus, - status = entity.status, streetAddress = null, submittedAt = entity.submittedAt, reviewedAt = entity.reviewedAt, diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/repository/ApplicationJpaRepository.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/repository/ApplicationJpaRepository.kt index 69556141..e7720076 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/repository/ApplicationJpaRepository.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/domain/repository/ApplicationJpaRepository.kt @@ -71,11 +71,6 @@ interface ApplicationJpaRepository : JpaRepository { isDaejeon: Boolean, ): List - /** - * 상태별 원서 목록 조회 - */ - fun findAllByStatus(status: ApplicationStatus): List - /** * 수험번호로 원서 조회 */ diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/ApplicationQueryController.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/ApplicationQueryController.kt index 73426dd1..2492e8c6 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/ApplicationQueryController.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/presentation/ApplicationQueryController.kt @@ -27,7 +27,6 @@ import java.util.UUID class ApplicationQueryController( private val applicationQueryUseCase: ApplicationQueryUseCase, private val applicationPdfGenerator: ApplicationPdfGenerator, - private val updateApplicationArrivalUseCase: UpdateApplicationArrivalUseCase, private val getPreviewApplicationPdfUseCase: GetPreviewApplicationPdfUseCase, ) : ApplicationQueryApiDocument { @GetMapping("/applications/{applicationId}") @@ -91,29 +90,30 @@ class ApplicationQueryController( .body(pdfBytes) } - @PatchMapping("/applications/{applicationId}/arrival") - override fun updateArrivalStatus( - @PathVariable applicationId: String, - @RequestParam isArrived: Boolean, - ): ResponseEntity { - if (applicationId.isBlank()) { - throw ApplicationValidationException("원서 ID가 필요합니다") - } - - val uuid = - try { - UUID.fromString(applicationId) - } catch (e: IllegalArgumentException) { - throw ApplicationValidationException("올바르지 않은 원서 ID 형식입니다") - } - - updateApplicationArrivalUseCase.updateArrivalStatus(uuid, isArrived) - - return ResponseEntity.ok( - UpdateApplicationArrivalResponse( - success = true, - message = "학교 도착 여부가 업데이트되었습니다.", - ), - ) - } + // 이거 status에서 해줌 +// @PatchMapping("/applications/{applicationId}/arrival") +// override fun updateArrivalStatus( +// @PathVariable applicationId: String, +// @RequestParam isArrived: Boolean, +// ): ResponseEntity { +// if (applicationId.isBlank()) { +// throw ApplicationValidationException("원서 ID가 필요합니다") +// } +// +// val uuid = +// try { +// UUID.fromString(applicationId) +// } catch (e: IllegalArgumentException) { +// throw ApplicationValidationException("올바르지 않은 원서 ID 형식입니다") +// } +// +// updateApplicationArrivalUseCase.updateArrivalStatus(uuid, isArrived) +// +// return ResponseEntity.ok( +// UpdateApplicationArrivalResponse( +// success = true, +// message = "학교 도착 여부가 업데이트되었습니다.", +// ), +// ) +// } } diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationPersistenceService.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationPersistenceService.kt index 77956c93..b174c212 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationPersistenceService.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationPersistenceService.kt @@ -99,7 +99,6 @@ class ApplicationPersistenceService( birthDate = extractStringValue(applicationData, "birthDate"), applicationType = applicationType, educationalStatus = educationalStatus, - status = ApplicationStatus.SUBMITTED, isDaejeon = extractBooleanValue(applicationData, "isDaejeon") ?: false, parentName = extractStringValue(applicationData, "parentName"), parentTel = extractStringValue(applicationData, "parentTel"), diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationQueryUseCase.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationQueryUseCase.kt index ef826a93..10b23e86 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationQueryUseCase.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationQueryUseCase.kt @@ -46,8 +46,8 @@ class ApplicationQueryUseCase( applicationRepository.findById(uuid) .orElseThrow { ApplicationNotFoundException("원서를 찾을 수 없습니다: $applicationId") } -// val status = applicationQueryStatusContract.queryStatusByReceiptCode(application.receiptCode) -// ?: throw StatusExceptions.StatusNotFoundException() + val status = applicationQueryStatusContract.queryStatusByReceiptCode(application.receiptCode) + ?: throw StatusExceptions.StatusNotFoundException() val photoPath = photoJpaRepository.findByUserId(application.userId)?.photo @@ -65,7 +65,7 @@ class ApplicationQueryUseCase( birthDate = application.birthDate, applicationType = application.applicationType.name, educationalStatus = application.educationalStatus.name, - status = application.status.name, + status = status.applicationStatus.name, submittedAt = application.submittedAt, reviewedAt = application.reviewedAt, createdAt = application.createdAt, @@ -158,12 +158,11 @@ class ApplicationQueryUseCase( applicantName = app.applicantName, applicationType = app.applicationType.name, educationalStatus = app.educationalStatus.name, - status = app.status.toString(), + status = getApplicationStatus(app), submittedAt = app.submittedAt, isDaejeon = app.isDaejeon, isSubmitted = true, - isArrived = false // 임시 하드 코딩 -// isArrived = isArrivedDocuments(app), + isArrived = isArrivedDocuments(app), ) }, total = totalElements, @@ -174,37 +173,6 @@ class ApplicationQueryUseCase( ) } - fun getUserApplications(userId: String): ApplicationListResponse { - val uuid = UUID.fromString(userId) - val applications = applicationRepository.findAllByUserId(uuid) - - return ApplicationListResponse( - success = true, - data = - ApplicationListResponse.ApplicationListData( - applications = - applications.map { app -> - ApplicationListResponse.ApplicationSummary( - applicationId = app.applicationId.toString(), - receiptCode = app.receiptCode, - applicantName = app.applicantName, - applicationType = app.applicationType.name, - educationalStatus = app.educationalStatus.name, - status = app.status.toString(), - submittedAt = app.submittedAt, - isDaejeon = app.isDaejeon, - isSubmitted = true, - isArrived = app.isArrived, - ) - }, - total = applications.size, - page = 0, - size = applications.size, - totalPages = 1, - ), - ) - } - fun getApplicationScores(applicationId: String): ApplicationScoresResponse { val uuid = UUID.fromString(applicationId) val application = @@ -289,7 +257,6 @@ class ApplicationQueryUseCase( birthDate = entity.birthDate, applicationType = entity.applicationType, educationalStatus = entity.educationalStatus, - status = entity.status, streetAddress = scores["streetAddress"] as? String, submittedAt = entity.submittedAt ?: entity.createdAt, reviewedAt = entity.reviewedAt, @@ -370,4 +337,11 @@ class ApplicationQueryUseCase( else -> false } } + + private fun getApplicationStatus(application: ApplicationJpaEntity): String { + val status = applicationQueryStatusContract.queryStatusByReceiptCode(application.receiptCode) + ?: throw StatusExceptions.StatusNotFoundException() + + return status.applicationStatus.name + } } diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationSubmissionUseCase.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationSubmissionUseCase.kt index 933148c1..c4343b4c 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationSubmissionUseCase.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/ApplicationSubmissionUseCase.kt @@ -39,147 +39,147 @@ class ApplicationSubmissionUseCase( * @param request 원서 생성 요청 데이터 * @return 생성된 원서 응답 */ - fun createApplication( - userId: UUID, - request: CreateApplicationRequest, - ): CreateApplicationResponse { - // 입력 데이터 검증 - // validationService.validateCreateApplicationRequest(request) - - // 중복 원서 제출 방지 - val existingSubmittedApplication = applicationRepository.findAllByUserId(userId) - .firstOrNull { it.status == ApplicationStatus.SUBMITTED } - - if (existingSubmittedApplication != null) { - throw IllegalStateException("이미 제출된 원서가 있습니다") - } - - // 증명사진 조회 - val photoKey = photoJpaRepository.findByUserId(userId)?.photo - val photoUrl = photoKey?.let { generateFileUrlPort.generateFileUrl(it, PathList.PHOTO) } - - // 임시 수험번호 (나중에 동적 생성으로 변경) - val receiptCode = 1000L + System.currentTimeMillis() % 100000 - - val now = LocalDateTime.now() - - // Domain Model 생성 - val application = - Application( - applicationId = UUID.randomUUID(), - userId = userId, - receiptCode = receiptCode, - applicantName = request.applicantName, - applicantTel = request.applicantTel, - parentName = request.parentName, - parentTel = request.parentTel, - birthDate = request.birthDate, - applicationType = ApplicationType.valueOf(request.applicationType), - educationalStatus = EducationalStatus.valueOf(request.educationalStatus), - status = ApplicationStatus.SUBMITTED, - streetAddress = request.streetAddress, - submittedAt = now, - reviewedAt = null, - createdAt = now, - updatedAt = now, - isDaejeon = request.isDaejeon, - photoPath = photoUrl, - parentRelation = request.parentRelation, - postalCode = request.postalCode, - detailAddress = request.detailAddress, - studyPlan = request.studyPlan, - selfIntroduce = request.selfIntroduce, - // veteransNumber = request.veteransNumber, - schoolCode = request.schoolCode, - // Basic Info Fields - nationalMeritChild = request.nationalMeritChild, - specialAdmissionTarget = request.specialAdmissionTarget, - graduationDate = request.graduationDate, - // Personal Info Fields - applicantGender = Gender.fromString(request.applicantGender), - // Guardian Info Fields - // guardianName = request.guardianName, - // guardianNumber = request.guardianNumber, - guardianGender = Gender.fromString(request.guardianGender), - // School Info Fields - schoolName = request.schoolName, - studentId = request.studentId, - schoolPhone = request.schoolPhone, - teacherName = request.teacherName, - // Grade 3-1 Score Fields - korean_3_1 = request.korean_3_1, - social_3_1 = request.social_3_1, - history_3_1 = request.history_3_1, - math_3_1 = request.math_3_1, - science_3_1 = request.science_3_1, - tech_3_1 = request.tech_3_1, - english_3_1 = request.english_3_1, - // Grade 2-2 Score Fields - korean_2_2 = request.korean_2_2, - social_2_2 = request.social_2_2, - history_2_2 = request.history_2_2, - math_2_2 = request.math_2_2, - science_2_2 = request.science_2_2, - tech_2_2 = request.tech_2_2, - english_2_2 = request.english_2_2, - // Grade 2-1 Score Fields - korean_2_1 = request.korean_2_1, - social_2_1 = request.social_2_1, - history_2_1 = request.history_2_1, - math_2_1 = request.math_2_1, - science_2_1 = request.science_2_1, - tech_2_1 = request.tech_2_1, - english_2_1 = request.english_2_1, - // Grade 3-2 Score Fields (for graduates) - korean_3_2 = request.korean_3_2, - social_3_2 = request.social_3_2, - history_3_2 = request.history_3_2, - math_3_2 = request.math_3_2, - science_3_2 = request.science_3_2, - tech_3_2 = request.tech_3_2, - english_3_2 = request.english_3_2, - // GED Score Fields - gedKorean = request.gedKorean, - gedSocial = request.gedSocial, - gedHistory = request.gedHistory, - gedMath = request.gedMath, - gedScience = request.gedScience, - gedTech = request.gedTech, - gedEnglish = request.gedEnglish, - // Additional Personal Info Fields - // specialNotes = request.specialNotes, - // Attendance & Service Fields - absence = request.absence, - tardiness = request.tardiness, - earlyLeave = request.earlyLeave, - classExit = request.classExit, - //unexcused = request.unexcused, - volunteer = request.volunteer, - algorithmAward = request.algorithmAward, - infoProcessingCert = request.infoProcessingCert, - // Score Calculation Fields - totalScore = null, - ) - - // Entity로 변환 후 저장 - val entity = applicationMapper.toEntity(application) - val savedEntity = applicationRepository.save(entity) - - return CreateApplicationResponse( - success = true, - data = - CreateApplicationResponse.ApplicationData( - applicationId = savedEntity.applicationId, - receiptCode = savedEntity.receiptCode, - applicantName = savedEntity.applicantName, - applicationType = savedEntity.applicationType.name, - educationalStatus = savedEntity.educationalStatus.name, - status = savedEntity.status.toString(), - submittedAt = savedEntity.submittedAt, - createdAt = savedEntity.createdAt, - ), - ) - } +// fun createApplication( +// userId: UUID, +// request: CreateApplicationRequest, +// ): CreateApplicationResponse { +// // 입력 데이터 검증 +// // validationService.validateCreateApplicationRequest(request) +// +// // 중복 원서 제출 방지 +// val existingSubmittedApplication = applicationRepository.findAllByUserId(userId) +// .firstOrNull { it.status == ApplicationStatus.SUBMITTED } +// +// if (existingSubmittedApplication != null) { +// throw IllegalStateException("이미 제출된 원서가 있습니다") +// } +// +// // 증명사진 조회 +// val photoKey = photoJpaRepository.findByUserId(userId)?.photo +// val photoUrl = photoKey?.let { generateFileUrlPort.generateFileUrl(it, PathList.PHOTO) } +// +// // 임시 수험번호 (나중에 동적 생성으로 변경) +// val receiptCode = 1000L + System.currentTimeMillis() % 100000 +// +// val now = LocalDateTime.now() +// +// // Domain Model 생성 +// val application = +// Application( +// applicationId = UUID.randomUUID(), +// userId = userId, +// receiptCode = receiptCode, +// applicantName = request.applicantName, +// applicantTel = request.applicantTel, +// parentName = request.parentName, +// parentTel = request.parentTel, +// birthDate = request.birthDate, +// applicationType = ApplicationType.valueOf(request.applicationType), +// educationalStatus = EducationalStatus.valueOf(request.educationalStatus), +// status = ApplicationStatus.SUBMITTED, +// streetAddress = request.streetAddress, +// submittedAt = now, +// reviewedAt = null, +// createdAt = now, +// updatedAt = now, +// isDaejeon = request.isDaejeon, +// photoPath = photoUrl, +// parentRelation = request.parentRelation, +// postalCode = request.postalCode, +// detailAddress = request.detailAddress, +// studyPlan = request.studyPlan, +// selfIntroduce = request.selfIntroduce, +// // veteransNumber = request.veteransNumber, +// schoolCode = request.schoolCode, +// // Basic Info Fields +// nationalMeritChild = request.nationalMeritChild, +// specialAdmissionTarget = request.specialAdmissionTarget, +// graduationDate = request.graduationDate, +// // Personal Info Fields +// applicantGender = Gender.fromString(request.applicantGender), +// // Guardian Info Fields +// // guardianName = request.guardianName, +// // guardianNumber = request.guardianNumber, +// guardianGender = Gender.fromString(request.guardianGender), +// // School Info Fields +// schoolName = request.schoolName, +// studentId = request.studentId, +// schoolPhone = request.schoolPhone, +// teacherName = request.teacherName, +// // Grade 3-1 Score Fields +// korean_3_1 = request.korean_3_1, +// social_3_1 = request.social_3_1, +// history_3_1 = request.history_3_1, +// math_3_1 = request.math_3_1, +// science_3_1 = request.science_3_1, +// tech_3_1 = request.tech_3_1, +// english_3_1 = request.english_3_1, +// // Grade 2-2 Score Fields +// korean_2_2 = request.korean_2_2, +// social_2_2 = request.social_2_2, +// history_2_2 = request.history_2_2, +// math_2_2 = request.math_2_2, +// science_2_2 = request.science_2_2, +// tech_2_2 = request.tech_2_2, +// english_2_2 = request.english_2_2, +// // Grade 2-1 Score Fields +// korean_2_1 = request.korean_2_1, +// social_2_1 = request.social_2_1, +// history_2_1 = request.history_2_1, +// math_2_1 = request.math_2_1, +// science_2_1 = request.science_2_1, +// tech_2_1 = request.tech_2_1, +// english_2_1 = request.english_2_1, +// // Grade 3-2 Score Fields (for graduates) +// korean_3_2 = request.korean_3_2, +// social_3_2 = request.social_3_2, +// history_3_2 = request.history_3_2, +// math_3_2 = request.math_3_2, +// science_3_2 = request.science_3_2, +// tech_3_2 = request.tech_3_2, +// english_3_2 = request.english_3_2, +// // GED Score Fields +// gedKorean = request.gedKorean, +// gedSocial = request.gedSocial, +// gedHistory = request.gedHistory, +// gedMath = request.gedMath, +// gedScience = request.gedScience, +// gedTech = request.gedTech, +// gedEnglish = request.gedEnglish, +// // Additional Personal Info Fields +// // specialNotes = request.specialNotes, +// // Attendance & Service Fields +// absence = request.absence, +// tardiness = request.tardiness, +// earlyLeave = request.earlyLeave, +// classExit = request.classExit, +// //unexcused = request.unexcused, +// volunteer = request.volunteer, +// algorithmAward = request.algorithmAward, +// infoProcessingCert = request.infoProcessingCert, +// // Score Calculation Fields +// totalScore = null, +// ) +// +// // Entity로 변환 후 저장 +// val entity = applicationMapper.toEntity(application) +// val savedEntity = applicationRepository.save(entity) +// +// return CreateApplicationResponse( +// success = true, +// data = +// CreateApplicationResponse.ApplicationData( +// applicationId = savedEntity.applicationId, +// receiptCode = savedEntity.receiptCode, +// applicantName = savedEntity.applicantName, +// applicationType = savedEntity.applicationType.name, +// educationalStatus = savedEntity.educationalStatus.name, +// status = savedEntity.status.toString(), +// submittedAt = savedEntity.submittedAt, +// createdAt = savedEntity.createdAt, +// ), +// ) +// } /** * 원서 ID로 원서를 조회합니다. diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CancelApplicationUseCase.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CancelApplicationUseCase.kt index dbcbce9f..dcd64d29 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CancelApplicationUseCase.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CancelApplicationUseCase.kt @@ -6,6 +6,8 @@ import hs.kr.entrydsm.application.global.annotation.usecase.UseCase import hs.kr.entrydsm.domain.application.interfaces.ApplicationContract import hs.kr.entrydsm.domain.application.interfaces.ApplicationDeleteEventContract import hs.kr.entrydsm.domain.application.interfaces.CancelApplicationContract +import hs.kr.entrydsm.domain.status.exception.StatusExceptions +import hs.kr.entrydsm.domain.status.interfaces.ApplicationQueryStatusContract import hs.kr.entrydsm.domain.status.values.ApplicationStatus import org.springframework.transaction.annotation.Transactional import java.util.UUID @@ -14,7 +16,8 @@ import java.util.UUID @Transactional class CancelApplicationUseCase( private val applicationContract: ApplicationContract, - private val applicationDeleteEventContract: ApplicationDeleteEventContract + private val applicationDeleteEventContract: ApplicationDeleteEventContract, + private val applicationQueryStatusContract: ApplicationQueryStatusContract ) : CancelApplicationContract { override fun cancelApplication( userId: UUID, @@ -23,11 +26,14 @@ class CancelApplicationUseCase( applicationContract.getApplicationByUserId(userId) ?: throw ApplicationNotFoundException() - if (application.status != ApplicationStatus.SUBMITTED) { + val status = applicationQueryStatusContract.queryStatusByReceiptCode(application.receiptCode) + ?: StatusExceptions.StatusNotFoundException() + + if (status == ApplicationStatus.NOT_APPLIED || status == ApplicationStatus.WRITING) { throw ApplicationCannotCancelException() } - //applicationDeleteEventContract.deleteStatus(application.receiptCode) + applicationDeleteEventContract.deleteStatus(application.receiptCode) applicationContract.delete(application) } } diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CompleteApplicationUseCase.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CompleteApplicationUseCase.kt index 093d5cc0..4212e717 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CompleteApplicationUseCase.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/CompleteApplicationUseCase.kt @@ -4,6 +4,8 @@ import hs.kr.entrydsm.application.domain.application.presentation.dto.request.Ap import hs.kr.entrydsm.application.domain.application.presentation.dto.response.ApplicationSubmissionResponse import hs.kr.entrydsm.domain.application.values.ApplicationType import hs.kr.entrydsm.domain.application.values.EducationalStatus +import hs.kr.entrydsm.domain.status.exception.StatusExceptions +import hs.kr.entrydsm.domain.status.interfaces.ApplicationQueryStatusContract import org.slf4j.LoggerFactory import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional @@ -19,6 +21,7 @@ import java.util.UUID @Transactional class CompleteApplicationUseCase( private val applicationPersistenceService: ApplicationPersistenceService, + private val applicationQueryStatusContract: ApplicationQueryStatusContract ) { private val logger = LoggerFactory.getLogger(javaClass) @@ -50,7 +53,6 @@ class CompleteApplicationUseCase( logger.info("receiptCode: ${savedApplication.receiptCode}") logger.info("applicantName: ${savedApplication.applicantName}") logger.info("applicationType: ${savedApplication.applicationType}") - logger.info("status: ${savedApplication.status}") // 응답 생성 return buildSuccessResponse(savedApplication) @@ -66,6 +68,9 @@ class CompleteApplicationUseCase( private fun buildSuccessResponse( application: hs.kr.entrydsm.application.domain.application.domain.entity.ApplicationJpaEntity, ): ApplicationSubmissionResponse { + val status = applicationQueryStatusContract.queryStatusByReceiptCode(application.receiptCode) + ?: throw StatusExceptions.StatusNotFoundException() + return ApplicationSubmissionResponse( success = true, data = @@ -77,7 +82,7 @@ class CompleteApplicationUseCase( applicantName = application.applicantName, applicationType = application.applicationType.name, educationalStatus = application.educationalStatus.name, - status = application.status.toString(), + status = status.applicationStatus.name, submittedAt = application.submittedAt, ), calculation = diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/UpdateApplicationArrivalUseCase.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/UpdateApplicationArrivalUseCase.kt index de2dc3fa..1190bbee 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/UpdateApplicationArrivalUseCase.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/application/usecase/UpdateApplicationArrivalUseCase.kt @@ -14,15 +14,16 @@ import java.util.UUID class UpdateApplicationArrivalUseCase( private val applicationRepository: ApplicationJpaRepository, ) { - fun updateArrivalStatus( - applicationId: UUID, - isArrived: Boolean, - ) { - val application = - applicationRepository.findById(applicationId) - .orElseThrow { ApplicationNotFoundException("원서를 찾을 수 없습니다: $applicationId") } - - application.isArrived = isArrived - applicationRepository.save(application) - } + // 이거 status에서 해줌 +// fun updateArrivalStatus( +// applicationId: UUID, +// isArrived: Boolean, +// ) { +// val application = +// applicationRepository.findById(applicationId) +// .orElseThrow { ApplicationNotFoundException("원서를 찾을 수 없습니다: $applicationId") } +// +// application.isArrived = isArrived +// applicationRepository.save(application) +// } } diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/pdf/usecase/GetFinalApplicationPdfUseCase.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/pdf/usecase/GetFinalApplicationPdfUseCase.kt index cb1a9d23..a6bb4f71 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/pdf/usecase/GetFinalApplicationPdfUseCase.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/pdf/usecase/GetFinalApplicationPdfUseCase.kt @@ -5,20 +5,25 @@ import hs.kr.entrydsm.domain.application.aggregates.Application import hs.kr.entrydsm.domain.application.interfaces.ApplicationPdfGeneratorContract import hs.kr.entrydsm.domain.application.values.EducationalStatus import hs.kr.entrydsm.domain.security.interfaces.SecurityContract +import hs.kr.entrydsm.domain.status.exception.StatusExceptions +import hs.kr.entrydsm.domain.status.interfaces.ApplicationQueryStatusContract @ReadOnlyUseCase class GetFinalApplicationPdfUseCase( private val securityContract: SecurityContract, private val applicationQueryUseCase: hs.kr.entrydsm.application.domain.application.usecase.ApplicationQueryUseCase, private val applicationPdfGeneratorContract: ApplicationPdfGeneratorContract, + private val applicationQueryStatusContract: ApplicationQueryStatusContract ) { fun execute(): ByteArray { val userId = securityContract.getCurrentUserId() val application = applicationQueryUseCase.getCurrentUserApplication() + val status = applicationQueryStatusContract.queryStatusByReceiptCode(application.receiptCode) + ?: throw StatusExceptions.StatusNotFoundException() - if (application.status == hs.kr.entrydsm.domain.status.values.ApplicationStatus.WRITING || - application.status == hs.kr.entrydsm.domain.status.values.ApplicationStatus.NOT_APPLIED) { + if (status.applicationStatus == hs.kr.entrydsm.domain.status.values.ApplicationStatus.WRITING || + status.applicationStatus == hs.kr.entrydsm.domain.status.values.ApplicationStatus.NOT_APPLIED) { throw IllegalStateException("제출되지 않은 원서입니다") } diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/pdf/usecase/GetPreviewApplicationPdfUseCase.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/pdf/usecase/GetPreviewApplicationPdfUseCase.kt index bef62c33..31559194 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/pdf/usecase/GetPreviewApplicationPdfUseCase.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/domain/pdf/usecase/GetPreviewApplicationPdfUseCase.kt @@ -58,7 +58,6 @@ class GetPreviewApplicationPdfUseCase( birthDate = request.birthDate, applicationType = parseApplicationType(request.applicationType), educationalStatus = parseEducationalStatus(request.educationalStatus), - status = ApplicationStatus.WRITING, streetAddress = request.streetAddress, submittedAt = LocalDateTime.MIN, reviewedAt = null, diff --git a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/document/application/ApplicationQueryApiDocument.kt b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/document/application/ApplicationQueryApiDocument.kt index becbe1e8..3acce6d0 100644 --- a/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/document/application/ApplicationQueryApiDocument.kt +++ b/casper-application-infrastructure/src/main/kotlin/hs/kr/entrydsm/application/global/document/application/ApplicationQueryApiDocument.kt @@ -139,33 +139,4 @@ interface ApplicationQueryApiDocument { @RequestBody request: PreviewPdfRequest, ): ResponseEntity - @Operation( - summary = "원서 학교 도착 여부 업데이트", - description = "특정 원서의 학교 도착 여부를 업데이트합니다. 관리자용 API입니다.", - ) - @ApiResponses( - value = [ - ApiResponse( - responseCode = "200", - description = "학교 도착 여부 업데이트 성공", - content = [Content(schema = Schema(implementation = UpdateApplicationArrivalResponse::class))], - ), - ApiResponse( - responseCode = "400", - description = "잘못된 요청 데이터", - content = [Content(schema = Schema(implementation = UpdateApplicationArrivalResponse::class))], - ), - ApiResponse( - responseCode = "500", - description = "서버 내부 오류", - content = [Content(schema = Schema(implementation = UpdateApplicationArrivalResponse::class))], - ), - ], - ) - fun updateArrivalStatus( - @Parameter(description = "원서 ID", required = true, example = "123e4567-e89b-12d3-a456-426614174000") - @PathVariable applicationId: String, - @Parameter(description = "학교 도착 여부", required = true, example = "true") - @RequestParam isArrived: Boolean, - ): ResponseEntity }