-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #25 from TeamPINGLE/feat/14
[feat] 번개 생성 api
- Loading branch information
Showing
15 changed files
with
228 additions
and
12 deletions.
There are no files selected for viewing
11 changes: 11 additions & 0 deletions
11
src/main/java/org/pingle/pingleserver/annotation/GUserId.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
29 changes: 29 additions & 0 deletions
29
src/main/java/org/pingle/pingleserver/dto/request/MeetingRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package org.pingle.pingleserver.dto.request; | ||
|
||
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; | ||
|
||
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, | ||
@Min(2)@Max(99) | ||
Integer maxParticipants, | ||
String chatLink) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
src/main/java/org/pingle/pingleserver/interceptor/pre/GUserIdArgumentResolver.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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()); | ||
} | ||
|
||
} | ||
|
||
|
3 changes: 3 additions & 0 deletions
3
src/main/java/org/pingle/pingleserver/repository/PinRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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<Pin, Long> { | ||
boolean existsByPoint(Point point); | ||
Pin findByPoint(Point point); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
22 changes: 21 additions & 1 deletion
22
src/main/java/org/pingle/pingleserver/service/MeetingService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,32 @@ | ||
package org.pingle.pingleserver.service; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
|
||
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; | ||
|
||
@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()); | ||
|
||
} | ||
} |
29 changes: 29 additions & 0 deletions
29
src/main/java/org/pingle/pingleserver/service/PinService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,40 @@ | ||
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; | ||
|
||
@Service | ||
@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.NOT_FOUND_RESOURCE)); | ||
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); | ||
} | ||
} |
Oops, something went wrong.