Skip to content

Commit

Permalink
Merge pull request #34 from DEPthes/feat/initial-character-new
Browse files Browse the repository at this point in the history
초기 캐릭터 생성 기능 구현
  • Loading branch information
lsn5963 authored Aug 15, 2024
2 parents 172c2c3 + 2b59264 commit cf75baa
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 71 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,33 @@
import com.noplanb.domain.auth.application.AuthService;
import com.noplanb.domain.auth.dto.request.SigninReq;
import com.noplanb.domain.auth.dto.response.LoginResponse;
import com.noplanb.global.payload.ApiResponse;
import com.noplanb.domain.character.dto.response.MyCharaterListRes;
import com.noplanb.global.payload.ErrorCode;
import com.noplanb.global.payload.ErrorResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

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

@RestController
@RequestMapping("/auth")
@RequiredArgsConstructor
@Tag(name = "Auth", description = "로그인 관련 API")
public class AuthController {

private final AuthService authService;

@Operation(summary = "카카오 로그인 API", description = "카카오 로그인 API입니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "로그인 및 토큰 발급 성공", content = { @Content(mediaType = "application/json", schema = @Schema(implementation =LoginResponse.class) ) } ),
@ApiResponse(responseCode = "400", description = "로그인 실패", content = { @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class) ) } ),
})
@PostMapping("/idTokenLogin")
public ResponseEntity<?> idTokenLogin(@RequestBody SigninReq signinReq) {
String accessToken = signinReq.getAccessToken();
Expand All @@ -37,7 +48,6 @@ public ResponseEntity<?> idTokenLogin(@RequestBody SigninReq signinReq) {
ErrorCode errorCode = ErrorCode.INVALID_TOKEN;
ErrorResponse errorResponse = ErrorResponse.of(errorCode, e.getMessage());
return ResponseEntity.badRequest().body(errorResponse);

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.noplanb.domain.character.domain.Character;
// import com.noplanb.domain.character.dto.request.NewCharacterReq;
import com.noplanb.domain.character.dto.request.NewCharacterReq;
import com.noplanb.domain.character.dto.request.UpdateNameReq;
import com.noplanb.domain.character.dto.response.InitialCharacterInfoRes;
import com.noplanb.domain.character.dto.response.MyCharacterInfoRes;
Expand All @@ -25,6 +26,7 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;


@Service
Expand Down Expand Up @@ -142,57 +144,56 @@ public ResponseEntity<?> getInitialCharacterInfo(UserPrincipal userPrincipal) {

return ResponseEntity.ok(apiResponse);
}
//
// @Transactional
// public ResponseEntity<?> createInitialCharacter(UserPrincipal userPrincipal, NewCharacterReq newCharactemReq) {
// User user = userRepository.findById(userPrincipal.getId()).orElseThrow(() -> new IllegalArgumentException("사용자를 찾을 수 없습니다."));
// List<ItemImage> items = itemImageRepository.findAll();
//
// // 캐릭터 객체 생성
// Character character = Character.builder()
// .characterName(newCharactemReq.getCharacterName())
// .totalExp(0L)
// .totalQuest(0L)
// .todayExp(0L)
// .level(1L)
// .user(user)
// .quests(new ArrayList<>())
// .items(new ArrayList<>())
// .build();
// characterRepository.save(character);
//
// // 아이템 객체 생성
// for (ItemImage itemImage : items) {
// Item item = Item.builder()
// .character(character)
// .isEquipped(false) // 장착 여부 초기화
// .itemImage(itemImage)
// .build();
// itemRepository.save(item);
// }
//
// // 기본 아이템 장착 (요청값에 따라 다르게 설정)
// // 피부색(1~3) / 눈(4~6) / 머리(7~9) / 옷(10~11) 순서
//
// List<Long> equippedItemIds = newCharactemReq.getItemIdList();
// for (Long equippedItemId : equippedItemIds) {
// Item item=itemImageRepository.findById(equippedItemId).map(itemImage -> Item.builder()
// .character(character)
// .isEquipped(true)
// .itemImage(itemImage)
// .build()).orElseThrow(() -> new IllegalArgumentException("아이템을 찾을 수 없습니다."));
//
// itemRepository.save(item);
// }
//
// ApiResponse apiResponse = ApiResponse.builder()
// .check(true)
// .information(Message.builder().message("캐릭터가 생성 및 기본 아이템 장착이 완료되었습니다.").build())
// .build();
//
// return ResponseEntity.ok(apiResponse);
// }

// 아이템 장착 메소드

@Transactional
public ResponseEntity<?> createInitialCharacter(UserPrincipal userPrincipal, NewCharacterReq newCharacterReq) {
User user = userRepository.findById(userPrincipal.getId()).orElseThrow(() -> new IllegalArgumentException("사용자를 찾을 수 없습니다."));
List<ItemImage> items = itemImageRepository.findAll();

// 캐릭터 객체 생성
Character character = Character.builder()
.characterName(newCharacterReq.getCharacterName())
.totalExp(0L)
.totalQuest(0L)
.todayExp(0L)
.level(1L)
.user(user)
.quests(new ArrayList<>())
.items(new ArrayList<>())
.build();
characterRepository.save(character);

// 아이템 객체 생성 및 저장
List<Item> itemList = new ArrayList<>();
for (ItemImage itemImage : items) {
Item item = Item.builder()
.character(character)
.isEquipped(false) // 장착 여부 초기화
.itemImage(itemImage)
.build();
itemList.add(item);
}
itemRepository.saveAll(itemList);

// 기본 아이템 장착 (요청값에 따라 다르게 설정)
// 피부색(1~3) / 눈(4~6) / 머리(7~9) / 옷(10~11) 순서
// 장착할 아이템 ID = 아이템 이미지의 ID

for (Long equippedItemId : newCharacterReq.getItemIdList()) {
Item item = itemList.stream()
.filter(i -> i.getItemImage().getId().equals(equippedItemId))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("아이템을 찾을 수 없습니다."));
item.updateEquipped(true);
}
itemRepository.saveAll(itemList); // 변경사항 저장

ApiResponse apiResponse = ApiResponse.builder()
.check(true)
.information(Message.builder().message("캐릭터가 생성 및 기본 아이템 장착이 완료되었습니다.").build())
.build();

return ResponseEntity.ok(apiResponse);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
@Controller
@RequiredArgsConstructor
@RequestMapping("/api/v1/character")
@Tag(name = "CharacterController", description = "CharacterController입니다.")
@Tag(name = "Character", description = "캐릭터 관련 API")
public class CharacterController {

private final CharacterService characterService;
Expand Down Expand Up @@ -73,16 +73,16 @@ public ResponseEntity<?> getCreatedCharacterInfo(@Parameter @CurrentUser UserPri
return characterService.getInitialCharacterInfo(userPrincipal);
}

// @Operation(summary = "캐릭터 생성 API", description = "로그인 직후, 초기 캐릭터를 생성하는 API입니다.")
// @ApiResponses(value = {
// @ApiResponse(responseCode = "200", description = "초기 캐릭터 생성 성공", content = { @Content(mediaType = "application/json", schema = @Schema(implementation = Message.class) ) } ),
// @ApiResponse(responseCode = "400", description = "초기 캐릭터 생성 실패", content = { @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class) ) } ),
// })
// @PostMapping("/initial/character")
// public ResponseEntity<?> createInitialCharacter(@Parameter @CurrentUser UserPrincipal userPrincipal, @RequestBody NewCharacterReq newCharactemReq){
// return characterService.createInitialCharacter(userPrincipal, newCharactemReq);
// }
//
@Operation(summary = "캐릭터 생성 API", description = "로그인 직후, 초기 캐릭터를 생성하는 API입니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "초기 캐릭터 생성 성공", content = { @Content(mediaType = "application/json", schema = @Schema(implementation = Message.class) ) } ),
@ApiResponse(responseCode = "400", description = "초기 캐릭터 생성 실패", content = { @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class) ) } ),
})
@PostMapping("/initial")
public ResponseEntity<?> createInitialCharacter(@Parameter @CurrentUser UserPrincipal userPrincipal, @RequestBody NewCharacterReq newCharacterReq){
return characterService.createInitialCharacter(userPrincipal, newCharacterReq);
}




Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
@Controller
@RequiredArgsConstructor
@RequestMapping("/api/v1/items")
@Tag(name = "ItemController", description = "ItemControllerController입니다.")
@Tag(name = "Item", description = "아이템 관련 API")
public class ItemController {

private final ItemService itemService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
@Controller
@RequiredArgsConstructor
@RequestMapping("/api/v1/calendar")
@Tag(name = "CalendarController", description = "CalendarController입니다.")
@Tag(name = "Calendar", description = "캘린더 관련 API")
public class CalendarController {
private final CalendarService calendarService;
@GetMapping("/{date}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
@Controller
@RequiredArgsConstructor
@RequestMapping("/api/v1/quest")
@Tag(name = "QuestController", description = "QuestController입니다.")
@Tag(name = "Quest", description = "퀘스트 관련 API")
public class QuestController {
private final QuestService questService;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
@Controller
@RequiredArgsConstructor
@RequestMapping("/api/v1/user")
@Tag(name = "UserController", description = "UserControllerController입니다.")
@Tag(name = "User", description = "사용자 관련 API")
public class UserController {

private final UserService userService;
Expand Down

0 comments on commit cf75baa

Please sign in to comment.