Skip to content

Commit

Permalink
Merge pull request #52 from KU-Taverse/fix/quest
Browse files Browse the repository at this point in the history
[Fix] 10/11 요구사항 반영
  • Loading branch information
david-parkk authored Oct 12, 2024
2 parents 1129801 + d9e13db commit 1629546
Show file tree
Hide file tree
Showing 12 changed files with 236 additions and 99 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import ku.user.domain.character.dto.request.SaveCharacterRequest;
import ku.user.domain.character.dto.response.*;
import ku.user.domain.character.service.CharacterService;
import ku.user.domain.inventory.domain.Inventory;
import ku.user.domain.inventory.service.InventoryService;
import ku.user.global.response.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
Expand All @@ -14,6 +16,7 @@
public class CharacterController {

private final CharacterService characterService;
private final InventoryService inventoryService;

@GetMapping("/characters/check")
public ApiResponse<CheckCharacterExistResponse> checkCharacterExist(@RequestParam() String email) {
Expand All @@ -33,7 +36,8 @@ public ApiResponse<SaveCharacterResponse> saveCharacter(@RequestBody SaveCharact
@GetMapping("/characters")
public ApiResponse<FindCharacterByEmailResponse> findCharacterByEmail(@RequestParam() String email) {
Character character = characterService.findByEmail(email);
FindCharacterByEmailResponse findCharacterByEmailResponse = FindCharacterByEmailResponse.toDto(character);
Inventory inventory = inventoryService.getInventoryByEmail(email);
FindCharacterByEmailResponse findCharacterByEmailResponse = FindCharacterByEmailResponse.toDto(inventory,character);
return new ApiResponse<>(true, findCharacterByEmailResponse, null);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,27 @@

import ku.user.domain.character.domain.Character;
import ku.user.domain.character.domain.CharacterType;
import ku.user.domain.inventory.domain.Inventory;
import lombok.Builder;

import java.util.List;

@Builder
public record FindCharacterByEmailResponse (Long id, String nickname,
CharacterType characterType, Long userId,
int currentMoney) {
int currentMoney,
List<Long> useItemList) {

public static FindCharacterByEmailResponse toDto(Character character){
public static FindCharacterByEmailResponse toDto(Inventory inventory, Character character){
return FindCharacterByEmailResponse.builder()
.id(character.getId())
.nickname(character.getNickname())
.characterType(character.getCharacterType())
.userId(character.getUserId())
.currentMoney(character.getCurrentMoney())
.useItemList(List.of(inventory.getAuraIndex(),
inventory.getTitleColorIndex(),
inventory.getTitleBackgroundIndex()))
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package ku.user.domain.quest.controller;

import jakarta.ws.rs.PATCH;
import ku.user.domain.quest.domain.Quest;
import ku.user.domain.quest.domain.UserQuest;
import ku.user.domain.quest.dto.request.PostUserQuestRequest;
import ku.user.domain.quest.dto.response.GetUserQuestsResponse;
import ku.user.domain.quest.dto.response.PostUserQuestResponse;
Expand All @@ -18,15 +17,15 @@ public class QuestController {

@GetMapping("/quests")
public ApiResponse<GetUserQuestsResponse> checkQuest(@RequestParam String email) {
Quest quest = questService.checkAndRefreshQuest(email);
GetUserQuestsResponse getUserQuestsResponse = GetUserQuestsResponse.toDto(quest);
UserQuest userQuest = questService.checkAndRefreshQuest(email);
GetUserQuestsResponse getUserQuestsResponse = GetUserQuestsResponse.toDto(userQuest);
return new ApiResponse<>(true, getUserQuestsResponse, null);
}

@PostMapping("/quests")
public ApiResponse<PostUserQuestResponse> solveQuest(@RequestParam String email, @RequestBody PostUserQuestRequest postUserQuestRequest) {
Quest quest = questService.solveQuestByEmail(postUserQuestRequest.getQuestIndex(), email);
PostUserQuestResponse postUserQuestResponse = PostUserQuestResponse.toDto(quest);
UserQuest userQuest = questService.updateQuestProgress(postUserQuestRequest.getUserQuestMap(), email);
PostUserQuestResponse postUserQuestResponse = PostUserQuestResponse.toDto(userQuest);
return new ApiResponse<>(true, postUserQuestResponse, null);
}

Expand Down
18 changes: 3 additions & 15 deletions src/main/java/ku/user/domain/quest/dao/QuestRepository.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,9 @@
package ku.user.domain.quest.dao;

import feign.Param;
import ku.user.domain.quest.domain.Quest;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import javax.swing.text.html.Option;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Optional;

public interface QuestRepository extends JpaRepository<Quest,Long> {
@Query("SELECT q FROM Quest q WHERE q.userId = :userId AND q.createdAt = :createdAt")
Optional<Quest> findQuestByUserIdAndCompletionDate(@Param("userId") Long userId, @Param("createdAt") LocalDate createdAt);

Optional<Quest> findByUserId(Long userId);
/*@Query("SELECT q FROM Quest q WHERE q.userId = :userId AND DATE(q.createdAt) = CURRENT_DATE")
Optional<Quest> findQuestByUserIdAndToday(@Param("userId") Long userId);*/
import org.springframework.stereotype.Repository;

@Repository
public interface QuestRepository extends JpaRepository<Quest, Long> {
}
19 changes: 19 additions & 0 deletions src/main/java/ku/user/domain/quest/dao/UserQuestRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ku.user.domain.quest.dao;

import feign.Param;
import ku.user.domain.quest.domain.UserQuest;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.time.LocalDate;
import java.util.Optional;

public interface UserQuestRepository extends JpaRepository<UserQuest,Long> {
@Query("SELECT q FROM UserQuest q WHERE q.userId = :userId AND q.createdAt = :createdAt")
Optional<UserQuest> findQuestByUserIdAndCompletionDate(@Param("userId") Long userId, @Param("createdAt") LocalDate createdAt);

Optional<UserQuest> findByUserId(Long userId);
/*@Query("SELECT q FROM Quest q WHERE q.userId = :userId AND DATE(q.createdAt) = CURRENT_DATE")
Optional<Quest> findQuestByUserIdAndToday(@Param("userId") Long userId);*/

}
55 changes: 10 additions & 45 deletions src/main/java/ku/user/domain/quest/domain/Quest.java
Original file line number Diff line number Diff line change
@@ -1,55 +1,20 @@
package ku.user.domain.quest.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.relational.core.sql.In;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Getter
@Table(name = "quests")
@Getter
public class Quest {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private Long userId;

private Integer quest1;
private LocalDateTime quest1CompletedAt;

private Integer quest2;
private LocalDateTime quest2CompletedAt;

private Integer quest3;
private LocalDateTime quest3CompletedAt;

private LocalDate createdAt;

public static Quest from(Long userId, List<Integer> randomQuestNumber) {
return Quest.builder()
.userId(userId)
.quest1(randomQuestNumber.get(0))
.quest2(randomQuestNumber.get(1))
.quest3(randomQuestNumber.get(2))
.createdAt(LocalDate.now())
.build();
}
private Long id; //id
private String Title; //제목
private String description; //내용
private int clearCondition; //성공조건
private int reward; //보상

public void solve(Integer questIndex) {
if (quest1.equals(questIndex))
quest1CompletedAt = LocalDateTime.now();
if (quest2.equals(questIndex))
quest2CompletedAt = LocalDateTime.now();
if (quest3.equals(questIndex))
quest3CompletedAt = LocalDateTime.now();
}
}
70 changes: 70 additions & 0 deletions src/main/java/ku/user/domain/quest/domain/UserQuest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package ku.user.domain.quest.domain;

import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Getter
@Table(name = "users_quests")
public class UserQuest {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private Long userId;

private Long quest1;
@Builder.Default
private int quest1Progress = 0;
private LocalDateTime quest1CompletedAt;


private Long quest2;
@Builder.Default
private int quest2Progress = 0;
private LocalDateTime quest2CompletedAt;

private Long quest3;
@Builder.Default
private int quest3Progress = 0;
private LocalDateTime quest3CompletedAt;

private LocalDate createdAt;

public static UserQuest from(Long userId, List<Long> randomQuestNumber) {
return UserQuest.builder()
.userId(userId)
.quest1(randomQuestNumber.get(0))
.quest2(randomQuestNumber.get(1))
.quest3(randomQuestNumber.get(2))
.createdAt(LocalDate.now())
.build();
}

public void solve(Long questIndex) {
if (quest1.equals(questIndex))
quest1CompletedAt = LocalDateTime.now();
if (quest2.equals(questIndex))
quest2CompletedAt = LocalDateTime.now();
if (quest3.equals(questIndex))
quest3CompletedAt = LocalDateTime.now();
}

public void updateQuest1(int quest1Progress){
this.quest1Progress = quest1Progress;
}
public void updateQuest2(int quest2Progress){
this.quest2Progress = quest2Progress;
}
public void updateQuest3(int quest3Progress){
this.quest3Progress = quest3Progress;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,26 @@
import lombok.Getter;
import lombok.NoArgsConstructor;

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

@NoArgsConstructor
@Getter
public class PostUserQuestRequest {

private Integer questIndex;
private Long firstQuestIndex;
private Long secondQuestIndex;
private Long thirdQuestIndex;

private Integer firstQuestProgress;
private Integer secondQuestProgress;
private Integer thirdQuestProgress;

public Map<Long, Integer> getUserQuestMap(){
Map<Long, Integer> map = new HashMap<>();
map.put(firstQuestIndex,firstQuestProgress);
map.put(secondQuestIndex,secondQuestProgress);
map.put(thirdQuestIndex,thirdQuestProgress);
return map;
}
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
package ku.user.domain.quest.dto.response;

import ku.user.domain.quest.domain.Quest;
import lombok.AllArgsConstructor;
import ku.user.domain.quest.domain.UserQuest;
import lombok.Builder;
import lombok.Getter;


@Builder
public record GetUserQuestsResponse (int firstQuestIndex,
int secondQuestIndex,
int thirdQuestIndex,
public record GetUserQuestsResponse (Long firstQuestIndex,
Long secondQuestIndex,
Long thirdQuestIndex,
Boolean firstQuestClear,
Boolean secondQuestClear,
Boolean thirdQuestClear){
Boolean thirdQuestClear,
int firstQuestProgress,
int secondQuestProgress,
int thirdQuestProgress){

public static GetUserQuestsResponse toDto(Quest quest){
public static GetUserQuestsResponse toDto(UserQuest quest){
return GetUserQuestsResponse.builder()
.firstQuestIndex(quest.getQuest1())
.secondQuestIndex(quest.getQuest2())
.thirdQuestIndex(quest.getQuest3())
.firstQuestClear(quest.getQuest1CompletedAt() != null)
.secondQuestClear(quest.getQuest2CompletedAt() != null)
.thirdQuestClear(quest.getQuest3CompletedAt() != null)
.firstQuestProgress(quest.getQuest1Progress())
.secondQuestProgress(quest.getQuest2Progress())
.secondQuestProgress(quest.getQuest3Progress())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package ku.user.domain.quest.dto.response;

import ku.user.domain.quest.domain.Quest;
import ku.user.domain.quest.domain.UserQuest;
import lombok.Builder;

@Builder
public record PostUserQuestResponse(int firstQuestIndex,
int secondQuestIndex,
int thirdQuestIndex,
public record PostUserQuestResponse(Long firstQuestIndex,
Long secondQuestIndex,
Long thirdQuestIndex,
Boolean firstQuestClear,
Boolean secondQuestClear,
Boolean thirdQuestClear) {
public static PostUserQuestResponse toDto(Quest quest){
public static PostUserQuestResponse toDto(UserQuest quest){
return PostUserQuestResponse.builder()
.firstQuestIndex(quest.getQuest1())
.secondQuestIndex(quest.getQuest2())
Expand Down
Loading

0 comments on commit 1629546

Please sign in to comment.