Skip to content

Commit

Permalink
refactor: update club member list (#54)
Browse files Browse the repository at this point in the history
  • Loading branch information
5uhwann authored Mar 5, 2024
1 parent 4464544 commit 2ece78f
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static ddingdong.ddingdongBE.domain.fileinformation.entity.FileTypeCategory.IMAGE;

import ddingdong.ddingdongBE.auth.PrincipalDetails;
import ddingdong.ddingdongBE.domain.club.controller.dto.request.UpdateClubMemberRequest;
import ddingdong.ddingdongBE.domain.club.controller.dto.request.UpdateClubRequest;
import ddingdong.ddingdongBE.domain.club.controller.dto.response.DetailClubResponse;
import ddingdong.ddingdongBE.domain.club.service.ClubMemberService;
Expand All @@ -13,6 +14,7 @@

import java.util.List;

import java.util.Optional;
import lombok.RequiredArgsConstructor;

import lombok.extern.slf4j.Slf4j;
Expand All @@ -21,9 +23,7 @@
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PutMapping;
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.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
Expand Down Expand Up @@ -63,11 +63,12 @@ public void updateClub(@AuthenticationPrincipal PrincipalDetails principalDetail
}
}

@PutMapping("/club-members")
@PutMapping(value = "/club-members")
public void updateClubMembers(@AuthenticationPrincipal PrincipalDetails principalDetails,
@RequestParam MultipartFile clubMemberListFile) {
@RequestPart(value = "data", required = false) UpdateClubMemberRequest request,
@RequestPart(name = "file", required = false) Optional<MultipartFile> clubMemberListFile) {
User user = principalDetails.getUser();
clubMemberService.updateClubMembers(user.getId(), clubMemberListFile);
clubMemberService.updateClubMembers(user.getId(), request, clubMemberListFile);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;

@Getter
Expand Down Expand Up @@ -63,9 +64,16 @@ public static ClubMemberDto fromExcelRow(Row row) {
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
if (cell.getStringCellValue() != null) {
clubMemberDto.setValueByCell(cell.getStringCellValue(), cell.getColumnIndex());
if (cell.getCellType() == CellType.STRING) {
if (cell.getStringCellValue() != null) {
clubMemberDto.setValueByCell(cell.getStringCellValue(), cell.getColumnIndex());
}
} else if (cell.getCellType() == CellType.NUMERIC) {
if (cell.getNumericCellValue() != 0) {
clubMemberDto.setValueByCell(String.valueOf(cell.getNumericCellValue()), cell.getColumnIndex());
}
}

}
return clubMemberDto;
}
Expand All @@ -84,7 +92,7 @@ private void setValueByCell(String stringCellValue, int columnIndex) {
}

private void validatePositionValue(String stringCellValue) {
if (Arrays.stream(Position.values()).noneMatch(position -> position.getName().equals(stringCellValue))) {
if (Arrays.stream(Position.values()).noneMatch(position-> position.name().equals(stringCellValue))) {
throw new IllegalArgumentException("동아리원의 역할은 LEADER, EXECUTIVE, MEMBER 중 하나입니다. ");
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@
import ddingdong.ddingdongBE.domain.club.entity.ClubMember;


import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface ClubMemberRepository extends JpaRepository<ClubMember, Long> {

List<ClubMember> findClubMembersByClubId(Long clubId);

@Modifying
@Query("delete from ClubMember c where c.club = :club")
void deleteAllByClub(@Param("club") Club club);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
import static ddingdong.ddingdongBE.common.exception.ErrorMessage.NO_SUCH_CLUB;

import ddingdong.ddingdongBE.domain.club.controller.dto.request.ClubMemberDto;
import ddingdong.ddingdongBE.domain.club.controller.dto.request.UpdateClubMemberRequest;
import ddingdong.ddingdongBE.domain.club.entity.Club;
import ddingdong.ddingdongBE.domain.club.entity.ClubMember;
import ddingdong.ddingdongBE.domain.club.repository.ClubMemberRepository;
import ddingdong.ddingdongBE.domain.club.repository.ClubRepository;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.CellType;
Expand All @@ -28,21 +30,44 @@ public class ClubMemberService {
private final ClubRepository clubRepository;
private final ClubMemberRepository clubMemberRepository;

public void updateClubMembers(Long userId, MultipartFile clubMemberListFile) {
isExcelFile(clubMemberListFile);
public void updateClubMembers(Long userId, UpdateClubMemberRequest request,
Optional<MultipartFile> clubMemberListFile) {
if (clubMemberListFile.isPresent()) {
MultipartFile file = clubMemberListFile.get();
isExcelFile(file);

Club club = clubRepository.findByUserId(userId)
.orElseThrow(() -> new IllegalArgumentException(NO_SUCH_CLUB.getText()));
List<ClubMemberDto> requestedClubMemberDtos = parsingClubMemberListFile(file);
List<ClubMember> requestedClubMembers = requestedClubMemberDtos.stream()
.map(clubMemberDto -> clubMemberDto.toEntity(club))
.toList();

clubMemberRepository.deleteAllByClub(club);
clubMemberRepository.saveAll(requestedClubMembers);
return;
}

Club club = clubRepository.findByUserId(userId)
.orElseThrow(() -> new IllegalArgumentException(NO_SUCH_CLUB.getText()));
List<ClubMemberDto> requestedClubMemberDtos = parsingClubMemberListFile(
clubMemberListFile);
List<ClubMember> requestedClubMembers = requestedClubMemberDtos.stream()

List<Long> memberIds = clubMemberRepository.findClubMembersByClubId(club.getId())
.stream()
.map(ClubMember::getId)
.toList();

List<ClubMember> requestedClubMembers = request.getClubMemberList().stream()
.map(clubMemberDto -> clubMemberDto.toEntity(club))
.toList();

clubMemberRepository.deleteAllByClub(club);
if (!memberIds.isEmpty()) {
clubMemberRepository.deleteAllById(memberIds);
}

clubMemberRepository.saveAll(requestedClubMembers);
}


private void isExcelFile(MultipartFile file) {
String fileName = file.getOriginalFilename();
if (fileName != null && !(fileName.endsWith(".xls") || fileName.endsWith(".xlsx"))) {
Expand All @@ -61,7 +86,7 @@ private static List<ClubMemberDto> parsingClubMemberListFile(MultipartFile clubM
}
}
} catch (IOException e) {
throw new IllegalArgumentException(e);
throw new IllegalArgumentException("올바른 엑셀 양식을 사용해주세요.");
}
return requestedClubMemberDtos;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public enum ClubStamp {
그림패시만화("그림패시만화", "EVENTPIC"),
포토랩("포토랩", "EVENTPHO"),
디비전("디비전", "EVENTDIV"),
코아("코아", "EVENTCOA"),
코아("코아", "EVENTCOAD"),
씨네메이션("씨네메이션", "EVENTCINE"),
실로암("실로암", "EVENTSIL"),
CCC("ccc", "EVENTCCC"),
Expand All @@ -50,7 +50,7 @@ public enum ClubStamp {
MJTA("MJTA", "EVENTMJTA"),
콕콕콕("콕콕콕", "EVENTCOK"),
바다이야기("바다이야기", "EVENTSEA"),
파인("파인", "EVENTFINE"),
파인("파인", "EVENTPINE"),
TIME("TIME", "EVENTTIME"),
명지서법("명지서법", "EVENTWORD"),
MIRS("MIRS", "EVENTMIRS");
Expand Down

0 comments on commit 2ece78f

Please sign in to comment.