Skip to content

Commit

Permalink
feat : 동아리 지원 폼지 전체 조회 API 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
KoSeonJe committed Feb 3, 2025
1 parent 521e081 commit 57d02d9
Show file tree
Hide file tree
Showing 12 changed files with 137 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package ddingdong.ddingdongBE.common.utils;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class TimeParser {
public class TimeUtils {

private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm";

Expand All @@ -26,4 +27,10 @@ public static LocalDateTime processDate(String dateString, LocalDateTime current

return parseToLocalDateTime(dateString);
}

public static boolean isDateInRange(LocalDate nowDate, LocalDate startDate, LocalDate endDate) {
if (nowDate == null || startDate == null || endDate == null) {
return false;
}
return !nowDate.isBefore(startDate) && !nowDate.isAfter(endDate); }
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ddingdong.ddingdongBE.domain.activityreport.service.dto.command;

import ddingdong.ddingdongBE.common.utils.TimeParser;
import ddingdong.ddingdongBE.common.utils.TimeUtils;
import ddingdong.ddingdongBE.domain.activityreport.domain.ActivityReport;
import ddingdong.ddingdongBE.domain.activityreport.domain.Participant;
import ddingdong.ddingdongBE.domain.club.entity.Club;
Expand All @@ -23,8 +23,8 @@ public ActivityReport toEntity(Club club) {
.term(term)
.content(content)
.place(place)
.startDate(TimeParser.parseToLocalDateTime(startDate))
.endDate(TimeParser.parseToLocalDateTime(endDate))
.startDate(TimeUtils.parseToLocalDateTime(startDate))
.endDate(TimeUtils.parseToLocalDateTime(endDate))
.participants(participants)
.club(club)
.build();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package ddingdong.ddingdongBE.domain.activityreport.service.dto.command;

import ddingdong.ddingdongBE.common.utils.TimeParser;
import ddingdong.ddingdongBE.common.utils.TimeUtils;
import ddingdong.ddingdongBE.domain.activityreport.domain.ActivityReport;
import ddingdong.ddingdongBE.domain.activityreport.domain.Participant;
import java.time.LocalDateTime;
Expand All @@ -22,8 +22,8 @@ public ActivityReport toEntity() {
return ActivityReport.builder()
.content(content)
.place(place)
.startDate(TimeParser.processDate(startDate, LocalDateTime.now()))
.endDate(TimeParser.processDate(endDate, LocalDateTime.now()))
.startDate(TimeUtils.processDate(startDate, LocalDateTime.now()))
.endDate(TimeUtils.processDate(endDate, LocalDateTime.now()))
.participants(participants)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@
import ddingdong.ddingdongBE.auth.PrincipalDetails;
import ddingdong.ddingdongBE.domain.form.controller.dto.request.CreateFormRequest;
import ddingdong.ddingdongBE.domain.form.controller.dto.request.UpdateFormRequest;
import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormListResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import java.util.List;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
Expand Down Expand Up @@ -52,4 +58,16 @@ void deleteForm(
@PathVariable("formId") Long formId,
@AuthenticationPrincipal PrincipalDetails principalDetails
);

@Operation(summary = "동아리 지원 폼지 전체조회 API")
@ApiResponse(responseCode = "200", description = "동아리 지원 폼지 전체조회 성공",
content = @Content(
array = @ArraySchema(schema = @Schema(implementation = FormListResponse.class))
))
@ResponseStatus(HttpStatus.OK)
@SecurityRequirement(name = "AccessToken")
@GetMapping("/my/forms")
List<FormListResponse> getAllMyForm(
@AuthenticationPrincipal PrincipalDetails principalDetails
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
import ddingdong.ddingdongBE.domain.form.api.CentralFormApi;
import ddingdong.ddingdongBE.domain.form.controller.dto.request.CreateFormRequest;
import ddingdong.ddingdongBE.domain.form.controller.dto.request.UpdateFormRequest;
import ddingdong.ddingdongBE.domain.form.controller.dto.response.FormListResponse;
import ddingdong.ddingdongBE.domain.form.service.FacadeCentralFormService;
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery;
import ddingdong.ddingdongBE.domain.user.entity.User;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RestController;

Expand Down Expand Up @@ -38,4 +41,13 @@ public void deleteForm(Long formId, PrincipalDetails principalDetails) {
User user = principalDetails.getUser();
facadeCentralFormService.deleteForm(formId, user);
}

@Override
public List<FormListResponse> getAllMyForm(PrincipalDetails principalDetails) {
User user = principalDetails.getUser();
List<FormListQuery> queries = facadeCentralFormService.getAllMyForm(user);
return queries.stream()
.map(FormListResponse::from)
.toList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package ddingdong.ddingdongBE.domain.form.controller.dto.response;

import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDate;
import lombok.Builder;

@Builder
public record FormListResponse(
@Schema(description = "지원 폼지 ID", example = "1")
Long formId,
@Schema(description = "지원 폼지 제목", example = "폼지 제목입니다.")
String title,
@Schema(description = "지원 폼지 시작일", example = "2001-01-01")
LocalDate startDate,
@Schema(description = "지원 폼지 종료일", example = "2001-01-02")
LocalDate endData,
@Schema(description = "활성화 여부", example = "true")
boolean isActive
) {

public static FormListResponse from(FormListQuery query) {
return FormListResponse.builder()
.formId(query.formId())
.title(query.title())
.startDate(query.startDate())
.endData(query.endData())
.isActive(query.isActive())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package ddingdong.ddingdongBE.domain.form.repository;

import ddingdong.ddingdongBE.domain.club.entity.Club;
import ddingdong.ddingdongBE.domain.form.entity.Form;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;

public interface FormRepository extends JpaRepository<Form, Long> {

List<Form> findAllByClub(Club club);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import ddingdong.ddingdongBE.domain.form.service.dto.command.CreateFormCommand;
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand;
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery;
import ddingdong.ddingdongBE.domain.user.entity.User;
import java.util.List;

public interface FacadeCentralFormService {

Expand All @@ -11,4 +13,6 @@ public interface FacadeCentralFormService {
void updateForm(UpdateFormCommand command);

void deleteForm(Long formId, User user);

List<FormListQuery> getAllMyForm(User user);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ddingdong.ddingdongBE.domain.form.service;

import ddingdong.ddingdongBE.common.exception.AuthenticationException.NonHaveAuthority;
import ddingdong.ddingdongBE.common.utils.TimeUtils;
import ddingdong.ddingdongBE.domain.club.entity.Club;
import ddingdong.ddingdongBE.domain.club.service.ClubService;
import ddingdong.ddingdongBE.domain.form.entity.Form;
Expand All @@ -9,7 +10,9 @@
import ddingdong.ddingdongBE.domain.form.service.dto.command.CreateFormCommand.CreateFormFieldCommand;
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand;
import ddingdong.ddingdongBE.domain.form.service.dto.command.UpdateFormCommand.UpdateFormFieldCommand;
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormListQuery;
import ddingdong.ddingdongBE.domain.user.entity.User;
import java.time.LocalDate;
import java.util.List;
import java.util.Objects;
import lombok.RequiredArgsConstructor;
Expand All @@ -19,7 +22,7 @@
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class FacadeCentralFormServiceImpl implements FacadeCentralFormService{
public class FacadeCentralFormServiceImpl implements FacadeCentralFormService {

private final FormService formService;
private final FormFieldService formFieldService;
Expand Down Expand Up @@ -59,6 +62,20 @@ public void deleteForm(Long formId, User user) {
formService.delete(form); //테이블 생성 시 외래 키에 cascade 설정하여 formField 삭제도 자동으로 됨.
}

@Override
public List<FormListQuery> getAllMyForm(User user) {
Club club = clubService.getByUserId(user.getId());
List<Form> forms = formService.getAllByClub(club);
return forms.stream()
.map(this::buildFormListQuery)
.toList();
}

private FormListQuery buildFormListQuery(Form form) {
boolean isActive = TimeUtils.isDateInRange(LocalDate.now(), form.getStartDate(), form.getEndDate());
return FormListQuery.from(form, isActive);
}

private void validateEqualsClub(Club club, Form form) {
if (!Objects.equals(club.getId(), form.getClub().getId())) {
throw new NonHaveAuthority();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package ddingdong.ddingdongBE.domain.form.service;

import ddingdong.ddingdongBE.domain.club.entity.Club;
import ddingdong.ddingdongBE.domain.form.entity.Form;
import java.util.List;

public interface FormService {

Expand All @@ -9,4 +11,6 @@ public interface FormService {
Form getById(Long formId);

void delete(Form form);

List<Form> getAllByClub(Club club);
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package ddingdong.ddingdongBE.domain.form.service;

import ddingdong.ddingdongBE.common.exception.PersistenceException.ResourceNotFound;
import ddingdong.ddingdongBE.domain.club.entity.Club;
import ddingdong.ddingdongBE.domain.form.entity.Form;
import ddingdong.ddingdongBE.domain.form.repository.FormRepository;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -31,4 +33,9 @@ public Form getById(Long formId) {
public void delete(Form form) {
formRepository.delete(form);
}

@Override
public List<Form> getAllByClub(Club club) {
return formRepository.findAllByClub(club);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ddingdong.ddingdongBE.domain.form.service.dto.query;

import ddingdong.ddingdongBE.domain.form.entity.Form;
import java.time.LocalDate;
import lombok.Builder;

@Builder
public record FormListQuery(
Long formId,
String title,
LocalDate startDate,
LocalDate endData,
boolean isActive
) {

public static FormListQuery from(Form form, boolean isActive) {
return FormListQuery.builder()
.formId(form.getId())
.title(form.getTitle())
.startDate(form.getStartDate())
.endData(form.getEndDate())
.isActive(isActive)
.build();
}

}

0 comments on commit 57d02d9

Please sign in to comment.