Skip to content

Commit

Permalink
feat : updateScore
Browse files Browse the repository at this point in the history
  • Loading branch information
ecsimsw committed Aug 13, 2023
1 parent 0809d54 commit 99f4bba
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,6 @@ public EvaluationItemController(EvaluationItemService evaluationItemService) {
this.evaluationItemService = evaluationItemService;
}

@GetMapping("/api/evaluation/score")
public ResponseEntity<ScoreResponse> evaluationScore(Long evaluationItemId, int memberInputScore) {
final int evaluationScore = evaluationItemService.calculateEvaluationScore(evaluationItemId, memberInputScore);
return ResponseEntity.ok(new ScoreResponse(evaluationScore));
}

@GetMapping("/api/evaluation/items")
public ResponseEntity<List<EvaluationItemResponse>> items(ApplicationType applicationType) {
final List<EvaluationItemResponse> responses = evaluationItemService.items(applicationType);
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/se/ton/t210/controller/ScoreController.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,26 @@ public ResponseEntity<RecordCountResponse> recordCount() {
return ResponseEntity.ok(countResponse);
}

@GetMapping("/api/score")
public ResponseEntity<ScoreResponse> evaluationScore(Long evaluationItemId, int score) {
final ScoreResponse response = scoreService.evaluationScore(evaluationItemId, score);
return ResponseEntity.ok(response);
}

@GetMapping("/api/score/me")
public ResponseEntity<ScoreResponse> myScore() {
final Member member = new Member(1l, "name", "email", "password", Gender.MALE, ApplicationType.FireOfficerFemale);
final ScoreResponse scoreResponse = scoreService.score(member.getId(), LocalDate.now());
return ResponseEntity.ok(scoreResponse);
}

@PostMapping("/api/score/me")
public ResponseEntity<ScoreResponse> updateScore(List<EvaluationScoreRequest> request) {
final Member member = new Member(1l, "name", "email", "password", Gender.MALE, ApplicationType.FireOfficerFemale);
final ScoreResponse scoreResponse = scoreService.update(member.getId(), request, LocalDate.now());
return ResponseEntity.ok(scoreResponse);
}

@GetMapping("/api/score/rank")
public ResponseEntity<List<RankResponse>> rank(int rankCnt) {
final Member member = new Member(1l, "name", "email", "password", Gender.MALE, ApplicationType.FireOfficerFemale);
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/se/ton/t210/domain/MonthlyScore.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,8 @@ public MonthlyScore(ApplicationType applicationType, Long memberId, int score) {
public static MonthlyScore of(Member member, int score) {
return new MonthlyScore(member.getApplicationType(), member.getId(), score);
}

public void update(int evaluationScoreSum) {
this.score = evaluationScoreSum;
}
}
4 changes: 4 additions & 0 deletions src/main/java/se/ton/t210/domain/MonthlyScoreRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,9 @@ public interface MonthlyScoreRepository extends JpaRepository<MonthlyScore, Long

Optional<MonthlyScore> findByMemberIdAndYearMonth(Long memberId, LocalDate yearMonth);

boolean existByMemberIdAndYearMonth(Long memberId, LocalDate yearMonth);

List<MonthlyScore> findAllByApplicationTypeAndYearMonth(ApplicationType applicationType, LocalDate yearMonth, PageRequest page);

void deleteAllByMemberIdAndYearMonth(Long memberId, LocalDate yearMonth);
}
15 changes: 15 additions & 0 deletions src/main/java/se/ton/t210/dto/EvaluationScoreRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package se.ton.t210.dto;

import lombok.Getter;

@Getter
public class EvaluationScoreRequest {

private final Long evaluationItemId;
private final int score;

public EvaluationScoreRequest(Long evaluationItemId, int score) {
this.evaluationItemId = evaluationItemId;
this.score = score;
}
}
9 changes: 1 addition & 8 deletions src/main/java/se/ton/t210/service/EvaluationItemService.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import se.ton.t210.domain.type.ApplicationType;
import se.ton.t210.dto.EvaluationItemResponse;
import se.ton.t210.dto.EvaluationSectionInfo;
import se.ton.t210.dto.ScoreResponse;

import java.util.*;

Expand All @@ -22,14 +23,6 @@ public EvaluationItemService(EvaluationScoreSectionRepository evaluationScoreSec
this.evaluationItemRepository = evaluationItemRepository;
}

public int calculateEvaluationScore(Long evaluationItemId, int score) {
return evaluationScoreSectionRepository.findAllByEvaluationItemId(evaluationItemId).stream()
.filter(it -> it.getSectionBaseScore() < score)
.max(Comparator.comparingInt(EvaluationScoreSection::getScore))
.map(EvaluationScoreSection::getScore)
.orElse(0);
}

public List<EvaluationItemResponse> items(ApplicationType applicationType) {
final List<EvaluationItem> items = evaluationItemRepository.findAllByApplicationType(applicationType);
return EvaluationItemResponse.listOf(items);
Expand Down
32 changes: 28 additions & 4 deletions src/main/java/se/ton/t210/service/ScoreService.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
package se.ton.t210.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import se.ton.t210.domain.*;
import se.ton.t210.domain.type.ApplicationType;
import se.ton.t210.dto.RankResponse;
import se.ton.t210.dto.RecordCountResponse;
import se.ton.t210.dto.ScoreResponse;
import se.ton.t210.dto.*;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;

@Service
public class ScoreService {
Expand All @@ -21,6 +23,9 @@ public class ScoreService {
private final MonthlyScoreItemRepository monthlyScoreItemRepository;
private final MonthlyScoreRepository monthlyScoreRepository;

@Autowired
private EvaluationScoreSectionRepository evaluationScoreSectionRepository;

public ScoreService(MemberRepository memberRepository, EvaluationItemRepository evaluationItemRepository, MonthlyScoreItemRepository monthlyScoreItemRepository, MonthlyScoreRepository monthlyScoreRepository) {
this.memberRepository = memberRepository;
this.evaluationItemRepository = evaluationItemRepository;
Expand All @@ -39,6 +44,26 @@ public ScoreResponse score(Long memberId, LocalDate date) {
return new ScoreResponse(monthlyScore.getScore());
}

@Transactional
public ScoreResponse update(Long memberId, List<EvaluationScoreRequest> request, LocalDate yearMonth) {
int evaluationScoreSum = 0;
for(EvaluationScoreRequest scoreInfo : request) {
evaluationScoreSum += evaluationScore(scoreInfo.getEvaluationItemId(), scoreInfo.getScore()).getScore();
}
final Member member = memberRepository.findById(memberId).orElseThrow();
monthlyScoreRepository.deleteAllByMemberIdAndYearMonth(member.getId(), yearMonth);
monthlyScoreRepository.save(MonthlyScore.of(member, evaluationScoreSum));
return new ScoreResponse(evaluationScoreSum);
}

public ScoreResponse evaluationScore(Long evaluationItemId, int score) {
return new ScoreResponse(evaluationScoreSectionRepository.findAllByEvaluationItemId(evaluationItemId).stream()
.filter(it -> it.getSectionBaseScore() < score)
.max(Comparator.comparingInt(EvaluationScoreSection::getScore))
.map(EvaluationScoreSection::getScore)
.orElse(0));
}

public List<RankResponse> rank(ApplicationType applicationType, int rankCnt, LocalDate date) {
final PageRequest page = PageRequest.of(0, rankCnt, Sort.by(Sort.Order.desc("score")));
final List<MonthlyScore> rankScores = monthlyScoreRepository.findAllByApplicationTypeAndYearMonth(applicationType, date, page);
Expand All @@ -50,5 +75,4 @@ public List<RankResponse> rank(ApplicationType applicationType, int rankCnt, Loc
}
return rankResponses;
}

}

0 comments on commit 99f4bba

Please sign in to comment.