Skip to content

Commit

Permalink
Merge pull request #35 from SSUMatch/feat/1-match
Browse files Browse the repository at this point in the history
[feat]:Main 구장 상세 api 구현
  • Loading branch information
qogustj authored Jun 4, 2024
2 parents 4f7424b + f6711ca commit 3ebed0d
Show file tree
Hide file tree
Showing 9 changed files with 164 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ public class QRecord extends EntityPathBase<Record> {

public final NumberPath<Long> id = createNumber("id", Long.class);

public final EnumPath<Level> level = createEnum("level", Level.class);

public final NumberPath<Integer> participant = createNumber("participant", Integer.class);

public final NumberPath<Integer> pom = createNumber("pom", Integer.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.Main.domain.match.application.service;

import com.Main.domain.match.application.dto.*;
import com.Main.domain.match.domain.adapter.MatchesManagerAdapter;
import com.Main.domain.match.domain.entity.Matches;
import com.Main.domain.match.domain.repository.MatchesRepository;
import com.Main.domain.match.domain.service.MatchesFormatter;
Expand All @@ -9,6 +10,9 @@
import com.Main.domain.place.domain.entity.Place;
import com.Main.domain.place.domain.service.PlaceReader;

import com.Main.domain.record.domain.entity.Record;
import com.Main.domain.record.domain.service.RecordManager;
import com.Main.domain.record.domain.service.RecordReader;
import com.Main.domain.user.domain.entity.User;
import com.Main.domain.user.service.UserReader;
import com.Main.domain.userMatch.domain.entity.UserMatch;
Expand All @@ -35,6 +39,8 @@ public class MatchService {
private final UserMatchReader userMatchReader;
private final UserReader userReader;
private final MatchesRepository matchesRepository;
private final RecordReader recordReader;
private final RecordManager recordManager;

public List<SimpleMatchInfoResponse> getMatchInfoList(int page, int take, String date){
Page<Matches> matchesList = matchesReader.getMatchesWithDate(setPageable(page, take),date);
Expand Down Expand Up @@ -72,8 +78,9 @@ public MatchDetailResponse getMatchDetail(Long matchesId){
Place place = placeReader.findById(matches.getPlace().getId());
List<UserMatch> userMatches = userMatchReader.findAllByMatchId(matchesId);
List<User> users = userMatches.stream().map(userMatch -> userReader.findById(userMatch.getUser().getId())).toList();
MatchData matchData = createMatchData(userMatches);
return MatchDetailResponse.of(place.getImage(),
MatchData.of("세미프로",null),
matchData,
PlaceInfo.of(matches.getGender(),matches.getType(), matches.getSize(),"12~18"),
MatchInfo.of(true, true, place.isRental(), place.getParking(),place.isShower_room(),place.isToilet()),
matches.getDate(),
Expand All @@ -84,6 +91,13 @@ public MatchDetailResponse getMatchDetail(Long matchesId){

);
}
private MatchData createMatchData(List<UserMatch> userMatches){
List<User> users = userMatches.stream().map(userMatch -> userReader.findById(userMatch.getUser().getId())).toList();
List<Record> records = users.stream().map(user -> recordReader.getRecordByUserId(user.getId())).toList();
String expect = recordManager.getExpectRate(records);
List<LevelDto> levelDtos = recordManager.getLevelDtos(records);
return MatchData.of(expect,levelDtos);
}
private Pageable setPageable(int page, int take){
return PageRequest.of(page, take);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,18 @@
import com.Main.domain.match.domain.entity.Matches;
import com.Main.domain.match.domain.repository.MatchesRepository;
import com.Main.domain.match.domain.service.MatchesManager;
import com.Main.domain.record.domain.entity.Level;
import com.Main.domain.record.domain.entity.Record;
import com.Main.domain.user.domain.entity.User;
import com.Main.domain.userMatch.domain.entity.UserMatch;
import com.Main.domain.userMatch.domain.repository.UserMatchRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@RequiredArgsConstructor
public class MatchesManagerAdapter implements MatchesManager {
Expand All @@ -26,6 +34,31 @@ public String isFull(Long matchesId) {
return "신청";
}
}
@Override
public String getExpectRate(List<Record> records) {
if (records.isEmpty()) {
return "No records found.";
}

Map<Level, Integer> levelCount = new HashMap<>();

for (Record record : records) {
Level level = record.getLevel();
levelCount.put(level, levelCount.getOrDefault(level, 0) + 1);
}

Level mostCommonLevel = null;
int maxCount = 0;

for (Map.Entry<Level, Integer> entry : levelCount.entrySet()) {
if (entry.getValue() > maxCount) {
mostCommonLevel = entry.getKey();
maxCount = entry.getValue();
}
}

return mostCommonLevel != null ? mostCommonLevel.getLevelString() : "No common level found.";
}

private int getRequiredParticipants(Matches matches) {
switch (matches.getSize()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
package com.Main.domain.match.domain.service;

import com.Main.domain.record.domain.entity.Record;
import com.Main.domain.user.domain.entity.User;
import com.Main.domain.userMatch.domain.entity.UserMatch;

import java.util.List;

public interface MatchesManager {
String isFull(Long matchesId);
String getExpectRate(List<Record> user);
}
15 changes: 15 additions & 0 deletions Main/src/main/java/com/Main/domain/record/domain/entity/Level.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.Main.domain.record.domain.entity;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Getter
public enum Level {
ROOKIE("루키"),
BEGINNER("비기너"),
AMATUAR("아마추어"),
SEMIPRO("세미프로"),
PRO("프로");
private final String levelString;
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,13 @@ public class Record {
private Integer assist; // 어시스트
private Integer defence; // 수비
private Integer pom; // 플레이 오브 더 매치
@Enumerated(EnumType.STRING)
private Level level;

@OneToOne(mappedBy = "record")
private User user;

public static Record of(Long id, Integer score, Integer participant, Integer victory, Integer goal, Integer assist, Integer defence, Integer pom, User user) {
return new Record(id, score, participant, victory, goal, assist, defence, pom, user);
public static Record of(Long id, Integer score, Integer participant, Integer victory, Integer goal, Integer assist, Integer defence, Integer pom, Level level, User user) {
return new Record(id, score, participant, victory, goal, assist, defence, pom, level, user);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.Main.domain.record.domain.repository;

import com.Main.domain.record.domain.entity.Record;
import org.springframework.data.jpa.repository.JpaRepository;

public interface RecordRepository extends JpaRepository<Record, Long> {
Record findByUserId(Long userId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.Main.domain.record.domain.service;

import com.Main.domain.match.application.dto.LevelDto;
import com.Main.domain.record.domain.entity.Level;
import com.Main.domain.record.domain.entity.Record;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@RequiredArgsConstructor
public class RecordManager {
public List<LevelDto> getLevelDtos(List<Record> records) {
if (records.isEmpty()) {
return List.of();
}

Map<Level, Integer> levelCount = new HashMap<>();
int totalRecords = records.size();

for (Record record : records) {
Level level = record.getLevel();
levelCount.put(level, levelCount.getOrDefault(level, 0) + 1);
}

List<LevelDto> levelDtos = new ArrayList<>();
for (Map.Entry<Level, Integer> entry : levelCount.entrySet()) {
Level level = entry.getKey();
int count = entry.getValue();
double percent = (double) count / totalRecords * 100;
String percentString = String.format("%.2f%%", percent);
levelDtos.add(LevelDto.of(level.getLevelString(), percentString));
}

return levelDtos;
}
public String getExpectRate(List<Record> records) {
if (records.isEmpty()) {
return "No records found.";
}

Map<Level, Integer> levelCount = new HashMap<>();

for (Record record : records) {
Level level = record.getLevel();
levelCount.put(level, levelCount.getOrDefault(level, 0) + 1);
}

Level mostCommonLevel = null;
int maxCount = 0;

for (Map.Entry<Level, Integer> entry : levelCount.entrySet()) {
if (entry.getValue() > maxCount) {
mostCommonLevel = entry.getKey();
maxCount = entry.getValue();
}
}

return mostCommonLevel != null ? mostCommonLevel.getLevelString() : "No common level found.";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.Main.domain.record.domain.service;

import com.Main.domain.record.domain.entity.Record;
import com.Main.domain.record.domain.repository.RecordRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class RecordReader {
private final RecordRepository recordRepository;
public Record getRecordByUserId(Long userId){
return recordRepository.findByUserId(userId);
}
}

0 comments on commit 3ebed0d

Please sign in to comment.