Validation 코드 작성
하드코딩된것 상수로 변경하기 (코드리뷰 사항)
중복코드
가 발생하고 코드가 길어짐 해결하기Repository
인터페이스 변경
으로 인해 기존 Repository 코드들 깨짐의존관계
가 지저분해짐 수정하기BeforeAll과 AfterAll 작동 안함?? 문제
- 아 내가 하려던건 AfterEach임
커밋 정리하기
도메인 Builder 만들어보고 싶음
AOP 적용해보기
Exception 관리
## SpringBoot Basic Weekly Mission ###📝 요구사항(Week 2) **🔹(기본)바우처 관리 애플리케이션** - [-][1]**단위테스트 작성** - [v][2]**UserRepository 구현 (with JdbcTemplate)** - [v][3]**VoucherRepository 구현 (DB) 관리** **🔸(심화)바우처 지갑 만들기** - [v][4]**고객 바우처 할당 기능** - [v][5]**고객 바우처 조회 기능** - [v][6]**고객 바우처 제거 기능** - [v][7]**특정 바우처를 보유한 고객 조회 기능**
Q
UUID 별로인데 Long으로 바꾸면 안되나? UUID를 해야하는 이유가 꼭 있을까?
테스트에서 yaml 속성 가져오기
Spring Boot 프로젝트에서
application.yml
과 secret.yml
, 2개의 프로퍼티를 적용하려면 아래와 같이 SpringApplicationBuilder를 이용해 해결할 수 있었습니다.@SpringBootApplication public class Application { private static final String PROPERTIES = "spring.config.location=" +"classpath:/application.yml" +",classpath:/secret.yml"; public static void main(String[] args) { new SpringApplicationBuilder(RecruitJogboWeb.class) .properties(PROPERTIES) .run(args); } }
하지만 테스트 코드에서는 프로퍼티를 어떻게 가져와야 할 지 고민하던 중 @SpringBootTest에 properties속성이 있는것을 발견했고 위의 사용법과 동일하게 사용할 수 있습니다. @DataJpaTest, @WebMvcTest에도 properties 속성이 존재하는 걸로 보아 슬라이싱 테스트들에도 동일하게 적용할 수 있을 것으로 보입니다.
@SpringBootTest(properties = "spring.config.location=" + "classpath:/application.yml" + ",classpath:/secret.yml" )
GET /api/v1/vouchers
바우처 전체 조회
GET http://localhost:8080/api/v1/vouchers Accept: application/xml
<list> <com.example.voucherproject.voucher.model.Voucher> <id>fc001d5f-e17b-4a2a-a08e-fde0ee5b922d</id> <type>FIXED</type> <amount>1000</amount> <createdAt>2022-04-24T19:48:11.311</createdAt> </com.example.voucherproject.voucher.model.Voucher> <com.example.voucherproject.voucher.model.Voucher> <id>773e8c02-ec0c-4a2f-886d-799bf8c1a85a</id> <type>FIXED</type> <amount>42</amount> <createdAt>2022-04-28T20:23:52.229</createdAt> </com.example.voucherproject.voucher.model.Voucher> </list>
GET http://localhost:8080/api/v1/vouchers Accept: application/json
[ { "id": "fc001d5f-e17b-4a2a-a08e-fde0ee5b922d", "type": "FIXED", "amount": 1000, "createdAt": "2022-04-24T19:48:11.311", "updatedAt": null }, { "id": "773e8c02-ec0c-4a2f-886d-799bf8c1a85a", "type": "FIXED", "amount": 42, "createdAt": "2022-04-28T20:23:52.229", "updatedAt": null } ]
POST /api/v1/voucher
바우처 추가
POST http://localhost:8080/api/v1/voucher Accept: application/json Content-Type: application/json { "type": "PERCENT", "amount": 5 }
{ "id": "22fe64d4-3ec9-48ea-b76a-87789bc08a84", "type": "PERCENT", "amount": 5, "createdAt": "2022-04-29T08:50:14.266", "updatedAt": "2022-04-29T08:50:14.266" }
POST http://localhost:8080/api/v1/voucher Accept: application/xml Content-Type: application/json { "type": "PERCENT", "amount": 7 }
<com.example.voucherproject.voucher.model.Voucher> <id>302a6066-e1dc-46f2-a558-4c81175825ca</id> <type>PERCENT</type> <amount>7</amount> <createdAt>2022-04-29T08:50:55.456</createdAt> <updatedAt>2022-04-29T08:50:55.456</updatedAt> </com.example.voucherproject.voucher.model.Voucher>
GET /api/v1/voucher/{id}
바우처 상세 조회
GET http://localhost:8080/api/v1/voucher/302a6066-e1dc-46f2-a558-4c81175825ca Accept: application/json
{ "id": "302a6066-e1dc-46f2-a558-4c81175825ca", "type": "PERCENT", "amount": 7, "createdAt": "2022-04-29T08:50:55.456", "updatedAt": null }
POST /api/v1/voucher/query
바우처 조건별 조회
POST http://localhost:8080/api/v1/voucher/query Accept: application/json Content-Type: application/json { "type": "FIXED", "from": "2022-04-11" }
[ { "id": "30554b40-3276-403f-8c04-b897cc3b8319", "type": "FIXED", "amount": 1222, "createdAt": "2022-04-28T15:46:27.485", "updatedAt": null }, { "id": "4272f4d2-2002-4017-8909-94e611eb0053", "type": "FIXED", "amount": 50, "createdAt": "2022-04-28T17:31:08.017", "updatedAt": null }, { "id": "4841a132-d73b-4086-b863-28d5f58be330", "type": "FIXED", "amount": 1209, "createdAt": "2022-04-28T17:52:55.163", "updatedAt": null }, { "id": "6f673a61-c438-4c2d-a71d-3b9faceedf08", "type": "FIXED", "amount": 222, "createdAt": "2022-04-28T13:52:30.581", "updatedAt": null }, { "id": "773e8c02-ec0c-4a2f-886d-799bf8c1a85a", "type": "FIXED", "amount": 42, "createdAt": "2022-04-28T20:23:52.229", "updatedAt": null }, { "id": "fc001d5f-e17b-4a2a-a08e-fde0ee5b922d", "type": "FIXED", "amount": 1000, "createdAt": "2022-04-24T19:48:11.311", "updatedAt": null }
DELETE /api/v1/voucher/{id}
바우처 삭제
DELETE http://localhost:8080/api/v1/voucher/ee0b4ffa-433e-4ab9-ac72-08c6811d0cea
HTTP/1.1 200 Content-Length: 0 Date: Fri, 29 Apr 2022 00:19:27 GMT Keep-Alive: timeout=60 Connection: keep-alive <Response body is empty>