Skip to content

Commit c632a35

Browse files
authored
[DDING-000] 동아리원 명단 업로드 로직 수정 (#333)
1 parent 022d66e commit c632a35

File tree

7 files changed

+63
-100
lines changed

7 files changed

+63
-100
lines changed

src/main/java/ddingdong/ddingdongBE/domain/clubmember/repository/ClubMemberRepository.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@
44
import java.util.Collection;
55
import java.util.List;
66
import org.springframework.data.jpa.repository.JpaRepository;
7+
import org.springframework.data.jpa.repository.Modifying;
8+
import org.springframework.data.jpa.repository.Query;
79

810
public interface ClubMemberRepository extends JpaRepository<ClubMember, Long> {
911

1012
List<ClubMember> findByIdIn(Collection<Long> ids);
1113

1214
List<ClubMember> findByClubId(Long clubId);
15+
16+
@Modifying(clearAutomatically = true)
17+
@Query("UPDATE ClubMember cm SET cm.deletedAt = CURRENT_TIMESTAMP WHERE cm.club.id = :clubId AND cm.deletedAt IS NULL")
18+
void deleteAllByClubId(Long clubId);
1319
}

src/main/java/ddingdong/ddingdongBE/domain/clubmember/service/ClubMemberService.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,5 @@ public interface ClubMemberService {
1515

1616
void save(ClubMember clubMember);
1717

18-
void updateAll(List<ClubMember> updateClubMemberInfos);
19-
20-
List<ClubMember> getByClubId(Long clubId);
18+
void deleteAllByClubId(Long clubId);
2119
}

src/main/java/ddingdong/ddingdongBE/domain/clubmember/service/FacadeCentralClubMemberServiceImpl.java

Lines changed: 3 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88
import ddingdong.ddingdongBE.domain.clubmember.service.dto.command.UpdateClubMemberListCommand;
99
import ddingdong.ddingdongBE.domain.clubmember.service.dto.query.AllClubMemberInfoQuery;
1010
import ddingdong.ddingdongBE.file.service.ExcelFileService;
11-
import java.util.HashSet;
1211
import java.util.List;
13-
import java.util.Set;
14-
import java.util.stream.Collectors;
1512
import lombok.RequiredArgsConstructor;
1613
import lombok.extern.slf4j.Slf4j;
1714
import org.springframework.stereotype.Service;
@@ -43,22 +40,10 @@ public AllClubMemberInfoQuery getAllMyClubMember(Long userId) {
4340
@Transactional
4441
public void updateMemberList(UpdateClubMemberListCommand command) {
4542
Club club = clubService.getByUserId(command.userId());
46-
List<ClubMember> updateClubMemberInfos =
43+
List<ClubMember> updateClubMember =
4744
excelFileService.extractClubMembersInformation(club, command.clubMemberListFile());
48-
List<ClubMember> clubMembers = clubMemberService.getByClubId(club.getId());
49-
Set<Long> updatedMemberInfoIds = updateClubMemberInfos.stream()
50-
.map(ClubMember::getId)
51-
.collect(Collectors.toSet());
52-
Set<Long> currentMemberIds = clubMembers.stream()
53-
.map(ClubMember::getId)
54-
.collect(Collectors.toSet());
55-
56-
clubMemberService.saveAll(filterCreatedMembers(updateClubMemberInfos, updatedMemberInfoIds, currentMemberIds));
57-
clubMemberService.updateAll(filterUpdatedMembers(updateClubMemberInfos, updatedMemberInfoIds, currentMemberIds));
58-
59-
List<ClubMember> deletedMembers = filterDeletedMembers(clubMembers, updatedMemberInfoIds, currentMemberIds);
60-
club.removeAll(deletedMembers);
61-
clubMemberService.deleteAll(deletedMembers);
45+
clubMemberService.deleteAllByClubId(club.getId());
46+
clubMemberService.saveAll(updateClubMember);
6247
}
6348

6449
@Override
@@ -85,32 +70,4 @@ public void create(final CreateClubMemberCommand command) {
8570
clubMemberService.save(clubMember);
8671
club.addClubMember(clubMember);
8772
}
88-
89-
private List<ClubMember> filterCreatedMembers(List<ClubMember> updatedClubMembers, Set<Long> updatedMemberIds,
90-
Set<Long> currentMemberIds) {
91-
Set<Long> createdMemberIds = new HashSet<>(updatedMemberIds);
92-
createdMemberIds.removeAll(currentMemberIds);
93-
return updatedClubMembers.stream()
94-
.filter(member -> createdMemberIds.contains(member.getId()))
95-
.toList();
96-
}
97-
98-
private List<ClubMember> filterUpdatedMembers(List<ClubMember> updatedClubMembers, Set<Long> updatedMemberIds,
99-
Set<Long> currentMemberIds) {
100-
Set<Long> willUpdateMemberIds = new HashSet<>(currentMemberIds);
101-
willUpdateMemberIds.retainAll(updatedMemberIds);
102-
return updatedClubMembers.stream()
103-
.filter(member -> willUpdateMemberIds.contains(member.getId()))
104-
.toList();
105-
}
106-
107-
private List<ClubMember> filterDeletedMembers(List<ClubMember> clubMembers, Set<Long> updatedMemberIds,
108-
Set<Long> currentMemberIds) {
109-
Set<Long> deletedMemberIds = new HashSet<>(currentMemberIds);
110-
deletedMemberIds.removeAll(updatedMemberIds);
111-
System.out.println(deletedMemberIds);
112-
return clubMembers.stream()
113-
.filter(member -> deletedMemberIds.contains(member.getId()))
114-
.toList();
115-
}
11673
}

src/main/java/ddingdong/ddingdongBE/domain/clubmember/service/GeneralClubMemberService.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44
import ddingdong.ddingdongBE.domain.clubmember.entity.ClubMember;
55
import ddingdong.ddingdongBE.domain.clubmember.repository.ClubMemberRepository;
66
import java.util.List;
7-
import java.util.Map;
8-
import java.util.function.Function;
9-
import java.util.stream.Collectors;
107
import lombok.RequiredArgsConstructor;
118
import org.springframework.stereotype.Service;
129
import org.springframework.transaction.annotation.Transactional;
@@ -50,17 +47,7 @@ public void save(ClubMember clubMember) {
5047

5148
@Override
5249
@Transactional
53-
public void updateAll(final List<ClubMember> updateClubMemberInfos) {
54-
Map<Long, ClubMember> updatedMemberMap = updateClubMemberInfos.stream()
55-
.collect(Collectors.toMap(ClubMember::getId, Function.identity()));
56-
57-
clubMemberRepository.findByIdIn(updatedMemberMap.keySet())
58-
.forEach(member ->
59-
member.updateInformation(updatedMemberMap.get(member.getId())));
60-
}
61-
62-
@Override
63-
public List<ClubMember> getByClubId(final Long clubId) {
64-
return clubMemberRepository.findByClubId(clubId);
50+
public void deleteAllByClubId(final Long clubId) {
51+
clubMemberRepository.deleteAllByClubId(clubId);
6552
}
6653
}

src/main/java/ddingdong/ddingdongBE/file/service/dto/ExcelClubMemberDto.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ private ExcelClubMemberDto(Long id, String name, String studentNumber, String ph
4444

4545
public ClubMember toEntity(Club club) {
4646
return ClubMember.builder()
47-
.id(id)
4847
.club(club)
4948
.name(name)
5049
.studentNumber(studentNumber)

src/main/resources/application-local.yml

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,31 @@ spring:
88
driver-class-name: com.mysql.cj.jdbc.Driver
99
username: root
1010
password: 1234
11+
flyway:
12+
enabled: false
1113

1214
jpa:
1315
hibernate:
14-
ddl-auto: validate
16+
ddl-auto: update
1517
properties:
1618
hibernate:
1719
format_sql: true
1820
show-sql: true
19-
defer-datasource-initialization: false
20-
21+
defer-datasource-initialization: true
22+
sql:
23+
init:
24+
mode: always
2125
logging:
2226
level:
2327
org.springframework.cache: TRACE
2428
org.springframework.cache.interceptor.CacheInterceptor: TRACE
29+
org:
30+
hibernate:
31+
SQL: DEBUG
32+
type:
33+
descriptor:
34+
sql:
35+
BasicBinder: TRACE
36+
orm:
37+
jdbc:
38+
bind: TRACE

src/main/resources/data.sql

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,37 @@
11
insert into users(name, password, role, auth_id)
22
values ('ddingdong', '$2a$12$9BIi3IGc79rU3Xgbnxq/X.T37Hlfrf/lSc2/g0HLeM1g7HmFXE8v.', 'ADMIN', 'ddingdong11'),
33
('cow', '$2a$12$9BIi3IGc79rU3Xgbnxq/X.T37Hlfrf/lSc2/g0HLeM1g7HmFXE8v.', 'CLUB', 'cow11');
4-
5-
INSERT INTO club(name,
6-
category,
7-
leader,
8-
tag,
9-
score,
10-
phone_number,
11-
location,
12-
user_id,
13-
start_recruit_period,
14-
end_recruit_period,
15-
regular_meeting,
16-
introduction,
17-
activity,
18-
ideal,
19-
form_url)
20-
VALUES ('카우',
21-
'학술',
22-
'김세빈',
23-
'IT',
24-
0,
25-
'010-0000-0000',
26-
'S1350',
27-
2,
28-
NULL,
29-
NULL,
30-
'매주 월요일 18:00시',
31-
'동아리 소개입니다.',
32-
'동아리 활동내용입니다.',
33-
NULL,
34-
NULL
35-
);
4+
-- PhoneNumber, Location, Score가 각각 단일 컬럼으로 매핑됨
5+
INSERT INTO club (
6+
user_id,
7+
name,
8+
category,
9+
tag,
10+
leader,
11+
phone_number, -- PhoneNumber.number
12+
location, -- Location.value
13+
regular_meeting,
14+
introduction,
15+
activity,
16+
ideal,
17+
score, -- Score.value
18+
created_at,
19+
updated_at,
20+
deleted_at
21+
) VALUES (
22+
2, -- user_id
23+
'테스트 동아리', -- name
24+
'문화예술', -- category
25+
'음악,공연', -- tag
26+
'홍길동', -- leader
27+
'010-1234-5678', -- phone_number (형식: \d{2,3}-\d{3,4}-\d{4})
28+
'S1234', -- location (형식: S[0-9]{4,5})
29+
'매주 수요일 18:00', -- regular_meeting
30+
'음악을 사랑하는 모임', -- introduction
31+
'정기 공연, 버스킹', -- activity
32+
'음악으로 하나되는 캠퍼스', -- ideal
33+
0.00, -- score (BigDecimal)
34+
NOW(), -- created_at
35+
NOW(), -- updated_at
36+
NULL -- deleted_at
37+
);

0 commit comments

Comments
 (0)