Skip to content

Commit 771826d

Browse files
authored
[DEV-9] 동아리 평가 점수 조회 로직 수정 (#63)
1 parent e97fe04 commit 771826d

File tree

15 files changed

+276
-95
lines changed

15 files changed

+276
-95
lines changed

src/main/java/ddingdong/ddingdongBE/domain/activityreport/service/ActivityReportService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public List<AllActivityReportResponse> getAll() {
4949

5050
@Transactional(readOnly = true)
5151
public List<AllActivityReportResponse> getMyActivityReports(final User user) {
52-
Club club = clubService.findClubByClubId(user.getId());
52+
Club club = clubService.getByUserId(user.getId());
5353

5454
List<ActivityReport> activityReports = activityReportRepository.findByClubName(
5555
club.getName());
@@ -73,7 +73,7 @@ public List<DetailActivityReportResponse> getActivityReport(final String term,
7373
public Long register(final User user,
7474
final RegisterActivityReportRequest registerActivityReportRequest) {
7575

76-
Club club = clubService.findClubByUserId(user.getId());
76+
Club club = clubService.getByUserId(user.getId());
7777
ActivityReport activityReport = registerActivityReportRequest.toEntity(club);
7878

7979
ActivityReport savedActivityReport = activityReportRepository.save(activityReport);
@@ -83,7 +83,7 @@ public Long register(final User user,
8383

8484
public List<ActivityReportDto> update(final User user, final String term,
8585
final List<UpdateActivityReportRequest> requests) {
86-
Club club = clubService.findClubByUserId(user.getId());
86+
Club club = clubService.getByUserId(user.getId());
8787

8888
List<ActivityReport> activityReports = activityReportRepository.findByClubNameAndTerm(
8989
club.getName(), term);
@@ -96,7 +96,7 @@ public List<ActivityReportDto> update(final User user, final String term,
9696
}
9797

9898
public List<ActivityReportDto> delete(final User user, final String term) {
99-
Club club = clubService.findClubByUserId(user.getId());
99+
Club club = clubService.getByUserId(user.getId());
100100

101101
List<ActivityReport> activityReports = activityReportRepository.findByClubNameAndTerm(
102102
club.getName(), term);

src/main/java/ddingdong/ddingdongBE/domain/club/entity/Club.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,9 @@ public class Club extends BaseEntity {
7474
private Score score;
7575

7676
@Builder
77-
public Club(User user, String name, String category, String tag, String leader, Location location,
77+
public Club(Long id, User user, String name, String category, String tag, String leader, Location location,
7878
PhoneNumber phoneNumber, Score score) {
79+
this.id = id;
7980
this.user = user;
8081
this.name = name;
8182
this.category = category;

src/main/java/ddingdong/ddingdongBE/domain/club/service/ClubService.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import java.time.LocalDateTime;
2828
import java.util.List;
2929
import java.util.NoSuchElementException;
30-
import java.util.Optional;
3130
import lombok.RequiredArgsConstructor;
3231
import org.springframework.stereotype.Service;
3332
import org.springframework.transaction.annotation.Transactional;
@@ -122,10 +121,6 @@ public Long update(Long userId, UpdateClubRequest request) {
122121
return club.getId();
123122
}
124123

125-
public Optional<Club> findByUserId(final Long userId) {
126-
return clubRepository.findByUserId(userId);
127-
}
128-
129124
public Club getByUserId(final Long userId) {
130125
return clubRepository.findByUserId(userId)
131126
.orElseThrow(() -> new NoSuchElementException(NO_SUCH_CLUB.getText()));
@@ -180,7 +175,7 @@ private RecruitmentStatus checkRecruit(LocalDateTime now, Club club) {
180175
return BEFORE_RECRUIT;
181176
}
182177

183-
return club.getEndRecruitPeriod().isAfter(now) ? RECRUITING : END_RECRUIT;
178+
return club.getEndRecruitPeriod().isAfter(now) ? RECRUITING : END_RECRUIT;
184179
}
185180

186181
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package ddingdong.ddingdongBE.domain.scorehistory.api;
2+
3+
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.request.RegisterScoreRequest;
4+
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.response.ScoreHistoryFilterByClubResponse;
5+
import io.swagger.v3.oas.annotations.Operation;
6+
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
7+
import io.swagger.v3.oas.annotations.tags.Tag;
8+
import org.springframework.http.HttpStatus;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.PathVariable;
11+
import org.springframework.web.bind.annotation.PostMapping;
12+
import org.springframework.web.bind.annotation.RequestBody;
13+
import org.springframework.web.bind.annotation.RequestMapping;
14+
import org.springframework.web.bind.annotation.ResponseStatus;
15+
16+
@Tag(name = "ScoreHistory - Admin", description = "ScoreHistory Admin API")
17+
@RequestMapping("/server/admin/{clubId}/score")
18+
public interface AdminScoreHistoryApi {
19+
20+
@Operation(summary = "어드민 점수 등록 API")
21+
@PostMapping
22+
@ResponseStatus(HttpStatus.CREATED)
23+
@SecurityRequirement(name = "AccessToken")
24+
void register(@PathVariable Long clubId, @RequestBody RegisterScoreRequest registerScoreRequest);
25+
26+
@Operation(summary = "어드민 동아리 점수 내역 목록 조회 API")
27+
@GetMapping
28+
@ResponseStatus(HttpStatus.OK)
29+
@SecurityRequirement(name = "AccessToken")
30+
ScoreHistoryFilterByClubResponse getScoreHistories(@PathVariable Long clubId);
31+
32+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package ddingdong.ddingdongBE.domain.scorehistory.api;
2+
3+
import ddingdong.ddingdongBE.auth.PrincipalDetails;
4+
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.request.RegisterScoreRequest;
5+
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.response.ScoreHistoryFilterByClubResponse;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
8+
import io.swagger.v3.oas.annotations.tags.Tag;
9+
import org.springframework.http.HttpStatus;
10+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
11+
import org.springframework.web.bind.annotation.GetMapping;
12+
import org.springframework.web.bind.annotation.PathVariable;
13+
import org.springframework.web.bind.annotation.PostMapping;
14+
import org.springframework.web.bind.annotation.RequestBody;
15+
import org.springframework.web.bind.annotation.RequestMapping;
16+
import org.springframework.web.bind.annotation.ResponseStatus;
17+
18+
@Tag(name = "ScoreHistory - Club", description = "ScoreHistory Club API")
19+
@RequestMapping("/server/club/my/score")
20+
public interface ClubScoreHistoryApi {
21+
22+
@Operation(summary = "동아리 내 점수 내역 목록 조회 API")
23+
@GetMapping
24+
@ResponseStatus(HttpStatus.OK)
25+
@SecurityRequirement(name = "AccessToken")
26+
ScoreHistoryFilterByClubResponse getMyScoreHistories(@AuthenticationPrincipal PrincipalDetails principalDetails);
27+
28+
}
Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,32 @@
11
package ddingdong.ddingdongBE.domain.scorehistory.controller;
22

3+
import ddingdong.ddingdongBE.domain.club.entity.Club;
4+
import ddingdong.ddingdongBE.domain.club.service.ClubService;
5+
import ddingdong.ddingdongBE.domain.scorehistory.api.AdminScoreHistoryApi;
36
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.request.RegisterScoreRequest;
47
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.response.ScoreHistoryFilterByClubResponse;
8+
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.response.ScoreHistoryFilterByClubResponse.ScoreHistoryResponse;
59
import ddingdong.ddingdongBE.domain.scorehistory.service.ScoreHistoryService;
6-
710
import java.util.List;
811
import lombok.RequiredArgsConstructor;
9-
10-
import org.springframework.web.bind.annotation.GetMapping;
11-
import org.springframework.web.bind.annotation.PathVariable;
12-
import org.springframework.web.bind.annotation.PostMapping;
13-
import org.springframework.web.bind.annotation.RequestBody;
14-
import org.springframework.web.bind.annotation.RequestMapping;
1512
import org.springframework.web.bind.annotation.RestController;
1613

1714
@RestController
1815
@RequiredArgsConstructor
19-
@RequestMapping("/server/admin/{clubId}/score")
20-
public class AdminScoreHistoryController {
16+
public class AdminScoreHistoryController implements AdminScoreHistoryApi {
2117

18+
private final ClubService clubService;
2219
private final ScoreHistoryService scoreHistoryService;
2320

24-
@PostMapping
25-
public void register(
26-
@PathVariable Long clubId,
27-
@RequestBody RegisterScoreRequest registerScoreRequest
28-
) {
21+
public void register(Long clubId, RegisterScoreRequest registerScoreRequest) {
2922
scoreHistoryService.register(clubId, registerScoreRequest);
3023
}
3124

32-
@GetMapping
33-
public List<ScoreHistoryFilterByClubResponse> getScoreHistories(
34-
@PathVariable Long clubId
35-
) {
36-
return scoreHistoryService.getScoreHistories(clubId);
25+
public ScoreHistoryFilterByClubResponse getScoreHistories(Long clubId) {
26+
Club club = clubService.getByClubId(clubId);
27+
List<ScoreHistoryResponse> scoreHistoryResponses = scoreHistoryService.getScoreHistories(clubId).stream()
28+
.map(ScoreHistoryResponse::from)
29+
.toList();
30+
return ScoreHistoryFilterByClubResponse.of(club, scoreHistoryResponses);
3731
}
3832
}
Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
package ddingdong.ddingdongBE.domain.scorehistory.controller;
22

33
import ddingdong.ddingdongBE.auth.PrincipalDetails;
4+
import ddingdong.ddingdongBE.domain.club.entity.Club;
5+
import ddingdong.ddingdongBE.domain.club.service.ClubService;
6+
import ddingdong.ddingdongBE.domain.scorehistory.api.ClubScoreHistoryApi;
47
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.response.ScoreHistoryFilterByClubResponse;
8+
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.response.ScoreHistoryFilterByClubResponse.ScoreHistoryResponse;
59
import ddingdong.ddingdongBE.domain.scorehistory.service.ScoreHistoryService;
610
import java.util.List;
7-
811
import lombok.RequiredArgsConstructor;
9-
10-
import org.springframework.security.core.annotation.AuthenticationPrincipal;
11-
import org.springframework.web.bind.annotation.GetMapping;
12-
import org.springframework.web.bind.annotation.RequestMapping;
1312
import org.springframework.web.bind.annotation.RestController;
1413

1514
@RestController
1615
@RequiredArgsConstructor
17-
@RequestMapping("/server/club/my/score")
18-
public class ClubScoreHistoryController {
16+
public class ClubScoreHistoryController implements ClubScoreHistoryApi {
1917

18+
private final ClubService clubService;
2019
private final ScoreHistoryService scoreHistoryService;
2120

22-
@GetMapping
23-
public List<ScoreHistoryFilterByClubResponse> getMyScoreHistories(
24-
@AuthenticationPrincipal PrincipalDetails principalDetails
25-
) {
26-
return scoreHistoryService.getMyScoreHistories(principalDetails.getUser().getId());
21+
public ScoreHistoryFilterByClubResponse getMyScoreHistories(PrincipalDetails principalDetails) {
22+
Club club = clubService.getByUserId(principalDetails.getUser().getId());
23+
List<ScoreHistoryResponse> scoreHistoryResponses = scoreHistoryService.getMyScoreHistories(club.getId())
24+
.stream()
25+
.map(ScoreHistoryResponse::from)
26+
.toList();
27+
return ScoreHistoryFilterByClubResponse.of(club, scoreHistoryResponses);
2728
}
2829
}

src/main/java/ddingdong/ddingdongBE/domain/scorehistory/controller/dto/request/RegisterScoreRequest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,12 @@ public class RegisterScoreRequest {
1414

1515
private float amount;
1616

17-
public ScoreHistory toEntity(Club club, float remainingScore) {
17+
public ScoreHistory toEntity(Club club) {
1818
return ScoreHistory.builder()
1919
.club(club)
2020
.amount(amount)
2121
.scoreCategory(ScoreCategory.of(scoreCategory))
2222
.reason(reason)
23-
.remainingScore(remainingScore)
2423
.build();
2524
}
2625
}
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,60 @@
11
package ddingdong.ddingdongBE.domain.scorehistory.controller.dto.response;
22

3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import ddingdong.ddingdongBE.domain.club.entity.Club;
35
import ddingdong.ddingdongBE.domain.scorehistory.entity.ScoreHistory;
4-
6+
import io.swagger.v3.oas.annotations.media.ArraySchema;
7+
import io.swagger.v3.oas.annotations.media.Schema;
58
import java.time.LocalDateTime;
9+
import java.util.List;
610
import lombok.Builder;
7-
import lombok.Getter;
8-
9-
@Getter
10-
public class ScoreHistoryFilterByClubResponse {
11-
private String scoreCategory;
12-
13-
private String reason;
1411

15-
private float amount;
12+
@Schema(
13+
name = "ScoreHistoryFilterByClubResponse",
14+
description = "어드민 - 동아리 점수 변동 내역 목록 응답"
15+
)
16+
@Builder
17+
public record ScoreHistoryFilterByClubResponse(
1618

17-
private float remainingScore;
19+
@Schema(description = "동아리 총 점수", example = "50")
20+
float totalScore,
21+
@ArraySchema(schema = @Schema(description = "점수내역 목록", implementation = ScoreHistoryResponse.class))
22+
List<ScoreHistoryResponse> scoreHistories
23+
) {
1824

19-
private LocalDateTime createdAt;
25+
public static ScoreHistoryFilterByClubResponse of(Club club, List<ScoreHistoryResponse> scoreHistories) {
26+
return ScoreHistoryFilterByClubResponse.builder()
27+
.totalScore(club.getScore().getValue())
28+
.scoreHistories(scoreHistories)
29+
.build();
30+
}
2031

32+
@Schema(
33+
name = "ScoreHistoryResponse",
34+
description = "점수 변동 내역 응답"
35+
)
2136
@Builder
22-
public ScoreHistoryFilterByClubResponse(String scoreCategory, String reason, float amount, float remainingScore, LocalDateTime createdAt) {
23-
this.scoreCategory = scoreCategory;
24-
this.reason = reason;
25-
this.amount = amount;
26-
this.remainingScore = remainingScore;
27-
this.createdAt = createdAt;
28-
}
37+
public record ScoreHistoryResponse(
38+
39+
@Schema(description = "점수 내역 카테고리", example = "활동보고서")
40+
String scoreCategory,
41+
@Schema(description = "점수 내역 이유", example = "활동보고서 작성")
42+
String reason,
43+
@Schema(description = "변동 점수", example = "10")
44+
float amount,
45+
@Schema(description = "작성일", example = "2024-01-01")
46+
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
47+
LocalDateTime createdAt
48+
) {
49+
50+
public static ScoreHistoryResponse from(ScoreHistory scoreHistory) {
51+
return ScoreHistoryResponse.builder()
52+
.scoreCategory(scoreHistory.getScoreCategory().getCategory())
53+
.reason(scoreHistory.getReason())
54+
.amount(scoreHistory.getAmount())
55+
.createdAt(scoreHistory.getCreatedAt())
56+
.build();
57+
}
2958

30-
public static ScoreHistoryFilterByClubResponse of(final ScoreHistory scoreHistory) {
31-
return ScoreHistoryFilterByClubResponse.builder()
32-
.scoreCategory(scoreHistory.getScoreCategory().getCategory())
33-
.reason(scoreHistory.getReason())
34-
.amount(scoreHistory.getAmount())
35-
.remainingScore(scoreHistory.getRemainingScore())
36-
.createdAt(scoreHistory.getCreatedAt())
37-
.build();
3859
}
3960
}

src/main/java/ddingdong/ddingdongBE/domain/scorehistory/entity/ScoreCategory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@ public static ScoreCategory of(String category) {
2525
}
2626
throw new IllegalArgumentException(ILLEGAL_SCORE_CATEGORY.getText());
2727
}
28-
}
28+
}

src/main/java/ddingdong/ddingdongBE/domain/scorehistory/entity/ScoreHistory.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,11 @@ public class ScoreHistory extends BaseEntity {
3838

3939
private String reason;
4040

41-
private float remainingScore;
42-
4341
@Builder
44-
public ScoreHistory(Club club, float amount, ScoreCategory scoreCategory, String reason, float remainingScore) {
42+
public ScoreHistory(Club club, float amount, ScoreCategory scoreCategory, String reason) {
4543
this.club = club;
4644
this.amount = amount;
4745
this.scoreCategory = scoreCategory;
4846
this.reason = reason;
49-
this.remainingScore = remainingScore;
5047
}
5148
}

src/main/java/ddingdong/ddingdongBE/domain/scorehistory/service/ScoreHistoryService.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import ddingdong.ddingdongBE.domain.club.entity.Club;
44
import ddingdong.ddingdongBE.domain.club.service.ClubService;
55
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.request.RegisterScoreRequest;
6-
import ddingdong.ddingdongBE.domain.scorehistory.controller.dto.response.ScoreHistoryFilterByClubResponse;
6+
import ddingdong.ddingdongBE.domain.scorehistory.entity.ScoreHistory;
77
import ddingdong.ddingdongBE.domain.scorehistory.repository.ScoreHistoryRepository;
88
import java.util.List;
99
import lombok.RequiredArgsConstructor;
@@ -22,27 +22,20 @@ public void register(final Long clubId, RegisterScoreRequest registerScoreReques
2222
Club club = clubService.getByClubId(clubId);
2323

2424
float score = roundToThirdPoint(registerScoreRequest.getAmount());
25-
26-
float remainingScore = clubService.editClubScore(clubId, score);
27-
28-
scoreHistoryRepository.save(registerScoreRequest.toEntity(club, remainingScore));
25+
clubService.editClubScore(clubId, score);
26+
scoreHistoryRepository.save(registerScoreRequest.toEntity(club));
2927
}
3028

3129
@Transactional(readOnly = true)
32-
public List<ScoreHistoryFilterByClubResponse> getScoreHistories(final Long clubId) {
30+
public List<ScoreHistory> getScoreHistories(final Long clubId) {
3331

34-
return scoreHistoryRepository.findByClubId(clubId).stream()
35-
.map(ScoreHistoryFilterByClubResponse::of)
36-
.toList();
32+
return scoreHistoryRepository.findByClubId(clubId);
3733
}
3834

3935
@Transactional(readOnly = true)
40-
public List<ScoreHistoryFilterByClubResponse> getMyScoreHistories(final Long userId) {
36+
public List<ScoreHistory> getMyScoreHistories(final Long userId) {
4137
Club club = clubService.getByUserId(userId);
42-
43-
return scoreHistoryRepository.findByClubId(club.getId()).stream()
44-
.map(ScoreHistoryFilterByClubResponse::of)
45-
.toList();
38+
return scoreHistoryRepository.findByClubId(club.getId());
4639
}
4740

4841
private static float roundToThirdPoint(float value) {

0 commit comments

Comments
 (0)