Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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 @@ -28,6 +28,7 @@
import kgu.developers.domain.thesis.application.command.ThesisCommandService;
import kgu.developers.domain.thesis.application.query.ThesisQueryService;
import kgu.developers.domain.thesis.domain.Thesis;
import kgu.developers.domain.user.application.query.UserQueryService;
import kgu.developers.domain.user.domain.User;
import mock.repository.FakeCertificateRepository;
import mock.repository.FakeFileRepository;
Expand Down Expand Up @@ -71,8 +72,10 @@ public void init() {
fakeThesisRepository = new FakeThesisRepository();
fakeCertificateRepository = new FakeCertificateRepository();

UserQueryService userQueryService = new UserQueryService(fakeUserRepository);

GraduationUserExcel graduationUserExcel = new GraduationUserExcelImpl();
GraduationUserQueryService graduationUserQueryService = new GraduationUserQueryService(fakeGraduationUserRepository, fakeThesisRepository, fakeCertificateRepository, graduationUserExcel);
GraduationUserQueryService graduationUserQueryService = new GraduationUserQueryService(userQueryService, fakeGraduationUserRepository, fakeThesisRepository, fakeCertificateRepository, graduationUserExcel);

FakeFileRepository fakeFileRepository = new FakeFileRepository();
FakeScheduleRepository fakeScheduleRepository = new FakeScheduleRepository();
Expand All @@ -89,14 +92,16 @@ public void init() {
fakeThesisRepository,
fileStorageService,
fileCommandService,
scheduleQueryService
scheduleQueryService,
graduationUserQueryService
);

CertificateCommandService certificateCommandService = new CertificateCommandService(
fakeCertificateRepository,
fileStorageService,
fileCommandService,
scheduleQueryService
scheduleQueryService,
graduationUserQueryService
);

fakeThesisRepository.save(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import kgu.developers.domain.graduationUser.application.command.GraduationUserCommandService;
import kgu.developers.domain.graduationUser.application.query.GraduationUserQueryService;
import kgu.developers.domain.graduationUser.domain.GraduationUser;
import kgu.developers.domain.user.application.query.UserQueryService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
Expand All @@ -14,16 +13,13 @@
public class CertificateFacade {

private final CertificateCommandService certificateCommandService;
private final UserQueryService userQueryService;
private final GraduationUserQueryService graduationUserQueryService;
private final GraduationUserCommandService graduationUserCommandService;

public Long submitCertificate(MultipartFile file, Long scheduleId) {
Long certificateId = certificateCommandService.submitCertificate(file,scheduleId);
String userId = userQueryService.getMyId();
GraduationUser graduationUser = graduationUserQueryService.getByUserId(userId);
GraduationUser graduationUser = graduationUserQueryService.me();
graduationUserCommandService.updateCertificate(graduationUser, certificateId);
return certificateId;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import kgu.developers.domain.graduationUser.application.query.GraduationUserQueryService;
import kgu.developers.domain.graduationUser.domain.GraduationType;
import kgu.developers.domain.graduationUser.domain.GraduationUser;
import kgu.developers.domain.user.application.query.UserQueryService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

Expand All @@ -14,25 +13,19 @@
public class GraduationUserFacade {
private final GraduationUserQueryService graduationUserQueryService;
private final GraduationUserCommandService graduationUserCommandService;
private final UserQueryService userQueryService;

public void updateGraduationType(GraduationType type) {
String userId = userQueryService.getMyId();
GraduationUser graduationUser = graduationUserQueryService.getByUserId(userId);
graduationUser.validateAccessPermission(userQueryService.getMyId());
GraduationUser graduationUser = graduationUserQueryService.me();
graduationUserCommandService.updateGraduationType(graduationUser,type);
}

public void updateGraduationUserEmail(String email) {
String userId = userQueryService.getMyId();
GraduationUser graduationUser = graduationUserQueryService.getByUserId(userId);
graduationUser.validateAccessPermission(userQueryService.getMyId());
GraduationUser graduationUser = graduationUserQueryService.me();
graduationUserCommandService.updateGraduationUserEmail(graduationUser,email);
}

public MyGraduationUserResponse getMyGraduationUser() {
String userId = userQueryService.getMyId();
GraduationUser graduationUser = graduationUserQueryService.getByUserId(userId);
GraduationUser graduationUser = graduationUserQueryService.me();
return MyGraduationUserResponse.from(graduationUser);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import kgu.developers.domain.schedule.application.query.ScheduleQueryService;
import kgu.developers.domain.schedule.domain.Schedule;
import kgu.developers.domain.thesis.application.command.ThesisCommandService;
import kgu.developers.domain.user.application.query.UserQueryService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
Expand All @@ -16,15 +15,13 @@
public class ThesisFacade {

private final ThesisCommandService thesisCommandService;
private final UserQueryService userQueryService;
private final GraduationUserQueryService graduationUserQueryService;
private final ScheduleQueryService scheduleQueryService;
private final GraduationUserCommandService graduationUserCommandService;

public Long submitThesis(MultipartFile file, Long scheduleId) {
Long thesisId = thesisCommandService.submitThesis(file,scheduleId);
String userId = userQueryService.getMyId();
GraduationUser graduationUser = graduationUserQueryService.getByUserId(userId);
GraduationUser graduationUser = graduationUserQueryService.me();

Schedule schedule = scheduleQueryService.getScheduleManagement(scheduleId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,18 @@ public class GraduationUserFacadeTest {
public void init() {
fakeGraduationUserRepository = new FakeGraduationUserRepository();
FakeUserRepository fakeUserRepository = new FakeUserRepository();
UserQueryService userQueryService = new UserQueryService(new FakeUserRepository());

GraduationUserQueryService graduationUserQueryService = new GraduationUserQueryService(fakeGraduationUserRepository,new FakeThesisRepository(), new FakeCertificateRepository(), new GraduationUserExcelImpl());
GraduationUserCommandService graduationUserCommandService = new GraduationUserCommandService(fakeGraduationUserRepository);
GraduationUserQueryService graduationUserQueryService = new GraduationUserQueryService(
userQueryService,
fakeGraduationUserRepository,
new FakeThesisRepository(),
new FakeCertificateRepository(),
new GraduationUserExcelImpl());

UserQueryService userQueryService = new UserQueryService(fakeUserRepository);
GraduationUserCommandService graduationUserCommandService = new GraduationUserCommandService(fakeGraduationUserRepository);
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
graduationuserFacade = new GraduationUserFacade(graduationUserQueryService,graduationUserCommandService,userQueryService);
graduationuserFacade = new GraduationUserFacade(graduationUserQueryService,graduationUserCommandService);

User user = fakeUserRepository.save(User.builder()
.id("202411345")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
package kgu.developers.common.exception;

import static kgu.developers.common.exception.AdminExceptionCode.NOT_ADMIN;
import static kgu.developers.common.exception.GlobalExceptionCode.INVALID_INPUT;
import static kgu.developers.common.exception.GlobalExceptionCode.SERVER_ERROR;
import static org.springframework.http.HttpStatus.FORBIDDEN;

import java.util.List;
import java.util.stream.Collectors;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.TypeMismatchException;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.MessageSourceResolvable;
Expand All @@ -23,8 +17,13 @@
import org.springframework.web.method.annotation.HandlerMethodValidationException;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.stream.Collectors;

import static kgu.developers.common.exception.AdminExceptionCode.NOT_ADMIN;
import static kgu.developers.common.exception.GlobalExceptionCode.INVALID_INPUT;
import static kgu.developers.common.exception.GlobalExceptionCode.SERVER_ERROR;
import static org.springframework.http.HttpStatus.FORBIDDEN;

@Slf4j
@RestControllerAdvice
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
package kgu.developers.domain.certificate.application.command;

import kgu.developers.domain.certificate.exception.CertificateNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import kgu.developers.domain.certificate.domain.Certificate;
import kgu.developers.domain.certificate.domain.CertificateRepository;
import kgu.developers.domain.certificate.exception.CertificateInvalidGraduationTypeException;
import kgu.developers.domain.certificate.exception.CertificateNotFoundException;
import kgu.developers.domain.certificate.exception.CertificateNotInSubmissionPeriodException;
import kgu.developers.domain.file.application.command.FileCommandService;
import kgu.developers.domain.file.domain.FileDomain;
import kgu.developers.domain.file.infrastructure.repository.FileStorageService;
import kgu.developers.domain.graduationUser.application.query.GraduationUserQueryService;
import kgu.developers.domain.graduationUser.domain.GraduationType;
import kgu.developers.domain.graduationUser.domain.GraduationUser;
import kgu.developers.domain.schedule.application.query.ScheduleQueryService;
import kgu.developers.domain.schedule.domain.Schedule;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDateTime;

@Service
@Transactional
Expand All @@ -21,11 +28,25 @@ public class CertificateCommandService {
private final FileStorageService fileStorageService;
private final FileCommandService fileCommandService;
private final ScheduleQueryService scheduleQueryService;
private final GraduationUserQueryService graduationUserQueryService;

public Long submitCertificate(MultipartFile file, Long scheduleId) {
Schedule schedule = scheduleQueryService.getScheduleManagement(scheduleId);

GraduationUser graduationUser = graduationUserQueryService.me();

if(graduationUser.getGraduationType() != GraduationType.CERTIFICATE) {
throw new CertificateInvalidGraduationTypeException();
}

LocalDateTime referenceTime = LocalDateTime.now();

if(!schedule.isInProgress(referenceTime)) {
throw new CertificateNotInSubmissionPeriodException();
}

String storedPath = fileStorageService.store(file, FileDomain.CERTIFICATE);
Long fileId = fileCommandService.saveFile(file, storedPath).getId();
scheduleQueryService.checkExistsOrThrow(scheduleId);

Certificate certificate = Certificate.create(scheduleId, fileId);
return certificateRepository.save(certificate);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@
import lombok.Getter;
import org.springframework.http.HttpStatus;

import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.NOT_FOUND;

@Getter
@AllArgsConstructor
public enum CertificateDomainExceptionCode implements ExceptionCode {
CERTIFICATE_NOT_FOUND(NOT_FOUND, "해당 자격증을 찾을 수 없습니다.");
CERTIFICATE_NOT_FOUND(NOT_FOUND, "해당 자격증을 찾을 수 없습니다."),
CERTIFICATE_NOT_IN_SUBMISSION_PERIOD_EXCEPTION(BAD_REQUEST, "현재 자격증 제출 기간이 아닙니다."),
CERTIFICATE_INVALID_GRADUATION_TYPE_EXCEPTION(BAD_REQUEST, "선택하신 제출 방식이 자격증이 아닙니다."),
;

private final HttpStatus status;
private final String message;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package kgu.developers.domain.certificate.exception;

import kgu.developers.common.exception.CustomException;

import static kgu.developers.domain.certificate.exception.CertificateDomainExceptionCode.CERTIFICATE_INVALID_GRADUATION_TYPE_EXCEPTION;

public class CertificateInvalidGraduationTypeException extends CustomException {
public CertificateInvalidGraduationTypeException() {
super(CERTIFICATE_INVALID_GRADUATION_TYPE_EXCEPTION);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package kgu.developers.domain.certificate.exception;

import kgu.developers.common.exception.CustomException;

import static kgu.developers.domain.certificate.exception.CertificateDomainExceptionCode.CERTIFICATE_NOT_IN_SUBMISSION_PERIOD_EXCEPTION;

public class CertificateNotInSubmissionPeriodException extends CustomException {
public CertificateNotInSubmissionPeriodException() {
super(CERTIFICATE_NOT_IN_SUBMISSION_PERIOD_EXCEPTION);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ private void validateId(String id) {
}

public void updateGraduationType(GraduationUser graduationUser, GraduationType type) {
graduationUser.validateAccessPermission(graduationUser.getUserId());

graduationUser.updateGraduationType(type);
graduationUserRepository.save(graduationUser);
}
Expand All @@ -39,6 +41,8 @@ public Long deleteGraduationUser(GraduationUser graduationUser) {
}

public void updateGraduationUserEmail(GraduationUser graduationUser, String email) {
graduationUser.validateAccessPermission(graduationUser.getUserId());

graduationUser.updateEmail(email);
graduationUserRepository.save(graduationUser);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import kgu.developers.domain.graduationUser.exception.GraduationUserNotFoundException;
import kgu.developers.domain.graduationUser.infrastructure.excel.GraduationUserExcelRow;
import kgu.developers.domain.thesis.domain.ThesisRepository;
import kgu.developers.domain.user.application.query.UserQueryService;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
Expand All @@ -20,6 +21,7 @@
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class GraduationUserQueryService {
private final UserQueryService userQueryService;
private final GraduationUserRepository graduationUserRepository;
private final ThesisRepository thesisRepository;
private final CertificateRepository certificateRepository;
Expand Down Expand Up @@ -108,4 +110,10 @@ public GraduationUser getByUserId(String userId) {
return graduationUserRepository.findByUserIdAndDeletedAtIsNull(userId)
.orElseThrow(GraduationUserNotFoundException::new);
}

public GraduationUser me() {
String userId = userQueryService.getMyId();
return graduationUserRepository.findByUserIdAndDeletedAtIsNull(userId)
.orElseThrow(GraduationUserNotFoundException::new);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,4 @@ public Schedule getBySubmissionType(SubmissionType submissionType) {
return scheduleRepository.findBySubmissionType(submissionType)
.orElseThrow(ScheduleNotFoundException::new);
}

public void checkExistsOrThrow(Long id) {
if (!scheduleRepository.existsById(id)) {
throw new ScheduleNotFoundException();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ public ScheduleStatus determineStatusAt(LocalDateTime referenceTime) {
}
return ScheduleStatus.IN_PROGRESS;
}

public boolean isInProgress(LocalDateTime referenceTime) {
return determineStatusAt(referenceTime) == ScheduleStatus.IN_PROGRESS;
}

public void updateSubmissionType(SubmissionType submissionType) {
this.submissionType = submissionType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,22 @@
import kgu.developers.domain.file.application.command.FileCommandService;
import kgu.developers.domain.file.domain.FileDomain;
import kgu.developers.domain.file.infrastructure.repository.FileStorageService;
import kgu.developers.domain.graduationUser.application.query.GraduationUserQueryService;
import kgu.developers.domain.graduationUser.domain.GraduationType;
import kgu.developers.domain.graduationUser.domain.GraduationUser;
import kgu.developers.domain.schedule.application.query.ScheduleQueryService;
import kgu.developers.domain.schedule.domain.Schedule;
import kgu.developers.domain.thesis.domain.Thesis;
import kgu.developers.domain.thesis.domain.ThesisRepository;
import kgu.developers.domain.thesis.exception.ThesisInvalidGraduationTypeException;
import kgu.developers.domain.thesis.exception.ThesisNotFoundException;
import kgu.developers.domain.thesis.exception.ThesisNotInSubmissionPeriodException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDateTime;

@Service
@Transactional
@RequiredArgsConstructor
Expand All @@ -20,11 +28,24 @@ public class ThesisCommandService {
private final FileStorageService fileStorageService;
private final FileCommandService fileCommandService;
private final ScheduleQueryService scheduleQueryService;
private final GraduationUserQueryService graduationUserQueryService;

public Long submitThesis(MultipartFile file, Long scheduleId) {
Schedule schedule = scheduleQueryService.getScheduleManagement(scheduleId);
LocalDateTime referenceTime = LocalDateTime.now();

GraduationUser graduationUser = graduationUserQueryService.me();

if(graduationUser.getGraduationType() != GraduationType.THESIS) {
throw new ThesisInvalidGraduationTypeException();
}

if(!schedule.isInProgress(referenceTime)) {
throw new ThesisNotInSubmissionPeriodException();
}

String storedPath = fileStorageService.store(file, FileDomain.THESIS);
Long fileId = fileCommandService.saveFile(file, storedPath).getId();
scheduleQueryService.checkExistsOrThrow(scheduleId);

Thesis thesis = Thesis.create(scheduleId, fileId);
return thesisRepository.save(thesis);
Expand Down
Loading
Loading