Skip to content

Commit

Permalink
Merge pull request #155 from teamterning/staging
Browse files Browse the repository at this point in the history
[ 🎉 deploy] 터닝 APP 릴리즈를 위한 API 최종 배포 v1.0.0
  • Loading branch information
JungYoonShin authored Sep 27, 2024
2 parents 437acf7 + 230522a commit 0a4e0b6
Show file tree
Hide file tree
Showing 66 changed files with 830 additions and 464 deletions.
42 changes: 42 additions & 0 deletions .github/workflows/DEV-CI.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: DEV-CI

on:
pull_request:
branches: [ "develop" ]

jobs:
build:
runs-on: ubuntu-24.04
env:
working-directory: .

# Checkout - 가상 머신에 체크아웃
steps:
- name: 체크아웃
uses: actions/checkout@v3

# JDK setting - JDK 21 설정
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21'

# Gradle caching - 빌드 시간 향상
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# Gradle build - 테스트 없이 gradle 빌드
- name: 빌드
run: |
chmod +x gradlew
./gradlew build -x test
working-directory: ${{ env.working-directory }}
shell: bash
28 changes: 15 additions & 13 deletions .github/workflows/DOCKER-CD-STAGING.yml
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
# 스테이징용 DOCKER-CD-staging.yml
name: DOCKER-CD-STAGING

on:
push:
branches: [ "staging" ]
branches: [ "staging" ]

jobs:
ci:
# Using Envioronment - Staging 환경 사용
environment: staging
# Using Environment - Staging 환경 사용
# environment: staging..
runs-on: ubuntu-24.04
env:
working-directory: .

# Checkout - 가상 머신에 체크아웃
# Checkout - 가상 머신에 체크아웃
steps:
- name: 체크아웃
uses: actions/checkout@v3

# JDK setting - JDK 21 설정
# JDK setting - JDK 21 설정
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21'
# gradle caching - 빌드 시간 향상

# Gradle caching - 빌드 시간 향상
- name: Gradle Caching
uses: actions/cache@v3
with:
Expand All @@ -34,8 +34,8 @@ jobs:
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# create .yml - yml 파일 생성
# create .yml - yml 파일 생성
- name: application.yml 생성
run: |
mkdir -p ./src/main/resources && cd $_
Expand All @@ -50,16 +50,15 @@ jobs:
touch ./application-staging.yml
echo "${{ secrets.YML_STAGING }}" > ./application-staging.yml
working-directory: ${{ env.working-directory }}
# gradle build - 테스트 없이 gradle 빌드

# Gradle build - 테스트 없이 gradle 빌드
- name: 빌드
run: |
chmod +x gradlew
./gradlew build -x test
working-directory: ${{ env.working-directory }}
shell: bash


- name: docker 로그인
uses: docker/[email protected]

Expand All @@ -80,6 +79,9 @@ jobs:
runs-on: ubuntu-24.04

steps:
- name: Debugging - Echo Host
run: echo "${{ secrets.STAGING_SERVER_IP }}"

- name: docker 컨테이너 실행
uses: appleboy/ssh-action@master
with:
Expand Down
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ dependencies {
// gson
implementation 'com.google.code.gson:gson:2.8.6'

implementation 'org.springframework.boot:spring-boot-starter-aop'

}

