Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat-be: 지원서 수정 기능 구현 #266

Merged
merged 4 commits into from
Aug 6, 2024
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 @@ -3,6 +3,7 @@
import com.cruru.applicant.controller.dto.ApplicantBasicResponse;
import com.cruru.applicant.controller.dto.ApplicantDetailResponse;
import com.cruru.applicant.controller.dto.ApplicantMoveRequest;
import com.cruru.applicant.controller.dto.ApplicantUpdateRequest;
import com.cruru.applicant.service.ApplicantService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -48,4 +49,12 @@ public ResponseEntity<ApplicantDetailResponse> reject(@PathVariable("applicant_i
applicantService.reject(applicantId);
return ResponseEntity.ok().build();
}

@PatchMapping("/{applicantId}")
private ResponseEntity<Void> update(
@PathVariable("applicantId") Long applicantId,
@RequestBody @Valid ApplicantUpdateRequest request) {
applicantService.update(request, applicantId);
return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.cruru.applicant.controller.dto;

import jakarta.validation.constraints.NotBlank;

public record ApplicantUpdateRequest(
@NotBlank(message = "이름은 필수 값입니다.")
String name,

@NotBlank(message = "이메일은 필수 값입니다.")
String email,

@NotBlank(message = "전화번호는 필수 값입니다.")
String phone
) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@ public Applicant(String name, String email, String phone, Process process, Boole
this.isRejected = isRejected;
}

public void updateInfo(String name, String email, String phone) {
this.name = name;
this.email = email;
this.phone = phone;
}

public void updateProcess(Process process) {
this.process = process;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.cruru.applicant.controller.dto.ApplicantDetailResponse;
import com.cruru.applicant.controller.dto.ApplicantMoveRequest;
import com.cruru.applicant.controller.dto.ApplicantResponse;
import com.cruru.applicant.controller.dto.ApplicantUpdateRequest;
import com.cruru.applicant.controller.dto.QnaResponse;
import com.cruru.applicant.domain.Applicant;
import com.cruru.applicant.domain.repository.ApplicantRepository;
Expand Down Expand Up @@ -93,4 +94,12 @@ private void validateRejectable(Applicant applicant) {
throw new ApplicantRejectException();
}
}

@Transactional
public void update(ApplicantUpdateRequest request, long applicantId) {
Applicant applicant = applicantRepository.findById(applicantId)
.orElseThrow(ApplicantNotFoundException::new);

applicant.updateInfo(request.name(), request.email(), request.phone());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import static com.cruru.util.fixture.ProcessFixture.createFirstProcess;

import com.cruru.applicant.controller.dto.ApplicantMoveRequest;
import com.cruru.applicant.controller.dto.ApplicantUpdateRequest;
import com.cruru.applicant.domain.Applicant;
import com.cruru.applicant.domain.repository.ApplicantRepository;
import com.cruru.dashboard.domain.Dashboard;
Expand Down Expand Up @@ -87,4 +88,22 @@ void reject() {
.when().patch("/v1/applicants/" + applicant.getId() + "/reject")
.then().log().all().statusCode(200);
}

@DisplayName("지원자 정보 변경에 성공하면 200을 응답한다.")
@Test
void update() {
// given
String toChangeName = "도비";
String toChangeEmail = "dev.dobby@gmail.com";
String toChangePhone = "010111111111";
Applicant applicant = applicantRepository.save(createApplicantDobby());
ApplicantUpdateRequest request = new ApplicantUpdateRequest(toChangeName, toChangeEmail, toChangePhone);

// when&then
RestAssured.given().log().all()
.contentType(ContentType.JSON)
.body(request)
.when().patch("/v1/applicants/" + applicant.getId())
.then().log().all().statusCode(200);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.cruru.applicant.domain;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

@DisplayName("지원서 도메인 테스트")
class ApplicantTest {

@DisplayName("지원자 이름, 이메일, 전화번호 변경에 성공한다.")
@Test
void updateInfo() {
// given
String toChangeName = "초코칩";
String toChangeEmail = "dev.chocochip@gmail.com";
String toChangePhone = "01000000000";

Applicant applicant = new Applicant(null, null, null, null, false);

// when
applicant.updateInfo(toChangeName, toChangeEmail, toChangePhone);

// then
assertAll(
() -> assertThat(applicant.getName()).isEqualTo(toChangeName),
() -> assertThat(applicant.getEmail()).isEqualTo(toChangeEmail),
() -> assertThat(applicant.getPhone()).isEqualTo(toChangePhone),
() -> assertThat(applicant.getProcess()).isNull()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.cruru.applicant.controller.dto.ApplicantDetailResponse;
import com.cruru.applicant.controller.dto.ApplicantMoveRequest;
import com.cruru.applicant.controller.dto.ApplicantResponse;
import com.cruru.applicant.controller.dto.ApplicantUpdateRequest;
import com.cruru.applicant.controller.dto.QnaResponse;
import com.cruru.applicant.domain.Applicant;
import com.cruru.applicant.domain.repository.ApplicantRepository;
Expand All @@ -31,6 +32,7 @@
import com.cruru.util.ServiceTest;
import jakarta.persistence.EntityManager;
import java.util.List;
import java.util.Optional;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -169,4 +171,43 @@ void reject_alreadyRejected() {
assertThatThrownBy(() -> applicantService.reject(applicant.getId()))
.isInstanceOf(ApplicantRejectException.class);
}

@DisplayName("지원자의 이름, 이메일, 전화번호 변경에 성공한다.")
@Test
void update() {
// given
String toChangeName = "도비";
String toChangeEmail = "dev.dobby@gmail.com";
String toChangePhone = "010111111111";
Applicant applicant = applicantRepository.save(createApplicantDobby());
ApplicantUpdateRequest request = new ApplicantUpdateRequest(toChangeName, toChangeEmail, toChangePhone);

// when
applicantService.update(request, applicant.getId());

// then
Optional<Applicant> changedApplicant = applicantRepository.findById(applicant.getId());
assertAll(
() -> assertThat(changedApplicant).isPresent(),
() -> assertThat(changedApplicant.get().getName()).isEqualTo(toChangeName),
() -> assertThat(changedApplicant.get().getEmail()).isEqualTo(toChangeEmail),
() -> assertThat(changedApplicant.get().getPhone()).isEqualTo(toChangePhone),
() -> assertThat(changedApplicant.get().getProcess()).isEqualTo(createApplicantDobby().getProcess())
);
}

@DisplayName("지원자가 존재하지 않으면 예외가 발생한다.")
@Test
void update_applicantNotFound() {
// given
String toChangeName = "도비";
String toChangeEmail = "dev.dobby@gmail.com";
String toChangePhone = "010111111111";
ApplicantUpdateRequest request = new ApplicantUpdateRequest(toChangeName, toChangeEmail, toChangePhone);
long invalidId = -1L;

// when&then
assertThatThrownBy(() -> applicantService.update(request, invalidId))
.isInstanceOf(ApplicantNotFoundException.class);
}
}