Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

전남대 BE_나제법 5주차(3단계) #427

Open
wants to merge 143 commits into
base: nove1080
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
143 commits
Select commit Hold shift + click to select a range
5123667
init: 4주차 코드 업로드
nove1080 Jul 25, 2024
e9daf63
docs: README.md Step5 1단계 요구사항 반영
nove1080 Jul 26, 2024
7efd229
chore: build.gradle OpenFeign 의존성 추가
nove1080 Jul 26, 2024
0a0504e
feat: KakaoClient.java 추가
nove1080 Jul 26, 2024
1d4ff4d
feat: KakaoInfo.java 추가
nove1080 Jul 26, 2024
3e12882
feat: KakaoProfile.java 추가
nove1080 Jul 26, 2024
f9ebe69
feat: KakaoProperties.java 추가
nove1080 Jul 26, 2024
e52db54
feat: KakaoToken.java 추가
nove1080 Jul 26, 2024
6f3cf67
feat: KakaoAccount.java 추가
nove1080 Jul 26, 2024
e1ea3bb
feat: LoginService.java 추가
nove1080 Jul 26, 2024
12cfa98
feat: LoginResponse.java 필드명 변경
nove1080 Jul 26, 2024
2fb0b8d
feat: MemberService.java findOrCreateMember() 추가
nove1080 Jul 26, 2024
6f2c4b1
feat: Member.java Password 필드 삭제
nove1080 Jul 26, 2024
1102c74
feat: KakaoAccount.java toMember() 추가
nove1080 Jul 26, 2024
a83c654
feat: AuthenticationFilter.java ignorePaths 변경
nove1080 Jul 26, 2024
f2e2b93
feat: CreateMemberRequest.java Password 필드 삭제
nove1080 Jul 26, 2024
489f789
feat: WebConfig.java feignClient 추가
nove1080 Jul 26, 2024
8734b45
feat: data.sql Member 테이블 password 필드 삭제
nove1080 Jul 26, 2024
d712d3f
feat: JwtProvider.java Token 생성 시, SocialToken 클레임 추가
nove1080 Jul 26, 2024
db2e428
feat: JwtResolver.java resolveSocialToken 추가
nove1080 Jul 26, 2024
6d6c1ae
refactor: MemberService.java findOrCreateMember 회원 생성 시 dto 사용
nove1080 Jul 26, 2024
60a31a4
feat: ReadMemberResponse.java password 필드 삭제
nove1080 Jul 26, 2024
f5e2c2d
remove: 사용하지 않는 파일 제거
nove1080 Jul 26, 2024
2fbf175
feat: LoginController.java 추가
nove1080 Jul 26, 2024
4df68c1
feat: Application.java 어노테이션 추가
nove1080 Jul 26, 2024
0e270a1
test: MemberDummyDataProvider.java Password 필드 제거
nove1080 Jul 26, 2024
512fb5c
test: MemberServiceTest.java MemberService 변경에 따른 수정
nove1080 Jul 26, 2024
96c3bc5
test: MemberApiControllerTest.java 주석 처리
nove1080 Jul 26, 2024
0fd0b11
feat: MemberApiController.java 단일 회원 조회 API 추가
nove1080 Jul 26, 2024
2df743f
chore: .gitignore application-secret.yml 추가
nove1080 Jul 26, 2024
45ced48
removed cached
nove1080 Jul 26, 2024
ff75fd3
Merge branch 'nove1080' into step1
nove1080 Jul 26, 2024
f4a7c77
docs: README.md step5 2단계 요구사항 반영
nove1080 Jul 26, 2024
c2f5566
feat: Password.java 추가
nove1080 Jul 27, 2024
1a0e449
feat: Platform.java 추가
nove1080 Jul 27, 2024
b52b12a
feat: Member.java password, platform 필드 추가
nove1080 Jul 27, 2024
595ce3d
feat: MemberDetails.java platform 필드 추가
nove1080 Jul 27, 2024
bdad4aa
feat: LoginRequest.java 추가
nove1080 Jul 27, 2024
697f03d
feat: MemberService.java login() 추가
nove1080 Jul 27, 2024
11130e8
refactor: Product.java 사용하지 않는 메서드 삭제
nove1080 Jul 27, 2024
3b0b785
feat: CreateMemberRequest.java password 필드 추가
nove1080 Jul 27, 2024
7a68629
feat: ReadMemberResponse.java password 필드 추가
nove1080 Jul 27, 2024
e62bf41
chore: data.sql member의 password 필드 추가
nove1080 Jul 27, 2024
8acbdeb
feat: AuthenticationFilter.java ignorePaths 추가 등록
nove1080 Jul 27, 2024
9ef54f6
refactor: KakaoAccount.java Member 변환 로직 수정
nove1080 Jul 27, 2024
9ef88e9
test: 테스트 코드 수정
nove1080 Jul 27, 2024
e0b14df
feat: MemberApiController.java 회원가입/로그인 구현
nove1080 Jul 27, 2024
7835c2b
Merge remote-tracking branch 'origin/step1' into step1
nove1080 Jul 27, 2024
37cd143
feat: ProductViewController.java form 화면 추가
nove1080 Jul 28, 2024
9732f2b
feat: MemberDetails.java getEmailValue() 추가
nove1080 Jul 28, 2024
c8b954b
feat: script.js
nove1080 Jul 28, 2024
b61599c
feat: login-callback.html 추가
nove1080 Jul 28, 2024
74dca82
feat: login-call.html 추가
nove1080 Jul 28, 2024
9093d5a
feat: register-form.html 추가
nove1080 Jul 28, 2024
c5436da
refactor: index.html 주소변경
nove1080 Jul 28, 2024
5c338df
docs: README.md step5 2단계 요구사항 반영
nove1080 Jul 26, 2024
173b1b3
Merge remote-tracking branch 'origin/step2' into step2
nove1080 Jul 28, 2024
7ab1d22
Merge branch 'nove1080' into step2
nove1080 Jul 28, 2024
81385f0
feat: Token.java fromBearer() 추가
nove1080 Jul 28, 2024
1bbf57b
feat: KakaoClient.java sendMessage() 추가
nove1080 Jul 28, 2024
b786ed0
feat: KakaoCommerce.java 추가
nove1080 Jul 28, 2024
859b8bb
feat: KakaoMessageResult.java 추가
nove1080 Jul 28, 2024
099f45f
feat: CreateOrderRequest.java 추가
nove1080 Jul 28, 2024
15fb123
feat: KakaoProperties.java messageUrl 필드 추가
nove1080 Jul 28, 2024
9fe6cb3
feat: OrderResponse.java 추가
nove1080 Jul 28, 2024
0fd1a92
feat: ProductOptionService.java validateExistsProduct() 추가
nove1080 Jul 28, 2024
2fcfc26
feat: ReadProductResponse.java Options 필드 추가
nove1080 Jul 28, 2024
08c2fef
feat: OrderService.java 추가
nove1080 Jul 28, 2024
d32f7a1
feat: ProductApiController.java 상품 주문 API 구현
nove1080 Jul 28, 2024
a2a6af5
refactor: LoginService.java 리팩토링
nove1080 Jul 28, 2024
55a3efa
feat: script.js 사용하지 않는 함수 제거
nove1080 Jul 28, 2024
6425fc1
feat: ProductViewController.java loginForm() modelAttribute 추가
nove1080 Jul 28, 2024
e34cbd4
refactor: login-form.html 민감한 정보 제거
nove1080 Jul 28, 2024
8c841f8
docs: README.md 5주차 3단계 요구사항 반영
nove1080 Jul 28, 2024
62be644
chore: build.gradle springdoc-openapi 의존성 추가
nove1080 Jul 29, 2024
85af60e
chore: REST Docs 의존성 추가 및 설정
nove1080 Jul 29, 2024
db5c784
style: ProductApiController.java 메서드 순서 수정
nove1080 Jul 29, 2024
eae05d0
refactor: ReadProductResponse.java productOptions -> options 변수명 수정
nove1080 Jul 29, 2024
f2fa3c1
test: RestDocsConfiguration.java 추가
nove1080 Jul 29, 2024
78bacb6
test: ProductServiceTest.java 테스트 유지보수
nove1080 Jul 29, 2024
e83b7aa
test: ProductOptionServiceTest.java 테스트 유지보수
nove1080 Jul 29, 2024
717477d
test: MockLoginMemberArgumentResolver.java 추가
nove1080 Jul 29, 2024
7b676b3
test: ProductApiControllerTest.java 추가
nove1080 Jul 29, 2024
c8fb6e5
docs: product.adoc 상품 API 명세서 추가
nove1080 Jul 29, 2024
a0a3b47
docs: docs.adoc API 명세서 추가
nove1080 Jul 29, 2024
18f07e4
test: CategoryApiControllerTest.java 추가
nove1080 Jul 29, 2024
9ce23f2
docs: category.adoc 추가
nove1080 Jul 29, 2024
b8e0e8a
docs: product.adoc 추가
nove1080 Jul 29, 2024
2b14ef0
docs: docs.adoc 카테고리 API 반영
nove1080 Jul 29, 2024
dd6de94
test: MemberApiControllerTest.java E2E 테스트에서 컨트롤러 단위 테스트로 수정
nove1080 Jul 29, 2024
2c3a5e0
docs: member.adoc 회원 API 명세서 추가
nove1080 Jul 29, 2024
3e74d54
docs: docs.adoc 회원 API 명세서 추가
nove1080 Jul 29, 2024
0a2644d
refactor: CategoryApiControllerTest.java 요청/응답 타입 지정
nove1080 Jul 29, 2024
38020ea
docs: login.adoc 소셜 로그인 API 명세 추가
nove1080 Jul 29, 2024
ccfe353
docs: API 명세서 snippet 모두 보이도록 수정
nove1080 Jul 29, 2024
d35b4fb
test: MemberApiControllerTest.java 수정
nove1080 Jul 29, 2024
b82dc76
style: CategoryApiControllerTest.java remove unused import
nove1080 Jul 29, 2024
58603de
docs: docs.adoc 소셜 로그인 API 명세 추가
nove1080 Jul 29, 2024
627e3ce
docs: LoginControllerTest.java 추가
nove1080 Jul 29, 2024
ed87118
fest: API 명세 추가
nove1080 Jul 29, 2024
9f5786f
fest: API 명세 추가
nove1080 Jul 29, 2024
abcf464
refactor: ReadProductResponse.java fromEntity 코드 리팩토링
nove1080 Jul 30, 2024
3da6446
feat: Order.java 추가
nove1080 Jul 30, 2024
7564f1a
feat: OrderRepository.java 추가
nove1080 Jul 30, 2024
3b5f4ff
feat: OrderResponse.java 불필요한 필드 제거 및 fromEntity 추가
nove1080 Jul 30, 2024
0ce5bb7
feat: OrderStatus.java 추가
nove1080 Jul 30, 2024
b304b28
feat: CreateOrderRequest.java toEntity() 추가
nove1080 Jul 30, 2024
eed7e4e
feat: OrderService.java 코드 리팩토링 및 주문 정보 저장 로직 추가
nove1080 Jul 30, 2024
9c32ba4
feat: ProductApiController.java 주문 생성 API MemberDetail 파라미터 추가
nove1080 Jul 30, 2024
0ecae3f
style: ReadProductResponse.java 줄바꿈 추가
nove1080 Jul 30, 2024
15ca808
feat: OrderRepository.java @Repository 추가
nove1080 Jul 30, 2024
0a7c565
feat: OrderService.java @Transactional(readOnly = true) 제거
nove1080 Jul 30, 2024
ef0166d
docs: README.md 5주차 3단계 요구사항 반영
nove1080 Jul 28, 2024
c58f50e
chore: build.gradle springdoc-openapi 의존성 추가
nove1080 Jul 29, 2024
f196b77
chore: REST Docs 의존성 추가 및 설정
nove1080 Jul 29, 2024
4e336e7
style: ProductApiController.java 메서드 순서 수정
nove1080 Jul 29, 2024
05b0213
refactor: ReadProductResponse.java productOptions -> options 변수명 수정
nove1080 Jul 29, 2024
869fea6
test: RestDocsConfiguration.java 추가
nove1080 Jul 29, 2024
b73a091
test: ProductServiceTest.java 테스트 유지보수
nove1080 Jul 29, 2024
27a730e
test: ProductOptionServiceTest.java 테스트 유지보수
nove1080 Jul 29, 2024
c75c5e1
test: MockLoginMemberArgumentResolver.java 추가
nove1080 Jul 29, 2024
123bcd6
test: ProductApiControllerTest.java 추가
nove1080 Jul 29, 2024
a6adc67
docs: product.adoc 상품 API 명세서 추가
nove1080 Jul 29, 2024
1868db6
docs: docs.adoc API 명세서 추가
nove1080 Jul 29, 2024
0be6126
test: CategoryApiControllerTest.java 추가
nove1080 Jul 29, 2024
2654826
docs: category.adoc 추가
nove1080 Jul 29, 2024
5354c0e
docs: product.adoc 추가
nove1080 Jul 29, 2024
8b8479c
docs: docs.adoc 카테고리 API 반영
nove1080 Jul 29, 2024
6d0e6ec
test: MemberApiControllerTest.java E2E 테스트에서 컨트롤러 단위 테스트로 수정
nove1080 Jul 29, 2024
058d269
docs: member.adoc 회원 API 명세서 추가
nove1080 Jul 29, 2024
47cfda3
docs: docs.adoc 회원 API 명세서 추가
nove1080 Jul 29, 2024
cb6fcaf
refactor: CategoryApiControllerTest.java 요청/응답 타입 지정
nove1080 Jul 29, 2024
d1ad051
docs: login.adoc 소셜 로그인 API 명세 추가
nove1080 Jul 29, 2024
fba7463
docs: API 명세서 snippet 모두 보이도록 수정
nove1080 Jul 29, 2024
aee03e1
test: MemberApiControllerTest.java 수정
nove1080 Jul 29, 2024
f209b7e
style: CategoryApiControllerTest.java remove unused import
nove1080 Jul 29, 2024
83d2d99
docs: docs.adoc 소셜 로그인 API 명세 추가
nove1080 Jul 29, 2024
7cac263
docs: LoginControllerTest.java 추가
nove1080 Jul 29, 2024
f9ebc4d
fest: API 명세 추가
nove1080 Jul 29, 2024
5968669
fest: API 명세 추가
nove1080 Jul 29, 2024
b94600b
test: ProductApiControllerTest.java 유지보수
nove1080 Jul 30, 2024
fc7af74
docs: API 문서 최신화
nove1080 Jul 30, 2024
9ecc207
Merge remote-tracking branch 'origin/step3' into step3
nove1080 Jul 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 46 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,49 @@
* 토큰 받기를 읽고 액세스 토큰을 추출한다.
* 앱 키, 인가 코드가 절대 유출되지 않도록 한다.
* 특히 시크릿 키는 GitHub나 클라이언트 코드 등 외부에서 볼 수 있는 곳에 추가하지 않는다.
* (선택) 인가 코드를 받는 방법이 불편한 경우 카카오 로그인 화면을 구현한다.
* (선택) 인가 코드를 받는 방법이 불편한 경우 카카오 로그인 화면을 구현한다.

