Skip to content

Commit

Permalink
[DDING-107] 최종 합격 지원자 동아리원 명단 등록 API 구현 (#247)
Browse files Browse the repository at this point in the history
  • Loading branch information
5uhwann authored Feb 10, 2025
1 parent 0595a31 commit 18097bc
Show file tree
Hide file tree
Showing 13 changed files with 182 additions and 107 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import ddingdong.ddingdongBE.domain.clubmember.entity.ClubMember;
import ddingdong.ddingdongBE.domain.scorehistory.entity.Score;
import ddingdong.ddingdongBE.domain.user.entity.User;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
Expand Down Expand Up @@ -40,7 +41,7 @@ public class Club extends BaseEntity {
@JoinColumn(name = "user_id")
private User user;

@OneToMany(mappedBy = "club")
@OneToMany(mappedBy = "club", cascade = CascadeType.ALL)
private List<ClubMember> clubMembers = new ArrayList<>();

private String name;
Expand Down Expand Up @@ -122,4 +123,9 @@ public BigDecimal editScore(Score score) {
this.score = score;
return this.score.getValue();
}

public void addClubMember(ClubMember clubMember) {
this.clubMembers.add(clubMember);
clubMember.setClubFormConvenience(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,8 @@ public void updateInformation(ClubMember updateClubMember) {
this.position = updateClubMember.getPosition();
this.department = updateClubMember.getDepartment();
}

public void setClubFormConvenience(Club club) {
this.club = club;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,11 @@ FormStatisticsResponse getFormStatistics(
@PathVariable("formId") Long formId,
@AuthenticationPrincipal PrincipalDetails principalDetails
);

@Operation(summary = "동아리 최종 합격 지원자 동아리원 명단 등록API")
@ApiResponse(responseCode = "201", description = "최종 합격 지원자 동아리원 명단 등록 성공")
@ResponseStatus(HttpStatus.CREATED)
@SecurityRequirement(name = "AccessToken")
@PostMapping("/my/forms/{formId}/members/register-applicants")
void registerMembers(@PathVariable("formId") Long formId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,9 @@ public FormStatisticsResponse getFormStatistics(
FormStatisticsQuery query = facadeCentralFormService.getStatisticsByForm(user, formId);
return FormStatisticsResponse.from(query);
}

@Override
public void registerMembers(Long formId) {
facadeCentralFormService.registerApplicantAsMember(formId);
}
}
86 changes: 43 additions & 43 deletions src/main/java/ddingdong/ddingdongBE/domain/form/entity/Form.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,56 +23,56 @@
@Getter
public class Form extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false)
private String title;
@Column(nullable = false)
private String title;

private String description;
private String description;

@Column(nullable = false)
private LocalDate startDate;
@Column(nullable = false)
private LocalDate startDate;

@Column(nullable = false)
private LocalDate endDate;
@Column(nullable = false)
private LocalDate endDate;

@Column(nullable = false)
private boolean hasInterview;
@Column(nullable = false)
private boolean hasInterview;

@Column(nullable = false)
@Convert(converter = StringListConverter.class)
private List<String> sections;
@Column(nullable = false)
@Convert(converter = StringListConverter.class)
private List<String> sections;

@ManyToOne(fetch = FetchType.LAZY)
private Club club;
@ManyToOne(fetch = FetchType.LAZY)
private Club club;

@Builder
private Form(
String title,
String description,
LocalDate startDate,
LocalDate endDate,
boolean hasInterview,
List<String> sections,
Club club
) {
this.title = title;
this.description = description;
this.startDate = startDate;
this.endDate = endDate;
this.hasInterview = hasInterview;
this.sections = sections;
this.club = club;
}
@Builder
private Form(
String title,
String description,
LocalDate startDate,
LocalDate endDate,
boolean hasInterview,
List<String> sections,
Club club
) {
this.title = title;
this.description = description;
this.startDate = startDate;
this.endDate = endDate;
this.hasInterview = hasInterview;
this.sections = sections;
this.club = club;
}

public void update(Form updateForm) {
this.title = updateForm.getTitle();
this.description = updateForm.getDescription();
this.startDate = updateForm.getStartDate();
this.endDate = updateForm.getEndDate();
this.sections = updateForm.getSections();
this.hasInterview = updateForm.isHasInterview();
}
public void update(Form updateForm) {
this.title = updateForm.getTitle();
this.description = updateForm.getDescription();
this.startDate = updateForm.getStartDate();
this.endDate = updateForm.getEndDate();
this.sections = updateForm.getSections();
this.hasInterview = updateForm.isHasInterview();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ public interface FacadeCentralFormService {
FormQuery getForm(Long formId);

FormStatisticsQuery getStatisticsByForm(User user, Long formId);

void registerApplicantAsMember(Long formId);
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package ddingdong.ddingdongBE.domain.form.service;

import static ddingdong.ddingdongBE.domain.club.entity.Position.MEMBER;

import ddingdong.ddingdongBE.common.exception.AuthenticationException.NonHaveAuthority;
import ddingdong.ddingdongBE.common.exception.InvalidatedMappingException.InvalidFormPeriodException;
import ddingdong.ddingdongBE.common.utils.TimeUtils;
import ddingdong.ddingdongBE.domain.club.entity.Club;
import ddingdong.ddingdongBE.domain.club.service.ClubService;
import ddingdong.ddingdongBE.domain.clubmember.entity.ClubMember;
import ddingdong.ddingdongBE.domain.form.entity.Form;
import ddingdong.ddingdongBE.domain.form.entity.FormField;
import ddingdong.ddingdongBE.domain.form.service.dto.command.CreateFormCommand;
Expand All @@ -17,6 +20,8 @@
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormStatisticsQuery.ApplicantStatisticQuery;
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormStatisticsQuery.DepartmentStatisticQuery;
import ddingdong.ddingdongBE.domain.form.service.dto.query.FormStatisticsQuery.FieldStatisticsQuery;
import ddingdong.ddingdongBE.domain.formapplication.entity.FormApplication;
import ddingdong.ddingdongBE.domain.formapplication.service.FormApplicationService;
import ddingdong.ddingdongBE.domain.user.entity.User;
import java.time.LocalDate;
import java.util.List;
Expand All @@ -34,6 +39,7 @@ public class FacadeCentralFormServiceImpl implements FacadeCentralFormService {
private final FormFieldService formFieldService;
private final ClubService clubService;
private final FormStatisticService formStatisticService;
private final FormApplicationService formApplicationService;

@Transactional
@Override
Expand Down Expand Up @@ -102,6 +108,23 @@ public FormStatisticsQuery getStatisticsByForm(User user, Long formId) {
return new FormStatisticsQuery(totalCount, departmentStatisticQueries, applicantStatisticQueries, fieldStatisticsQuery);
}

@Override
@Transactional
public void registerApplicantAsMember(Long formId) {
List<FormApplication> finalPassedFormApplications = formApplicationService.getAllFinalPassedByFormId(formId);
finalPassedFormApplications.forEach(formApplication -> {
Club club = formApplication.getForm().getClub();
ClubMember clubMember = ClubMember.builder()
.name(formApplication.getName())
.studentNumber(formApplication.getStudentNumber())
.department(formApplication.getDepartment())
.phoneNumber(formApplication.getPhoneNumber())
.position(MEMBER)
.build();
club.addClubMember(clubMember);
});
}

private FormListQuery buildFormListQuery(Form form) {
boolean isActive = TimeUtils.isDateInRange(LocalDate.now(), form.getStartDate(), form.getEndDate());
return FormListQuery.from(form, isActive);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,37 +13,45 @@
@Getter
public class FormApplication extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false)
private String name;

@Column(nullable = false)
private String studentNumber;

@Column(nullable = false)
private String department;

@Enumerated(EnumType.STRING)
@Column(nullable = false, name = "status")
private FormApplicationStatus status;

@ManyToOne(fetch = FetchType.LAZY)
private Form form;

@Builder
private FormApplication(String name, String studentNumber, String department,
FormApplicationStatus status, Form form) {
this.name = name;
this.studentNumber = studentNumber;
this.department = department;
this.status = status;
this.form = form;
}

public void updateStatus(FormApplicationStatus status) {
this.status = status;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false)
private String name;

@Column(nullable = false)
private String studentNumber;

@Column(nullable = false)
private String department;

@Column(nullable = false)
private String phoneNumber;

@Column(nullable = false)
private String email;

@Enumerated(EnumType.STRING)
@Column(nullable = false, name = "status")
private FormApplicationStatus status;

@ManyToOne(fetch = FetchType.LAZY)
private Form form;

@Builder
private FormApplication(String name, String studentNumber, String department, String phoneNumber, String email,
FormApplicationStatus status, Form form) {
this.name = name;
this.studentNumber = studentNumber;
this.department = department;
this.phoneNumber = phoneNumber;
this.email = email;
this.status = status;
this.form = form;
}

public void updateStatus(FormApplicationStatus status) {
this.status = status;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,11 @@ List<RecentFormInfo> findRecentFormByDateWithApplicationCount(
@Param("date") LocalDate date,
@Param("size") int size
);
@Query(value = """
select fa
from FormApplication fa
where fa.form.id = :formId and (fa.status = 'FINAL_PASS' or (fa.status = 'FIRST_PASS' and fa.form.hasInterview = false))
""")
List<FormApplication> findAllFinalPassedByFormId(@Param("formId") Long formId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@

public interface FormApplicationService {

FormApplication create(FormApplication formApplication);
FormApplication create(FormApplication formApplication);

Slice<FormApplication> getFormApplicationPageByFormId(Long formId, int size,
Long currentCursorId);
Slice<FormApplication> getFormApplicationPageByFormId(Long formId, int size, Long currentCursorId);

FormApplication getById(Long applicationId);
FormApplication getById(Long applicationId);

List<FormApplication> getAllById(List<Long> applicationIds);
List<FormApplication> getAllById(List<Long> applicationIds);

List<FormApplication> getAllFinalPassedByFormId(Long formId);
}
Loading

0 comments on commit 18097bc

Please sign in to comment.