Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
package com.example.solidconnection.application.controller;

import com.example.solidconnection.application.dto.ApplicationSubmissionResponse;
import com.example.solidconnection.application.dto.ApplicationsResponse;
import com.example.solidconnection.application.dto.ScoreRequest;
import com.example.solidconnection.application.dto.UniversityChoiceRequest;
import com.example.solidconnection.application.dto.VerifyStatusResponse;
import com.example.solidconnection.application.dto.*;
import com.example.solidconnection.application.service.ApplicationQueryService;
import com.example.solidconnection.application.service.ApplicationSubmissionService;
import com.example.solidconnection.application.service.VerifyStatusQueryService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
Expand All @@ -28,28 +23,18 @@ public class ApplicationController implements ApplicationControllerSwagger {

private final ApplicationSubmissionService applicationSubmissionService;
private final ApplicationQueryService applicationQueryService;
private final VerifyStatusQueryService verifyStatusQueryService;

@PostMapping("/score")
public ResponseEntity<ApplicationSubmissionResponse> submitScore(
// 지원서 제출하기 api
@PostMapping()
public ResponseEntity<ApplicationSubmissionResponse> apply(
Principal principal,
@Valid @RequestBody ScoreRequest scoreRequest) {
boolean result = applicationSubmissionService.submitScore(principal.getName(), scoreRequest);
@Valid @RequestBody ApplyRequest applyRequest) {
boolean result = applicationSubmissionService.apply(principal.getName(), applyRequest);
return ResponseEntity
.status(HttpStatus.OK)
.body(new ApplicationSubmissionResponse(result));
}

@PostMapping("/university")
public ResponseEntity<ApplicationSubmissionResponse> submitUniversityChoice(
Principal principal,
@Valid @RequestBody UniversityChoiceRequest universityChoiceRequest) {
boolean result = applicationSubmissionService.submitUniversityChoice(principal.getName(), universityChoiceRequest);
return ResponseEntity
.status(HttpStatus.OK)
.body(new ApplicationSubmissionResponse(result));
}

@GetMapping
public ResponseEntity<ApplicationsResponse> getApplicants(
Principal principal,
Expand All @@ -69,11 +54,4 @@ public ResponseEntity<ApplicationsResponse> getApplicantsForUserCompetitors(
return ResponseEntity
.ok(result);
}

@GetMapping("/status")
public ResponseEntity<VerifyStatusResponse> getApplicationVerifyStatus(Principal principal) {
VerifyStatusResponse result = verifyStatusQueryService.getVerifyStatus(principal.getName());
return ResponseEntity
.ok(result);
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
package com.example.solidconnection.application.controller;

import com.example.solidconnection.application.dto.ApplicationSubmissionResponse;
import com.example.solidconnection.application.dto.ApplicationsResponse;
import com.example.solidconnection.application.dto.ScoreRequest;
import com.example.solidconnection.application.dto.UniversityChoiceRequest;
import com.example.solidconnection.application.dto.VerifyStatusResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.security.SecurityRequirements;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestParam;
import io.swagger.v3.oas.annotations.parameters.RequestBody;

import java.security.Principal;

Expand All @@ -25,53 +19,6 @@
@SecurityRequirements
@SecurityRequirement(name = ACCESS_TOKEN)
public interface ApplicationControllerSwagger {

@Operation(
summary = "대학 성적과 어학 성적 제출",
requestBody = @RequestBody(
description = "대학 성적과 어학 성적",
required = true,
content = @Content(
mediaType = "application/json",
schema = @Schema(implementation = ScoreRequest.class)
)
),
responses = {
@ApiResponse(
responseCode = "200",
description = "대학 성적과 어학 성적 제출 성공",
content = @Content(
mediaType = "application/json",
schema = @Schema(implementation = ApplicationSubmissionResponse.class)
)
)
}
)
ResponseEntity<ApplicationSubmissionResponse> submitScore(Principal principal, @Valid @RequestBody ScoreRequest scoreRequest);

@Operation(
summary = "지망 대학 제출",
requestBody = @RequestBody(
description = "지망 대학",
required = true,
content = @Content(
mediaType = "application/json",
schema = @Schema(implementation = UniversityChoiceRequest.class)
)
),
responses = {
@ApiResponse(
responseCode = "200",
description = "지망 대학 제출 성공",
content = @Content(
mediaType = "application/json",
schema = @Schema(implementation = ApplicationSubmissionResponse.class)
)
)
}
)
ResponseEntity<ApplicationSubmissionResponse> submitUniversityChoice(Principal principal, @Valid @RequestBody UniversityChoiceRequest universityChoiceRequest);

@Operation(
summary = "지원자 목록 조회",
responses = {
Expand All @@ -86,19 +33,4 @@ public interface ApplicationControllerSwagger {
}
)
ResponseEntity<ApplicationsResponse> getApplicants(Principal principal, @RequestParam(required = false) String region, @RequestParam(required = false) String keyword);

@Operation(
summary = "성적 승인 상태 확인",
responses = {
@ApiResponse(
responseCode = "200",
description = "성적 승인 상태 반환",
content = @Content(
mediaType = "application/json",
schema = @Schema(implementation = VerifyStatusResponse.class)
)
)
}
)
ResponseEntity<VerifyStatusResponse> getApplicationVerifyStatus(Principal principal);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,7 @@
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.type.VerifyStatus;
import com.example.solidconnection.university.domain.UniversityInfoForApply;
import jakarta.persistence.Column;
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
Expand Down Expand Up @@ -51,16 +43,19 @@ public class Application {
@Column(length = 50, nullable = false)
private String term;

@ManyToOne
@Column(columnDefinition = "TINYINT(1) NOT NULL DEFAULT 0")
private Boolean isDelete;

@ManyToOne(fetch = FetchType.LAZY)
private UniversityInfoForApply firstChoiceUniversity;

@ManyToOne
@ManyToOne(fetch = FetchType.LAZY)
private UniversityInfoForApply secondChoiceUniversity;

@ManyToOne
@ManyToOne(fetch = FetchType.LAZY)
private UniversityInfoForApply thirdChoiceUniversity;

@ManyToOne
@ManyToOne(fetch = FetchType.LAZY)
private SiteUser siteUser;

public Application(
Expand All @@ -76,14 +71,53 @@ public Application(
this.verifyStatus = PENDING;
}

public void updateGpaAndLanguageTest(
public Application(
SiteUser siteUser,
Gpa gpa,
LanguageTest languageTest,
String term,
Integer updateCount,
UniversityInfoForApply firstChoiceUniversity,
UniversityInfoForApply secondChoiceUniversity,
UniversityInfoForApply thirdChoiceUniversity,
String nicknameForApply) {
this.siteUser = siteUser;
this.gpa = gpa;
this.languageTest = languageTest;
this.term = term;
this.updateCount = updateCount;
this.firstChoiceUniversity = firstChoiceUniversity;
this.secondChoiceUniversity = secondChoiceUniversity;
this.thirdChoiceUniversity = thirdChoiceUniversity;
this.nicknameForApply = nicknameForApply;
this.verifyStatus = PENDING;
}

public Application(
SiteUser siteUser,
Gpa gpa,
LanguageTest languageTest) {
LanguageTest languageTest,
String term,
UniversityInfoForApply firstChoiceUniversity,
UniversityInfoForApply secondChoiceUniversity,
UniversityInfoForApply thirdChoiceUniversity,
String nicknameForApply) {
this.siteUser = siteUser;
this.gpa = gpa;
this.languageTest = languageTest;
this.term = term;
this.updateCount = 0;
this.firstChoiceUniversity = firstChoiceUniversity;
this.secondChoiceUniversity = secondChoiceUniversity;
this.thirdChoiceUniversity = thirdChoiceUniversity;
this.nicknameForApply = nicknameForApply;
this.verifyStatus = PENDING;
}

public void setIsDeleteTrue() {
this.isDelete = true;
}

public void updateUniversityChoice(
UniversityInfoForApply firstChoiceUniversity,
UniversityInfoForApply secondChoiceUniversity,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@AllArgsConstructor
@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED)
@Embeddable
@EqualsAndHashCode(of = {"gpa", "gpaCriteria", "gpaReportUrl"})
public class Gpa {

@Column(nullable = false, name = "gpa")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@AllArgsConstructor
@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED)
@Embeddable
@EqualsAndHashCode(of = {"languageTestType", "languageTestScore", "languageTestReportUrl"})
public class LanguageTest {

@Column(nullable = false, name = "language_test_type", length = 10)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.example.solidconnection.application.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;

@Schema(description = "지원서 제출")
public record ApplyRequest(
@NotNull(message = "gpa score id를 입력해주세요.")
@Schema(description = "지원하는 유저의 gpa score id", example = "1")
Long gpaScoreId,

@NotNull(message = "language test score id를 입력해주세요.")
@Schema(description = "지원하는 유저의 language test score id", example = "1")
Long languageTestScoreId,

UniversityChoiceRequest universityChoiceRequest
) {
}
Comment on lines +6 to +18
Copy link
Collaborator

Choose a reason for hiding this comment

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

사용자가 직접 id 를 입력하도록 바뀌는 건가요?

Copy link
Member Author

@leesewon00 leesewon00 Nov 30, 2024

Choose a reason for hiding this comment

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

말씀하신 대로 토익과 토플 성적이 모두 등록될 수 있기에 여기서 골라서 지원하는 방식입니다.
유저가 화면상의 본인 성적을 선택하게되면 해당 성적의 id를 api로 전송하는 방식입니다.

회원마다 성적을 여러개를 보유할 수 있어서 선택하여 지원하는 방식으로 진행했습니다.

Copy link
Member Author

Choose a reason for hiding this comment

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

충분한 답변이 되었는지 잘 모르겠네요ㅜ
궁금한점 있으시면 말씀해주세요!

Copy link
Collaborator

@nayonsoso nayonsoso Dec 3, 2024

Choose a reason for hiding this comment

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

본인 성적을 선택하게되면 해당 성적의 id를 api로 전송하는 방식

아하 이해했습니다😊

Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.example.solidconnection.type.VerifyStatus;
import com.example.solidconnection.university.domain.UniversityInfoForApply;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
Expand All @@ -18,9 +20,8 @@ public interface ApplicationRepository extends JpaRepository<Application, Long>

boolean existsByNicknameForApply(String nicknameForApply);

Optional<Application> findTop1BySiteUser_EmailOrderByTermDesc(String email);

Optional<Application> findBySiteUserAndTerm(SiteUser siteUser, String term);
@Query("SELECT a FROM Application a WHERE a.siteUser = :siteUser AND a.term = :term AND a.isDelete = false")
Optional<Application> findBySiteUserAndTerm(@Param("siteUser") SiteUser siteUser, @Param("term") String term);

List<Application> findAllByFirstChoiceUniversityAndVerifyStatusAndTerm(UniversityInfoForApply firstChoiceUniversity, VerifyStatus verifyStatus, String term);

Expand Down
Loading