### 🚀 2단계 - 주문하기
***
#### 기능 요구 사항
카카오톡 메시지 API를 사용하여 주문하기 기능을 구현한다.

* 주문할 때 수령인에게 보낼 메시지를 작성할 수 있다.
* 상품 옵션과 해당 수량을 선택하여 주문하면 해당 상품 옵션의 수량이 차감된다.
* 해당 상품이 위시 리스트에 있는 경우 위시 리스트에서 삭제한다.
* 나에게 보내기를 읽고 주문 내역을 카카오톡 메시지로 전송한다.
* 메시지는 메시지 템플릿의 기본 템플릿이나 사용자 정의 템플릿을 사용하여 자유롭게 작성한다.

아래 예시와 같이 HTTP 메시지를 주고받도록 구현한다.

##### Request
```
POST /api/orders HTTP/1.1
Authorization: Bearer {token}
Content-Type: application/json

{
"optionId": 1,
"quantity": 2,
"message": "Please handle this order with care."
}
```

##### Response
```
HTTP/1.1 201 Created
Content-Type: application/json

{
"id": 1,
"optionId": 1,
"quantity": 2,
"orderDateTime": "2024-07-21T10:00:00",
"message": "Please handle this order with care."
}
```
### 🚀 3단계 - API 문서 만들기
***
#### 기능 요구 사항
API 사양에 관해 클라이언트와 어떻게 소통할 수 있을까?
어떻게 하면 편하게 소통할 수 있을지 고민해 보고 그 방법을 구현한다.
48 changes: 48 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ plugins {
id 'java'
id 'org.springframework.boot' version '3.3.1'
id 'io.spring.dependency-management' version '1.1.5'
id 'org.asciidoctor.jvm.convert' version '4.0.3'
}

