Skip to content

Commit

Permalink
feat: dev2의 멀티모듈에 적용되지 않은 dev 변경사항들을 적용한다. (#326)
Browse files Browse the repository at this point in the history
* remove: test 모듈 삭제

- 기존 test 모듈에서 공통으로 참조하고 있는 context, fixture들을 중복을 상관하지 않고 옮긴다.

* fix: 모듈 의존성 및 테스트 정리

* docs: api docs 업데이트

* feat: dev 브랜치 918b31d 커밋 적용

* feat: 1dbe550, a2771af 커밋 재적용

* feat: dev 브랜치 63eebfb 커밋 적용

* �front: 잘못된 정보 표현 수정 및 사용자 경험 개선 (#320)

* feat: 경매 가격 경신 로직 수정

* fix: 경매 가격 하락 로직 수정

* feat: 재고 수량을 폴링하는 로직 추가 (시연용)

* feat: 정말로 로그아웃할까요? 문구 추가

* feat: 경매 입찰 성공을 시각적으로 표시. 및 따닥 방지

* style: list 미리보기 이미지 수정

* style: 목록에서는 현재가격을 추정할 수 없으므로 '시작 가격'으로 문구 변경

* feat: 타이머를 통해 다음 가격 변동 시점을 노출

* feat: 회원가입 시 아이디, 패스워드 규격을 사용자에게 안내한다.

* feat: API 요청 실패 시, 일부 케이스에서 서버가 전달한 메세지를 표시

* feat: 활성항목을 리스트에 표시

* refactor: 진행 중인 경매에 색상을 표시한다.

* feat: 회원가입 성공시 성공 멘트 표시

* refactor: 거래내역에서 생성일과 수정일을 표시하지 않습니다. (서버에서 생성하지 않음)

* refactor: 판매자 가입 기능 제거

* fix: 경매 상세페이지에서 가격을 갱신하는 타이머 오류 수정

* fix: 종료된 경매에서 입찰버튼이 활성화되던 문제 수정

---------

Co-authored-by: MinSeok Oh <[email protected]>

* chore: scp로 api, consumer 모듈 말아서 전송하도록 스크립트 수정

* chore: dev2 배포 스크립트 추가

* feat: 정적 리소스 필터링 컨트롤러도 그냥 pass하도록 설정 추가

* �front: 초 단위 가격 갱신 적용 및 재고 부족 시 응답이 200으로 오는 부분에 맞게 수정 (#325)

* feat: 경매 상품의 초단위 가격 하락 지원

* refactor: 경매 재고 부족시 200응답 + A012 조합을 가져와 Fail 상황으로 처리한다.

* feat: ver2를 위한 로직 추가

---------

Co-authored-by: HyeonSik Choi <[email protected]>
Co-authored-by: MinSeok Oh <[email protected]>
  • Loading branch information
3 people authored Aug 28, 2024
1 parent 6198c4b commit 084d1b2
Show file tree
Hide file tree
Showing 215 changed files with 5,698 additions and 1,593 deletions.
13 changes: 8 additions & 5 deletions .github/workflows/dev_code_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Dev code deploy

on:
push:
branches: [ "dev" ]
branches: [ "dev2" ]
pull_request:
branches: [ "dev" ]
branches: [ "dev2" ]

jobs:
deploy:
Expand Down Expand Up @@ -39,7 +39,8 @@ jobs:
- name: Add SSH fixkey to known hosts
run: |
mkdir -p ~/.ssh
ssh-keyscan ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
ssh-keyscan ${{ secrets.DEV_TWO_TOMCAT_SSH_HOST }} >> ~/.ssh/known_hosts
ssh-keyscan ${{ secrets.DEV_TWO_ASYNC_SSH_HOST }} >> ~/.ssh/known_hosts
- name: Create SSH key
run: |
Expand All @@ -50,5 +51,7 @@ jobs:
env:
ACTIVE_PROFILE: dev
run: |
scp -i private_key ./build/libs/*.jar ${{ secrets.SSH_FULL_INFO }}:~/
ssh -i private_key ${{ secrets.SSH_FULL_INFO }} "sudo bash ${{ secrets.SCRIPT_PATH }} $ACTIVE_PROFILE"
scp -i private_key ./api/build/libs/*.jar ${{ secrets.DEV_TWO_TOMCAT_SSH_FULL_INFO }}:~/
scp -i private_key ./consumer/build/libs/*.jar ${{ secrets.DEV_TWO_ASYNC_SSH_FULL_INFO }}:~/
ssh -i private_key ${{ secrets.DEV_TWO_TOMCAT_SSH_FULL_INFO }} "sudo bash ${{ secrets.SCRIPT_PATH }} $ACTIVE_PROFILE"
ssh -i private_key ${{ secrets.DEV_TWO_ASYNC_SSH_FULL_INFO }} "sudo bash ${{ secrets.SCRIPT_PATH }} $ACTIVE_PROFILE"
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,3 @@ out/
.vscode/

.DS_Store

# front 빌드 이후 배포 공간
src/main/resources/static/
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Team7-ELEVEN

[API-DOCS](https://woowa-techcamp-2024.github.io/Team7-ELEVEN/src/main/resources/static/index.html)
[API-DOCS](https://woowa-techcamp-2024.github.io/Team7-ELEVEN/api/src/main/resources/docs/index.html)
3 changes: 3 additions & 0 deletions api/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,6 @@ out/

### VS Code ###
.vscode/

# front 빌드 이후 배포 공간
src/main/resources/static/
25 changes: 13 additions & 12 deletions api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ plugins {
id 'org.asciidoctor.jvm.convert' version '3.3.2'
}

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

configurations {
compileOnly {
extendsFrom annotationProcessor
Expand All @@ -13,15 +19,8 @@ ext {
set('snippetsDir', file("build/generated-snippets"))
}

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

dependencies {
implementation project(":core")
implementation 'org.springframework.boot:spring-boot-starter'
// spring
implementation 'org.springframework.boot:spring-boot-starter-web'

// prometheus
Expand All @@ -32,10 +31,6 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.redisson:redisson-spring-boot-starter:3.34.1'

testImplementation project(':test')
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

// spring-rest-docs
asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor:3.0.1'
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
Expand Down Expand Up @@ -79,3 +74,9 @@ tasks.named('asciidoctor') {
inputs.dir snippetsDir
dependsOn test
}

jar {
enabled = false
}

bootJar.enabled = true
14 changes: 14 additions & 0 deletions api/src/docs/asciidoc/auth.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[[Auth]]
== 사용자 가입 및 로그인(비로그인 가능)

=== 회원가입

operation::auth/signup/success[snippets='http-request,http-response,request-fields']

=== 로그인

operation::auth/signin/success[snippets='http-request,http-response,request-fields,response-fields']

=== 로그아웃

operation::auth/signout/success[snippets='http-request,http-response']
11 changes: 11 additions & 0 deletions api/src/docs/asciidoc/buyerAuctions.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[[buyerAuction]]
== 경매: 구매자(구매자 권한 필요)

=== 경매 입찰

operation::buyerAuctions/purchase/success[snippets='http-request,http-response,request-cookies,path-parameters,request-fields,response-fields']

=== 경매 환불

operation::buyerAuctions/cancel/success[snippets='http-request,http-response,request-cookies,path-parameters']

9 changes: 9 additions & 0 deletions api/src/docs/asciidoc/docinfo.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<style>
h2 {
margin-top: 50px;
}

h3 {
margin-top: 20px;
}
</style>
4 changes: 4 additions & 0 deletions api/src/docs/asciidoc/errorCode.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[[error-code]]
== 에러 코드

operation::error-code[snippets='error-code']
16 changes: 16 additions & 0 deletions api/src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
= LuckyVickyAuction
:doctype: book
:icons: font
:source-highlighter: highlightjs
:toc: left
:toclevels: 2
:sectlinks:
:docinfo: shared-head

include::auth.adoc[]
include::point.adoc[]
include::memberAuctions.adoc[]
include::sellerAuctions.adoc[]
include::buyerAuctions.adoc[]
include::receipts.adoc[]
include::errorCode.adoc[]
14 changes: 14 additions & 0 deletions api/src/docs/asciidoc/memberAuctions.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[[memberAuctions]]
== 경매: 사용자(비로그인도 조회 가능)

=== 경매 목록 조회

operation::memberAuctions/findAllBuyerAuctions/success[snippets='http-request,http-response,query-parameters,response-fields']

=== 경매 상세 조회(고정 할인 정책 조회)

operation::memberAuctions/findOneConstantPolicy/success[snippets='http-request,http-response,path-parameters,response-fields']

=== 경매 상세 조회(퍼센트 할인 정책 조회)

operation::memberAuctions/findOnePercentagePolicy/success[snippets='http-request,http-response,path-parameters,response-fields']
6 changes: 6 additions & 0 deletions api/src/docs/asciidoc/point.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[[paymentPoint]]
== 포인트(구매자, 판매자 권한 필요)

=== 포인트 충전

operation::payment/chargePoint/success[snippets='http-request,http-response,request-cookies,request-fields']
14 changes: 14 additions & 0 deletions api/src/docs/asciidoc/receipts.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[[Receipts]]
== 거래 이력

=== 구매자 거래 목록 조회(구매자 권한 필요)

operation::receipts/findAllBuyerReceipts/success[snippets='http-request,http-response,request-cookies,query-parameters,response-fields']

=== 판매자 거래 목록 조회(판매자 권한 필요)

operation::receipts/findAllSellerReceipts/success[snippets='http-request,http-response,request-cookies,query-parameters,response-fields']

=== 거래 상세 조회(판매자, 구매자 권한 필요)

operation::receipts/findOneMemberReceipt/success[snippets='http-request,http-response,request-cookies,path-parameters,response-fields']
27 changes: 27 additions & 0 deletions api/src/docs/asciidoc/sellerAuctions.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[[sellerAuction]]
== 경매: 판매자(판매자 권한 필요)

=== 경매 등록(고정 할인 정책)

operation::sellerAuctions/createConstantPolicy/success[snippets='http-request,http-response,request-cookies,request-fields']

=== 경매 등록(퍼센트 할인 정책)

operation::sellerAuctions/createPercentagePolicy/success[snippets='http-request,http-response,request-cookies,request-fields']

=== 경매 등록 취소

operation::sellerAuctions/delete/success[snippets='http-request,http-response,request-cookies,path-parameters']

=== 경매 목록 조회

operation::sellerAuctions/findAll/success[snippets='http-request,http-response,request-cookies,query-parameters,response-fields']

=== 경매 상세 조회(고정 할인 정책 조회)

operation::sellerAuctions/findOneConstantPolicy/success[snippets='http-request,http-response,request-cookies,path-parameters,response-fields']

=== 경매 상세 조회(퍼센트 할인 정책 조회)

operation::sellerAuctions/findOnePercentagePolicy/success[snippets='http-request,http-response,request-cookies,path-parameters,response-fields']

Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.wootecam.api;
package com.wootecam.luckyvickyauction;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = {"com.wootecam.core", "com.wootecam.api"})
@SpringBootApplication
public class ApiApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.wootecam.api.advice;
package com.wootecam.luckyvickyauction.advice;


import com.wootecam.core.exception.AuthenticationException;
import com.wootecam.core.exception.AuthorizationException;
import com.wootecam.core.exception.BusinessException;
import com.wootecam.core.exception.ErrorCode;
import com.wootecam.core.exception.ErrorResponse;
import com.wootecam.core.exception.InfraStructureException;
import com.wootecam.luckyvickyauction.exception.AuthenticationException;
import com.wootecam.luckyvickyauction.exception.AuthorizationException;
import com.wootecam.luckyvickyauction.exception.BusinessException;
import com.wootecam.luckyvickyauction.exception.ErrorCode;
import com.wootecam.luckyvickyauction.exception.ErrorResponse;
import com.wootecam.luckyvickyauction.exception.InfraStructureException;
import com.wootecam.luckyvickyauction.exception.SuccessfulOperationException;
import java.io.PrintWriter;
import java.io.StringWriter;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -47,6 +47,13 @@ public ResponseEntity<ErrorResponse> handleInfraStructure(final InfraStructureEx
.body(ErrorResponse.of(e.getMessage(), e.getErrorCode().name()));
}

@ExceptionHandler(SuccessfulOperationException.class)
public ResponseEntity<ErrorResponse> handleSuccessfulOperationException(final SuccessfulOperationException e) {
log.warn("SUCCESS RESULT CODE {} : {}", e.getErrorCode(), e.getMessage());
return ResponseEntity.ok()
.body(ErrorResponse.of(e.getMessage(), e.getErrorCode().name()));
}

@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleInternalServerError(final Exception e) {
StringWriter out = new StringWriter();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.wootecam.api.config;
package com.wootecam.luckyvickyauction.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.wootecam.api.config;
package com.wootecam.luckyvickyauction.config;

import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.wootecam.api.config;
package com.wootecam.luckyvickyauction.config;

import com.wootecam.api.controller.CurrentTimeArgumentResolver;
import com.wootecam.api.interceptor.AuthenticationInterceptor;
import com.wootecam.api.util.AuthenticationArgumentResolver;
import com.wootecam.luckyvickyauction.controller.annotation.AuthenticationArgumentResolver;
import com.wootecam.luckyvickyauction.controller.annotation.CurrentTimeArgumentResolver;
import com.wootecam.luckyvickyauction.interceptor.AuthenticationInterceptor;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.wootecam.api.context;
package com.wootecam.luckyvickyauction.context;

import com.wootecam.core.dto.member.info.SignInInfo;
import com.wootecam.luckyvickyauction.dto.member.info.SignInInfo;
import lombok.Getter;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.wootecam.api.controller;
package com.wootecam.luckyvickyauction.controller;

import com.wootecam.core.dto.member.info.SignInInfo;
import com.wootecam.core.dto.member.info.SignInRequestInfo;
import com.wootecam.core.dto.member.info.SignInResponseInfo;
import com.wootecam.core.dto.member.info.SignUpRequestInfo;
import com.wootecam.core.service.member.MemberService;
import com.wootecam.luckyvickyauction.dto.member.info.SignInInfo;
import com.wootecam.luckyvickyauction.dto.member.info.SignInRequestInfo;
import com.wootecam.luckyvickyauction.dto.member.info.SignInResponseInfo;
import com.wootecam.luckyvickyauction.dto.member.info.SignUpRequestInfo;
import com.wootecam.luckyvickyauction.service.member.MemberService;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package com.wootecam.api.controller;
package com.wootecam.luckyvickyauction.controller;

import com.wootecam.api.dto.PurchaseRequest;
import com.wootecam.api.dto.PurchaseResponse;
import com.wootecam.core.dto.auction.condition.AuctionSearchCondition;
import com.wootecam.core.dto.auction.info.BuyerAuctionInfo;
import com.wootecam.core.dto.auction.info.BuyerAuctionSimpleInfo;
import com.wootecam.core.dto.auction.message.AuctionPurchaseRequestMessage;
import com.wootecam.core.dto.auction.message.AuctionRefundRequestMessage;
import com.wootecam.core.dto.member.info.SignInInfo;
import com.wootecam.core.service.auction.AuctionService;
import com.wootecam.core.service.auctioneer.Auctioneer;
import com.wootecam.core.service.payment.PaymentService;
import com.wootecam.luckyvickyauction.controller.annotation.BuyerOnly;
import com.wootecam.luckyvickyauction.controller.annotation.CurrentTime;
import com.wootecam.luckyvickyauction.controller.annotation.Login;
import com.wootecam.luckyvickyauction.dto.PurchaseRequest;
import com.wootecam.luckyvickyauction.dto.PurchaseResponse;
import com.wootecam.luckyvickyauction.dto.auction.condition.AuctionSearchCondition;
import com.wootecam.luckyvickyauction.dto.auction.info.BuyerAuctionInfo;
import com.wootecam.luckyvickyauction.dto.auction.info.BuyerAuctionSimpleInfo;
import com.wootecam.luckyvickyauction.dto.auction.message.AuctionPurchaseRequestMessage;
import com.wootecam.luckyvickyauction.dto.auction.message.AuctionRefundRequestMessage;
import com.wootecam.luckyvickyauction.dto.member.info.SignInInfo;
import com.wootecam.luckyvickyauction.service.auction.AuctionService;
import com.wootecam.luckyvickyauction.service.auctioneer.Auctioneer;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.wootecam.api.controller;
package com.wootecam.luckyvickyauction.controller;

import com.wootecam.core.domain.entity.type.Role;
import com.wootecam.core.dto.member.info.SignInInfo;
import com.wootecam.core.dto.payment.command.BuyerChargePointCommand;
import com.wootecam.core.service.payment.PaymentService;
import com.wootecam.luckyvickyauction.controller.annotation.Login;
import com.wootecam.luckyvickyauction.controller.annotation.Roles;
import com.wootecam.luckyvickyauction.domain.entity.type.Role;
import com.wootecam.luckyvickyauction.dto.member.info.SignInInfo;
import com.wootecam.luckyvickyauction.dto.payment.command.BuyerChargePointCommand;
import com.wootecam.luckyvickyauction.service.payment.PaymentService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package com.wootecam.api.controller;
package com.wootecam.luckyvickyauction.controller;

import com.wootecam.core.domain.entity.type.Role;
import com.wootecam.core.dto.member.info.SignInInfo;
import com.wootecam.core.dto.receipt.condition.BuyerReceiptSearchCondition;
import com.wootecam.core.dto.receipt.condition.SellerReceiptSearchCondition;
import com.wootecam.core.dto.receipt.info.BuyerReceiptSimpleInfo;
import com.wootecam.core.dto.receipt.info.ReceiptInfo;
import com.wootecam.core.dto.receipt.info.SellerReceiptSimpleInfo;
import com.wootecam.core.service.receipt.ReceiptService;
import com.wootecam.luckyvickyauction.controller.annotation.BuyerOnly;
import com.wootecam.luckyvickyauction.controller.annotation.Login;
import com.wootecam.luckyvickyauction.controller.annotation.Roles;
import com.wootecam.luckyvickyauction.controller.annotation.SellerOnly;
import com.wootecam.luckyvickyauction.domain.entity.type.Role;
import com.wootecam.luckyvickyauction.dto.member.info.SignInInfo;
import com.wootecam.luckyvickyauction.dto.receipt.condition.BuyerReceiptSearchCondition;
import com.wootecam.luckyvickyauction.dto.receipt.condition.SellerReceiptSearchCondition;
import com.wootecam.luckyvickyauction.dto.receipt.info.BuyerReceiptSimpleInfo;
import com.wootecam.luckyvickyauction.dto.receipt.info.ReceiptInfo;
import com.wootecam.luckyvickyauction.dto.receipt.info.SellerReceiptSimpleInfo;
import com.wootecam.luckyvickyauction.service.receipt.ReceiptService;
import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
Expand Down
Loading

0 comments on commit 084d1b2

Please sign in to comment.