diff --git a/.gitignore b/.gitignore index 80524f4..b9b1a83 100644 --- a/.gitignore +++ b/.gitignore @@ -20,8 +20,6 @@ bin/ ### IntelliJ IDEA ### application.properties -application.yml -.env .idea *.iws *.iml @@ -38,4 +36,4 @@ out/ /.nb-gradle/ ### VS Code ### -.vscode/ +.vscode/ \ No newline at end of file diff --git a/build.gradle b/build.gradle index d85a2a8..767144d 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-security' - implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' testImplementation 'org.springframework.security:spring-security-test' @@ -53,9 +53,6 @@ dependencies { annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor 'jakarta.annotation:jakarta.annotation-api' annotationProcessor 'jakarta.persistence:jakarta.persistence-api' - implementation 'org.postgresql:postgresql' - - } tasks.named('test') { @@ -68,4 +65,4 @@ jar { clean { delete file('src/main/generated') -} +} \ No newline at end of file diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/SemtleWebServerSpringApplication.java b/src/main/java/com/archisemtle/semtlewebserverspring/SemtleWebServerSpringApplication.java index 08db5b9..15a2ba3 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/SemtleWebServerSpringApplication.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/SemtleWebServerSpringApplication.java @@ -10,5 +10,4 @@ public static void main(String[] args) { SpringApplication.run(SemtleWebServerSpringApplication.class, args); } - } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/application/ApplyProjectService.java b/src/main/java/com/archisemtle/semtlewebserverspring/application/ApplyProjectService.java index ca65cb1..97a3aa7 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/application/ApplyProjectService.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/application/ApplyProjectService.java @@ -4,5 +4,5 @@ import com.archisemtle.semtlewebserverspring.dto.ApplyProjectResponseDto; public interface ApplyProjectService { - ApplyProjectResponseDto applyProject(ApplyProjectRequestDto applyProjectRequestDto) throws Exception; + ApplyProjectResponseDto applyProject(Integer boardId, Integer applicantId, ApplyProjectRequestDto applyProjectRequestDto) throws Exception; } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/application/ApplyProjectServiceImpl.java b/src/main/java/com/archisemtle/semtlewebserverspring/application/ApplyProjectServiceImpl.java index a61fcae..ff67c34 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/application/ApplyProjectServiceImpl.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/application/ApplyProjectServiceImpl.java @@ -1,28 +1,33 @@ package com.archisemtle.semtlewebserverspring.application; +import static com.archisemtle.semtlewebserverspring.common.BaseResponseStatus.NO_DATA; + import com.archisemtle.semtlewebserverspring.common.BaseException; import com.archisemtle.semtlewebserverspring.common.BaseResponseStatus; -import com.archisemtle.semtlewebserverspring.domain.Apply; +import com.archisemtle.semtlewebserverspring.domain.Applicants; +import com.archisemtle.semtlewebserverspring.domain.Application; import com.archisemtle.semtlewebserverspring.domain.Member; import com.archisemtle.semtlewebserverspring.domain.ProjectBoard; -import com.archisemtle.semtlewebserverspring.domain.ProjectJoinFile; -import com.archisemtle.semtlewebserverspring.domain.ProjectJoinUrl; +import com.archisemtle.semtlewebserverspring.domain.ProjectTypeCategory; +import com.archisemtle.semtlewebserverspring.domain.RelationFieldProjectPostMiddle; import com.archisemtle.semtlewebserverspring.dto.ApplyProjectRequestDto; +import com.archisemtle.semtlewebserverspring.dto.ApplyProjectRequestDto.FileDto; import com.archisemtle.semtlewebserverspring.dto.ApplyProjectResponseDto; -import com.archisemtle.semtlewebserverspring.infrastructure.ApplyRepository; +import com.archisemtle.semtlewebserverspring.infrastructure.ApplicantsRepository; +import com.archisemtle.semtlewebserverspring.infrastructure.ApplicationRepository; import com.archisemtle.semtlewebserverspring.infrastructure.MemberRepository; import com.archisemtle.semtlewebserverspring.infrastructure.ProjectBoardRepository; -import com.archisemtle.semtlewebserverspring.infrastructure.ProjectJoinFileRepository; -import com.archisemtle.semtlewebserverspring.infrastructure.ProjectJoinUrlRepository; +import com.archisemtle.semtlewebserverspring.infrastructure.RelationFieldProjectPostMiddleRepository; +import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.chrono.ChronoLocalDateTime; +import java.util.Date; import java.util.List; -import java.util.UUID; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -32,76 +37,89 @@ @Transactional(readOnly = true) public class ApplyProjectServiceImpl implements ApplyProjectService { + private final ApplicantsRepository applicantsRepository; + private final ApplicationRepository applicationRepository; private final MemberRepository memberRepository; - private final ApplyRepository applyRepository; private final ProjectBoardRepository projectBoardRepository; - private final ProjectJoinFileRepository projectJoinFileRepository; - private final ProjectJoinUrlRepository projectJoinUrlRepository; + private final RelationFieldProjectPostMiddleRepository relationFieldProjectPostMiddleRepository; @Override @Transactional - public ApplyProjectResponseDto applyProject(ApplyProjectRequestDto applyProjectRequestDto) { - - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - UUID uuid = UUID.fromString(authentication.getName()); + public ApplyProjectResponseDto applyProject(Integer boardId,Integer applicantId, ApplyProjectRequestDto applyProjectRequestDto) + throws Exception { + ProjectBoard projectBoard = projectBoardRepository.findById(Long.valueOf(boardId)) + .orElseThrow(() -> new BaseException(NO_DATA)); //todo 나중에 BaseResponseStatue 수정 필요 - if(applyProjectRequestDto == null) { - throw new BaseException(BaseResponseStatus.WRONG_PARAM); - } + LocalDateTime now = LocalDateTime.now(); - ProjectBoard projectBoard = projectBoardRepository.findById(applyProjectRequestDto.getPostId()) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NO_BOARD_FOUND)); + LocalDate endDateTime = projectBoard.getProjectRecruitingEndTime(); - if(LocalDate.now().isBefore(projectBoard.getProjectRecruitingEndTime().plusDays(1))) { - Member member = memberRepository.findByUuid(uuid) + if(now.isBefore(ChronoLocalDateTime.from(endDateTime))) { + Member member = memberRepository.findById(applicantId) .orElseThrow(() -> new BaseException( BaseResponseStatus.NO_EXIST_MEMBERS)); - if(projectBoard.getWriterUuid().equals(member.getUuid().toString())) { - throw new BaseException(BaseResponseStatus.SAME_WRITER); - } - - - Apply existingApply = applyRepository.findByMemberAndProjectBoardId(member, applyProjectRequestDto.getPostId()); - - if (existingApply != null) { - throw new BaseException(BaseResponseStatus.DUPLICATE_APPLY); - } - - Apply apply = Apply.builder() - .member(member) - .projectBoard(projectBoard) - .applyDate(LocalDateTime.now()) - .status("대기") - .updatedAt(LocalDateTime.now()) - .answer(applyProjectRequestDto.getAnswer()) + Date applyDate = Date.from( + LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()); + + String updatedAt = LocalDateTime.now() + .atZone(ZoneId.of("UTC")) + .format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")); + + Applicants applicants = Applicants.builder() + .name(member.getUsername()) + .applyDate(applyDate) + .status("대기") // 기본값 + .email(member.getEmail()) + .phone(member.getPhone()) + .resumeUrl(applyProjectRequestDto.getFiles().stream() + .filter(file -> file.getFileName().equals("resume.pdf")) + .map(FileDto::getFileUrl) + .findFirst() + .orElse(null)) + .portfolioUrl(applyProjectRequestDto.getUrls().stream() + .findFirst() + .orElse(null)) + .customAnswer("답변 내용") + .updatedAt(updatedAt) + .boardId(boardId) .build(); - applyRepository.save(apply); + applicantsRepository.save(applicants); - List projectJoinUrls = applyProjectRequestDto.getUrls().stream() - .map(url -> ProjectJoinUrl.builder() - .url(url) - .apply(apply) - .build()) - .collect(Collectors.toList()); + ProjectTypeCategory projectTypeName = projectBoard.getProjectTypeCategory(); // project_type_category_name 가져오기 - projectJoinUrlRepository.saveAll(projectJoinUrls); + List relationFieldProjectPostMiddles = relationFieldProjectPostMiddleRepository.findAllByProjectBoardId(Long.valueOf(boardId)); - List projectJoinFiles = applyProjectRequestDto.getFileUrls().stream() - .map(fileUrl -> ProjectJoinFile.builder() - .file(fileUrl) - .apply(apply) - .build()) + List relationFieldNames = relationFieldProjectPostMiddles.stream() + .map(relationField -> relationField.getRelationFieldCategory().getName()) // 이름 가져오기 .collect(Collectors.toList()); - projectJoinFileRepository.saveAll(projectJoinFiles); + String questionAnswers = applyProjectRequestDto.getAnswers().stream() + .map(ApplyProjectRequestDto.AnswerDto::getAnswer) // answer만 추출 + .collect(Collectors.joining("*|*")); // 구분자를 사용하여 하나의 문자열로 변환 + + Application application = Application.builder() + .applicantId(applicants.getApplicantId()) + .projectTitle(projectBoard.getTitle()) + .boardId(boardId) + .applyDate(applyDate) + .status("대기") // 수정됨. + .projectType(projectTypeName.getName()) + .relateField(relationFieldNames.toString()) + .questionAnswer(questionAnswers) + .build(); + applicationRepository.save(application); - ApplyProjectResponseDto applyProjectResponseDto = ApplyProjectResponseDto.entityToDto(apply); - return applyProjectResponseDto; + // 응답 DTO 생성 + ApplyProjectResponseDto successResponseDto = ApplyProjectResponseDto.entityToDto(application); + + return successResponseDto; }else{ - throw new BaseException(BaseResponseStatus.RECRUITING_ALREADY_ENDED); + ApplyProjectResponseDto failResponseDto = ApplyProjectResponseDto.entityToDto(null); + + return failResponseDto; } } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectApplicationService.java b/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectApplicationService.java index e52f044..6765b28 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectApplicationService.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectApplicationService.java @@ -1,14 +1,15 @@ package com.archisemtle.semtlewebserverspring.application; + +import com.archisemtle.semtlewebserverspring.dto.ChangeApplyStatusRequestDto; import com.archisemtle.semtlewebserverspring.dto.ChangeApplyStatusResponseDto; import com.archisemtle.semtlewebserverspring.dto.ProjectApplicantsResponseDto; import com.archisemtle.semtlewebserverspring.dto.ShowApplyingProjectInfoResponseDto; import com.archisemtle.semtlewebserverspring.dto.ShowProjectApplicantInfoResponseDto; -import java.util.UUID; public interface ProjectApplicationService { - ProjectApplicantsResponseDto getApplicants(Long boardId, int page, int limit) throws Exception; - ShowProjectApplicantInfoResponseDto getApplicantInfo(Long boardId,UUID uuid) throws Exception; - ChangeApplyStatusResponseDto changeApplyStatus(Long boardId,UUID uuid, String status) throws Exception; - ShowApplyingProjectInfoResponseDto getApplyingProjectInfo(int page, int limit) throws Exception; + ProjectApplicantsResponseDto getApplicants(Integer boardId, int page, int limit) throws Exception; + ShowProjectApplicantInfoResponseDto getApplicantInfo(Integer boardId,Integer applicantId) throws Exception; + ChangeApplyStatusResponseDto changeApplyStatus(Integer boardId,Integer applicantId, String status) throws Exception; + ShowApplyingProjectInfoResponseDto getApplyingProjectInfo(Integer applicantId,int page, int limit) throws Exception; } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectApplicationServiceImpl.java b/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectApplicationServiceImpl.java index 1364531..150f8fd 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectApplicationServiceImpl.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectApplicationServiceImpl.java @@ -2,26 +2,24 @@ import com.archisemtle.semtlewebserverspring.common.BaseException; import com.archisemtle.semtlewebserverspring.common.BaseResponseStatus; -import com.archisemtle.semtlewebserverspring.domain.Apply; import com.archisemtle.semtlewebserverspring.domain.Member; -import com.archisemtle.semtlewebserverspring.domain.ProjectBoard; +import com.archisemtle.semtlewebserverspring.domain.Applicants; +import com.archisemtle.semtlewebserverspring.domain.Application; +import com.archisemtle.semtlewebserverspring.dto.ChangeApplyStatusRequestDto; import com.archisemtle.semtlewebserverspring.dto.ChangeApplyStatusResponseDto; import com.archisemtle.semtlewebserverspring.dto.ProjectApplicantsResponseDto; import com.archisemtle.semtlewebserverspring.dto.ShowApplyingProjectInfoResponseDto; import com.archisemtle.semtlewebserverspring.dto.ShowProjectApplicantInfoResponseDto; -import com.archisemtle.semtlewebserverspring.infrastructure.ApplyRepository; -import com.archisemtle.semtlewebserverspring.infrastructure.MemberRepository; -import com.archisemtle.semtlewebserverspring.infrastructure.ProjectBoardRepository; -import com.archisemtle.semtlewebserverspring.infrastructure.RelationFieldProjectPostMiddleRepository; +import com.archisemtle.semtlewebserverspring.infrastructure.ApplicantsRepository; +import com.archisemtle.semtlewebserverspring.infrastructure.ApplicationRepository; +import java.sql.Timestamp; import java.time.LocalDateTime; -import java.util.UUID; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -31,33 +29,33 @@ @Transactional(readOnly = true) public class ProjectApplicationServiceImpl implements ProjectApplicationService { - private final ApplyRepository applyRepository; - private final MemberRepository memberRepository; - private final ProjectBoardRepository projectBoardRepository; - private final RelationFieldProjectPostMiddleRepository relationFieldProjectPostMiddleRepository; + private final ApplicantsRepository applicantsRepository; + private final ApplicationRepository applicationRepository; @Override - public ProjectApplicantsResponseDto getApplicants(Long postId, int page, int limit) { - if(postId == null || page == 0 || limit == 0) { - throw new BaseException(BaseResponseStatus.WRONG_PARAM); - } - - ProjectBoard projectBoard = projectBoardRepository.findById(postId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NO_BOARD_FOUND)); + public ProjectApplicantsResponseDto getApplicants(Integer boardId, int page, int limit) + throws Exception { - Pageable pageable = PageRequest.of(page - 1, limit); - Page applyPage = applyRepository.findByProjectBoard( - projectBoard, + // 게시글 ID로 지원자 목록 조회 (페이징 처리) + Pageable pageable = PageRequest.of(page - 1, limit); // Pageable로 선언 + Page applicantsPage = applicantsRepository.findAllWithApplication( + boardId, pageable ); - if (applyPage == null) { - throw new BaseException(BaseResponseStatus.NO_APPLICANTS); + // 결과가 비어있거나 지원자 목록 조회에 실패한 경우 처리 + if (applicantsPage.isEmpty()) { + throw new BaseException(BaseResponseStatus.APPLICATION_NOT_FOUND); } + // 지원자 정보를 DTO로 변환 + List applicants = applicantsPage.getContent(); + + // DTO 생성 ProjectApplicantsResponseDto projectApplicantsResponseDto = ProjectApplicantsResponseDto.entityToDto( - applyPage, - page + applicants, + page, + (int) applicantsPage.getTotalElements() ); return projectApplicantsResponseDto; @@ -65,91 +63,66 @@ public ProjectApplicantsResponseDto getApplicants(Long postId, int page, int lim @Override - public ShowProjectApplicantInfoResponseDto getApplicantInfo(Long postId, UUID uuid) { - if(postId == null || uuid == null) { - throw new BaseException(BaseResponseStatus.WRONG_PARAM); - } - Member member = memberRepository.findByUuid(uuid) - .orElseThrow(() -> new BaseException( - BaseResponseStatus.NO_EXIST_MEMBERS)); - - Apply apply = applyRepository.findByMemberAndProjectBoardId(member, postId); - if(apply == null) { - throw new BaseException(BaseResponseStatus.NO_APPLICANTS); - } + public ShowProjectApplicantInfoResponseDto getApplicantInfo(Integer boardId, Integer applicantId) throws Exception { + Applicants applicants = applicantsRepository.findByBoardIdAndApplicantId(boardId, applicantId).orElseThrow(() -> new BaseException( + BaseResponseStatus.NO_APPLICANT_FOUND)); ShowProjectApplicantInfoResponseDto showProjectApplicantInfoResponseDto = ShowProjectApplicantInfoResponseDto.entityToDto( - apply); + applicants); return showProjectApplicantInfoResponseDto; } @Override @Transactional - public ChangeApplyStatusResponseDto changeApplyStatus(Long postId, UUID uuid, String status) { - - if(postId == null || uuid == null || status == null) { - throw new BaseException(BaseResponseStatus.WRONG_PARAM); - } - Member member = memberRepository.findByUuid(uuid) - .orElseThrow(() -> new BaseException( - BaseResponseStatus.NO_EXIST_MEMBERS)); - - Apply apply = applyRepository.findByMemberAndProjectBoardId(member, postId); - - if (apply == null) { - throw new BaseException(BaseResponseStatus.NO_APPLICATIONS); - } - - if(!(status.equals("승인") || status.equals("대기") || status.equals("반려"))) { - throw new BaseException(BaseResponseStatus.FALSE_STATUS); - } - - if(apply.getStatus().equals(status)) { - throw new BaseException(BaseResponseStatus.PROCESSED_APPLY); - } - - Apply updatedApply = Apply.builder() - .applyId(apply.getApplyId()) - .member(apply.getMember()) - .projectBoard(apply.getProjectBoard()) - .applyDate(apply.getApplyDate()) + public ChangeApplyStatusResponseDto changeApplyStatus(Integer boardId, Integer applicantId, + String status) throws Exception { + // 신청자 정보 조회 + Applicants applicants = applicantsRepository.findByBoardIdAndApplicantId(boardId, applicantId).orElseThrow(() -> new BaseException( + BaseResponseStatus.NO_APPLICANT_FOUND)); + + Applicants updatedApplicants = Applicants.builder() + .applicantId(applicants.getApplicantId()) + .name(applicants.getName()) + .applyDate(applicants.getApplyDate()) .status(status) - .updatedAt(LocalDateTime.now()) - .answer(apply.getAnswer()) + .email(applicants.getEmail()) + .phone(applicants.getPhone()) + .resumeUrl(applicants.getResumeUrl()) + .portfolioUrl(applicants.getPortfolioUrl()) + .customAnswer(applicants.getCustomAnswer()) + .additionalFile(applicants.getAdditionalFile()) + .updatedAt(String.valueOf(LocalDateTime.now())) + .boardId(applicants.getBoardId()) .build(); - applyRepository.save(updatedApply); + applicantsRepository.save(updatedApplicants); - ChangeApplyStatusResponseDto changeApplyStatusResponseDto = ChangeApplyStatusResponseDto.entityToDto( - updatedApply); + ChangeApplyStatusResponseDto changeApplyStatusResponseDto = ChangeApplyStatusResponseDto.entityToDto(updatedApplicants); return changeApplyStatusResponseDto; } @Override - public ShowApplyingProjectInfoResponseDto getApplyingProjectInfo(int page, int limit) { + public ShowApplyingProjectInfoResponseDto getApplyingProjectInfo(Integer applicantId, int page, int limit) + throws Exception { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - UUID uuid = UUID.fromString(authentication.getName()); + // 게시글 ID로 지원자 목록 조회 (페이징 처리) + Pageable pageable = PageRequest.of(page - 1, limit); // Pageable로 선언 + Page applicationsPage = applicationRepository.findByApplicantId(applicantId, pageable); - if(page == 0 || limit == 0) { - throw new BaseException(BaseResponseStatus.WRONG_PARAM); + // 결과가 비어있거나 신청서 조회에 실패한 경우 처리 + if (applicationsPage.isEmpty()) { + System.out.println("신청한 공고가 없거나 조회에 실패했습니다."); + return null; } - Member member = memberRepository.findByUuid(uuid) - .orElseThrow(() -> new BaseException( - BaseResponseStatus.NO_EXIST_MEMBERS)); - - Pageable pageable = PageRequest.of(page - 1, limit); - Page applyPage = applyRepository.findByMember(member, pageable); - - if (applyPage == null || applyPage.isEmpty()) { - throw new BaseException(BaseResponseStatus.NO_APPLICATIONS); - } + // 지원자 정보를 DTO로 변환 + List applications = applicationsPage.getContent(); + // DTO 생성 ShowApplyingProjectInfoResponseDto showApplyingProjectInfoResponseDto = ShowApplyingProjectInfoResponseDto.entityToDto( - applyPage, + applications, page, - relationFieldProjectPostMiddleRepository + (int) applicationsPage.getTotalElements() ); return showApplyingProjectInfoResponseDto; diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectBoardServiceImpl.java b/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectBoardServiceImpl.java index 8d48072..595049e 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectBoardServiceImpl.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/application/ProjectBoardServiceImpl.java @@ -247,13 +247,6 @@ public void deleteProjectBoard(UUID uuid, Long id) { throw new BaseException(FAIL_TO_DELETE); } - List projectBoardImages = projectBoardImageRepository.findAllByProjectBoardId( - id); - - if (!projectBoardImages.isEmpty()) { - projectBoardImageRepository.deleteAllByProjectBoardId(id); - } - List relationFieldProjectPostMiddleList = relationFieldProjectPostMiddleRepository.findAllByProjectBoardId( id); @@ -280,7 +273,7 @@ public void updateProjectBoard(UUID uuid, Long id, .id(id) .title(updateProjectBoardRequestDto.getTitle()) .content(updateProjectBoardRequestDto.getContent()) - .writerUuid(origin.getWriterUuid()) + .writerUuid(origin.getWriterUuid()) //TODO: 나중에 실제 값으로 변경해야함 .writerName(origin.getWriterName()) .contact(updateProjectBoardRequestDto.getContact()) .projectTypeCategory(updateProjectBoardRequestDto.getProjectTypeCategory()) @@ -292,21 +285,6 @@ public void updateProjectBoard(UUID uuid, Long id, projectBoardRepository.save(projectBoard); - List projectBoardImages = projectBoardImageRepository.findAllByProjectBoardId( - id); - - if (!projectBoardImages.isEmpty()) { - projectBoardImageRepository.deleteAllByProjectBoardId(id); - } - List projectBoardImageList = updateProjectBoardRequestDto.getProjectBoardImages() - .stream().map( - image -> ProjectBoardImage.builder() - .projectBoard(projectBoard) - .projectBoardImageUrl(image) - .build()) - .collect(Collectors.toList()); - projectBoardImageRepository.saveAll(projectBoardImageList); - relationFieldProjectPostMiddleRepository.deleteAllByProjectBoardId(id); List relationFieldProjectPostMiddles = updateProjectBoardRequestDto.getRelationFieldCategories() diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/application/activity/ActivityServiceImpl.java b/src/main/java/com/archisemtle/semtlewebserverspring/application/activity/ActivityServiceImpl.java index 3a68170..b402e5a 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/application/activity/ActivityServiceImpl.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/application/activity/ActivityServiceImpl.java @@ -36,10 +36,10 @@ public void createActivityBoard(ActivityRequestDto requestDto) throws IOExceptio Activity activity = Activity.builder() .title(requestDto.getTitle()) .content(requestDto.getContent()) - .createdAt(requestDto.getCreatedAt()) .writer(requestDto.getWriter()) .images(requestDto.getImages()) .uuid(requestDto.getUuid()) + .createdAt(new Date()) .type(requestDto.getType()) .build(); @@ -72,6 +72,7 @@ public void updateActivityBoard(Long id, ActivityRequestDto requestDto){ .images(requestDto.getImages()) .type(requestDto.getType()) .build(); + activityRepository.save(changedActivity); } @@ -87,8 +88,8 @@ public ActivityListResponseDto readActivityListBoard(ActivityListRequestDto requ Pageable pageable = PageRequest.of(requestDto.getPage()-1, requestDto.getSize(), Sort.by(Direction.ASC, "createdAt")); - activityPage = requestDto.getType().equals("all") ? activityRepository.findAll(pageable) : - activityRepository.findByTypeContainingIgnoreCase(requestDto.getType(), pageable); + + activityPage = activityRepository.findByTypeContainingIgnoreCase(requestDto.getType(), pageable); int total_posts = (int)activityPage.getTotalElements(); int total_pages = (int) Math.ceil((double) total_posts / requestDto.getSize()); diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/application/archive/ArchiveService.java b/src/main/java/com/archisemtle/semtlewebserverspring/application/archive/ArchiveService.java index 6656fd3..868458c 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/application/archive/ArchiveService.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/application/archive/ArchiveService.java @@ -11,6 +11,7 @@ public interface ArchiveService { + public void createArchiveBoard(ArchiveRequestDto requestDto); public ArchiveResponseDto readArchiveBoard(Long id); public void updateArchiveBoard(Long id, ArchiveRequestDto requestDto); diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/application/archive/ArchiveServiceImpl.java b/src/main/java/com/archisemtle/semtlewebserverspring/application/archive/ArchiveServiceImpl.java index 3964f1d..838fee5 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/application/archive/ArchiveServiceImpl.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/application/archive/ArchiveServiceImpl.java @@ -9,26 +9,23 @@ import com.archisemtle.semtlewebserverspring.dto.archive.ArchiveRequestDto; import com.archisemtle.semtlewebserverspring.dto.archive.ArchiveResponseDto; import com.archisemtle.semtlewebserverspring.infrastructure.archive.ArchiveRepository; -import com.archisemtle.semtlewebserverspring.vo.archive.ArchiveResponseVo; +import java.util.Date; import java.util.UUID; import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.stereotype.Service; +import com.archisemtle.semtlewebserverspring.domain.archive.Archive; @Service @AllArgsConstructor -@Slf4j public class ArchiveServiceImpl implements ArchiveService{ + private final ArchiveRepository archiveRepository; - private static final Logger logger = LoggerFactory.getLogger(ArchiveServiceImpl.class); //게시판 생성 @Override @@ -37,13 +34,13 @@ public void createArchiveBoard(ArchiveRequestDto requestDto) { .title(requestDto.getTitle()) .content(requestDto.getContent()) .writer(requestDto.getWriter()) - .createdAt(requestDto.getCreatedAt()) + .createdAt(new Date()) .uuid(requestDto.getUuid()) .imageUrl(requestDto.getImageUrl()) .fileUrl(requestDto.getFileUrl()) .build(); - archiveRepository.save(archive); + } //게시판 읽기 diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/application/member/MemberServiceImpl.java b/src/main/java/com/archisemtle/semtlewebserverspring/application/member/MemberServiceImpl.java index 9dcf44d..f71c859 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/application/member/MemberServiceImpl.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/application/member/MemberServiceImpl.java @@ -2,7 +2,6 @@ import com.archisemtle.semtlewebserverspring.common.BaseException; import com.archisemtle.semtlewebserverspring.common.BaseResponseStatus; -import com.archisemtle.semtlewebserverspring.common.CommonResponse; import com.archisemtle.semtlewebserverspring.config.jwt.JwtToken; import com.archisemtle.semtlewebserverspring.config.jwt.JwtTokenProvider; import com.archisemtle.semtlewebserverspring.domain.Member; @@ -19,7 +18,6 @@ import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; -import java.time.LocalDate; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -91,7 +89,7 @@ public ExcelAddMemberResponseDto excelAddMember(MultipartFile file) throws IOExc .password(passwordEncoder.encode("#semtle308")) .studentId(studentId) .username(username) - .birth(LocalDate.parse("2025-01-01")) + .birth(parseDate("2025-01-01")) .phone(phone) .role(role) .manageApprovalStatus(false) @@ -131,11 +129,6 @@ private Date parseDate(String dateStr) { // Member 조회 메서드 @Override public MemberReadResponseDto show(UUID uuid) { - - if(uuid == null) { - throw new BaseException(BaseResponseStatus.WRONG_PARAM); - } - Member member = memberRepository.findByUuid(uuid).orElseThrow(()-> new BaseException( BaseResponseStatus.NO_EXIST_MEMBERS)); @@ -148,7 +141,6 @@ public MemberReadResponseDto show(UUID uuid) { .birth(member.getBirth()) .phone(member.getPhone()) .role(member.getRole()) - .profileImageUrl(member.getProfileImageUrl()) .manageApprovalStatus(member.isManageApprovalStatus()) .build(); } @@ -157,13 +149,6 @@ public MemberReadResponseDto show(UUID uuid) { @Override @Transactional public void update(UUID uuid , MemberUpdateRequestDto memberUpdateRequestDto) { - - if(uuid == null || memberUpdateRequestDto.getUsername() == null || memberUpdateRequestDto.getBirth() == null - || memberUpdateRequestDto.getPhone() == null || memberUpdateRequestDto.getImageUrl() - == null) { - throw new BaseException(BaseResponseStatus.WRONG_PARAM); - } - Member member = memberRepository.findByUuid(uuid).orElseThrow(()-> new BaseException( BaseResponseStatus.NO_EXIST_MEMBERS)); @@ -172,11 +157,10 @@ public void update(UUID uuid , MemberUpdateRequestDto memberUpdateRequestDto) { .uuid(member.getUuid()) .email(member.getEmail()) .password(member.getPassword()) - .studentId(member.getStudentId()) + .studentId(member.getStudentId() != null ? memberUpdateRequestDto.getStudentId() : member.getStudentId()) .username(memberUpdateRequestDto.getUsername() != null ? memberUpdateRequestDto.getUsername() : member.getUsername()) // 업데이트 값 적용 .birth(memberUpdateRequestDto.getBirth() != null ? memberUpdateRequestDto.getBirth() : member.getBirth()) .phone(memberUpdateRequestDto.getPhone() != null ? memberUpdateRequestDto.getPhone() : member.getPhone()) - .profileImageUrl(memberUpdateRequestDto.getImageUrl() != null ? memberUpdateRequestDto.getImageUrl() : member.getProfileImageUrl()) .role(member.getRole()) .manageApprovalStatus(member.isManageApprovalStatus()) .build(); diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/common/BaseResponseStatus.java b/src/main/java/com/archisemtle/semtlewebserverspring/common/BaseResponseStatus.java index 4afb789..e062055 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/common/BaseResponseStatus.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/common/BaseResponseStatus.java @@ -91,17 +91,10 @@ public enum BaseResponseStatus { /** * 5000 : Applicant & Application Service Error */ + NO_APPLICANT_FOUND(HttpStatus.NOT_FOUND, false, 5001, "신청자를 찾을 수 없습니다."), INVALID_APPLICATION_STATUS(HttpStatus.BAD_REQUEST, false, 5002, "유효하지 않은 신청 상태입니다."), APPLICATION_ALREADY_PROCESSED(HttpStatus.CONFLICT, false, 5003, "이미 처리된 신청입니다."), APPLICATION_NOT_FOUND(HttpStatus.NOT_FOUND, false, 5004, "신청 정보를 찾을 수 없습니다."), - NO_BOARD_FOUND(HttpStatus.NOT_FOUND, false, 5005, "공고를 찾을 수 없습니다."), - RECRUITING_ALREADY_ENDED(HttpStatus.BAD_REQUEST, false, 5006, "프로젝트 모집이 마감되었습니다."), - NO_APPLICANTS(HttpStatus.BAD_REQUEST, false, 5007, "신청자가 존재하지 않습니다."), - NO_APPLICATIONS(HttpStatus.BAD_REQUEST, false, 5007, "신청서가 존재하지 않습니다."), - DUPLICATE_APPLY(HttpStatus.BAD_REQUEST, false, 5008, "이미 신청한 공고입니다."), - PROCESSED_APPLY(HttpStatus.BAD_REQUEST, false, 5009, "이미 변경된 상태입니다."), - FALSE_STATUS(HttpStatus.BAD_REQUEST, false, 5010, "존재하지 않는 상태입니다."), - SAME_WRITER(HttpStatus.BAD_REQUEST, false, 5011, "작성자는 공고 신청이 불가합니다."), /** * 6000 : Cart & WishProductList Service Error diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/common/GlobalExceptionContreoller.java b/src/main/java/com/archisemtle/semtlewebserverspring/common/GlobalExceptionContreoller.java deleted file mode 100644 index b7657cc..0000000 --- a/src/main/java/com/archisemtle/semtlewebserverspring/common/GlobalExceptionContreoller.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.archisemtle.semtlewebserverspring.common; - -import io.jsonwebtoken.io.IOException; -import io.swagger.v3.oas.annotations.Hidden; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; - - -//Swagger는 api문서는 다 들고오려는 특성이 있는데 예외 처리 컨트롤러를 가져오는 과정에서는 에럭 발생 -// 이에 Hidden 어노테이션으로 swagger가 탐지하는 영역에서 벗어나게 설정 - -@Hidden -@RestControllerAdvice -public class GlobalExceptionContreoller { - @ExceptionHandler(BaseException.class) - public CommonResponse BaseExceptionHandler(BaseException e){ - return CommonResponse.fail(e.getErrorCode(), e.getErrorCode().getMessage()); - } -} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/config/SecurityConfig.java b/src/main/java/com/archisemtle/semtlewebserverspring/config/SecurityConfig.java index d210007..400494c 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/config/SecurityConfig.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/config/SecurityConfig.java @@ -32,7 +32,7 @@ public CorsConfigurationSource corsConfigurationSource() { var cors = new org.springframework.web.cors.CorsConfiguration(); cors.setAllowedOriginPatterns( List.of("http://localhost:3000", "https://archisemtle.com", - "https://archisemtle.site", "http://localhost:8080")); + "https://archisemtle.site")); cors.setAllowedMethods(List.of("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS")); cors.setAllowedHeaders(List.of("*")); cors.setAllowCredentials(true); diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/domain/Applicants.java b/src/main/java/com/archisemtle/semtlewebserverspring/domain/Applicants.java new file mode 100644 index 0000000..2ada142 --- /dev/null +++ b/src/main/java/com/archisemtle/semtlewebserverspring/domain/Applicants.java @@ -0,0 +1,68 @@ +package com.archisemtle.semtlewebserverspring.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import java.util.Date; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity(name = "applicants") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Applicants { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer applicantId; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private Date applyDate; + + @Column(nullable = false) + private String status; + + @Column(nullable = false, unique = true) + private String email; + + private String phone; + + private String resumeUrl; + + private String portfolioUrl; + + private String customAnswer; + + private String additionalFile; + + private String updatedAt; + + @Column(nullable = false) + private Integer boardId; // 게시판 ID + + @Builder + public Applicants(Integer applicantId,String name, Date applyDate, String status, String email, String phone, + String resumeUrl, String portfolioUrl, String customAnswer, + String additionalFile, String updatedAt , Integer boardId) { + this.applicantId = applicantId; + this.name = name; + this.applyDate = applyDate; + this.status = status; + this.email = email; + this.phone = phone; + this.resumeUrl = resumeUrl; + this.portfolioUrl = portfolioUrl; + this.customAnswer = customAnswer; + this.additionalFile = additionalFile; + this.updatedAt = updatedAt; + this.boardId = boardId; + } + +} + diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/domain/Application.java b/src/main/java/com/archisemtle/semtlewebserverspring/domain/Application.java new file mode 100644 index 0000000..c0f022c --- /dev/null +++ b/src/main/java/com/archisemtle/semtlewebserverspring/domain/Application.java @@ -0,0 +1,63 @@ +package com.archisemtle.semtlewebserverspring.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import java.time.LocalDateTime; + +import java.util.Date; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity(name = "applications") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Application { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer applicationId; + + @Column(name = "applicant_id", nullable = false) + private Integer applicantId; // 지원자 ID + + @ManyToOne // ManyToOne 관계 설정 + @JoinColumn(name = "applicant_id", referencedColumnName = "applicantId", insertable = false, updatable = false) // 외래 키 설정 + private Applicants applicant; // 지원자와의 관계 + + @Column(nullable = false) + private String projectTitle; // 프로젝트 제목 + + @Column(nullable = false) + private Integer boardId; // 게시판 ID + + @Column(nullable = false) + private Date applyDate; // 지원 날짜 + + @Column(nullable = false) + private String status; // 지원 상태 + + private String projectType; // 프로젝트 유형 + + private String relateField; // 관련 분야 + + private String questionAnswer; + + @Builder + public Application(Integer applicantId ,String projectTitle, Integer boardId, Date applyDate, String status, + String projectType, String relateField, String questionAnswer) { + this.applicantId = applicantId; + this.projectTitle = projectTitle; + this.boardId = boardId; + this.applyDate = applyDate; + this.status = status; + this.projectType = projectType; + this.relateField = relateField; + this.questionAnswer = questionAnswer; + } +} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/domain/Apply.java b/src/main/java/com/archisemtle/semtlewebserverspring/domain/Apply.java deleted file mode 100644 index a6dcce6..0000000 --- a/src/main/java/com/archisemtle/semtlewebserverspring/domain/Apply.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.archisemtle.semtlewebserverspring.domain; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.Lob; -import jakarta.persistence.ManyToOne; -import java.time.LocalDateTime; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Entity(name = "apply") -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Apply { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long applyId; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "member_id", nullable = false) - private Member member; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "project_board_id", nullable = false) - private ProjectBoard projectBoard; - - @Column(nullable = false) - private LocalDateTime applyDate; - - @Column(nullable = false) - private String status; - - @Column(nullable = false) - private LocalDateTime updatedAt; - - @Lob - @Column(nullable = false) - private String answer; - - @Builder - public Apply(Long applyId, Member member, ProjectBoard projectBoard, LocalDateTime applyDate, String status, LocalDateTime updatedAt, String answer) { - this.applyId = applyId; - this.member = member; - this.projectBoard = projectBoard; - this.applyDate = applyDate; - this.status = status; - this.updatedAt = updatedAt; - this.answer = answer; - } -} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/domain/Member.java b/src/main/java/com/archisemtle/semtlewebserverspring/domain/Member.java index 9a69ace..a917619 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/domain/Member.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/domain/Member.java @@ -5,8 +5,8 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import java.time.LocalDate; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.UUID; import lombok.AccessLevel; @@ -41,7 +41,7 @@ public class Member implements UserDetails { private String username; // @DateTimeFormat(pattern = "yyyy-MM-dd") - private LocalDate birth; + private Date birth; private String phone; diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/domain/ProjectJoinFile.java b/src/main/java/com/archisemtle/semtlewebserverspring/domain/ProjectJoinFile.java deleted file mode 100644 index 4bc19a1..0000000 --- a/src/main/java/com/archisemtle/semtlewebserverspring/domain/ProjectJoinFile.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.archisemtle.semtlewebserverspring.domain; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.hibernate.annotations.Comment; - -@Getter -@Entity -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class ProjectJoinFile { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long projectJoinFileId; - - @Column(nullable = false) - private String file; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "apply_id", nullable = false) - @Comment("신청 ID") - private Apply apply; - - @Builder - public ProjectJoinFile(String file, Apply apply) { - this.file = file; - this.apply = apply; - } -} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/domain/ProjectJoinUrl.java b/src/main/java/com/archisemtle/semtlewebserverspring/domain/ProjectJoinUrl.java deleted file mode 100644 index 8324637..0000000 --- a/src/main/java/com/archisemtle/semtlewebserverspring/domain/ProjectJoinUrl.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.archisemtle.semtlewebserverspring.domain; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.hibernate.annotations.Comment; - -@Getter -@Entity -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class ProjectJoinUrl { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long projectJoinUrlId; - - @Column(nullable = false) - private String url; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "apply_id", nullable = false) - @Comment("신청 ID") - private Apply apply; - - @Builder - public ProjectJoinUrl(String url, Apply apply) { - this.url = url; - this.apply = apply; - } -} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/domain/ShowMember.java b/src/main/java/com/archisemtle/semtlewebserverspring/domain/ShowMember.java new file mode 100644 index 0000000..b08c20e --- /dev/null +++ b/src/main/java/com/archisemtle/semtlewebserverspring/domain/ShowMember.java @@ -0,0 +1,41 @@ +package com.archisemtle.semtlewebserverspring.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import java.util.Date; +import java.util.UUID; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class ShowMember { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int memberId; + + @Column(nullable = false, unique = true) + private UUID uuid = UUID.randomUUID(); + + private String name; + + // @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date birth; + + private String phone; + + //private String imageUrl; + + @Builder + public ShowMember(String name, Date birth, String phone) { + this.name = name; + this.birth = birth; + this.phone = phone; + } +} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/domain/activity/Activity.java b/src/main/java/com/archisemtle/semtlewebserverspring/domain/activity/Activity.java index f45bb87..d0f99d4 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/domain/activity/Activity.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/domain/activity/Activity.java @@ -2,7 +2,6 @@ import com.archisemtle.semtlewebserverspring.dto.activity.ActivityRequestDto; import com.archisemtle.semtlewebserverspring.vo.activity.ActivityResponseVo; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -24,14 +23,14 @@ public class Activity { @Column(nullable = false, unique = false) private String title; - @Lob @Column(nullable = false, unique = false) private String content; @Column(nullable = false, unique = false) private String writer; - @Column(nullable = false, unique = false) - private LocalDateTime createdAt; - @Column(nullable = false, unique = false, columnDefinition = "uuid") + @Column(nullable = true, unique = false) + @Temporal(TemporalType.DATE) + private Date createdAt; + @Column(nullable = true, unique = false, columnDefinition = "uuid") private UUID uuid; @ElementCollection @CollectionTable(name = "activity_image", joinColumns = @JoinColumn(name = "activity_id")) diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/domain/archive/Archive.java b/src/main/java/com/archisemtle/semtlewebserverspring/domain/archive/Archive.java index aef7132..afbfe37 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/domain/archive/Archive.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/domain/archive/Archive.java @@ -1,26 +1,23 @@ package com.archisemtle.semtlewebserverspring.domain.archive; - +import com.archisemtle.semtlewebserverspring.dto.archive.ArchiveRequestDto; +import com.archisemtle.semtlewebserverspring.dto.archive.ArchiveResponseDto; import com.archisemtle.semtlewebserverspring.vo.archive.ArchiveResponseVo; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.Lob; -import java.time.LocalDateTime; +import java.util.Date; import java.util.List; import java.util.UUID; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @Getter @Entity(name = "archive") -@AllArgsConstructor @NoArgsConstructor -@Builder public class Archive { @Id @@ -30,23 +27,31 @@ public class Archive { @Column(unique = false, nullable = false) private String title; - @Column(unique = false, nullable = false) private String writer; - - @Lob - @Column(unique = false, nullable = false) private String content; - @Column(unique = false, nullable = false) - private LocalDateTime createdAt; + private Date createdAt; @Column(unique = false, nullable = false) private UUID uuid; @Column(unique = false, nullable = true) private List imageUrl; - @Column(unique = false, nullable = true) private List fileUrl; + @Builder + public Archive(Long id, String title, String writer, String content, Date createdAt, UUID uuid, + List imageUrl, List fileUrl) + { + this.id = id; + this.title = title; + this.writer = writer; + this.content = content; + this.createdAt = createdAt; + this.uuid = uuid; + this.imageUrl = imageUrl; + this.fileUrl = fileUrl; + } + public static ArchiveResponseVo entityToVo(Archive archive){ return ArchiveResponseVo.builder() .writer(archive.getWriter()) diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ApplyProjectRequestDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ApplyProjectRequestDto.java index a7cb19f..b336fef 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ApplyProjectRequestDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ApplyProjectRequestDto.java @@ -1,7 +1,6 @@ package com.archisemtle.semtlewebserverspring.dto; import java.util.List; -import java.util.UUID; import lombok.Builder; import lombok.Getter; import lombok.Setter; @@ -10,8 +9,23 @@ @Setter @Builder public class ApplyProjectRequestDto { - private Long postId; - private String answer; + private List answers; private List urls; - private List fileUrls; + private List files; + + @Getter + @Setter + @Builder + public static class AnswerDto { + private Integer questionId; + private String answer; + } + + @Getter + @Setter + @Builder + public static class FileDto { + private String fileName; + private String fileUrl; + } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ApplyProjectResponseDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ApplyProjectResponseDto.java index db95136..76cd51d 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ApplyProjectResponseDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ApplyProjectResponseDto.java @@ -1,7 +1,10 @@ package com.archisemtle.semtlewebserverspring.dto; -import com.archisemtle.semtlewebserverspring.domain.Apply; +import com.archisemtle.semtlewebserverspring.domain.Applicants; +import com.archisemtle.semtlewebserverspring.domain.Application; +import com.archisemtle.semtlewebserverspring.domain.ShowMember; import java.time.LocalDateTime; +import java.util.Date; import lombok.Builder; import lombok.Getter; import lombok.Setter; @@ -10,13 +13,23 @@ @Setter @Builder public class ApplyProjectResponseDto { - private Long applyId; - private LocalDateTime appliedAt; + private String message; + private Integer appliedId; + private String appliedAt; - public static ApplyProjectResponseDto entityToDto(Apply apply) { - return ApplyProjectResponseDto.builder() - .applyId(apply.getApplyId()) - .appliedAt(LocalDateTime.now()) - .build(); + public static ApplyProjectResponseDto entityToDto(Application application) { + if(application == null) { + return ApplyProjectResponseDto.builder() + .message("모집기간이 마감되었습니다.") + .appliedId(null) + .appliedAt(null) + .build(); + }else { + return ApplyProjectResponseDto.builder() + .message("프로젝트 신청이 성공적으로 접수되었습니다.") + .appliedId(application.getApplicationId()) + .appliedAt(LocalDateTime.now().toString()) + .build(); + } } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ChangeApplyStatusResponseDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ChangeApplyStatusResponseDto.java index 3a03789..24fcebf 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ChangeApplyStatusResponseDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ChangeApplyStatusResponseDto.java @@ -1,7 +1,8 @@ package com.archisemtle.semtlewebserverspring.dto; -import com.archisemtle.semtlewebserverspring.domain.Apply; +import com.archisemtle.semtlewebserverspring.domain.Applicants; import java.time.LocalDateTime; +import java.util.Date; import lombok.Builder; import lombok.Getter; import lombok.Setter; @@ -10,13 +11,15 @@ @Setter @Builder public class ChangeApplyStatusResponseDto { + private String message; private String updatedStatus; - private LocalDateTime updatedAt; + private String updatedAt; - public static ChangeApplyStatusResponseDto entityToDto(Apply apply) { + public static ChangeApplyStatusResponseDto entityToDto(Applicants applicants) { return ChangeApplyStatusResponseDto.builder() - .updatedStatus(apply.getStatus()) - .updatedAt(apply.getUpdatedAt()) + .message("신청자의 상태가 성공적으로 변경되었습니다.") + .updatedStatus(applicants.getStatus()) + .updatedAt(String.valueOf(LocalDateTime.now())) .build(); } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ProjectApplicantsResponseDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ProjectApplicantsResponseDto.java index 03987fc..a465c95 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ProjectApplicantsResponseDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ProjectApplicantsResponseDto.java @@ -1,14 +1,13 @@ package com.archisemtle.semtlewebserverspring.dto; -import com.archisemtle.semtlewebserverspring.domain.Apply; -import java.time.LocalDateTime; +import com.archisemtle.semtlewebserverspring.domain.Applicants; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.springframework.data.domain.Page; @Getter @Setter @@ -18,45 +17,42 @@ public class ProjectApplicantsResponseDto { private int totalElements; private int totalPages; private int currentPage; - private List applys; + private List applicants; @Getter @NoArgsConstructor - public static class ApplyInfo { - private Long applyId; - private String username; - private LocalDateTime applyDate; + public static class ApplicantInfo { + private Integer applicantId; + private String name; + private Date applyDate; private String status; @Builder - public ApplyInfo(Long applyId, String username, LocalDateTime applyDate, String status) { - this.applyId = applyId; - this.username = username; + public ApplicantInfo(Integer applicantId, String name, Date applyDate, String status) { + this.applicantId = applicantId; + this.name = name; this.applyDate = applyDate; this.status = status; } } - public static ProjectApplicantsResponseDto entityToDto(Page applicantsPage, int currentPage) { - List applys = applicantsPage.getContent(); - int totalElements = (int) applicantsPage.getTotalElements(); - - List applyInfoList = applys.stream() - .map(apply -> ApplyInfo.builder() - .applyId(apply.getApplyId()) - .username(apply.getMember().getUsername()) - .applyDate(apply.getApplyDate()) - .status(apply.getStatus()) + public static ProjectApplicantsResponseDto entityToDto(List applicants, int currentPage, int totalElements) { + List applicantInfoList = applicants.stream() + .map(applicant -> ApplicantInfo.builder() + .applicantId(applicant.getApplicantId()) + .name(applicant.getName()) + .applyDate(applicant.getApplyDate()) + .status(applicant.getStatus()) .build()) .collect(Collectors.toList()); - int totalPages = (int) Math.ceil((double) totalElements / applys.size()); + int totalPages = (int) Math.ceil((double) totalElements / applicants.size()); return ProjectApplicantsResponseDto.builder() .totalElements(totalElements) .totalPages(totalPages) .currentPage(currentPage) - .applys(applyInfoList) + .applicants(applicantInfoList) .build(); } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ShowApplyingProjectInfoResponseDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ShowApplyingProjectInfoResponseDto.java index ea29b4a..a508a27 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ShowApplyingProjectInfoResponseDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ShowApplyingProjectInfoResponseDto.java @@ -1,16 +1,15 @@ package com.archisemtle.semtlewebserverspring.dto; -import com.archisemtle.semtlewebserverspring.domain.Apply; -import com.archisemtle.semtlewebserverspring.domain.RelationFieldProjectPostMiddle; -import com.archisemtle.semtlewebserverspring.infrastructure.RelationFieldProjectPostMiddleRepository; +import com.archisemtle.semtlewebserverspring.domain.Application; +import java.lang.reflect.Array; import java.time.LocalDateTime; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.springframework.data.domain.Page; @Getter @Setter @@ -20,72 +19,59 @@ public class ShowApplyingProjectInfoResponseDto { private int totalElements; private int totalPages; private int currentPage; - private List applys; + private List applications; @Getter @NoArgsConstructor - public static class ApplyInfo { - private Long applyId; - private Long postId; + public static class ApplicationInfo { + private Integer applicationId; private String projectTitle; - private LocalDateTime applyDate; + private Integer boardId; + private Date applyDate; private String status; private String projectType; private String relateField; @Builder - public ApplyInfo( - Long applyId, - Long postId, + public ApplicationInfo( + Integer applicationId, String projectTitle, + Integer boardId, + Date applyDate, String status, String projectType, - String relateField, - LocalDateTime applyDate) { - this.applyId = applyId; - this.postId = postId; + String relateField) { + this.applicationId = applicationId; this.projectTitle = projectTitle; + this.boardId = boardId; + this.applyDate = applyDate; this.status = status; this.projectType = projectType; this.relateField = relateField; - this.applyDate = applyDate; } } - public static ShowApplyingProjectInfoResponseDto entityToDto(Page applyPage, int currentPage, RelationFieldProjectPostMiddleRepository relationFieldProjectPostMiddleRepository) { - - List applys = applyPage.getContent(); - int totalElements = (int) applyPage.getTotalElements(); - - List applyInfoList = applys.stream() - .map(apply -> { - List relatedFields = relationFieldProjectPostMiddleRepository - .findAllByProjectBoardId(apply.getProjectBoard().getId()); - - String relatedFieldsStr = relatedFields.stream() - .map(field -> field.getRelationFieldCategory().getName()) - .collect(Collectors.joining(", ")); - - return ApplyInfo.builder() - .applyId(apply.getApplyId()) - .postId(apply.getProjectBoard().getId()) - .projectTitle(apply.getProjectBoard().getTitle()) - .status(apply.getStatus()) - .projectType(apply.getProjectBoard().getProjectTypeCategory().getName()) - .relateField(relatedFieldsStr) - .applyDate(apply.getApplyDate()) - .build(); - }) + public static ShowApplyingProjectInfoResponseDto entityToDto(List applications, int currentPage, int totalElements) { + List applicationInfoList = applications.stream() + .map(application -> ApplicationInfo.builder() + .applicationId(application.getApplicationId()) + .projectTitle(application.getProjectTitle()) + .boardId(application.getBoardId()) + .applyDate(application.getApplyDate()) + .status(application.getStatus()) + .projectType(application.getProjectType()) + .relateField(application.getRelateField()) + .build()) .collect(Collectors.toList()); - int totalPages = (int) Math.ceil((double) totalElements / applys.size()); + int totalPages = (int) Math.ceil((double) totalElements / applications.size()); return ShowApplyingProjectInfoResponseDto.builder() .totalElements(totalElements) .totalPages(totalPages) .currentPage(currentPage) - .applys(applyInfoList) + .applications(applicationInfoList) .build(); } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ShowProjectApplicantInfoResponseDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ShowProjectApplicantInfoResponseDto.java index 3713086..2d0b457 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/ShowProjectApplicantInfoResponseDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/ShowProjectApplicantInfoResponseDto.java @@ -1,7 +1,7 @@ package com.archisemtle.semtlewebserverspring.dto; -import com.archisemtle.semtlewebserverspring.domain.Apply; -import java.time.LocalDateTime; +import com.archisemtle.semtlewebserverspring.domain.Applicants; +import java.util.Date; import lombok.Builder; import lombok.Getter; import lombok.Setter; @@ -10,21 +10,29 @@ @Setter @Builder public class ShowProjectApplicantInfoResponseDto { - private Long applyId; - private String username; - private LocalDateTime applyDate; + private Integer applicantId; + private String name; + private Date applyDate; private String status; private String email; private String phone; + private String resumeUrl; + private String portfolioUrl; + private String customAnswer; + private String additionalFile; - public static ShowProjectApplicantInfoResponseDto entityToDto(Apply apply) { + public static ShowProjectApplicantInfoResponseDto entityToDto(Applicants applicants) { return ShowProjectApplicantInfoResponseDto.builder() - .applyId(apply.getApplyId()) - .username(apply.getMember().getUsername()) - .applyDate(apply.getApplyDate()) - .status(apply.getStatus()) - .email(apply.getMember().getEmail()) - .phone(apply.getMember().getPhone()) + .applicantId(applicants.getApplicantId()) + .name(applicants.getName()) + .applyDate(applicants.getApplyDate()) + .status(applicants.getStatus()) + .email(applicants.getEmail()) + .phone(applicants.getPhone()) + .resumeUrl(applicants.getResumeUrl()) + .portfolioUrl(applicants.getPortfolioUrl()) + .customAnswer(applicants.getCustomAnswer()) + .additionalFile(applicants.getAdditionalFile()) .build(); } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/UpdateProjectBoardRequestDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/UpdateProjectBoardRequestDto.java index e5ae41b..70f7de2 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/UpdateProjectBoardRequestDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/UpdateProjectBoardRequestDto.java @@ -21,5 +21,4 @@ public class UpdateProjectBoardRequestDto { private LocalDate projectStartTime; private LocalDate projectEndTime; private LocalDate projectRecruitingEndTime; - private List projectBoardImages; } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/activity/ActivityRequestDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/activity/ActivityRequestDto.java index 0467771..b129c93 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/activity/ActivityRequestDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/activity/ActivityRequestDto.java @@ -1,7 +1,5 @@ package com.archisemtle.semtlewebserverspring.dto.activity; -import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.UUID; @@ -18,7 +16,7 @@ public class ActivityRequestDto { private String content; private String writer; private UUID uuid; - private LocalDateTime createdAt; + private Date createdAt; private String type; private List images; diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/activity/ActivityResponseDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/activity/ActivityResponseDto.java index b2da687..419dd80 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/activity/ActivityResponseDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/activity/ActivityResponseDto.java @@ -2,7 +2,6 @@ import com.archisemtle.semtlewebserverspring.domain.activity.Activity; import com.archisemtle.semtlewebserverspring.vo.activity.ActivityResponseVo; -import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -17,7 +16,7 @@ public class ActivityResponseDto { private String title; private String content; private String writer; - private LocalDateTime createdAt; + private Date createdAt; private List images; private String type; diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/archive/ArchiveRequestDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/archive/ArchiveRequestDto.java index 9c4231e..ccdbd63 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/archive/ArchiveRequestDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/archive/ArchiveRequestDto.java @@ -1,6 +1,5 @@ package com.archisemtle.semtlewebserverspring.dto.archive; -import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.UUID; @@ -17,7 +16,7 @@ public class ArchiveRequestDto { private String content; private String title; private UUID uuid; - private LocalDateTime createdAt; + private Date createdAt; private List imageUrl; private List fileUrl; diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/archive/ArchiveResponseDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/archive/ArchiveResponseDto.java index 4adf4a8..65e8b4a 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/archive/ArchiveResponseDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/archive/ArchiveResponseDto.java @@ -2,7 +2,7 @@ import com.archisemtle.semtlewebserverspring.domain.archive.Archive; import com.archisemtle.semtlewebserverspring.vo.archive.ArchiveResponseVo; -import java.time.LocalDateTime; +import java.util.Date; import java.util.List; import lombok.Builder; import lombok.Getter; @@ -16,7 +16,7 @@ public class ArchiveResponseDto { private String writer; private String content; private String title; - private LocalDateTime createdAt; + private Date createdAt; private List imageUrl; private List fileUrl; diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/member/MemberReadResponseDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/member/MemberReadResponseDto.java index 08f1296..6a56164 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/member/MemberReadResponseDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/member/MemberReadResponseDto.java @@ -1,6 +1,6 @@ package com.archisemtle.semtlewebserverspring.dto.member; -import java.time.LocalDate; +import java.util.Date; import java.util.UUID; import lombok.Builder; import lombok.Data; @@ -13,9 +13,8 @@ public class MemberReadResponseDto { private String password; private String studentId; private String username; - private LocalDate birth; + private Date birth; private String phone; - private String profileImageUrl; private String role; private boolean manageApprovalStatus; } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/dto/member/MemberUpdateRequestDto.java b/src/main/java/com/archisemtle/semtlewebserverspring/dto/member/MemberUpdateRequestDto.java index e0e7237..ed5a505 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/dto/member/MemberUpdateRequestDto.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/dto/member/MemberUpdateRequestDto.java @@ -1,14 +1,15 @@ package com.archisemtle.semtlewebserverspring.dto.member; -import java.time.LocalDate; +import java.util.Date; import lombok.Data; @Data public class MemberUpdateRequestDto { + private String studentId; private String username; - private LocalDate birth; + private Date birth; private String phone; - private String imageUrl; + //private String imageUrl; } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ApplicantsRepository.java b/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ApplicantsRepository.java new file mode 100644 index 0000000..4819e1c --- /dev/null +++ b/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ApplicantsRepository.java @@ -0,0 +1,21 @@ +package com.archisemtle.semtlewebserverspring.infrastructure; + +import com.archisemtle.semtlewebserverspring.domain.Applicants; +import java.util.Optional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +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; + +@Repository +public interface ApplicantsRepository extends JpaRepository { + @Query(value = "SELECT pa.* FROM applicants pa " + + "JOIN applications app ON pa.applicant_id = app.applicant_id " + // 조인 조건 수정 + "WHERE app.board_id = :boardId", nativeQuery = true) // nativeQuery를 사용하여 SQL 쿼리 + Page findAllWithApplication(@Param("boardId") Integer boardId, Pageable pageable); + + Optional findByBoardIdAndApplicantId(Integer boardId, Integer applicantId); +} + diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ApplicationRepository.java b/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ApplicationRepository.java new file mode 100644 index 0000000..33ac0cf --- /dev/null +++ b/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ApplicationRepository.java @@ -0,0 +1,13 @@ +package com.archisemtle.semtlewebserverspring.infrastructure; + +import com.archisemtle.semtlewebserverspring.domain.Application; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ApplicationRepository extends JpaRepository { + + Page findByApplicantId(Integer applicantId, Pageable pageable); +} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ApplyRepository.java b/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ApplyRepository.java deleted file mode 100644 index 03f5340..0000000 --- a/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ApplyRepository.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.archisemtle.semtlewebserverspring.infrastructure; - -import com.archisemtle.semtlewebserverspring.domain.Apply; -import com.archisemtle.semtlewebserverspring.domain.Member; -import com.archisemtle.semtlewebserverspring.domain.ProjectBoard; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ApplyRepository extends JpaRepository { - Apply findByMemberAndProjectBoardId(Member member, Long postId); - Page findByProjectBoard(ProjectBoard projectBoard, Pageable pageable); - Page findByMember(Member member, Pageable pageable); -} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ProjectBoardImageRepository.java b/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ProjectBoardImageRepository.java index 6bdfcbe..936e6e4 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ProjectBoardImageRepository.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ProjectBoardImageRepository.java @@ -7,5 +7,4 @@ public interface ProjectBoardImageRepository extends JpaRepository { List findAllByProjectBoardId(Long id); - void deleteAllByProjectBoardId(Long id); } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ProjectJoinFileRepository.java b/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ProjectJoinFileRepository.java deleted file mode 100644 index ff56c45..0000000 --- a/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ProjectJoinFileRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.archisemtle.semtlewebserverspring.infrastructure; - -import com.archisemtle.semtlewebserverspring.domain.ProjectJoinFile; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ProjectJoinFileRepository extends JpaRepository { - -} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ProjectJoinUrlRepository.java b/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ProjectJoinUrlRepository.java deleted file mode 100644 index 1fc0e56..0000000 --- a/src/main/java/com/archisemtle/semtlewebserverspring/infrastructure/ProjectJoinUrlRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.archisemtle.semtlewebserverspring.infrastructure; - -import com.archisemtle.semtlewebserverspring.domain.ProjectJoinUrl; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface ProjectJoinUrlRepository extends JpaRepository { - -} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/ApplyingController.java b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/ApplyingController.java index e6a137a..b264caf 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/ApplyingController.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/ApplyingController.java @@ -1,14 +1,14 @@ package com.archisemtle.semtlewebserverspring.presentation; import com.archisemtle.semtlewebserverspring.application.ApplyProjectService; -import com.archisemtle.semtlewebserverspring.common.BaseException; -import com.archisemtle.semtlewebserverspring.common.BaseResponseStatus; import com.archisemtle.semtlewebserverspring.common.CommonResponse; import com.archisemtle.semtlewebserverspring.dto.ApplyProjectRequestDto; import com.archisemtle.semtlewebserverspring.dto.ApplyProjectResponseDto; import com.archisemtle.semtlewebserverspring.vo.ApplyProjectResponseVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -21,17 +21,20 @@ public class ApplyingController { private final ApplyProjectService applyProjectService; + // 공고 신청 + @PostMapping("/{post_id}/apply/{id}") + public CommonResponse ApplyProject( + @PathVariable("post_id") Integer boardId, + @PathVariable("id") Integer applicantId, + @RequestBody ApplyProjectRequestDto applyProjectRequestDto + ) throws Exception { + ApplyProjectResponseDto applyProjectResponseDto = applyProjectService.applyProject(boardId, applicantId, applyProjectRequestDto); + ApplyProjectResponseVo applyProjectResponseVo = ApplyProjectResponseVo.dtoToVo(applyProjectResponseDto); - @PostMapping("/apply") - public CommonResponse ApplyProject(@RequestBody ApplyProjectRequestDto applyProjectRequestDto){ - try { - ApplyProjectResponseDto applyProjectResponseDto = applyProjectService.applyProject(applyProjectRequestDto); - ApplyProjectResponseVo applyProjectResponseVo = ApplyProjectResponseVo.dtoToVo(applyProjectResponseDto); - return CommonResponse.success(BaseResponseStatus.SUCCESS.getMessage(), applyProjectResponseVo); - } catch (BaseException e) { - return CommonResponse.fail(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - return CommonResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR, BaseResponseStatus.INTERNAL_SERVER_ERROR.getMessage()); + if(applyProjectResponseVo.getAppliedAt() != null) { + return CommonResponse.success("applied successfully", applyProjectResponseVo); + }else{ + return CommonResponse.fail(null,"apply failed"); } } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/MemberController.java b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/MemberController.java index a943ad2..0d508e6 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/MemberController.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/MemberController.java @@ -83,31 +83,19 @@ public CommonResponse excelAddMember( // 출력 - 이름, 생년월일, 전화번호, 학번, 프로필 사진 @GetMapping("/{uuid}") public CommonResponse showMember(@PathVariable UUID uuid) { - try{ - MemberReadResponseDto showMemberDto = memberService.show(uuid); - MemberReadResponseVo responseVo = MemberReadResponseVo.dtoToVo(showMemberDto); - return CommonResponse.success(BaseResponseStatus.SUCCESS.getMessage(), responseVo); - } catch (BaseException e) { - return CommonResponse.fail(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - return CommonResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR, BaseResponseStatus.INTERNAL_SERVER_ERROR.getMessage()); - } + MemberReadResponseDto showMemberDto = memberService.show(uuid); + MemberReadResponseVo responseVo = MemberReadResponseVo.dtoToVo(showMemberDto); + return CommonResponse.success("해당하는 멤버의 정보를 조회하는데 성공하였습니다.", responseVo); } // 개인 정보 수정 - // 이름, 생년월일, 전화번호, 프로필 사진 + // uuid, 이름, 생년월일, 전화번호, 학번, 프로필 사진 @PatchMapping("/{uuid}") - public CommonResponse updateMember(@PathVariable UUID uuid, + public CommonResponse updateMember(@PathVariable UUID uuid, @RequestBody MemberUpdateRequestDto memberUpdateRequestDto) { - try { - memberService.update(uuid, memberUpdateRequestDto); - return CommonResponse.success(BaseResponseStatus.SUCCESS.getMessage(), BaseResponseStatus.SUCCESS.getCode()); - } catch (BaseException e) { - return CommonResponse.fail(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - return CommonResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR, BaseResponseStatus.INTERNAL_SERVER_ERROR.getMessage()); - } + memberService.update(uuid, memberUpdateRequestDto); + return CommonResponse.success("회원 정보 수정에 성공하였습니다."); } @GetMapping diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/ProjectApplicaionController.java b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/ProjectApplicaionController.java new file mode 100644 index 0000000..ca40e2c --- /dev/null +++ b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/ProjectApplicaionController.java @@ -0,0 +1,83 @@ +package com.archisemtle.semtlewebserverspring.presentation; + +import com.archisemtle.semtlewebserverspring.application.ProjectApplicationService; +import com.archisemtle.semtlewebserverspring.common.CommonResponse; +import com.archisemtle.semtlewebserverspring.dto.ChangeApplyStatusRequestDto; +import com.archisemtle.semtlewebserverspring.dto.ChangeApplyStatusResponseDto; +import com.archisemtle.semtlewebserverspring.dto.ProjectApplicantsResponseDto; +import com.archisemtle.semtlewebserverspring.dto.ShowApplyingProjectInfoResponseDto; +import com.archisemtle.semtlewebserverspring.dto.ShowProjectApplicantInfoResponseDto; +import com.archisemtle.semtlewebserverspring.vo.ChangeApplyStatusResponseVo; +import com.archisemtle.semtlewebserverspring.vo.ShowApplyingProjectListResponseVo; +import com.archisemtle.semtlewebserverspring.vo.ShowProjectApplicantInfoResponseVo; +import com.archisemtle.semtlewebserverspring.vo.ShowProjectApplicantsListResponseVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/api/v1/own/projects") +public class ProjectApplicaionController { + + private final ProjectApplicationService projectApplicationService; + + // 본인이 게시한 프로젝트(공고) 신청자 목록 조회 API + @GetMapping("/{post_id}/applicants") + public CommonResponse ShowProjectApplicantsList( + @PathVariable("post_id") Integer postId, + @RequestParam(value = "page", defaultValue = "1") int page, + @RequestParam(value = "limit", defaultValue = "10") int limit) throws Exception { + + ProjectApplicantsResponseDto projectApplicantsResponseDto = projectApplicationService.getApplicants(postId, page, limit); + ShowProjectApplicantsListResponseVo showProjectApplicantsResponseVo = ShowProjectApplicantsListResponseVo.dtoToVo(projectApplicantsResponseDto); + + return CommonResponse.success("applicants Showed successfully", showProjectApplicantsResponseVo); + } + + // 본인이 게시한 프로젝트(공고) 신청자 정보(내용) 조회 API + @GetMapping("/{post_id}/applicants/{id}") + public CommonResponse ShowProjectApplicantsInfo(@PathVariable("post_id") Integer boardId, @PathVariable("id") Integer applicantId) + throws Exception { + + ShowProjectApplicantInfoResponseDto showProjectApplicantInfoResponseDto = projectApplicationService.getApplicantInfo(boardId, applicantId); + + ShowProjectApplicantInfoResponseVo showProjectApplicantInfoResponseVo = ShowProjectApplicantInfoResponseVo.dtoToVo(showProjectApplicantInfoResponseDto); + return CommonResponse.success("applicants Info Showed successfully", showProjectApplicantInfoResponseVo); + } + + // 본인이 게시한 프로젝트(공고) 신청자 승인 상태 변경 API + @PatchMapping("/{post_id}/applicants/{id}") + public CommonResponse ChangeApplyStatus( + @PathVariable("post_id") Integer boardId, + @PathVariable("id") Integer applicantId, + @RequestBody ChangeApplyStatusRequestDto changeApplyStatusRequestDto + ) throws Exception { + + ChangeApplyStatusResponseDto changeApplyStatusResponseDto = projectApplicationService.changeApplyStatus(boardId,applicantId,changeApplyStatusRequestDto.getStatus()); + + ChangeApplyStatusResponseVo changeApplyStatusResponseVo = ChangeApplyStatusResponseVo.dtoToVo(changeApplyStatusResponseDto); + return CommonResponse.success("applicant Status changed successfully", changeApplyStatusResponseVo); + } + + // 본인이 신청한 프로젝트 목록 조회 (승인결과포함) API + @GetMapping("/applications/{id}") + public CommonResponse ShowApplyingProjectList( + @PathVariable("id") Integer applicantId, + @RequestParam(value = "page", defaultValue = "1") int page, + @RequestParam(value = "limit", defaultValue = "10") int limit) throws Exception { + + ShowApplyingProjectInfoResponseDto showApplyingProjectInfoResponseDto = projectApplicationService.getApplyingProjectInfo(applicantId, page, limit); + + ShowApplyingProjectListResponseVo showApplyingProjectListResponseVo = ShowApplyingProjectListResponseVo.dtoToVo(showApplyingProjectInfoResponseDto); + return CommonResponse.success("Applying applications Showed successfully", showApplyingProjectListResponseVo); + } +} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/ProjectApplicationController.java b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/ProjectApplicationController.java deleted file mode 100644 index ddc6d31..0000000 --- a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/ProjectApplicationController.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.archisemtle.semtlewebserverspring.presentation; - -import com.archisemtle.semtlewebserverspring.application.ProjectApplicationService; -import com.archisemtle.semtlewebserverspring.common.BaseException; -import com.archisemtle.semtlewebserverspring.common.BaseResponseStatus; -import com.archisemtle.semtlewebserverspring.common.CommonResponse; -import com.archisemtle.semtlewebserverspring.dto.ChangeApplyStatusRequestDto; -import com.archisemtle.semtlewebserverspring.dto.ChangeApplyStatusResponseDto; -import com.archisemtle.semtlewebserverspring.dto.ProjectApplicantsResponseDto; -import com.archisemtle.semtlewebserverspring.dto.ShowApplyingProjectInfoResponseDto; -import com.archisemtle.semtlewebserverspring.dto.ShowProjectApplicantInfoResponseDto; -import com.archisemtle.semtlewebserverspring.vo.ChangeApplyStatusResponseVo; -import com.archisemtle.semtlewebserverspring.vo.ShowApplyingProjectListResponseVo; -import com.archisemtle.semtlewebserverspring.vo.ShowProjectApplicantInfoResponseVo; -import com.archisemtle.semtlewebserverspring.vo.ShowProjectApplicantsListResponseVo; -import java.util.UUID; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -@Slf4j -@RequiredArgsConstructor -@RestController -@RequestMapping("/api/v1/projects") -public class ProjectApplicationController { - - private final ProjectApplicationService projectApplicationService; - - // 본인이 게시한 프로젝트(공고) 신청자 목록 조회 API - @GetMapping("/{post_id}/applicants") - public CommonResponse ShowProjectApplicantsList( - @PathVariable("post_id") Long postId, - @RequestParam(value = "page", defaultValue = "1") int page, - @RequestParam(value = "limit", defaultValue = "10") int limit){ - try { - ProjectApplicantsResponseDto projectApplicantsResponseDto = projectApplicationService.getApplicants(postId, page, limit); - ShowProjectApplicantsListResponseVo showProjectApplicantsResponseVo = ShowProjectApplicantsListResponseVo.dtoToVo(projectApplicantsResponseDto); - return CommonResponse.success(BaseResponseStatus.SUCCESS.getMessage(), showProjectApplicantsResponseVo); - } catch (BaseException e) { - return CommonResponse.fail(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - return CommonResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR, BaseResponseStatus.INTERNAL_SERVER_ERROR.getMessage()); - } - } - - // 본인이 게시한 프로젝트(공고) 신청자 정보(내용) 조회 API - @GetMapping("/{post_id}/applicants/{uuid}") - public CommonResponse ShowProjectApplicantsInfo(@PathVariable("post_id") Long postId, @PathVariable("uuid") UUID uuid) { - try { - ShowProjectApplicantInfoResponseDto showProjectApplicantInfoResponseDto = projectApplicationService.getApplicantInfo(postId, uuid); - ShowProjectApplicantInfoResponseVo showProjectApplicantInfoResponseVo = ShowProjectApplicantInfoResponseVo.dtoToVo(showProjectApplicantInfoResponseDto); - return CommonResponse.success(BaseResponseStatus.SUCCESS.getMessage(), showProjectApplicantInfoResponseVo); - } catch (BaseException e) { - return CommonResponse.fail(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - return CommonResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR, BaseResponseStatus.INTERNAL_SERVER_ERROR.getMessage()); - } - } - - // 본인이 게시한 프로젝트(공고) 신청자 승인 상태 변경 API - @PatchMapping("/{post_id}/applicants/{uuid}") - public CommonResponse ChangeApplyStatus( - @PathVariable("post_id") Long postId, - @PathVariable("uuid") UUID uuid, - @RequestBody ChangeApplyStatusRequestDto changeApplyStatusRequestDto - ) { - try { - ChangeApplyStatusResponseDto changeApplyStatusResponseDto = projectApplicationService.changeApplyStatus(postId,uuid,changeApplyStatusRequestDto.getStatus()); - ChangeApplyStatusResponseVo changeApplyStatusResponseVo = ChangeApplyStatusResponseVo.dtoToVo(changeApplyStatusResponseDto); - return CommonResponse.success(BaseResponseStatus.SUCCESS.getMessage(), changeApplyStatusResponseVo); - } catch (BaseException e) { - return CommonResponse.fail(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - return CommonResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR, BaseResponseStatus.INTERNAL_SERVER_ERROR.getMessage()); - } - } - - // 본인이 신청한 프로젝트 목록 조회 (승인결과포함) API - @GetMapping("/applications") - public CommonResponse ShowApplyingProjectList( - @RequestParam(value = "page", defaultValue = "1") int page, - @RequestParam(value = "limit", defaultValue = "10") int limit) { - try { - ShowApplyingProjectInfoResponseDto showApplyingProjectInfoResponseDto = projectApplicationService.getApplyingProjectInfo(page, limit); - ShowApplyingProjectListResponseVo showApplyingProjectListResponseVo = ShowApplyingProjectListResponseVo.dtoToVo(showApplyingProjectInfoResponseDto); - return CommonResponse.success(BaseResponseStatus.SUCCESS.getMessage(), showApplyingProjectListResponseVo); - } catch (BaseException e) { - return CommonResponse.fail(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - return CommonResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR, BaseResponseStatus.INTERNAL_SERVER_ERROR.getMessage()); - } - } -} diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/activity/ActivityController.java b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/activity/ActivityController.java index cdd8897..d29c19a 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/activity/ActivityController.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/activity/ActivityController.java @@ -3,7 +3,6 @@ import com.archisemtle.semtlewebserverspring.application.activity.ActivityService; import com.archisemtle.semtlewebserverspring.application.activity.ActivityServiceImpl; import com.archisemtle.semtlewebserverspring.common.BaseException; -import com.archisemtle.semtlewebserverspring.common.BaseResponseStatus; import com.archisemtle.semtlewebserverspring.common.CommonResponse; import com.archisemtle.semtlewebserverspring.dto.activity.ActivityListRequestDto; import com.archisemtle.semtlewebserverspring.dto.activity.ActivityListResponseDto; @@ -49,8 +48,9 @@ public class ActivityController { //게시물 생성 @PostMapping - public CommonResponse createActivity(@Valid @RequestBody ActivityRequestVo requestVo) + public CommonResponse createActivity(@RequestBody ActivityRequestVo requestVo) throws IOException { + activityService.createActivityBoard(ActivityRequestVo.voToDto(requestVo)); return CommonResponse.success("게시글 작성 성공"); } @@ -82,10 +82,7 @@ public CommonResponse deleteActivity(@PathVariable Long id) { public CommonResponse getActivityList( @RequestParam(name = "page", defaultValue = "1") int page, @RequestParam(name = "size", defaultValue = "15") int size, - @RequestParam(name = "type", defaultValue = "all") String type){ - - if(page < 1 || size < 1 || type.isEmpty()) throw new BaseException(BaseResponseStatus.WRONG_PARAM); - + @RequestParam(name = "type", defaultValue = "기타") String type){ ActivityListRequestVo requestVo = ActivityListRequestVo.builder() .page(page) .size(size) @@ -99,7 +96,6 @@ public CommonResponse getActivityList( @GetMapping("/recent") public CommonResponse getCurActivityList( @RequestParam(name = "limit", defaultValue = "3") int limit){ - if(limit < 1) throw new BaseException(BaseResponseStatus.WRONG_PARAM); ActivityListResponseDto responseDto = activityService.readRecentActivityListBoard(limit); return CommonResponse.success("최근 활동 게시물 목록 읽어오기 성공", ActivityListResponseDto.dtoToVo(responseDto)); diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/archive/ArchiveController.java b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/archive/ArchiveController.java index 2d9088e..ce05073 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/presentation/archive/ArchiveController.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/presentation/archive/ArchiveController.java @@ -1,8 +1,6 @@ package com.archisemtle.semtlewebserverspring.presentation.archive; import com.archisemtle.semtlewebserverspring.application.archive.ArchiveService; -import com.archisemtle.semtlewebserverspring.common.BaseException; -import com.archisemtle.semtlewebserverspring.common.BaseResponseStatus; import com.archisemtle.semtlewebserverspring.common.CommonResponse; import com.archisemtle.semtlewebserverspring.dto.archive.ArchiveListRequestDto; import com.archisemtle.semtlewebserverspring.dto.archive.ArchiveListResponseDto; @@ -40,7 +38,6 @@ public class ArchiveController { @PostMapping public CommonResponse createArchive(@RequestBody ArchiveRequestVo requestVo) throws IOException{ archiveService.createArchiveBoard(ArchiveRequestVo.voToDto(requestVo)); - return CommonResponse.success("Secret Note 게시물이 성공적으로 등록되었습니다."); } @@ -48,7 +45,6 @@ public CommonResponse createArchive(@RequestBody ArchiveRequestVo reques @GetMapping("/{id}") public CommonResponse readArchive(@PathVariable Long id){ ArchiveResponseDto responseDto = archiveService.readArchiveBoard(id); - return CommonResponse.success("족보 게시판 흭득 성공", ArchiveResponseDto.dtoToVo(responseDto)); } @@ -75,7 +71,6 @@ public CommonResponse getArchiveList( @RequestParam(name = "size", defaultValue = "15") int size, @RequestParam(name = "search_keyword", defaultValue = "") String search_keyword ){ - if(page < 1 || size < 1) throw new BaseException(BaseResponseStatus.WRONG_PARAM); ArchiveListRequestVo requestVo = new ArchiveListRequestVo(page, size, search_keyword); ArchiveListRequestDto requestDto = ArchiveListRequestVo.voToDto(requestVo); ArchiveListResponseDto responseDto = archiveService.getArchiveList(requestDto); diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/ApplyProjectResponseVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/ApplyProjectResponseVo.java index 1c320c7..3472bcf 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/ApplyProjectResponseVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/ApplyProjectResponseVo.java @@ -1,7 +1,6 @@ package com.archisemtle.semtlewebserverspring.vo; import com.archisemtle.semtlewebserverspring.dto.ApplyProjectResponseDto; -import java.time.LocalDateTime; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -9,19 +8,22 @@ @Getter @NoArgsConstructor public class ApplyProjectResponseVo { - private Long applyId; - private LocalDateTime appliedAt; + private String message; + private Integer appliedId; + private String appliedAt; @Builder - public ApplyProjectResponseVo(Long applyId, LocalDateTime appliedAt) { - this.applyId = applyId; + public ApplyProjectResponseVo(String message, Integer appliedId, String appliedAt) { + this.message = message; + this.appliedId = appliedId; this.appliedAt = appliedAt; } public static ApplyProjectResponseVo dtoToVo( ApplyProjectResponseDto applyProjectResponseDto) { return ApplyProjectResponseVo.builder() - .applyId(applyProjectResponseDto.getApplyId()) + .message(applyProjectResponseDto.getMessage()) + .appliedId(applyProjectResponseDto.getAppliedId()) .appliedAt(applyProjectResponseDto.getAppliedAt()) .build(); } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/ChangeApplyStatusResponseVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/ChangeApplyStatusResponseVo.java index 7cb3127..ab91713 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/ChangeApplyStatusResponseVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/ChangeApplyStatusResponseVo.java @@ -1,8 +1,6 @@ package com.archisemtle.semtlewebserverspring.vo; import com.archisemtle.semtlewebserverspring.dto.ChangeApplyStatusResponseDto; -import java.time.LocalDate; -import java.time.LocalDateTime; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -10,11 +8,13 @@ @Getter @NoArgsConstructor public class ChangeApplyStatusResponseVo { + String message; String updatedStatus; - LocalDateTime updatedAt; + String updatedAt; @Builder - public ChangeApplyStatusResponseVo(String updatedStatus, LocalDateTime updatedAt) { + public ChangeApplyStatusResponseVo(String message, String updatedStatus, String updatedAt) { + this.message = message; this.updatedStatus = updatedStatus; this.updatedAt = updatedAt; } @@ -22,6 +22,7 @@ public ChangeApplyStatusResponseVo(String updatedStatus, LocalDateTime updatedAt public static ChangeApplyStatusResponseVo dtoToVo( ChangeApplyStatusResponseDto changeApplyStatusResponseDto) { return ChangeApplyStatusResponseVo.builder() + .message(changeApplyStatusResponseDto.getMessage()) .updatedStatus(changeApplyStatusResponseDto.getUpdatedStatus()) .updatedAt(changeApplyStatusResponseDto.getUpdatedAt()) .build(); diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowApplyingProjectListResponseVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowApplyingProjectListResponseVo.java index f063973..cefe7b8 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowApplyingProjectListResponseVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowApplyingProjectListResponseVo.java @@ -2,6 +2,7 @@ import com.archisemtle.semtlewebserverspring.dto.ShowApplyingProjectInfoResponseDto; import java.time.LocalDateTime; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; import lombok.Builder; @@ -15,60 +16,59 @@ public class ShowApplyingProjectListResponseVo { private int totalElements; private int totalPages; private int currentPage; - private List apply; + private List applications; @Getter @NoArgsConstructor - public static class ApplyInfo { - private Long applyId; - private Long postId; + public static class ApplicationInfo { + private Integer applicationId; private String projectTitle; - private LocalDateTime applyDate; + private Integer boardId; + private Date applyDate; private String status; private String projectType; private String relateField; @Builder - public ApplyInfo( - Long applyId, - Long postId, + public ApplicationInfo( + Integer applicationId, String projectTitle, + Integer boardId, + Date applyDate, String status, String projectType, - String relateField, - LocalDateTime applyDate) { - this.applyId = applyId; - this.postId = postId; + String relateField) { + this.applicationId = applicationId; this.projectTitle = projectTitle; + this.boardId = boardId; + this.applyDate = applyDate; this.status = status; this.projectType = projectType; this.relateField = relateField; - this.applyDate = applyDate; } } - @Builder public ShowApplyingProjectListResponseVo(int totalElements, int totalPages, int currentPage, - List apply) { + List applications) { this.totalElements = totalElements; this.totalPages = totalPages; this.currentPage = currentPage; - this.apply = apply; + this.applications = applications; } public static ShowApplyingProjectListResponseVo dtoToVo( ShowApplyingProjectInfoResponseDto showApplyingProjectInfoResponseDto) { - List applyInfoList = showApplyingProjectInfoResponseDto.getApplys().stream() - .map(apply -> ShowApplyingProjectListResponseVo.ApplyInfo.builder() - .applyId(apply.getApplyId()) - .postId(apply.getPostId()) - .projectTitle(apply.getProjectTitle()) - .status(apply.getStatus()) - .projectType(apply.getProjectType()) - .relateField(apply.getRelateField()) - .applyDate(apply.getApplyDate()) + List applicationInfoList = showApplyingProjectInfoResponseDto.getApplications().stream() + .map(dtoApplication -> ShowApplyingProjectListResponseVo.ApplicationInfo.builder() + .applicationId(dtoApplication.getApplicationId()) + .projectTitle(dtoApplication.getProjectTitle()) + .boardId(dtoApplication.getBoardId()) + .applyDate(dtoApplication.getApplyDate()) + .status(dtoApplication.getStatus()) + .projectType(dtoApplication.getProjectType()) + .relateField(dtoApplication.getRelateField()) .build()) .collect(Collectors.toList()); @@ -76,7 +76,7 @@ public static ShowApplyingProjectListResponseVo dtoToVo( .totalElements(showApplyingProjectInfoResponseDto.getTotalElements()) .totalPages(showApplyingProjectInfoResponseDto.getTotalPages()) .currentPage(showApplyingProjectInfoResponseDto.getCurrentPage()) - .apply(applyInfoList) + .applications(applicationInfoList) .build(); } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowProjectApplicantInfoResponseVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowProjectApplicantInfoResponseVo.java index 12f4e35..f53cbfe 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowProjectApplicantInfoResponseVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowProjectApplicantInfoResponseVo.java @@ -1,7 +1,7 @@ package com.archisemtle.semtlewebserverspring.vo; import com.archisemtle.semtlewebserverspring.dto.ShowProjectApplicantInfoResponseDto; -import java.time.LocalDateTime; +import java.util.Date; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -9,38 +9,54 @@ @Getter @NoArgsConstructor public class ShowProjectApplicantInfoResponseVo { - private Long applyId; - private String username; - private LocalDateTime applyDate; + private Integer applicantId; + private String name; + private Date applyDate; private String status; private String email; private String phone; + private String resumeUrl; + private String portfolioUrl; + private String customAnswer; + private String additionalFile; @Builder public ShowProjectApplicantInfoResponseVo( - Long applyId, - String username, - LocalDateTime applyDate, + Integer applicantId, + String name, + Date applyDate, String status, String email, - String phone){ - this.applyId = applyId; - this.username = username; + String phone, + String resumeUrl, + String portfolioUrl, + String customAnswer, + String additionalFile){ + this.applicantId = applicantId; + this.name = name; this.applyDate = applyDate; this.status = status; this.email = email; this.phone = phone; + this.resumeUrl = resumeUrl; + this.portfolioUrl = portfolioUrl; + this.customAnswer = customAnswer; + this.additionalFile = additionalFile; } public static ShowProjectApplicantInfoResponseVo dtoToVo( ShowProjectApplicantInfoResponseDto showProjectApplicantInfoResponseDto) { return ShowProjectApplicantInfoResponseVo.builder() - .applyId(showProjectApplicantInfoResponseDto.getApplyId()) - .username(showProjectApplicantInfoResponseDto.getUsername()) + .applicantId(showProjectApplicantInfoResponseDto.getApplicantId()) + .name(showProjectApplicantInfoResponseDto.getName()) .applyDate(showProjectApplicantInfoResponseDto.getApplyDate()) .status(showProjectApplicantInfoResponseDto.getStatus()) .email(showProjectApplicantInfoResponseDto.getEmail()) .phone(showProjectApplicantInfoResponseDto.getPhone()) + .resumeUrl(showProjectApplicantInfoResponseDto.getResumeUrl()) + .portfolioUrl(showProjectApplicantInfoResponseDto.getPortfolioUrl()) + .customAnswer(showProjectApplicantInfoResponseDto.getCustomAnswer()) + .additionalFile(showProjectApplicantInfoResponseDto.getAdditionalFile()) .build(); } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowProjectApplicantsListResponseVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowProjectApplicantsListResponseVo.java index db5be96..ba0e0ab 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowProjectApplicantsListResponseVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/ShowProjectApplicantsListResponseVo.java @@ -1,7 +1,7 @@ package com.archisemtle.semtlewebserverspring.vo; import com.archisemtle.semtlewebserverspring.dto.ProjectApplicantsResponseDto; -import java.time.LocalDateTime; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; import lombok.Builder; @@ -15,20 +15,20 @@ public class ShowProjectApplicantsListResponseVo { private int totalElements; private int totalPages; private int currentPage; - private List applys; + private List applicants; @Getter @NoArgsConstructor - public static class ApplyInfo { - private Long applyId; - private String username; - private LocalDateTime applyDate; + public static class ApplicantInfo { + private Integer applicantId; + private String name; + private Date applyDate; private String status; @Builder - public ApplyInfo(Long applyId, String username, LocalDateTime applyDate, String status) { - this.applyId = applyId; - this.username = username; + public ApplicantInfo(Integer applicantId, String name, Date applyDate, String status) { + this.applicantId = applicantId; + this.name = name; this.applyDate = applyDate; this.status = status; } @@ -36,22 +36,22 @@ public ApplyInfo(Long applyId, String username, LocalDateTime applyDate, String @Builder public ShowProjectApplicantsListResponseVo(int totalElements, int totalPages, int currentPage, - List applys) { + List applicants) { this.totalElements = totalElements; this.totalPages = totalPages; this.currentPage = currentPage; - this.applys = applys; + this.applicants = applicants; } public static ShowProjectApplicantsListResponseVo dtoToVo( ProjectApplicantsResponseDto projectApplicantsResponseDto) { - List applyInfoList = projectApplicantsResponseDto.getApplys().stream() - .map(apply -> ApplyInfo.builder() - .applyId(apply.getApplyId()) - .username(apply.getUsername()) - .applyDate(apply.getApplyDate()) - .status(apply.getStatus()) + List applicantInfoList = projectApplicantsResponseDto.getApplicants().stream() + .map(dtoApplicant -> ApplicantInfo.builder() + .applicantId(dtoApplicant.getApplicantId()) + .name(dtoApplicant.getName()) + .applyDate(dtoApplicant.getApplyDate()) + .status(dtoApplicant.getStatus()) .build()) .collect(Collectors.toList()); @@ -59,7 +59,7 @@ public static ShowProjectApplicantsListResponseVo dtoToVo( .totalElements(projectApplicantsResponseDto.getTotalElements()) .totalPages(projectApplicantsResponseDto.getTotalPages()) .currentPage(projectApplicantsResponseDto.getCurrentPage()) - .applys(applyInfoList) + .applicants(applicantInfoList) .build(); } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/UpdateProjectBoardRequestVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/UpdateProjectBoardRequestVo.java index 759da3c..98ee4b0 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/UpdateProjectBoardRequestVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/UpdateProjectBoardRequestVo.java @@ -18,7 +18,6 @@ public class UpdateProjectBoardRequestVo { private LocalDate projectStartTime; private LocalDate projectEndTime; private LocalDate projectRecruitingEndTime; - private List projectBoardImages; public static UpdateProjectBoardRequestDto voToDto( UpdateProjectBoardRequestVo updateProjectBoardRequestVo) { @@ -31,7 +30,6 @@ public static UpdateProjectBoardRequestDto voToDto( .projectStartTime(updateProjectBoardRequestVo.getProjectStartTime()) .projectEndTime(updateProjectBoardRequestVo.getProjectEndTime()) .projectRecruitingEndTime(updateProjectBoardRequestVo.getProjectRecruitingEndTime()) - .projectBoardImages(updateProjectBoardRequestVo.getProjectBoardImages()) .build(); } } diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/activity/ActivityRequestVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/activity/ActivityRequestVo.java index 8dafd25..5837ae2 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/activity/ActivityRequestVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/activity/ActivityRequestVo.java @@ -1,8 +1,6 @@ package com.archisemtle.semtlewebserverspring.vo.activity; import com.archisemtle.semtlewebserverspring.dto.activity.ActivityRequestDto; -import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.UUID; @@ -16,6 +14,7 @@ public class ActivityRequestVo { private String title; private String content; private String writer; + private Date createdAt; private UUID uuid; private List images; private String type; @@ -26,7 +25,7 @@ public static ActivityRequestDto voToDto(ActivityRequestVo requestVo){ .content(requestVo.getContent()) .writer(requestVo.getWriter()) .images(requestVo.getImages()) - .createdAt(LocalDateTime.now()) + .createdAt(requestVo.getCreatedAt()) .uuid(requestVo.getUuid()) .type(requestVo.getType()) .build(); diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/activity/ActivityResponseVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/activity/ActivityResponseVo.java index d15bea8..0414091 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/activity/ActivityResponseVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/activity/ActivityResponseVo.java @@ -1,7 +1,5 @@ package com.archisemtle.semtlewebserverspring.vo.activity; -import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.Date; import java.util.List; import lombok.Builder; @@ -16,7 +14,7 @@ public class ActivityResponseVo { private String title; private String content; private String writer; - private LocalDateTime createdAt; + private Date createdAt; private List images; private String type; diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/archive/ArchiveRequestVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/archive/ArchiveRequestVo.java index 2f0f5b5..757db58 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/archive/ArchiveRequestVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/archive/ArchiveRequestVo.java @@ -1,7 +1,6 @@ package com.archisemtle.semtlewebserverspring.vo.archive; import com.archisemtle.semtlewebserverspring.dto.archive.ArchiveRequestDto; -import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.UUID; @@ -15,6 +14,7 @@ public class ArchiveRequestVo { private String content; private String title; private UUID uuid; + private Date createdAt; private List imageUrl; private List fileUrl; @@ -23,7 +23,7 @@ public static ArchiveRequestDto voToDto(ArchiveRequestVo requestVo) { .content(requestVo.getContent()) .writer(requestVo.getWriter()) .title(requestVo.getTitle()) - .createdAt(LocalDateTime.now()) + .createdAt(requestVo.getCreatedAt()) .uuid(requestVo.getUuid()) .imageUrl(requestVo.getImageUrl()) .fileUrl(requestVo.getFileUrl()) diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/archive/ArchiveResponseVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/archive/ArchiveResponseVo.java index ec1412d..507b93d 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/archive/ArchiveResponseVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/archive/ArchiveResponseVo.java @@ -1,6 +1,6 @@ package com.archisemtle.semtlewebserverspring.vo.archive; -import java.time.LocalDateTime; +import java.util.Date; import java.util.List; import lombok.Builder; import lombok.Getter; @@ -13,7 +13,7 @@ public class ArchiveResponseVo { private String writer; private String content; private String title; - private LocalDateTime createdAt; + private Date createdAt; private List imageUrl; private List fileUrl; diff --git a/src/main/java/com/archisemtle/semtlewebserverspring/vo/member/MemberReadResponseVo.java b/src/main/java/com/archisemtle/semtlewebserverspring/vo/member/MemberReadResponseVo.java index 7381063..a3883c3 100644 --- a/src/main/java/com/archisemtle/semtlewebserverspring/vo/member/MemberReadResponseVo.java +++ b/src/main/java/com/archisemtle/semtlewebserverspring/vo/member/MemberReadResponseVo.java @@ -1,7 +1,7 @@ package com.archisemtle.semtlewebserverspring.vo.member; import com.archisemtle.semtlewebserverspring.dto.member.MemberReadResponseDto; -import java.time.LocalDate; +import java.util.Date; import java.util.UUID; import lombok.Builder; import lombok.Getter; @@ -14,10 +14,9 @@ public class MemberReadResponseVo { private String password; private String studentId; private String username; - private LocalDate birth; + private Date birth; private String phone; private String role; - private String profileImageUrl; private boolean manageApprovalStatus; public static MemberReadResponseVo dtoToVo( @@ -31,7 +30,6 @@ public static MemberReadResponseVo dtoToVo( .birth(memberReadResponseDto.getBirth()) .phone(memberReadResponseDto.getPhone()) .role(memberReadResponseDto.getRole()) - .profileImageUrl(memberReadResponseDto.getProfileImageUrl()) .manageApprovalStatus(memberReadResponseDto.isManageApprovalStatus()) .build(); }