Skip to content

Commit bd6fb2c

Browse files
authored
Merge pull request #14 from Leets-Official/fix/#12/메일-발송-로직-수정
[fix] #12 메일 발송 로직 수정
2 parents 5865d99 + 15480c1 commit bd6fb2c

24 files changed

+214
-96
lines changed

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ dependencies {
2929
implementation 'org.springframework.boot:spring-boot-starter-mail'
3030
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
3131
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
32+
implementation 'org.springframework.boot:spring-boot-starter-web'
33+
implementation 'org.springframework.boot:spring-boot-starter-webflux'
3234

3335
compileOnly 'org.projectlombok:lombok'
3436
annotationProcessor 'org.projectlombok:lombok'

src/main/java/land/leets/domain/application/domain/Application.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,8 @@ public class Application extends BaseTimeEntity {
8787
@Column(columnDefinition = "char(10)")
8888
@Enumerated(EnumType.STRING)
8989
private SubmitStatus submitStatus;
90+
91+
public void updateInfo(LocalDateTime appliedAt) {
92+
this.appliedAt = appliedAt;
93+
}
9094
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package land.leets.domain.application.presentation.dto;
22

3+
import jakarta.validation.constraints.NotNull;
34
import land.leets.domain.application.type.ApplicationStatus;
45
import lombok.AllArgsConstructor;
56
import lombok.Getter;
67

78
@Getter
89
@AllArgsConstructor
910
public class StatusRequest {
11+
@NotNull
1012
private ApplicationStatus applicationStatus;
1113
}

src/main/java/land/leets/domain/application/usecase/CreateApplicationImpl.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import land.leets.domain.application.domain.repository.ApplicationRepository;
55
import land.leets.domain.application.exception.ApplicationAlreadyExistsException;
66
import land.leets.domain.application.presentation.dto.ApplicationRequest;
7-
import land.leets.domain.application.type.SubmitStatus;
87
import land.leets.domain.auth.AuthDetails;
98
import land.leets.domain.user.domain.User;
109
import land.leets.domain.user.domain.repository.UserRepository;
@@ -14,6 +13,8 @@
1413

1514
import java.time.LocalDateTime;
1615

16+
import static land.leets.domain.application.type.SubmitStatus.SUBMIT;
17+
1718
@Service
1819
@RequiredArgsConstructor
1920
public class CreateApplicationImpl implements CreateApplication {
@@ -28,15 +29,9 @@ public Application execute(AuthDetails authDetails, ApplicationRequest request)
2829
throw new ApplicationAlreadyExistsException();
2930
}
3031

31-
user.setSid(request.getSid());
32-
user.setPhone(request.getPhone());
32+
user.updateUserInfo(request.getSid(), request.getPhone());
3333
userRepository.save(user);
3434

35-
LocalDateTime appliedAt = null;
36-
if (request.getSubmitStatus() == SubmitStatus.SUBMIT) {
37-
appliedAt = LocalDateTime.now();
38-
}
39-
4035
Application application = Application.builder()
4136
.user(user)
4237
.name(request.getName())
@@ -56,9 +51,8 @@ public Application execute(AuthDetails authDetails, ApplicationRequest request)
5651
.enhancement(request.getEnhancement())
5752
.goal(request.getGoal())
5853
.submitStatus(request.getSubmitStatus())
59-
.appliedAt(appliedAt)
54+
.appliedAt(request.getSubmitStatus() == SUBMIT ? LocalDateTime.now() : null)
6055
.build();
61-
6256
return applicationRepository.save(application);
6357
}
6458
}

src/main/java/land/leets/domain/application/usecase/GetAllApplicationImpl.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import org.springframework.stereotype.Service;
1212

1313
import java.util.List;
14-
import java.util.stream.Collectors;
1514

1615
@Service
1716
@RequiredArgsConstructor
@@ -28,7 +27,7 @@ public List<ApplicationResponse> execute() {
2827
String phone = application.getUser().getPhone();
2928
return applicationMapper.mappingToDto(application, interview, phone);
3029
})
31-
.collect(Collectors.toList());
30+
.toList();
3231
}
3332

3433
@Override
@@ -42,7 +41,7 @@ public List<ApplicationResponse> execute(String position, String status) {
4241
String phone = application.getUser().getPhone();
4342
return applicationMapper.mappingToDto(application, interview, phone);
4443
})
45-
.collect(Collectors.toList());
44+
.toList();
4645
}
4746

4847
SubmitStatus filter = SubmitStatus.valueOf(status.toUpperCase());
@@ -52,7 +51,6 @@ public List<ApplicationResponse> execute(String position, String status) {
5251
String phone = application.getUser().getPhone();
5352
return applicationMapper.mappingToDto(application, interview, phone);
5453
})
55-
.collect(Collectors.toList());
56-
54+
.toList();
5755
}
5856
}

src/main/java/land/leets/domain/application/usecase/UpdateApplicationImpl.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import land.leets.domain.application.exception.ApplicationNotFoundException;
66
import land.leets.domain.application.presentation.dto.ApplicationRequest;
77
import land.leets.domain.application.presentation.mapper.ApplicationMapper;
8-
import land.leets.domain.application.type.SubmitStatus;
98
import land.leets.domain.auth.AuthDetails;
109
import land.leets.domain.user.usecase.UpdateUser;
1110
import lombok.RequiredArgsConstructor;
@@ -15,6 +14,8 @@
1514
import java.time.LocalDateTime;
1615
import java.util.UUID;
1716

