Skip to content

Commit

Permalink
#42 [feat] 홈 조회하기 Api 구현 (#43)
Browse files Browse the repository at this point in the history
* chore: MissionContentDto rename

* chore: Fix dto package

* feat: Add HomeResponseDto

* delete: Delete unused function

* feat: Add CoupleRepository

* feat: Fix NotFoundUser name

* feat: Get home api
  • Loading branch information
2zerozu authored Jul 13, 2023
1 parent 06c2ef2 commit 2c01048
Show file tree
Hide file tree
Showing 21 changed files with 190 additions and 19 deletions.
26 changes: 26 additions & 0 deletions src/main/java/com/universe/uni/controller/HomeController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.universe.uni.controller;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import com.universe.uni.dto.response.HomeResponseDto;
import com.universe.uni.service.HomeService;

import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/home")
public class HomeController {

private final HomeService homeService;

@GetMapping()
@ResponseStatus(HttpStatus.OK)
public HomeResponseDto getHome() {
return homeService.getHome();
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/universe/uni/dto/CoupleDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.universe.uni.dto;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import lombok.Builder;

@JsonPropertyOrder({"id", "startDate", "heartToken"})
@Builder
public record CoupleDto(
Long id,
String startDate,
int heartToken
) {
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.universe.uni.dto.response;
package com.universe.uni.dto;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import lombok.Builder;

@JsonPropertyOrder({"id", "content"})
@Builder
public record MissionContentResponseDto(
public record MissionContentDto(
Long id,
String content
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.universe.uni.dto.response;
package com.universe.uni.dto;

import java.time.LocalDateTime;

Expand All @@ -16,7 +16,7 @@ public class RoundMissionDto {
private GameResult finalResult;
private LocalDateTime updatedAt;

public RoundMissionDto(RoundMission roundMission){
public RoundMissionDto(RoundMission roundMission) {
this.roundMissionId = roundMission.getId();
this.missionContent = roundMission.getMissionContent();
this.result = roundMission.getResult();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.universe.uni.dto.response;
package com.universe.uni.dto;

import java.time.LocalDateTime;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.universe.uni.dto.response;
package com.universe.uni.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.universe.uni.domain.entity.RoundMission;
import com.universe.uni.domain.entity.ShortGame;
import com.universe.uni.dto.RoundMissionDto;
import com.universe.uni.dto.ShortGameDto;

import lombok.AllArgsConstructor;
import lombok.Getter;
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/com/universe/uni/dto/response/HomeResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.universe.uni.dto.response;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.universe.uni.dto.CoupleDto;
import com.universe.uni.dto.ShortGameDto;

import lombok.Builder;

@JsonPropertyOrder({"userId", "roundGameId", "myScore", "partnerScore", "drawCount", "couple", "shortGame"})
@Builder
public record HomeResponseDto(
Long userId,
Long roundGameId,
int myScore,
int partnerScore,
int drawCount,
CoupleDto couple,
ShortGameDto shortGame
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.List;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.universe.uni.dto.MissionContentDto;

import lombok.Builder;

Expand All @@ -14,6 +15,6 @@ public record MissionCategoryResponseDto(
String description,
String tip,
String image,
List<MissionContentResponseDto> missionContentList
List<MissionContentDto> missionContentList
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.List;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.universe.uni.dto.WishCouponDto;

import lombok.Builder;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.universe.uni.dto.response;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.universe.uni.dto.WishCouponDto;

import lombok.Builder;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public enum ErrorType {
*/
INVALID_ENDPOINT_EXCEPTION(HttpStatus.NOT_FOUND, "UE5001",
"잘못된 endpoint에 요청한 경우입니다."),
USER_NOT_FOUND_EXCEPTION(HttpStatus.NOT_FOUND, "UE5002",
NOT_FOUND_USER(HttpStatus.NOT_FOUND, "UE5002",
"조회한 유저가 존재하지 않는 경우 입니다."),
NOT_FOUND_MISSION_CATEGORY_EXCEPTION(HttpStatus.NOT_FOUND, "UE5003", "존재하지 않는 미션 카테고리입니다"),
NOT_FOUND_MISSION_CONTENT(HttpStatus.NOT_FOUND, "UE5004", "해당 카테고리 미션이 존재하지 않습니다."),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.universe.uni.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.universe.uni.domain.entity.Couple;

public interface CoupleRepository extends JpaRepository<Couple, Long> {
}

2 changes: 2 additions & 0 deletions src/main/java/com/universe/uni/repository/GameRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@
public interface GameRepository extends JpaRepository<Game, Long> {

boolean existsByCoupleAndEnable(Couple couple, boolean enable);

Game findByCoupleId(Long coupleId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@
import com.universe.uni.domain.entity.RoundGame;

public interface RoundGameRepository extends JpaRepository<RoundGame, Long> {
RoundGame findByGameId(Long gameId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.universe.uni.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;

import com.universe.uni.domain.entity.UserGameHistory;

public interface UserGameHistoryRepository extends JpaRepository<UserGameHistory, Long> {

List<UserGameHistory> findByUserId(Long userId);
}
3 changes: 0 additions & 3 deletions src/main/java/com/universe/uni/repository/UserRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,9 @@

import com.universe.uni.domain.entity.Couple;
import com.universe.uni.domain.entity.User;
import com.universe.uni.domain.entity.WishCoupon;

public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findBySnsAuthCode(String snsAuthCode);

List<User> findByCouple(Couple couple);

List<WishCoupon> findAllById(Long userId);
}
85 changes: 85 additions & 0 deletions src/main/java/com/universe/uni/service/HomeService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package com.universe.uni.service;

import static com.universe.uni.exception.dto.ErrorType.NOT_FOUND_USER;

import java.util.List;
import java.util.Optional;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.universe.uni.domain.GameResult;
import com.universe.uni.domain.entity.Game;
import com.universe.uni.domain.entity.RoundGame;
import com.universe.uni.domain.entity.ShortGame;
import com.universe.uni.domain.entity.User;
import com.universe.uni.domain.entity.UserGameHistory;
import com.universe.uni.dto.CoupleDto;
import com.universe.uni.dto.ShortGameDto;
import com.universe.uni.dto.response.HomeResponseDto;
import com.universe.uni.exception.NotFoundException;
import com.universe.uni.repository.GameRepository;
import com.universe.uni.repository.RoundGameRepository;
import com.universe.uni.repository.UserGameHistoryRepository;
import com.universe.uni.repository.UserRepository;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
@Transactional
public class HomeService {
private final UserRepository userRepository;
private final GameRepository gameRepository;
private final UserGameHistoryRepository userGameHistoryRepository;
private final RoundGameRepository roundGameRepository;

public HomeResponseDto getHome() {
/**
* jwt userId
* game에서 coupleId 조회해서 GameResult.WIN, GameResult.LOSE, GameResult.DRAW 각각 개수 변수에 저장
* userId로 shortGame 가져옴
* shortGame은 nullable합니다.
*/

/** TODO 영주 : 추후 1L 내 userId로 바꾸기*/
Long userId = 1L;

User user = userRepository.findById(userId).orElseThrow(() -> new NotFoundException(NOT_FOUND_USER));

Game game = gameRepository.findByCoupleId(user.getCouple().getId());

List<UserGameHistory> gameHistoryList = userGameHistoryRepository.findByUserId(userId);

RoundGame roundGame = roundGameRepository.findByGameId(game.getId());

int myScore = (int)gameHistoryList.stream().filter(history -> history.getResult() == GameResult.WIN).count();

int partnerScore = (int)gameHistoryList.stream()
.filter(history -> history.getResult() == GameResult.LOSE)
.count();

int drawCount = (int)gameHistoryList.stream().filter(history -> history.getResult() == GameResult.DRAW).count();

Optional<ShortGameDto> shortGameDto = Optional.empty();
if (game instanceof ShortGame) {
shortGameDto = Optional.of(new ShortGameDto((ShortGame)game));
}

CoupleDto coupleDto = CoupleDto.builder()
.id(user.getCouple().getId())
.startDate(String.valueOf(user.getCouple().getStartDate()))
.heartToken(user.getCouple().getHeartToken())
.build();

return HomeResponseDto.builder()
.userId(userId)
.roundGameId(roundGame.getId())
.myScore(myScore)
.partnerScore(partnerScore)
.drawCount(drawCount)
.couple(coupleDto)
.shortGame(shortGameDto.orElse(null))
.build();
}
}
10 changes: 5 additions & 5 deletions src/main/java/com/universe/uni/service/MissionService.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@

import com.universe.uni.domain.entity.MissionCategory;
import com.universe.uni.domain.entity.MissionContent;
import com.universe.uni.dto.MissionContentDto;
import com.universe.uni.dto.response.MissionCategoryResponseDto;
import com.universe.uni.dto.response.MissionContentResponseDto;
import com.universe.uni.exception.NotFoundException;
import com.universe.uni.repository.MissionCategoryRepository;
import com.universe.uni.repository.MissionContentRepository;
Expand Down Expand Up @@ -64,7 +64,7 @@ private MissionCategoryResponseDto fromMissionCategoryToMissionCategoryResponseD
List<MissionContent> missionContentList = missionContentRepository.findByMissionCategoryId(
missionCategory.getId());

List<MissionContentResponseDto> missionContentResponseDtoList = missionContentList.stream()
List<MissionContentDto> missionContentDtoList = missionContentList.stream()
.map(this::fromMissionContentToMissionContentResponseDto)
.collect(Collectors.toList());

Expand All @@ -74,12 +74,12 @@ private MissionCategoryResponseDto fromMissionCategoryToMissionCategoryResponseD
.description(missionCategory.getDescription())
.tip(missionCategory.getTip())
.image(missionCategory.getImage())
.missionContentList(missionContentResponseDtoList)
.missionContentList(missionContentDtoList)
.build();
}

private MissionContentResponseDto fromMissionContentToMissionContentResponseDto(MissionContent missionContent) {
return MissionContentResponseDto.builder()
private MissionContentDto fromMissionContentToMissionContentResponseDto(MissionContent missionContent) {
return MissionContentDto.builder()
.id(missionContent.getId())
.content(missionContent.getContent())
.build();
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/universe/uni/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

import com.universe.uni.domain.entity.User;
import com.universe.uni.domain.entity.WishCoupon;
import com.universe.uni.dto.WishCouponDto;
import com.universe.uni.dto.response.UserWishCouponResponseDto;
import com.universe.uni.dto.response.WishCouponDto;
import com.universe.uni.exception.NotFoundException;
import com.universe.uni.exception.dto.ErrorType;
import com.universe.uni.repository.UserRepository;
Expand All @@ -26,7 +26,7 @@ public class UserService {

public UserWishCouponResponseDto getUserWishCouponList(Long userId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new NotFoundException(ErrorType.USER_NOT_FOUND_EXCEPTION));
.orElseThrow(() -> new NotFoundException(ErrorType.NOT_FOUND_USER));

List<WishCoupon> wishCouponList = wishCouponRepository.findByUserId(user.getId());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import com.universe.uni.domain.GameType;
import com.universe.uni.domain.entity.Game;
import com.universe.uni.domain.entity.WishCoupon;
import com.universe.uni.dto.WishCouponDto;
import com.universe.uni.dto.request.UpdateWishCouponRequestDto;
import com.universe.uni.dto.response.WishCouponDto;
import com.universe.uni.dto.response.WishCouponResponseDto;
import com.universe.uni.exception.BadRequestException;
import com.universe.uni.exception.NotFoundException;
Expand Down

0 comments on commit 2c01048

Please sign in to comment.