Skip to content

Commit

Permalink
Prod 변경 사항 배포
Browse files Browse the repository at this point in the history
PROD - 변경사항 배포
  • Loading branch information
imenuuu committed Oct 31, 2023
2 parents cd75aee + 8b65f6f commit 6691417
Show file tree
Hide file tree
Showing 200 changed files with 5,607 additions and 1,328 deletions.
15 changes: 10 additions & 5 deletions .github/workflows/dev_api_ci_cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ name: dev MATCH API Server CI/CD
on:
push:
branches: [dev]
#tags:
# - Dev-Api-v*.*.*
pull_request:
branches: [dev]
types: [closed]
workflow_dispatch: # 수동 실행 옵션 (생략)

jobs:
Expand Down Expand Up @@ -60,14 +61,18 @@ jobs:
portone.secret : ${{ secrets.PORTONE_SECRET }}
portone.billmid: ${{ secrets.DEV_PORTONE_BILL_MID}}


- name: Set Environment Domain - Domain DEV Yml
uses: microsoft/variable-substitution@v1
with:
files: ./Match-Domain/src/main/resources/application-domain-dev.yml
env:
spring.datasource.url: ${{ secrets.DB_URL_HOST }}
spring.datasource.username: ${{ secrets.AWS_DB_USER_NAME }}
spring.datasource.password: ${{ secrets.AWS_DB_PASSWORD }}
spring.datasource.master.hikari.jdbc-url: ${{ secrets.DB_URL_HOST }}
spring.datasource.master.hikari.username: ${{ secrets.AWS_DB_USER_NAME }}
spring.datasource.master.hikari.password: ${{ secrets.AWS_DB_PASSWORD }}
spring.datasource.slave.hikari.jdbc-url: ${{ secrets.DEV_SLAVE_URL_HOST }}
spring.datasource.slave.hikari.username: ${{ secrets.AWS_DB_USER_NAME }}
spring.datasource.slave.hikari.password: ${{ secrets.AWS_DB_PASSWORD }}
spring.redis.host : ${{ secrets.REDIS_DEV_HOST }}

- name: create-fcm-json
Expand Down
14 changes: 9 additions & 5 deletions .github/workflows/prod_api_ci_cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@ on:
push:
tags:
- Api-Release-v*.*.*
#tags:
# - Dev-Api-v*.*.*
workflow_dispatch: # 수동 실행 옵션 (생략)

jobs:
build:
runs-on: ubuntu-latest # action 스크립트가 작동될 OS

outputs:
version: ${{ steps.get_version.outputs.BRANCH_NAME }}

steps: # 작업 단계
- name: Checkout source code # 단계별 이름, 구분자로 소스를 가져옴
uses: actions/checkout@v2
Expand Down Expand Up @@ -70,9 +71,12 @@ jobs:
with:
files: ./Match-Domain/src/main/resources/application-domain-prod.yml
env:
spring.datasource.url: ${{ secrets.PROD_DB_URL_HOST }}
spring.datasource.username: ${{ secrets.AWS_DB_USER_NAME }}
spring.datasource.password: ${{ secrets.AWS_DB_PASSWORD }}
spring.datasource.master.hikari.jdbc-url: ${{ secrets.PROD_DB_URL_HOST }}
spring.datasource.master.hikari.username: ${{ secrets.AWS_DB_USER_NAME }}
spring.datasource.master.hikari.password: ${{ secrets.AWS_DB_PASSWORD }}
spring.datasource.slave.hikari.jdbc-url: ${{ secrets.PROD_SLAVE_URL_HOST }}
spring.datasource.slave.hikari.username: ${{ secrets.AWS_DB_USER_NAME }}
spring.datasource.slave.hikari.password: ${{ secrets.AWS_DB_PASSWORD }}
spring.redis.host : ${{ secrets.REDIS_PROD_HOST }}

- name: create-fcm-json
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.example.matchapi.admin.banner.controller;