17+
import static land.leets.domain.application.type.SubmitStatus.SUBMIT;
18+
1819
@Service
1920
@RequiredArgsConstructor
2021
public class UpdateApplicationImpl implements UpdateApplication {
@@ -32,12 +33,8 @@ public Application execute(AuthDetails authDetails, ApplicationRequest request)
3233
Application application = applicationRepository.findByUser_Uid(uid).orElseThrow(ApplicationNotFoundException::new);
3334
applicationMapper.updateApplicationFromDto(application, request);
3435

35-
LocalDateTime appliedAt = null;
36-
if (request.getSubmitStatus() == SubmitStatus.SUBMIT) {
37-
appliedAt = LocalDateTime.now();
38-
}
39-
application.setAppliedAt(appliedAt);
40-
36+
LocalDateTime appliedAt = request.getSubmitStatus() == SUBMIT ? LocalDateTime.now() : null;
37+
application.updateInfo(appliedAt);
4138
return applicationRepository.save(application);
4239
}
4340
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package land.leets.domain.interview.exception;
2+
3+
import land.leets.global.error.ErrorCode;
4+
import land.leets.global.error.exception.ServiceException;
5+
6+
public class InterviewNotFoundException extends ServiceException {
7+
public InterviewNotFoundException() {
8+
super(ErrorCode.INTERVIEW_NOT_FOUND);
9+
}
10+
}

src/main/java/land/leets/domain/interview/presentation/InterviewController.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,23 @@
99
import land.leets.domain.interview.domain.Interview;
1010
import land.leets.domain.interview.presentation.dto.req.FixedInterviewRequest;
1111
import land.leets.domain.interview.presentation.dto.req.InterviewAttendanceRequest;
12+
import land.leets.domain.interview.type.HasInterview;
1213
import land.leets.domain.interview.usecase.UpdateInterview;
14+
import land.leets.domain.mail.usecase.CreateInterviewRequest;
1315
import land.leets.global.error.ErrorResponse;
1416
import lombok.RequiredArgsConstructor;
1517
import org.springframework.web.bind.annotation.*;
18+
import org.springframework.web.servlet.view.RedirectView;
19+
20+
import java.util.UUID;
1621

1722
@RestController
1823
@RequiredArgsConstructor
1924
@RequestMapping("/interview")
2025
@Tag(name = "INTERVIEW")
2126
public class InterviewController {
2227
private final UpdateInterview updateInterview;
28+
private final CreateInterviewRequest createInterviewRequest;
2329

2430
@Operation(summary = "(유저) 면접 참여 여부 변경", description = "면접 참여 여부를 변경합니다.")
2531
@ApiResponses({
@@ -29,7 +35,7 @@ public class InterviewController {
2935
@ApiResponse(responseCode = "404", content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
3036
@ApiResponse(responseCode = "500", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
3137
})
32-
@PostMapping()
38+
@PatchMapping
3339
public Interview update(@RequestBody InterviewAttendanceRequest request) {
3440
return updateInterview.byUser(request);
3541
}
@@ -46,4 +52,20 @@ public Interview update(@RequestBody InterviewAttendanceRequest request) {
4652
public Interview update(@PathVariable Long id, @RequestBody FixedInterviewRequest request) {
4753
return updateInterview.byAdmin(id, request);
4854
}
55+
56+
@Operation(summary = "(유저) 면접 여부 변경 요청 생성하기", description = "면접 참가 여부 변경 요청을 생성합니다.")
57+
@ApiResponses({
58+
@ApiResponse(responseCode = "200"),
59+
@ApiResponse(responseCode = "400", content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
60+
@ApiResponse(responseCode = "403", content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
61+
@ApiResponse(responseCode = "404", content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
62+
@ApiResponse(responseCode = "500", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
63+
})
64+
@GetMapping
65+
public RedirectView hasInterview(@RequestParam UUID uid, @RequestParam HasInterview hasInterview) {
66+
createInterviewRequest.execute(uid, hasInterview);
67+
RedirectView redirectView = new RedirectView();
68+
redirectView.setUrl("https://www.leets.land");
69+
return redirectView;
70+
}
4971
}

src/main/java/land/leets/domain/interview/presentation/dto/req/InterviewAttendanceRequest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
import lombok.AllArgsConstructor;
66
import lombok.Getter;
77

8+
import java.util.UUID;
9+
810
@Getter
911
@AllArgsConstructor
1012
public class InterviewAttendanceRequest {
1113
@NotNull
12-
private String email;
14+
private UUID uid;
1315

1416
@NotNull
1517
private HasInterview hasInterview;

src/main/java/land/leets/domain/interview/usecase/GetInterviewDetailsImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import land.leets.domain.application.domain.Application;
44
import land.leets.domain.interview.domain.Interview;
55
import land.leets.domain.interview.domain.repository.InterviewRepository;
6+
import land.leets.domain.interview.exception.InterviewNotFoundException;
67
import land.leets.domain.interview.presentation.dto.res.InterviewDetailsResponse;
78
import land.leets.domain.interview.presentation.mapper.InterviewMapper;
89
import lombok.RequiredArgsConstructor;
@@ -16,7 +17,7 @@ public class GetInterviewDetailsImpl implements GetInterviewDetails {
1617

1718
@Override
1819
public InterviewDetailsResponse execute(Application application) {
19-
Interview interview = interviewRepository.findByApplication(application).orElseThrow(); //TODO 예외처리
20+
Interview interview = interviewRepository.findByApplication(application).orElseThrow(InterviewNotFoundException::new);
2021
return interviewMapper.mappingDetailsToDto(interview);
2122
}
2223
}

0 commit comments

Comments
 (0)