-
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.
- Loading branch information
Showing
18 changed files
with
299 additions
and
15 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
## Related Issue 📌 | ||
close #<issue_num> | ||
- close #<issue_num> | ||
|
||
## Description ✔️ | ||
- | ||
|
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,20 @@ | ||
# 🌀Pingle | ||
|
||
> 가볍게 네트워킹을 시작해보세요! | ||
## 🌀 Developers | ||
|
||
| 박상준 | 박재연 | | ||
|:----------------------------------------------------------------------------------------:|:----------------------------------------------------------------------------------------:| | ||
| <img width="300" alt="image" src="https://avatars.githubusercontent.com/u/74230343?v=4"> | <img width="300" alt="image" src="https://avatars.githubusercontent.com/u/98092394?v=4"> | | ||
| [tkdwns414](https://github.com/tkdwns414) | [parkjyun](https://github.com/parkjyun) | | ||
|
||
|
||
## 🌀 Project Architecture | ||
[](https://github.com/msdio/stackticon) | ||
|
||
아키텍처 구조도 서버 2차 과제에 추가 예정 | ||
- Github Actions를 통한 CI/CD 구축 | ||
- blue-green deployment를 통한 무중단 배포 | ||
- nginx를 통한 reverse proxy 구축 | ||
- aws ec2를 통한 서버 배포 |
30 changes: 30 additions & 0 deletions
30
src/main/java/org/pingle/pingleserver/controller/MeetingController.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,30 @@ | ||
package org.pingle.pingleserver.controller; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.pingle.pingleserver.annotation.UserId; | ||
import org.pingle.pingleserver.dto.common.ApiResponse; | ||
import org.pingle.pingleserver.dto.type.SuccessMessage; | ||
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 UserMeetingService userMeetingService; | ||
|
||
@PostMapping("/{meetingId}/join") | ||
public ApiResponse<?> participateMeeting (@UserId Long userId, @PathVariable("meetingId") Long meetingId) { | ||
Long userMeetingId = userMeetingService.participateMeeting(userId, meetingId); | ||
return ApiResponse.success(SuccessMessage.CREATED); | ||
} | ||
|
||
@DeleteMapping("/{meetingId}/cancel") | ||
public ApiResponse<?> cancelMeeting (@UserId Long userId, @PathVariable("meetingId") Long meetingId) { | ||
Long cancelledId = userMeetingService.cancelMeeting(userId, meetingId); | ||
return ApiResponse.success(SuccessMessage.OK); | ||
} | ||
} |
26 changes: 26 additions & 0 deletions
26
src/main/java/org/pingle/pingleserver/controller/OpenApiController.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,26 @@ | ||
package org.pingle.pingleserver.controller; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.pingle.pingleserver.dto.common.ApiResponse; | ||
import org.pingle.pingleserver.dto.reponse.LocationResponse; | ||
import org.pingle.pingleserver.dto.type.SuccessMessage; | ||
import org.pingle.pingleserver.utils.naversearchutil.NaverUtil; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RequestParam; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
import java.util.List; | ||
|
||
@RestController | ||
@RequestMapping("/v1") | ||
@RequiredArgsConstructor | ||
public class OpenApiController { | ||
|
||
private final NaverUtil naverUtil; | ||
|
||
@GetMapping("/location") | ||
public ApiResponse<List<LocationResponse>> getLocationInfo(@RequestParam(name = "search") String location) { | ||
return ApiResponse.success(SuccessMessage.OK, naverUtil.getLocationInfo(location)); | ||
} | ||
} |
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
6 changes: 6 additions & 0 deletions
6
src/main/java/org/pingle/pingleserver/dto/reponse/LocationResponse.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,6 @@ | ||
package org.pingle.pingleserver.dto.reponse; | ||
|
||
public record LocationResponse (double x, double y, String location, String address, String roadAddress) { | ||
|
||
} | ||
|
24 changes: 24 additions & 0 deletions
24
src/main/java/org/pingle/pingleserver/dto/reponse/NaverLocationResponse.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,24 @@ | ||
package org.pingle.pingleserver.dto.reponse; | ||
|
||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
import java.util.List; | ||
|
||
public record NaverLocationResponse(String lastBuildDate, int total, int start, int display, List<SearchLocationItem> items) { | ||
|
||
@Getter | ||
@NoArgsConstructor | ||
public static class SearchLocationItem{ | ||
private String title; | ||
private String link; | ||
private String category; | ||
private String description; | ||
private String telephone; | ||
private String address; | ||
private String roadAddress; | ||
private int mapx; | ||
private int mapy; | ||
|
||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
src/main/java/org/pingle/pingleserver/dto/request/NaverLocationRequest.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,28 @@ | ||
package org.pingle.pingleserver.dto.request; | ||
|
||
import org.springframework.util.LinkedMultiValueMap; | ||
import org.springframework.util.MultiValueMap; | ||
|
||
public record NaverLocationRequest(String query, int display, int start, String sort) { | ||
|
||
private static final int DISPLAY = 5; | ||
|
||
private static final int START = 1; | ||
|
||
private static final String SORT = "random"; | ||
|
||
public static NaverLocationRequest of(String query) { | ||
return new NaverLocationRequest(query, DISPLAY, START, SORT); | ||
} | ||
|
||
public MultiValueMap<String, String> toMap() { | ||
var map = new LinkedMultiValueMap<String, String>(); | ||
|
||
map.add("query", query); | ||
map.add("display", String.valueOf(DISPLAY)); | ||
map.add("start", String.valueOf(START)); | ||
map.add("sort", SORT); | ||
|
||
return map; | ||
} | ||
} |
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
3 changes: 2 additions & 1 deletion
3
src/main/java/org/pingle/pingleserver/oauth/dto/KakaoAccount.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,8 +1,9 @@ | ||
package org.pingle.pingleserver.oauth.dto; | ||
|
||
import com.fasterxml.jackson.annotation.JsonProperty; | ||
import com.fasterxml.jackson.databind.PropertyNamingStrategies; | ||
import com.fasterxml.jackson.databind.annotation.JsonNaming; | ||
|
||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) | ||
public record KakaoAccount (KakaoUserProfile kakaoUserProfile){ | ||
public record KakaoAccount (@JsonProperty("profile") KakaoUserProfile kakaoUserProfile, String email){ | ||
} |
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
7 changes: 7 additions & 0 deletions
7
src/main/java/org/pingle/pingleserver/repository/UserMeetingRepository.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,14 @@ | ||
package org.pingle.pingleserver.repository; | ||
|
||
import org.pingle.pingleserver.domain.Meeting; | ||
import org.pingle.pingleserver.domain.UserMeeting; | ||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
public interface UserMeetingRepository extends JpaRepository<UserMeeting, Long> { | ||
List<UserMeeting> findAllByMeeting(Meeting meeting); | ||
boolean existsByUserIdAndMeeting(Long userId, Meeting meeting); | ||
Optional<UserMeeting> findByUserIdAndMeetingId(Long userId, Long MeetingId); | ||
} |
1 change: 1 addition & 0 deletions
1
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
43 changes: 43 additions & 0 deletions
43
src/main/java/org/pingle/pingleserver/service/UserMeetingService.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,54 @@ | ||
package org.pingle.pingleserver.service; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.pingle.pingleserver.domain.Meeting; | ||
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.MeetingRepository; | ||
import org.pingle.pingleserver.repository.UserMeetingRepository; | ||
import org.pingle.pingleserver.repository.UserRepository; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
|
||
@Service | ||
@RequiredArgsConstructor | ||
@Transactional(readOnly = true) | ||
public class UserMeetingService { | ||
|
||
private final UserMeetingRepository userMeetingRepository; | ||
private final MeetingRepository meetingRepository; | ||
private final UserRepository userRepository; | ||
|
||
@Transactional | ||
public Long participateMeeting(Long userId, Long meetingId) { | ||
Meeting meeting = meetingRepository.findById(meetingId).orElseThrow(() -> new BusinessException(ErrorMessage.NOT_FOUND_RESOURCE)); | ||
if(isParticipating(userId, meeting)) | ||
throw new BusinessException(ErrorMessage.RESOURCE_CONFLICT); | ||
if((getCurParticipants(meeting)) >= meeting.getMaxParticipants()) | ||
throw new BusinessException(ErrorMessage.RESOURCE_CONFLICT); | ||
User user = userRepository.findById(userId).orElseThrow(() ->new BusinessException(ErrorMessage.NO_SUCH_USER)); | ||
return userMeetingRepository.save(new UserMeeting(user, meeting, MRole.PARTICIPANTS)).getId(); | ||
|
||
} | ||
|
||
@Transactional | ||
public Long cancelMeeting(Long userId, Long meetingId) { | ||
UserMeeting userMeeting = userMeetingRepository.findByUserIdAndMeetingId(userId, meetingId) | ||
.orElseThrow(() -> new BusinessException(ErrorMessage.NOT_FOUND_RESOURCE)); | ||
userMeetingRepository.delete(userMeeting); | ||
return userMeeting.getId(); | ||
} | ||
|
||
private int getCurParticipants(Meeting meeting) { | ||
return userMeetingRepository.findAllByMeeting(meeting).size(); | ||
} | ||
|
||
private boolean isParticipating(Long userId, Meeting meeting) { | ||
return userMeetingRepository.existsByUserIdAndMeeting(userId, meeting); | ||
} | ||
|
||
} |
Oops, something went wrong.