Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

πŸ”€::Boardgame 둜직 κ°œμ„  #42

Merged
merged 3 commits into from
Dec 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.gapple.weeingback.domain.boardgame.controller;

import com.gapple.weeingback.domain.boardgame.entity.dto.request.BoardgameCreateRequest;
import com.gapple.weeingback.domain.boardgame.entity.dto.request.BoardgameJoinRequest;
import com.gapple.weeingback.domain.boardgame.entity.dto.request.BoardgameSubmitRequest;
import com.gapple.weeingback.domain.boardgame.entity.dto.request.BoardgameDoneRequest;
import com.gapple.weeingback.domain.boardgame.entity.dto.response.BoardgameCreateResponse;
import com.gapple.weeingback.domain.boardgame.entity.dto.response.BoardgameDoneResponse;
Expand All @@ -12,24 +13,31 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.UUID;

@Controller
@RequiredArgsConstructor
@RequestMapping("/api/boardgame")
public class BoardgameController {
private final BoardgameService boardgameService;

@PostMapping("/create")
public ResponseEntity<BoardgameCreateResponse> createBoardgame(@Valid @RequestBody BoardgameCreateRequest boardgameCreateRequest){
return boardgameService.createBoardgame(boardgameCreateRequest.getMaxOf());
@PostMapping("/submit")
public ResponseEntity<BoardgameCreateResponse> submitBoardgame(@Valid @RequestBody BoardgameSubmitRequest request){
return boardgameService.submitBoardgame(request.getMaxOf());
}

@PostMapping("/join")
public ResponseEntity joinBoardgame(@Valid @RequestBody BoardgameJoinRequest request){
return boardgameService.joinBoardgame(UUID.fromString(request.getId()));
}

@GetMapping("/show-all")
@GetMapping("/list")
public ResponseEntity<BoardgameShowResponse> showAllBoardgame(){
return boardgameService.showAllBoardgame();
}

@DeleteMapping("/done")
public ResponseEntity<BoardgameDoneResponse> doneBoardgame(@RequestBody BoardgameDoneRequest request){
return boardgameService.doneBoardgame(request.getId());
return boardgameService.doneBoardgame(UUID.fromString(request.getId()));
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.gapple.weeingback.domain.boardgame.entity;

import com.gapple.weeingback.domain.member.entity.Member;
import com.gapple.weeingback.domain.member.entity.NumberNameWithId;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.GenericGenerator;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
Expand All @@ -22,8 +22,8 @@ public class Boardgame {
@GenericGenerator(name="uuid2", strategy = "uuid2")
private UUID id;

@Column(nullable = false)
private UUID creator;
@OneToOne
private Member creator;

@Column(nullable = false)
private Long maxOf;
Expand All @@ -36,11 +36,26 @@ public class Boardgame {
private List<Member> members;

public ToBoardgameDto toDto(Boardgame boardgame){
List<NumberNameWithId> players = new ArrayList<>();
boardgame.getMembers().forEach(member -> {
players.add(new NumberNameWithId(
member.getNumber() + " " + member.getName(),
member.getId().toString()
));
});

return new ToBoardgameDto(
boardgame.getId().toString(),
boardgame.getMaxOf(),
boardgame.getJoined(),
boardgame.getCreator().toString(),
boardgame.getMembers());
new NumberNameWithId(
creator.getNumber() + " " + creator.getName(),
creator.getId().toString()
),
players);
}

public void addMember(Member member){
members.add(member);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.gapple.weeingback.domain.boardgame.entity;

import com.gapple.weeingback.domain.member.entity.Member;
import com.gapple.weeingback.domain.member.entity.NumberNameWithId;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand All @@ -14,6 +15,6 @@ public class ToBoardgameDto {
private String id;
private Long maxOf;
private Long joined;
private String creator;
private List<Member> players;
private NumberNameWithId creator;
private List<NumberNameWithId> players;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.gapple.weeingback.domain.boardgame.entity.dto.request;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class BoardgameJoinRequest {
private String id;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class BoardgameCreateRequest {
public class BoardgameSubmitRequest {
private Long maxOf;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.gapple.weeingback.domain.boardgame.entity.dto.response;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class BoardgameJoinResponse {
private String success;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@
import com.gapple.weeingback.domain.boardgame.entity.dto.response.BoardgameShowResponse;
import org.springframework.http.ResponseEntity;

import java.util.UUID;
import java.util.function.LongFunction;

public interface BoardgameService {
ResponseEntity<BoardgameCreateResponse> createBoardgame(Long maxOf);
ResponseEntity<BoardgameCreateResponse> submitBoardgame(Long maxOf);

ResponseEntity<BoardgameShowResponse> showAllBoardgame();

ResponseEntity doneBoardgame(String id);
ResponseEntity doneBoardgame(UUID id);

ResponseEntity joinBoardgame(UUID id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@
import com.gapple.weeingback.domain.boardgame.entity.ToBoardgameDto;
import com.gapple.weeingback.domain.boardgame.entity.dto.response.BoardgameDoneResponse;
import com.gapple.weeingback.domain.boardgame.entity.dto.response.BoardgameCreateResponse;
import com.gapple.weeingback.domain.boardgame.entity.dto.response.BoardgameJoinResponse;
import com.gapple.weeingback.domain.boardgame.entity.dto.response.BoardgameShowResponse;
import com.gapple.weeingback.domain.boardgame.repository.BoardgameRepository;
import com.gapple.weeingback.domain.boardgame.service.BoardgameService;
import com.gapple.weeingback.domain.member.entity.Member;
import com.gapple.weeingback.domain.member.repository.MemberRepository;
import com.gapple.weeingback.global.exception.BoardgameExistsException;
import com.gapple.weeingback.global.exception.SameCreatorException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
Expand All @@ -29,21 +32,24 @@ public class BoardgameServiceImpl implements BoardgameService {

@Override
@Transactional
public ResponseEntity<BoardgameCreateResponse> createBoardgame(Long maxOf) {
public ResponseEntity<BoardgameCreateResponse> submitBoardgame(Long maxOf) {
String id = SecurityContextHolder.getContext().getAuthentication().getName();
Member member = memberRepository.findMemberById(UUID.fromString(id));

log.info(member.getEmail());
if(member.getBoardgame() != null){
throw new BoardgameExistsException();
}

Boardgame boardgame = Boardgame.builder()
.creator(member.getId())
.creator(member)
.maxOf(maxOf)
.joined(0L)
.build();

if(member.getBoardgame() == null){
boardgameRepository.save(boardgame);
} else throw new IllegalArgumentException();
member.setBoardgame(boardgame);

memberRepository.save(member);
boardgameRepository.save(boardgame);

return ResponseEntity.ok().body(new BoardgameCreateResponse("ok"));
}
Expand All @@ -60,9 +66,27 @@ public ResponseEntity<BoardgameShowResponse> showAllBoardgame() {
}

@Override
public ResponseEntity<BoardgameDoneResponse> doneBoardgame(String id) {
public ResponseEntity<BoardgameJoinResponse> joinBoardgame(UUID id) {
String memberId = SecurityContextHolder.getContext().getAuthentication().getName();
Member member = memberRepository.findMemberById(UUID.fromString(memberId));

Boardgame boardgame = boardgameRepository.findBoardgameById(id);

if(boardgame.getCreator().getId().toString().equals(memberId)){
throw new SameCreatorException();
}

boardgame.addMember(member);

boardgameRepository.save(boardgame);

return ResponseEntity.ok().body(new BoardgameJoinResponse("ok"));
}

@Override
public ResponseEntity<BoardgameDoneResponse> doneBoardgame(UUID id) {
Boardgame boardgame =
boardgameRepository.findBoardgameById(UUID.fromString(id));
boardgameRepository.findBoardgameById(id);

boardgameRepository.delete(boardgame);
return ResponseEntity.ok().body(new BoardgameDoneResponse("ok"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,21 @@ public class Consulting {
private Long issuedAt;

@Column(nullable = false)
private int classTime;
private Long classTime;

@Column(nullable = false)
private boolean isAccess;

@Column(columnDefinition = "VARCHAR(3000)")
private String description;

public Consulting(Long issuedAt, int classTime, String description) {
public Consulting(Long issuedAt, Long classTime, String description) {
this.issuedAt = issuedAt;
this.classTime = classTime;
this.description = description;
}

public static Consulting toConsulting(Long issuedAt, int classTime, String description){
public static Consulting toConsulting(Long issuedAt, Long classTime, String description){
return new Consulting(issuedAt, classTime, description);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public class ToConsultingResponse {

private Long issuedAt;

private int classTime;
private Long classTime;

private String description;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
@AllArgsConstructor
public class ConsultingSubmitRequest {
@NotNull
private int classTime;
private Long classTime;

@NotBlank
private String description;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
import java.util.UUID;

public interface ConsultingRepository extends JpaRepository<Consulting, Long> {

boolean existsByClassTime(Long id);
void deleteById(UUID id);

Consulting findById(UUID id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.gapple.weeingback.domain.consulting.service.ConsultingService;
import com.gapple.weeingback.domain.member.entity.Member;
import com.gapple.weeingback.domain.member.repository.MemberRepository;
import com.gapple.weeingback.global.exception.SameConsultingException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
Expand All @@ -34,16 +35,17 @@ public class ConsultingServiceImpl implements ConsultingService {
@Transactional
public ResponseEntity<ConsultingSubmitResponse> submitConsulting(ConsultingSubmitRequest request){
String id = SecurityContextHolder.getContext().getAuthentication().getName();

Member member = memberRepository.findMemberById(UUID.fromString(id));

// ν•΄λ‹Ή μ‹œκ°„μ΄ λ‹ˆκ°€ 이미 보낸 신청이 있으면 κ±°μ ˆν• κ±΄λ° 둜직

Consulting consulting = Consulting.toConsulting(
Instant.now().toEpochMilli(),
request.getClassTime(),
request.getDescription());

if(consultingRepository.existsByClassTime(consulting.getClassTime())){
throw new SameConsultingException();
}

member.addConsulting(consulting);

consultingRepository.save(consulting);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public class Member implements GrantedAuthority {
@Column(columnDefinition = "VARCHAR(80)", nullable = false)
private String role;

@OneToMany(fetch = FetchType.EAGER)
@OneToMany()
@JoinColumn(name = "consulting_id")
private List<Consulting> consulting;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.gapple.weeingback.domain.member.entity;

import com.gapple.weeingback.domain.boardgame.entity.Boardgame;
import com.gapple.weeingback.domain.consulting.entity.Consulting;
import com.gapple.weeingback.domain.diary.entity.Diary;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.GenericGenerator;
import org.springframework.security.core.GrantedAuthority;

import java.util.List;
import java.util.UUID;

@Builder
@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
public class NumberNameWithId {
private String info;

private String id;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.gapple.weeingback.global.exception;

public class BoardgameExistsException extends RuntimeException {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.gapple.weeingback.global.exception;

public class SameConsultingException extends RuntimeException {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.gapple.weeingback.global.exception;

public class SameCreatorException extends RuntimeException {
}
Loading