group = 'camp.nextstep.edu'
Expand All @@ -17,6 +18,13 @@ repositories {
mavenCentral()
}

configurations {
asciidoctorExt //asciidoctorExt를 configurations로 지정
compileOnly {
extendsFrom annotationProcessor
}
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
Expand All @@ -31,6 +39,13 @@ dependencies {
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.6'

// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.4'

//REST Docs
asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor'
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'

runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
Expand All @@ -45,3 +60,36 @@ dependencyManagement {
tasks.named('test') {
useJUnitPlatform()
}

ext {
set('snippetsDir', file("build/generated-snippets")) //snippets 파일이 저장될 경로 snippetsDir로 변수 설정
}

test {
outputs.dir snippetsDir
useJUnitPlatform()
}

asciidoctor {
configurations 'asciidoctorExt' //Asciidoctor에서 asciidoctorExt를 사용하도록 설정
baseDirFollowsSourceFile()
inputs.dir snippetsDir
dependsOn test //gradle build 시 test -> asciiDoctor 순서로 실행
}

asciidoctor.doFirst {
delete file('src/main/resources/static/docs') //asciidoctor 실행 전 docs 폴더 삭제
}

task createDocument(type: Copy) {
dependsOn asciidoctor
from file("build/docs/asciidoc")
into file("src/main/resources/static")
}

bootJar {
dependsOn createDocument //Gradle build 시, createDocument -> bootJar 순으로 실행
from("${asciidoctor.outputDir}") {
into 'static/docs'
}
}
19 changes: 19 additions & 0 deletions src/docs/asciidoc/category.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
== 카테고리 API

=== 카테고리 생성
operation::category-api-controller-test/create-category[]

=== 카테고리 수정
operation::category-api-controller-test/update-category[]

=== 카테고리 삭제
operation::category-api-controller-test/delete-category[]

=== 단일 카테고리 조회
operation::category-api-controller-test/read-category[]

=== 전체 카테고리 조회
operation::category-api-controller-test/read-all-categories[]



11 changes: 11 additions & 0 deletions src/docs/asciidoc/docs.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
= 카카오 테크 캠퍼스 STEP 2 - REST Docs
:doctype: book
:source-highlighter: highlightjs
:toc: left
:toclevels: 3
:sectlinks:

include::product.adoc[]
include::category.adoc[]
include::member.adoc[]
include::login.adoc[]
4 changes: 4 additions & 0 deletions src/docs/asciidoc/login.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
== 소셜 로그인 API

=== 카카오 로그인
operation::login-controller-test/kakao-login[]
19 changes: 19 additions & 0 deletions src/docs/asciidoc/member.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
== 회원 API

=== 회원가입
operation::member-api-controller-test/create-member[]

=== 로그인
operation::member-api-controller-test/login[]

=== 회원 조회
operation::member-api-controller-test/read-member[]

=== 위시 상품 조회
operation::member-api-controller-test/read-wish-product[]

=== 위시 상품 수정
operation::member-api-controller-test/update-wish-product[]

=== 위시 상품 삭제
operation::member-api-controller-test/delete-wish-product[]
35 changes: 35 additions & 0 deletions src/docs/asciidoc/product.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
== 상품 API

=== 전체 상품 조회
operation::product-api-controller-test/read-all-products[]

=== 단일 상품 조회
operation::product-api-controller-test/read-product[]

=== 상품 생성
operation::product-api-controller-test/create-product[]

=== 상품 수정
operation::product-api-controller-test/update-product[]

=== 상품 삭제
operation::product-api-controller-test/delete-product[]

=== 상품 주문
operation::product-api-controller-test/order-product[]

=== 위시 상품 추가
operation::product-api-controller-test/create-wish-product[]

=== 상품 옵션 생성
operation::product-api-controller-test/create-option[]

=== 상품 옵션 조회
operation::product-api-controller-test/read-options[]

=== 상품 옵션 수정
operation::product-api-controller-test/update-option[]

=== 상품 옵션 삭제
operation::product-api-controller-test/delete-option[]

4 changes: 4 additions & 0 deletions src/main/java/gift/authentication/token/Token.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ public static Token from(String value) {
return new Token(value);
}

public static Token fromBearer(String value) {
return new Token(value.replace("Bearer ", ""));
}

public String getValue() {
return value;
}
Expand Down
22 changes: 21 additions & 1 deletion src/main/java/gift/config/KakaoProperties.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package gift.config;

import java.net.URI;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.bind.ConstructorBinding;

Expand All @@ -13,17 +14,20 @@ public class KakaoProperties {
private final String userInfoUrl;
private final String tokenUrl;
private final String responseType;
private final String messageUrl;

@ConstructorBinding
public KakaoProperties(String clientId, String redirectUri, String contentType,
String grantType, String userInfoUrl, String tokenUrl, String responseType) {
String grantType, String userInfoUrl, String tokenUrl, String responseType,
String messageUrl) {
this.clientId = clientId;
this.redirectUri = redirectUri;
this.contentType = contentType;
this.grantType = grantType;
this.userInfoUrl = userInfoUrl;
this.tokenUrl = tokenUrl;
this.responseType = responseType;
this.messageUrl = messageUrl;
}

public String getClientId() {
Expand Down Expand Up @@ -53,4 +57,20 @@ public String getTokenUrl() {
public String getResponseType() {
return responseType;
}

public String getMessageUrl() {
return messageUrl;
}

public URI getUserInfoUrlAsUri() {
return URI.create(userInfoUrl);
}

public URI getTokenUrlAsUri() {
return URI.create(tokenUrl);
}

public URI getMessageUrlAsUri() {
return URI.create(messageUrl);
}
}
Loading