import com.example.matchapi.admin.banner.service.AdminBannerService;
import com.example.matchapi.banner.dto.BannerReq;
import com.example.matchapi.banner.dto.BannerRes;
import com.example.matchcommon.reponse.CommonResponse;
import com.example.matchdomain.banner.enums.BannerType;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/admin/banners")
@Tag(name = "ADMIN-08-Banner💳 관리자 배너 관리 API")
public class AdminBannerController {
private final AdminBannerService adminBannerService;
@PostMapping("")
@Operation(summary = "ADMIN-08-01 배너 업로드")
public CommonResponse<List<BannerRes.BannerList>> uploadBanner(
@RequestParam BannerType bannerType,
@RequestPart MultipartFile bannerImage,
@RequestPart BannerReq.BannerUpload bannerUploadDto
){
System.out.println(bannerUploadDto.getContentsUrl());
return CommonResponse.onSuccess(adminBannerService.uploadBanner(bannerType, bannerImage, bannerUploadDto));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.example.matchapi.admin.banner.service;

import com.example.matchapi.banner.convertor.BannerConvertor;
import com.example.matchapi.banner.dto.BannerReq;
import com.example.matchapi.banner.dto.BannerRes;
import com.example.matchdomain.banner.adaptor.BannerAdaptor;
import com.example.matchdomain.banner.entity.Banner;
import com.example.matchdomain.banner.enums.BannerType;
import com.example.matchdomain.banner.repository.BannerRepository;
import com.example.matchinfrastructure.config.s3.S3UploadService;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.transaction.Transactional;
import java.util.List;

@Service
@RequiredArgsConstructor
public class AdminBannerService {
private final BannerRepository bannerRepository;
private final BannerConvertor bannerConvertor;
private final S3UploadService s3UploadService;
private final BannerAdaptor bannerAdaptor;

@Transactional
@CachePut(cacheNames = "bannerCache", key = "'all'")
public List<BannerRes.BannerList> uploadBanner(BannerType bannerType,
MultipartFile bannerImage,
BannerReq.BannerUpload bannerUploadDto) {
String bannerImg = s3UploadService.uploadBannerImage(bannerImage);
bannerRepository.save(bannerConvertor.convertToBannerUpload(bannerType, bannerImg, bannerUploadDto));
return cachingBannerList();
}

@CacheEvict(cacheNames = "bannerCache")
public List<BannerRes.BannerList> cachingBannerList() {
List<Banner> banners = bannerAdaptor.getBannerList();

return bannerConvertor.convertToBannerList(banners);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import com.example.matchdomain.donation.entity.HistoryImage;
import com.example.matchdomain.donation.entity.enums.HistoryStatus;

import java.util.List;

@Convertor
public class AdminDonationConvertor {
public DonationRes.DonationDetail getDonationDetail(DonationUser donationUser) {
Expand All @@ -28,28 +30,30 @@ public DonationRes.DonationDetail getDonationDetail(DonationUser donationUser) {
.build();
}

public DonationHistory DonationHistoryComplete(Long projectId) {
public DonationHistory convertToDonationHistoryComplete(Long projectId, List<Long> donationUserLists) {
return DonationHistory
.builder()
.projectId(projectId)
.historyStatus(HistoryStatus.COMPLETE)
.completeIdLists(donationUserLists)
.build();
}

public HistoryImage HistoryImage(String image, Long id) {
public HistoryImage convertToHistoryImage(String image, Long id) {
return HistoryImage
.builder()
.imgUrl(image)
.donationHistoryId(id)
.build();
}

public DonationHistory DonationHistoryChange(DonationReq.EnforceDonation enforceDonation) {
public DonationHistory convertToDonationHistoryChange(DonationReq.EnforceDonation enforceDonation) {
return DonationHistory
.builder()
.projectId(enforceDonation.getProjectId())
.cnt(enforceDonation.getDonationUserLists().size())
.historyStatus(HistoryStatus.CHANGE)
.changeIdLists(enforceDonation.getDonationUserLists())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,9 @@ public DonationRes.DonationDetail getDonationDetail(Long donationId) {

@Transactional
public void enforceDonation(List<MultipartFile> imageLists, DonationReq.EnforceDonation enforceDonation) {
donationHistoryRepository.save(adminDonationConvertor.DonationHistoryChange(enforceDonation));
donationHistoryRepository.save(adminDonationConvertor.convertToDonationHistoryChange(enforceDonation));

DonationHistory donationHistory = donationHistoryRepository.save(adminDonationConvertor.DonationHistoryComplete(enforceDonation.getProjectId()));
DonationHistory donationHistory = donationHistoryRepository.save(adminDonationConvertor.convertToDonationHistoryComplete(enforceDonation.getProjectId(), enforceDonation.getDonationUserLists()));

saveDonationHistoryImages(imageLists, donationHistory.getId());

Expand All @@ -96,7 +96,7 @@ private void saveDonationHistoryImages(List<MultipartFile> imageLists, Long hist
List<HistoryImage> historyImages = new ArrayList<>();

for(String image : images){
historyImages.add(adminDonationConvertor.HistoryImage(image, historyId));
historyImages.add(adminDonationConvertor.convertToHistoryImage(image, historyId));
}
historyImageRepository.saveAll(historyImages);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.example.matchapi.admin.event.controller;

import com.example.matchapi.admin.event.dto.EventUploadReq;
import com.example.matchapi.admin.event.service.AdminEventService;
import com.example.matchapi.event.dto.EventRes;
import com.example.matchcommon.reponse.CommonResponse;
import com.example.matchinfrastructure.config.s3.S3UploadService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/admin/events")
@Tag(name = "ADMIN-09-Event🎉 관리자 이벤트 관리 API")
public class AdminEventController {
private final AdminEventService adminEventService;

@PostMapping("")
@Operation(summary = "ADMIN-09-01 이벤트 업로드")
public CommonResponse<String> uploadEventList(@RequestBody EventUploadReq eventUploadReq){
adminEventService.uploadEventList(eventUploadReq);
return CommonResponse.onSuccess("업로드 성공");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.example.matchapi.admin.event.dto;

import com.example.matchapi.common.model.ContentsList;
import com.example.matchdomain.common.model.ContentsType;
import com.example.matchdomain.event.enums.EventType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.constraints.NotBlank;
import java.time.LocalDate;
import java.util.List;

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EventUploadReq {
private String title;

private String smallTitle;

private String thumbnail;

private EventType eventType;

private LocalDate eventStartDate;

private LocalDate eventEndDate;

private List<ContentsList> contentsList;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.example.matchapi.admin.event.service;

import com.example.matchapi.admin.event.dto.EventUploadReq;
import com.example.matchapi.common.model.ContentsList;
import com.example.matchapi.event.convetor.EventConvertor;
import com.example.matchapi.event.dto.EventRes;
import com.example.matchapi.event.service.EventService;
import com.example.matchcommon.annotation.RedissonLock;
import com.example.matchdomain.common.model.ContentsType;
import com.example.matchdomain.event.entity.Event;
import com.example.matchdomain.event.entity.EventContent;
import com.example.matchdomain.event.repository.EventContentRepository;
import com.example.matchdomain.event.repository.EventRepository;
import com.example.matchinfrastructure.config.s3.S3UploadService;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;

import static com.example.matchcommon.constants.MatchStatic.EVENT_S3_DIR;
import static com.example.matchdomain.common.model.ContentsType.IMG;
import static com.example.matchdomain.common.model.ContentsType.TEXT;

@Service
@RequiredArgsConstructor
public class AdminEventService {
private final EventRepository eventRepository;
private final EventContentRepository eventContentRepository;
private final EventConvertor eventConvertor;
private final EventService eventService;
@RedissonLock(LockName = "이벤트 업로드", key = "#eventUploadReq")
@CacheEvict(value = "eventCache", allEntries = true)
public void uploadEventList(EventUploadReq eventUploadReq) {

Event event = eventRepository.save(eventConvertor.convertToEventUpload(eventUploadReq, eventUploadReq.getThumbnail()));

Long eventId = event.getId();

List<EventContent> eventContents = new ArrayList<>();
for(ContentsList content : eventUploadReq.getContentsList()){
if(content.getContentsType().equals(IMG)){
eventContents.add(eventConvertor.convertToEventContents(eventId, content.getContents(), IMG));
}
else{
eventContents.add(eventConvertor.convertToEventContents(eventId, content.getContents(), TEXT));
}
}

eventContentRepository.saveAll(eventContents);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.example.matchapi.admin.keyword.controller;

import com.example.matchapi.admin.keyword.dto.AdminKeywordReq;
import com.example.matchapi.admin.keyword.service.AdminKeywordService;
import com.example.matchapi.keword.dto.KeywordRes;
import com.example.matchapi.keword.service.KeywordService;
import com.example.matchcommon.reponse.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/admin/keywords")
@Tag(name = "ADMIN-07-Keyword 추천 검색 키워드 🔎",description = "검색 키워드 API")
public class AdminKeywordController {
private final KeywordService keywordService;
private final AdminKeywordService adminKeywordService;

@GetMapping("")
@Operation(summary = "07-01 ADMIN Keyword 추천 조회🔎")
public CommonResponse<List<KeywordRes.KeywordList>> getKeywordList(){
return CommonResponse.onSuccess(keywordService.getKeywordList());
}

@PostMapping("")
@Operation(summary = "07-02 ADMIN Keyword 업로드🔎")
public CommonResponse<List<KeywordRes.KeywordList>> postKeywordList(
@RequestBody AdminKeywordReq.KeywordUpload keyword
){

return CommonResponse.onSuccess(adminKeywordService.postKeyword(keyword));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.example.matchapi.admin.keyword.convertor;

import com.example.matchapi.admin.keyword.dto.AdminKeywordReq;
import com.example.matchcommon.annotation.Convertor;
import com.example.matchdomain.keyword.entity.SearchKeyword;

@Convertor
public class AdminKeywordConvertor {
public SearchKeyword convertToKeyword(AdminKeywordReq.KeywordUpload keyword) {
return SearchKeyword.builder().keyword(keyword.getSearchKeyword()).priority(keyword.getPriority()).build();
}
}
Loading

0 comments on commit 6691417

Please sign in to comment.