From 30d1eafaa32ba6393e99390e999febd534cdcd16 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 7 Jan 2024 23:41:32 +0900 Subject: [PATCH 01/11] [feat] add error message --- .../java/org/pingle/pingleserver/dto/type/ErrorMessage.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/pingle/pingleserver/dto/type/ErrorMessage.java b/src/main/java/org/pingle/pingleserver/dto/type/ErrorMessage.java index 479c9ee..3c24e18 100644 --- a/src/main/java/org/pingle/pingleserver/dto/type/ErrorMessage.java +++ b/src/main/java/org/pingle/pingleserver/dto/type/ErrorMessage.java @@ -23,13 +23,18 @@ public enum ErrorMessage { INVALID_PROVIDER_ERROR(HttpStatus.BAD_REQUEST, "유효하지 않은 소셜 플랫폼입니다."), BAD_REQUEST(HttpStatus.BAD_REQUEST, "잘못된 요청입니다."), MISSING_REQUIRED_HEADER(HttpStatus.BAD_REQUEST, "필수 헤더가 누락되었습니다."), + NO_SUCH_PIN(HttpStatus.BAD_REQUEST, "해당하는 핀이 없습니다."), + NO_SUCH_MEETING(HttpStatus.BAD_REQUEST, "해당하는 미팅이 없습니다." ), // Authorization Error 401 TOKEN_MALFORMED_ERROR(HttpStatus.UNAUTHORIZED, "유효하지 않은 토큰입니다."), UNAUTHORIZED_ERROR(HttpStatus.UNAUTHORIZED, "토큰이 제공되지 않았거나 유효하지 않습니다."), NO_SUCH_USER(HttpStatus.UNAUTHORIZED, "존재하지 않는 사용자입니다."), + // Permission Denied 403 + GROUP_PERMISSION_DENIED(HttpStatus.FORBIDDEN, "해당 사용자는 그룹에 속해 있지 않습니다."), // Not Found Error 404 USER_NOT_FOUND_ERROR(HttpStatus.NOT_FOUND, "사용자를 찾을 수 없습니다."), NOT_FOUND_END_POINT(HttpStatus.NOT_FOUND, "존재하지 않는 API입니다."), + RESOURCE_NOT_FOUND(HttpStatus.NOT_FOUND, "리소스가 없습니다"), // Method Not Allowed Error 405 METHOD_NOT_ALLOWED(HttpStatus.METHOD_NOT_ALLOWED, "지원하지 않는 HTTP 메소드입니다."), // OpenApi Server Error 500 From 95c2a04f3d6b7c200f0dda056429faadd27bf637 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 7 Jan 2024 23:43:48 +0900 Subject: [PATCH 02/11] [fix] edit entity for create meeting api --- .../java/org/pingle/pingleserver/domain/Meeting.java | 12 ++++++++++++ .../java/org/pingle/pingleserver/domain/Pin.java | 9 +++++++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/org/pingle/pingleserver/domain/Meeting.java b/src/main/java/org/pingle/pingleserver/domain/Meeting.java index bff4365..9daa566 100644 --- a/src/main/java/org/pingle/pingleserver/domain/Meeting.java +++ b/src/main/java/org/pingle/pingleserver/domain/Meeting.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; import lombok.AccessLevel; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.pingle.pingleserver.domain.enums.MCategory; @@ -32,4 +33,15 @@ public class Meeting extends BaseTimeEntity { private LocalDateTime startAt; private LocalDateTime endAt; + + @Builder + public Meeting(Pin pin, MCategory category, String name, Integer maxParticipants, String chatLink, LocalDateTime startAt, LocalDateTime endAt) { + this.pin = pin; + this.category = category; + this.name = name; + this.maxParticipants = maxParticipants; + this.chatLink = chatLink; + this.startAt = startAt; + this.endAt = endAt; + } } diff --git a/src/main/java/org/pingle/pingleserver/domain/Pin.java b/src/main/java/org/pingle/pingleserver/domain/Pin.java index 44e1078..2db46c1 100644 --- a/src/main/java/org/pingle/pingleserver/domain/Pin.java +++ b/src/main/java/org/pingle/pingleserver/domain/Pin.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; import lombok.AccessLevel; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -24,4 +25,12 @@ public class Pin extends BaseTimeEntity { private Address address; private String name; + + @Builder + public Pin(Team team, Point point, Address address, String name) { + this.team = team; + this.point = point; + this.address = address; + this.name = name; + } } From 87561ff2fc6c81bcc0d825d32fa1e9b8aaa8356a Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 7 Jan 2024 23:44:43 +0900 Subject: [PATCH 03/11] [feat] add files for annotation GUserId --- .../pingleserver/annotation/GUserId.java | 11 ++++ .../pingleserver/config/WebMVCConfig.java | 4 ++ .../pre/GUserIdArgumentResolver.java | 54 +++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 src/main/java/org/pingle/pingleserver/annotation/GUserId.java create mode 100644 src/main/java/org/pingle/pingleserver/interceptor/pre/GUserIdArgumentResolver.java diff --git a/src/main/java/org/pingle/pingleserver/annotation/GUserId.java b/src/main/java/org/pingle/pingleserver/annotation/GUserId.java new file mode 100644 index 0000000..8a550b9 --- /dev/null +++ b/src/main/java/org/pingle/pingleserver/annotation/GUserId.java @@ -0,0 +1,11 @@ +package org.pingle.pingleserver.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +public @interface GUserId { +} diff --git a/src/main/java/org/pingle/pingleserver/config/WebMVCConfig.java b/src/main/java/org/pingle/pingleserver/config/WebMVCConfig.java index 345f5ae..4aa1258 100644 --- a/src/main/java/org/pingle/pingleserver/config/WebMVCConfig.java +++ b/src/main/java/org/pingle/pingleserver/config/WebMVCConfig.java @@ -1,6 +1,7 @@ package org.pingle.pingleserver.config; import lombok.RequiredArgsConstructor; +import org.pingle.pingleserver.interceptor.pre.GUserIdArgumentResolver; import org.pingle.pingleserver.interceptor.pre.UserIdArgumentResolver; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; @@ -15,9 +16,12 @@ public class WebMVCConfig implements WebMvcConfigurer { private final UserIdArgumentResolver userIdArgumentResolver; + private final GUserIdArgumentResolver gUserIdArgumentResolver; + @Override public void addArgumentResolvers(List resolvers) { WebMvcConfigurer.super.addArgumentResolvers(resolvers); resolvers.add(this.userIdArgumentResolver); + resolvers.add(this.gUserIdArgumentResolver); } } \ No newline at end of file diff --git a/src/main/java/org/pingle/pingleserver/interceptor/pre/GUserIdArgumentResolver.java b/src/main/java/org/pingle/pingleserver/interceptor/pre/GUserIdArgumentResolver.java new file mode 100644 index 0000000..cbd598f --- /dev/null +++ b/src/main/java/org/pingle/pingleserver/interceptor/pre/GUserIdArgumentResolver.java @@ -0,0 +1,54 @@ +package org.pingle.pingleserver.interceptor.pre; + +import lombok.RequiredArgsConstructor; +import org.pingle.pingleserver.annotation.GUserId; +import org.pingle.pingleserver.dto.type.ErrorMessage; +import org.pingle.pingleserver.exception.BusinessException; +import org.pingle.pingleserver.service.UserMeetingService; +import org.springframework.core.MethodParameter; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +import java.security.Principal; + +@Component +@RequiredArgsConstructor +public class GUserIdArgumentResolver implements HandlerMethodArgumentResolver { + + private final UserMeetingService userMeetingService; + + @Override + public boolean supportsParameter(MethodParameter parameter) { + return parameter.getParameterType().equals(Long.class) + && parameter.hasParameterAnnotation(GUserId.class); + } + + @Override + public Object resolveArgument(MethodParameter parameter, + ModelAndViewContainer mavContainer, + NativeWebRequest webRequest, + WebDataBinderFactory binderFactory) { + final Principal principal = webRequest.getUserPrincipal(); + if (principal == null) { + throw new BusinessException(ErrorMessage.NO_SUCH_USER); + } + + if (webRequest.getHeader("Group-Id") == null) + throw new BusinessException(ErrorMessage.INVALID_HEADER_ERROR); + Long groupId = Long.valueOf(webRequest.getHeader("Group-Id")); + + userMeetingService.verifyUser(getIdFromPrincipal(principal), groupId); + + return Long.valueOf(principal.getName()); + } + + private Long getIdFromPrincipal (Principal principal) { + return Long.valueOf(principal.getName()); + } + +} + + From a04631d74d30e02cd5d35020fd1dbd0fb6e9bafd Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 7 Jan 2024 23:46:35 +0900 Subject: [PATCH 04/11] [feat] add methods in repository for create meeting api --- .../org/pingle/pingleserver/repository/PinRepository.java | 3 +++ .../pingleserver/repository/UserMeetingRepository.java | 2 ++ .../pingle/pingleserver/repository/UserTeamRepository.java | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/src/main/java/org/pingle/pingleserver/repository/PinRepository.java b/src/main/java/org/pingle/pingleserver/repository/PinRepository.java index 6a5e4a3..cc9c54d 100644 --- a/src/main/java/org/pingle/pingleserver/repository/PinRepository.java +++ b/src/main/java/org/pingle/pingleserver/repository/PinRepository.java @@ -1,7 +1,10 @@ package org.pingle.pingleserver.repository; import org.pingle.pingleserver.domain.Pin; +import org.pingle.pingleserver.domain.Point; import org.springframework.data.jpa.repository.JpaRepository; public interface PinRepository extends JpaRepository { + boolean existsByPoint(Point point); + Pin findByPoint(Point point); } diff --git a/src/main/java/org/pingle/pingleserver/repository/UserMeetingRepository.java b/src/main/java/org/pingle/pingleserver/repository/UserMeetingRepository.java index 2d3b581..83134d7 100644 --- a/src/main/java/org/pingle/pingleserver/repository/UserMeetingRepository.java +++ b/src/main/java/org/pingle/pingleserver/repository/UserMeetingRepository.java @@ -3,5 +3,7 @@ import org.pingle.pingleserver.domain.UserMeeting; import org.springframework.data.jpa.repository.JpaRepository; + + public interface UserMeetingRepository extends JpaRepository { } diff --git a/src/main/java/org/pingle/pingleserver/repository/UserTeamRepository.java b/src/main/java/org/pingle/pingleserver/repository/UserTeamRepository.java index 5ab1096..ea6311a 100644 --- a/src/main/java/org/pingle/pingleserver/repository/UserTeamRepository.java +++ b/src/main/java/org/pingle/pingleserver/repository/UserTeamRepository.java @@ -1,7 +1,13 @@ package org.pingle.pingleserver.repository; +import org.pingle.pingleserver.domain.Team; +import org.pingle.pingleserver.domain.User; import org.pingle.pingleserver.domain.UserTeam; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface UserTeamRepository extends JpaRepository { + + Optional findByUserAndTeam(User user, Team team); } From fa8e44750c2e9034357535245725532818ff934f Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 7 Jan 2024 23:48:02 +0900 Subject: [PATCH 05/11] [feat] add methods in service for create meeting api --- .../pingleserver/service/MeetingService.java | 24 ++++++++++++++ .../pingleserver/service/PinService.java | 29 +++++++++++++++++ .../service/UserMeetingService.java | 32 +++++++++++++++++++ 3 files changed, 85 insertions(+) diff --git a/src/main/java/org/pingle/pingleserver/service/MeetingService.java b/src/main/java/org/pingle/pingleserver/service/MeetingService.java index 053f8a6..51fc58f 100644 --- a/src/main/java/org/pingle/pingleserver/service/MeetingService.java +++ b/src/main/java/org/pingle/pingleserver/service/MeetingService.java @@ -1,11 +1,35 @@ package org.pingle.pingleserver.service; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.pingle.pingleserver.domain.Meeting; +import org.pingle.pingleserver.domain.Pin; +import org.pingle.pingleserver.dto.request.MeetingRequest; +import org.pingle.pingleserver.repository.MeetingRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +@Slf4j @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class MeetingService { + + + private final MeetingRepository meetingRepository; + + @Transactional + public Meeting createMeeting(MeetingRequest request, Pin pin) { + return meetingRepository.save( + Meeting.builder() + .pin(pin) + .category(request.category()) + .name(request.name()) + .maxParticipants(request.maxParticipants()) + .chatLink(request.chatLink()) + .startAt(request.startAt()) + .endAt(request.endAt()) + .build()); + + } } diff --git a/src/main/java/org/pingle/pingleserver/service/PinService.java b/src/main/java/org/pingle/pingleserver/service/PinService.java index 6994d19..3000ce2 100644 --- a/src/main/java/org/pingle/pingleserver/service/PinService.java +++ b/src/main/java/org/pingle/pingleserver/service/PinService.java @@ -1,6 +1,15 @@ package org.pingle.pingleserver.service; import lombok.RequiredArgsConstructor; +import org.pingle.pingleserver.domain.Address; +import org.pingle.pingleserver.domain.Pin; +import org.pingle.pingleserver.domain.Point; +import org.pingle.pingleserver.domain.Team; +import org.pingle.pingleserver.dto.request.MeetingRequest; +import org.pingle.pingleserver.dto.type.ErrorMessage; +import org.pingle.pingleserver.exception.BusinessException; +import org.pingle.pingleserver.repository.PinRepository; +import org.pingle.pingleserver.repository.TeamRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -8,4 +17,24 @@ @RequiredArgsConstructor @Transactional(readOnly = true) public class PinService { + private final PinRepository pinRepository; + private final TeamRepository teamRepository; + + @Transactional + public Pin verifyAndReturnPin(MeetingRequest request, Long groupId) { + Team team = teamRepository.findById(groupId).orElseThrow(() -> new BusinessException(ErrorMessage.RESOURCE_NOT_FOUND)); + if(!exist(new Point(request.x(), request.y()))) { + return pinRepository.save(Pin.builder() + .address(new Address(request.roadAddress(), request.address())) + .name(request.location()) + .point(new Point(request.x(), request.y())) + .team(team) + .build()); + } + return pinRepository.findByPoint(new Point(request.x(), request.y())); + } + + private boolean exist(Point point) { + return pinRepository.existsByPoint(point); + } } diff --git a/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java b/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java index 1b9e92f..8222a08 100644 --- a/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java +++ b/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java @@ -1,6 +1,14 @@ package org.pingle.pingleserver.service; import lombok.RequiredArgsConstructor; +import org.pingle.pingleserver.domain.Meeting; +import org.pingle.pingleserver.domain.Team; +import org.pingle.pingleserver.domain.User; +import org.pingle.pingleserver.domain.UserMeeting; +import org.pingle.pingleserver.domain.enums.MRole; +import org.pingle.pingleserver.dto.type.ErrorMessage; +import org.pingle.pingleserver.exception.BusinessException; +import org.pingle.pingleserver.repository.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -8,4 +16,28 @@ @RequiredArgsConstructor @Transactional(readOnly = true) public class UserMeetingService { + private final UserRepository userRepository; + private final TeamRepository teamRepository; + private final UserMeetingRepository userMeetingRepository; + private final UserTeamRepository userTeamRepository; + + @Transactional + public Long addOwnerToMeeting(Long userId, Meeting meeting) { + User user = userRepository.findById(userId).orElseThrow(() -> new BusinessException(ErrorMessage.NO_SUCH_USER)); + return userMeetingRepository.save( + UserMeeting.builder() + .user(user) + .meeting(meeting) + .meetingRole(MRole.OWNER) + .build()).getId(); + } + + //유저가 그룹에 있는지 + public void verifyUser(Long userId, Long groupId) { + User user = userRepository.findById(userId).orElseThrow(() -> new BusinessException(ErrorMessage.NO_SUCH_USER)); + Team team = teamRepository.findById(groupId).orElseThrow(() -> new BusinessException(ErrorMessage.RESOURCE_NOT_FOUND)); + userTeamRepository.findByUserAndTeam(user, team).orElseThrow(() -> new BusinessException(ErrorMessage.GROUP_PERMISSION_DENIED)); + + + } } From c7f3ee010126c859fca4c3fce9351201489c92f4 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 7 Jan 2024 23:48:40 +0900 Subject: [PATCH 06/11] [feat] create create meeting api --- .../controller/MeetingController.java | 37 +++++++++++++++++++ .../dto/request/MeetingRequest.java | 28 ++++++++++++++ .../pingleserver/dto/type/SuccessMessage.java | 3 +- 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/pingle/pingleserver/controller/MeetingController.java create mode 100644 src/main/java/org/pingle/pingleserver/dto/request/MeetingRequest.java diff --git a/src/main/java/org/pingle/pingleserver/controller/MeetingController.java b/src/main/java/org/pingle/pingleserver/controller/MeetingController.java new file mode 100644 index 0000000..da2236d --- /dev/null +++ b/src/main/java/org/pingle/pingleserver/controller/MeetingController.java @@ -0,0 +1,37 @@ +package org.pingle.pingleserver.controller; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.pingle.pingleserver.annotation.GUserId; +import org.pingle.pingleserver.domain.Meeting; +import org.pingle.pingleserver.domain.Pin; +import org.pingle.pingleserver.dto.common.ApiResponse; +import org.pingle.pingleserver.dto.request.MeetingRequest; +import org.pingle.pingleserver.dto.type.SuccessMessage; +import org.pingle.pingleserver.service.MeetingService; +import org.pingle.pingleserver.service.PinService; +import org.pingle.pingleserver.service.UserMeetingService; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/v1/meetings") +@RequiredArgsConstructor +public class MeetingController { + + private static final String GROUP_ID = "Group-Id"; + private final MeetingService meetingService; + private final UserMeetingService userMeetingService; + private final PinService pinService; + + + @PostMapping + public ApiResponse createMeeting(@Valid @RequestBody MeetingRequest request, @GUserId Long userId, + @RequestHeader(GROUP_ID) Long groupId) { + Pin pin = pinService.verifyAndReturnPin(request, groupId);//핀 없으면 핀 생성 후 반환, 있다면 핀 생성 + Meeting meeting = meetingService.createMeeting(request, pin);//번개 생성 + Long userMeetingId = userMeetingService.addOwnerToMeeting(userId, meeting); + + return ApiResponse.success(SuccessMessage.CREATED); + } + +} diff --git a/src/main/java/org/pingle/pingleserver/dto/request/MeetingRequest.java b/src/main/java/org/pingle/pingleserver/dto/request/MeetingRequest.java new file mode 100644 index 0000000..35db2d9 --- /dev/null +++ b/src/main/java/org/pingle/pingleserver/dto/request/MeetingRequest.java @@ -0,0 +1,28 @@ +package org.pingle.pingleserver.dto.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.NotNull; +import org.pingle.pingleserver.domain.enums.MCategory; + +import java.time.LocalDateTime; + +public record MeetingRequest(MCategory category, + @NotNull + String name, + @NotNull + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime startAt, + @NotNull + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime endAt, + @NotNull + Double x, + @NotNull + Double y, + String address, + String roadAddress, + @NotNull + String location, + @Max(99) + Integer maxParticipants, + String chatLink) { +} diff --git a/src/main/java/org/pingle/pingleserver/dto/type/SuccessMessage.java b/src/main/java/org/pingle/pingleserver/dto/type/SuccessMessage.java index 995b58b..90e2db5 100644 --- a/src/main/java/org/pingle/pingleserver/dto/type/SuccessMessage.java +++ b/src/main/java/org/pingle/pingleserver/dto/type/SuccessMessage.java @@ -8,7 +8,8 @@ @Getter @AllArgsConstructor(access = AccessLevel.PRIVATE) public enum SuccessMessage { - OK(HttpStatus.OK, "OK"); + OK(HttpStatus.OK, "OK"), + CREATED(HttpStatus.CREATED, "CREATED"); private final HttpStatus status; private final String message; From da5162978afc9d099ae1c333be86d60962806122 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Sun, 7 Jan 2024 23:49:23 +0900 Subject: [PATCH 07/11] [feat] add builder in UserMeeting.java --- .../java/org/pingle/pingleserver/domain/UserMeeting.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/pingle/pingleserver/domain/UserMeeting.java b/src/main/java/org/pingle/pingleserver/domain/UserMeeting.java index ff95742..22b8fa3 100644 --- a/src/main/java/org/pingle/pingleserver/domain/UserMeeting.java +++ b/src/main/java/org/pingle/pingleserver/domain/UserMeeting.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; import lombok.AccessLevel; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.pingle.pingleserver.domain.enums.MRole; @@ -26,5 +27,10 @@ public class UserMeeting extends BaseTimeEntity { @Enumerated(EnumType.STRING) private MRole meetingRole; - + @Builder + public UserMeeting(User user, Meeting meeting, MRole meetingRole) { + this.user = user; + this.meeting = meeting; + this.meetingRole = meetingRole; + } } From 28e0eba7ef605f1038c2df5eb47c00cdf1d7ffb3 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Tue, 9 Jan 2024 15:20:43 +0900 Subject: [PATCH 08/11] [fix] apply code review --- .../org/pingle/pingleserver/dto/request/MeetingRequest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/pingle/pingleserver/dto/request/MeetingRequest.java b/src/main/java/org/pingle/pingleserver/dto/request/MeetingRequest.java index 35db2d9..6e307d1 100644 --- a/src/main/java/org/pingle/pingleserver/dto/request/MeetingRequest.java +++ b/src/main/java/org/pingle/pingleserver/dto/request/MeetingRequest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import org.pingle.pingleserver.domain.enums.MCategory; @@ -22,7 +23,7 @@ public record MeetingRequest(MCategory category, String roadAddress, @NotNull String location, - @Max(99) + @Min(2)@Max(99) Integer maxParticipants, String chatLink) { } From 8c275759df3f43b1160ae399c130a0584832473c Mon Sep 17 00:00:00 2001 From: Sangjune park <74230343+tkdwns414@users.noreply.github.com> Date: Tue, 9 Jan 2024 15:44:42 +0900 Subject: [PATCH 09/11] Update UserMeetingService.java --- .../org/pingle/pingleserver/service/UserMeetingService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java b/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java index ccbfb4e..fba944e 100644 --- a/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java +++ b/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java @@ -36,7 +36,7 @@ public Long addOwnerToMeeting(Long userId, Meeting meeting) { //유저가 그룹에 있는지 public void verifyUser(Long userId, Long groupId) { User user = userRepository.findById(userId).orElseThrow(() -> new BusinessException(ErrorMessage.NO_SUCH_USER)); - Team team = teamRepository.findById(groupId).orElseThrow(() -> new BusinessException(ErrorMessage.RESOURCE_NOT_FOUND)); + Team team = teamRepository.findById(groupId).orElseThrow(() -> new BusinessException(ErrorMessage.NOT_FOUND_RESOURCE)); userTeamRepository.findByUserAndTeam(user, team).orElseThrow(() -> new BusinessException(ErrorMessage.GROUP_PERMISSION_DENIED)); } From 95644aa9ef56743cd61da583ff7aefc8ff29899d Mon Sep 17 00:00:00 2001 From: Sangjune park <74230343+tkdwns414@users.noreply.github.com> Date: Tue, 9 Jan 2024 15:46:23 +0900 Subject: [PATCH 10/11] Update PinService.java --- src/main/java/org/pingle/pingleserver/service/PinService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/pingle/pingleserver/service/PinService.java b/src/main/java/org/pingle/pingleserver/service/PinService.java index 3000ce2..21ccdcd 100644 --- a/src/main/java/org/pingle/pingleserver/service/PinService.java +++ b/src/main/java/org/pingle/pingleserver/service/PinService.java @@ -22,7 +22,7 @@ public class PinService { @Transactional public Pin verifyAndReturnPin(MeetingRequest request, Long groupId) { - Team team = teamRepository.findById(groupId).orElseThrow(() -> new BusinessException(ErrorMessage.RESOURCE_NOT_FOUND)); + Team team = teamRepository.findById(groupId).orElseThrow(() -> new BusinessException(ErrorMessage.NOT_FOUND_RESOURCE)); if(!exist(new Point(request.x(), request.y()))) { return pinRepository.save(Pin.builder() .address(new Address(request.roadAddress(), request.address())) From d86a1a015d777e4dfe9f23cf1d94d521677814f4 Mon Sep 17 00:00:00 2001 From: tkdwns414 Date: Tue, 9 Jan 2024 15:53:49 +0900 Subject: [PATCH 11/11] [fix] add MeetingRepository to fix code conflict mistake --- .../java/org/pingle/pingleserver/service/UserMeetingService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java b/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java index fba944e..d336bc3 100644 --- a/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java +++ b/src/main/java/org/pingle/pingleserver/service/UserMeetingService.java @@ -21,6 +21,7 @@ public class UserMeetingService { private final TeamRepository teamRepository; private final UserMeetingRepository userMeetingRepository; private final UserTeamRepository userTeamRepository; + private final MeetingRepository meetingRepository; @Transactional public Long addOwnerToMeeting(Long userId, Meeting meeting) {