//QueryDSL 초기 설정
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
@Configuration
@OpenAPIDefinition(
servers = {
@Server(url = "/", description = "Default Server url")
@Server(url = "https://www.terning-official.p-e.kr", description = "Default Server url"),
@Server(url = "http://15.165.242.132", description = "Staging Server URL"),
@Server(url = "http://localhost:8080", description = "Local Development Server URL")
}
)
public class SwaggerConfig {
Expand All @@ -38,6 +40,6 @@ private Info apiInfo() {
return new Info()
.title("Terning Point Swagger") // API의 제목
.description("Terning Point Swagger ver. API 명세서") // API에 대한 설명
.version("1.0.0"); // API의 버전
.version("1.1.0"); // API의 버전
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:8080", "http://localhost:3000", "https://www.terning-official.p-e.kr/") // 허용할 출처 : 특정 도메인만 받을 수 있음
.allowedOrigins(
"http://localhost:8080",
"http://localhost:3000",
"https://www.terning-official.p-e.kr/",
"http://15.165.242.132") // 허용할 출처 : 특정 도메인만 받을 수 있음
.allowedMethods("GET", "POST", "PUT", "DELETE", "PATCH") // 허용할 HTTP method
.allowCredentials(true); // 쿠키 인증 요청 허용
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import org.terning.terningserver.dto.auth.response.SignUpResponseDto;
import org.terning.terningserver.exception.dto.SuccessResponse;
import org.terning.terningserver.service.AuthService;
import org.terning.terningserver.service.SignUpFilterService;

import static org.terning.terningserver.exception.enums.SuccessMessage.*;

Expand All @@ -27,7 +26,6 @@
public class AuthController implements AuthSwagger {

private final AuthService authService;
private final SignUpFilterService signUpFilterService;

@PostMapping("/sign-in")
public ResponseEntity<SuccessResponse<SignInResponseDto>> signIn(
Expand All @@ -50,11 +48,11 @@ public ResponseEntity<SuccessResponse<AccessTokenGetResponseDto>> reissueToken(

@PostMapping("/sign-up")
public ResponseEntity<SuccessResponse<SignUpResponseDto>> signUp(
@RequestHeader("authId") String authId,
@RequestHeader("Authorization") String authId,
@RequestBody SignUpRequestDto request
) {

SignUpResponseDto signUpResponseDto = authService.signUp(authId, request.name(), request.profileImage(), request.authType());
SignUpResponseDto signUpResponseDto = authService.signUp(authId, request);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_SIGN_UP, signUpResponseDto));
}

Expand All @@ -63,11 +61,9 @@ public ResponseEntity<SuccessResponse<SignUpFilterResponseDto>> filter(
@RequestHeader("User-Id") Long userId,
@RequestBody SignUpFilterRequestDto request
) {
// 필터 생성 및 저장
Filter newFilter = signUpFilterService.createAndSaveFilter(request);
Filter newFilter = authService.createAndSaveFilter(request);

// 사용자에게 필터 연결
signUpFilterService.connectFilterToUser(userId, newFilter.getId());
authService.connectFilterToUser(userId, newFilter.getId());

return ResponseEntity.ok(SuccessResponse.of(SUCCESS_SIGN_UP_FILTER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import org.terning.terningserver.controller.swagger.FilterSwagger;
import org.terning.terningserver.dto.filter.request.UserFilterRequestDto;
import org.terning.terningserver.dto.filter.response.UserFilterResponseDto;
import org.terning.terningserver.dto.filter.request.UpdateUserFilterRequestDto;
import org.terning.terningserver.dto.filter.response.UserFilterDetailResponseDto;
import org.terning.terningserver.exception.dto.SuccessResponse;
import org.terning.terningserver.service.FilterService;

Expand All @@ -20,8 +20,8 @@ public class FilterController implements FilterSwagger {
private final FilterService filterService;

@GetMapping("/filters")
public ResponseEntity<SuccessResponse<UserFilterResponseDto>> getUserFilter(
@AuthenticationPrincipal Long userId
public ResponseEntity<SuccessResponse<UserFilterDetailResponseDto>> getUserFilter(
@AuthenticationPrincipal long userId
) {
return ResponseEntity.ok(SuccessResponse.of(
SUCCESS_GET_USER_FILTER,
Expand All @@ -31,8 +31,9 @@ public ResponseEntity<SuccessResponse<UserFilterResponseDto>> getUserFilter(

@PutMapping("/filters")
public ResponseEntity<SuccessResponse> updateUserFilter(
@AuthenticationPrincipal Long userId,
@RequestBody UserFilterRequestDto requestDto) {
@AuthenticationPrincipal long userId,
@RequestBody UpdateUserFilterRequestDto requestDto
) {
filterService.updateUserFilter(requestDto, userId);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_UPDATE_USER_FILTER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,15 @@
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import org.terning.terningserver.controller.swagger.HomeSwagger;
import org.terning.terningserver.dto.user.response.HomeResponseDto;
import org.terning.terningserver.dto.user.response.TodayScrapResponseDto;
import org.terning.terningserver.exception.CustomException;
import org.terning.terningserver.exception.dto.ErrorResponse;
import org.terning.terningserver.dto.user.response.HomeAnnouncementsResponseDto;
import org.terning.terningserver.dto.user.response.UpcomingScrapResponseDto;
import org.terning.terningserver.exception.dto.SuccessResponse;
import org.terning.terningserver.exception.enums.SuccessMessage;
import org.terning.terningserver.service.HomeService;
import org.terning.terningserver.service.ScrapService;

import java.util.List;

import static org.terning.terningserver.exception.enums.SuccessMessage.SUCCESS_GET_ANNOUNCEMENTS;
import static org.terning.terningserver.exception.enums.SuccessMessage.SUCCESS_GET_TODAY_ANNOUNCEMENTS;
import static org.terning.terningserver.exception.enums.SuccessMessage.*;

@RestController
@RequiredArgsConstructor
Expand All @@ -28,24 +24,33 @@ public class HomeController implements HomeSwagger {
private final ScrapService scrapService;

@GetMapping("/home")
public ResponseEntity<SuccessResponse<List<HomeResponseDto>>> getAnnouncements(
public ResponseEntity<SuccessResponse<HomeAnnouncementsResponseDto>> getAnnouncements(
@AuthenticationPrincipal Long userId,
@RequestParam(value = "sortBy", required = false, defaultValue = "deadlineSoon") String sortBy,
@RequestParam("startYear") int startYear,
@RequestParam("startMonth") int startMonth
){
List<HomeResponseDto> announcements = homeService.getAnnouncements(userId, sortBy, startYear, startMonth);
HomeAnnouncementsResponseDto announcements = homeService.getAnnouncements(userId, sortBy, startYear, startMonth);

return ResponseEntity.ok(SuccessResponse.of(SUCCESS_GET_ANNOUNCEMENTS, announcements));
}

@GetMapping("/home/today")
public ResponseEntity<SuccessResponse<List<TodayScrapResponseDto>>> getTodayScraps(
@GetMapping("/home/upcoming")
public ResponseEntity<SuccessResponse<List<UpcomingScrapResponseDto>>> getUpcomingScraps(
@AuthenticationPrincipal Long userId
){

List<TodayScrapResponseDto> scrapList = scrapService.getTodayScrap(userId);
boolean hasScrapped = scrapService.hasUserScrapped(userId);
List<UpcomingScrapResponseDto.ScrapDetail> scrapList = scrapService.getUpcomingScrap(userId);

return ResponseEntity.ok(SuccessResponse.of(SUCCESS_GET_TODAY_ANNOUNCEMENTS, scrapList));
UpcomingScrapResponseDto responseDto = new UpcomingScrapResponseDto(hasScrapped, scrapList);

if(!hasScrapped){
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_GET_UPCOMING_ANNOUNCEMENTS_NO_SCRAP, responseDto));
} else if (scrapList.isEmpty()) {
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_GET_UPCOMING_ANNOUNCEMENTS_EMPTY_LIST, responseDto));
} else {
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_GET_UPCOMING_ANNOUNCEMENTS, responseDto));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.terning.terningserver.exception.dto.SuccessResponse;
import org.terning.terningserver.jwt.PrincipalHandler;
import org.terning.terningserver.service.ScrapService;
import org.terning.terningserver.util.LogExecutionTime;

import static org.terning.terningserver.exception.enums.SuccessMessage.*;

Expand All @@ -22,27 +23,27 @@ public class ScrapController implements ScrapSwagger {

@PostMapping("/scraps/{internshipAnnouncementId}")
public ResponseEntity<SuccessResponse> createScrap(
@AuthenticationPrincipal Long userId,
@PathVariable Long internshipAnnouncementId,
@AuthenticationPrincipal long userId,
@PathVariable long internshipAnnouncementId,
@RequestBody CreateScrapRequestDto request) {
scrapService.createScrap(internshipAnnouncementId, request, userId);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_CREATE_SCRAP));
}

@DeleteMapping("/scraps/{scrapId}")
@DeleteMapping("/scraps/{internshipAnnouncementId}")
public ResponseEntity<SuccessResponse> deleteScrap(
@AuthenticationPrincipal Long userId,
@PathVariable Long scrapId) {
scrapService.deleteScrap(scrapId, userId);
@AuthenticationPrincipal long userId,
@PathVariable long internshipAnnouncementId) {
scrapService.deleteScrap(internshipAnnouncementId, userId);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_DELETE_SCRAP));
}

@PatchMapping("/scraps/{scrapId}")
@PatchMapping("/scraps/{internshipAnnouncementId}")
public ResponseEntity<SuccessResponse> updateScrapColor(
@AuthenticationPrincipal Long userId,
@PathVariable Long scrapId,
@AuthenticationPrincipal long userId,
@PathVariable long internshipAnnouncementId,
@RequestBody UpdateScrapRequestDto request) {
scrapService.updateScrapColor(scrapId, request, userId);
scrapService.updateScrapColor(internshipAnnouncementId, request, userId);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_UPDATE_SCRAP));
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package org.terning.terningserver.controller;

import lombok.RequiredArgsConstructor;
import org.apache.coyote.Response;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.terning.terningserver.controller.swagger.UserSwagger;
import org.terning.terningserver.dto.user.request.ProfileUpdateRequestDto;
import org.terning.terningserver.dto.user.response.ProfileResponseDto;
import org.terning.terningserver.exception.dto.SuccessResponse;
import org.terning.terningserver.service.UserService;

import static org.terning.terningserver.exception.enums.SuccessMessage.SUCCESS_GET_PROFILE;
import static org.terning.terningserver.exception.enums.SuccessMessage.SUCCESS_UPDATE_PROFILE;

@RestController
@RequiredArgsConstructor
Expand All @@ -28,4 +28,13 @@ public ResponseEntity<SuccessResponse<ProfileResponseDto>> getProfile(
ProfileResponseDto profile = userService.getProfile(userId);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_GET_PROFILE, profile));
}

@PatchMapping("/mypage/profile")
public ResponseEntity<SuccessResponse> updateProfile(
@AuthenticationPrincipal Long userId,
@RequestBody ProfileUpdateRequestDto request
){
userService.updateProfile(userId, request);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_UPDATE_PROFILE));
}
}
Loading

0 comments on commit 0a4e0b6

Please sign in to comment.