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

[4기 - 고예성] SpringBoot Part3 Weekly Mission 제출합니다. #824

Open
wants to merge 21 commits into
base: yesung/week3
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
7d0e1fb
test(Voucher): 바우처 생성, 할인 성공/실패 테스트 작성
Dev-Yesung Jul 1, 2023
334c245
docs(docs): 2주차 미션 README 추가
Dev-Yesung Jul 1, 2023
eed163e
feat: 바우처 테이블 정의 및 필드값 추가
Dev-Yesung Jul 1, 2023
dff92d0
feat: JdbcVoucherRepository 구현
Dev-Yesung Jul 1, 2023
151077f
실수로 삭제된 파일복구
Dev-Yesung Jul 3, 2023
6304574
실수로 삭제된 파일복구
Dev-Yesung Jul 3, 2023
68ed3e0
feat: JdbcWalletRepository 구현
Dev-Yesung Jul 3, 2023
07d6622
feat: JdbcCustomerRepository 구현
Dev-Yesung Jul 3, 2023
abe9aea
refactor: 어플리케이션의 전체적인 구조 리팩토링
Dev-Yesung Jul 6, 2023
f618327
refactor: DB구조 변경, 잘못된 기능 및 책임분산
Dev-Yesung Jul 7, 2023
4fe9799
feat: 타임리프 설정 완료
Dev-Yesung Jul 7, 2023
8de0233
feat: 바우처미션 week3 모든 기능 구현완료
Dev-Yesung Jul 10, 2023
792a4bc
refactor: Query 클래스 삭제, 스트림API 추가적용
Dev-Yesung Jul 12, 2023
262831f
refactor: DTO와 Enum 리팩토링
Dev-Yesung Jul 12, 2023
fafcb65
refactor: DispatcherController 리팩토링
Dev-Yesung Jul 12, 2023
341099c
refactor: JdbcCustomerRepository의 deleteByCustomerId 리팩토링
Dev-Yesung Jul 12, 2023
345dc39
refactor: Exception 리팩토링
Dev-Yesung Jul 13, 2023
695b5ab
refactor: 일부 DTO를 레코드 타입으로 리팩토링, 메서드명 of로 변경
Dev-Yesung Jul 13, 2023
ca46a8c
refactor: 타임리프 리다이렉트 페이지 리팩토링
Dev-Yesung Jul 13, 2023
2edd0e5
refactor: JdbcCustomer를 NormalCustomer로 변경
Dev-Yesung Jul 16, 2023
b313367
refactor: 바우처 검색 API 리팩토링
Dev-Yesung Jul 16, 2023
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
23 changes: 15 additions & 8 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,25 +1,32 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.1'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
id 'org.springframework.boot' version '3.1.1'
id 'io.spring.dependency-management' version '1.1.0'
}

group = 'kr.co.programmers'
version = '0.0.1-SNAPSHOT'

java {
sourceCompatibility = '17'
sourceCompatibility = '17'
}

repositories {
mavenCentral()
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web:3.1.0'
implementation 'org.springframework.boot:spring-boot-starter-jdbc:3.1.0'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.0.0'


runtimeOnly 'com.mysql:mysql-connector-j:8.0.32'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
useJUnitPlatform()
useJUnitPlatform()
}
File renamed without changes.
28 changes: 28 additions & 0 deletions docs/README-week2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# SpringBoot Part2 Weekly Mission(~7/7)

## 🌱 스프링 바우처 미션 week 2

### (기본) 바우처 관리 애플리케이션

- [ ] 바우처 관리 애플리케이션에 단위테스트를 작성해보세요.
- 가능한 많은 단위 테스트코드를 작성하려고 노력해보세요.
- 엣지 케이스(예외 케이스)를 고려해서 작성해주세요.
- Hamcrest 의 메쳐들을 다양하게 작성해보고 익숙해져 보세요.
<br><br>
- [x] 바우처 관리 애플리케이션에서도 과정에서 다루었던 고객을 적용해보세요.
- customers 테이블 정의 및 추가
- CustomerRepository 추가 및 JdbcTemplate을 사용해서 구현
<br><br>
- [x] (1주차엔 파일로 관리하게 했다.) 바우처 정보를 DB로 관리해보세요.
- 바우처에 엔터티에 해당하는 vouchers 테이블을 한번 정의해보세요.
- 바우처 레포지토리를 만들어보세요. (JdbcTemplate을 사용해서 구현)
- 기존의 파일에서 바우처를 관리한 것을 vouchers 테이블을 통해서 CRUD가 되게 해보세요.
<br><br>
- [x] (심화) 바우처 지갑을 만들어보세요.
- 특정 고객에게 바우처를 할당할 수 있습니다.
- 고객이 어떤 바우처를 보유하고 있는지 조회할 수 있어야 합니다.
- 고객이 보유한 바우처를 제거할 수 있어야 합니다.
- 특정 바우처를 보유한 고객을 조회할 수 있어야 합니다.
<br><br>


25 changes: 25 additions & 0 deletions docs/README-week3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# SpringBoot Part3 Weekly Mission(~7/14)

## 🌱 스프링 바우처 미션 week 3

### (기본) 바우처 서비스 관리페이지 개발하기

- Spring MVC를 적용해서 thymeleaf 템플릿을 설정해보세요.
- 커맨드로 지원했던 기능을 thymeleaf를 이용해서 관리페이지를 만들고 다음 기능을 지원가능하게 해보세요
- [x] 조회페이지
- [x] 상세페이지
- [x] 입력페이지
- [x] 삭제기능

### (기본) 바우처 서비스의 API 개발하기

- Spring MVC를 적용해서 JSON과 XML을 지원하는 REST API를 개발해보세요
- [x] 전체 조회기능
- [x] 조건별 조회기능 (바우처 생성기간 및 특정 할인타입별)
- [x] 바우처 추가기능
- [x] 바우처 삭제기능
- [x] 바우처 아이디로 조회 기능

### 보너스

- [x] 바우처 지갑용 관리페이지를 만들어보세요.
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package kr.co.programmers.springbootbasic;

import kr.co.programmers.springbootbasic.customer.controller.CustomerController;
import kr.co.programmers.springbootbasic.customer.domain.CustomerStatus;
import kr.co.programmers.springbootbasic.customer.dto.CustomerResponse;
import kr.co.programmers.springbootbasic.io.Input;
import kr.co.programmers.springbootbasic.io.Output;

import kr.co.programmers.springbootbasic.io.enums.CustomerFindCommand;
import kr.co.programmers.springbootbasic.io.enums.CustomerServiceCommand;
import kr.co.programmers.springbootbasic.io.enums.EntireServiceCommand;
import kr.co.programmers.springbootbasic.io.enums.VoucherServiceCommand;
import kr.co.programmers.springbootbasic.io.enums.WalletServiceCommand;
import kr.co.programmers.springbootbasic.voucher.controller.ConsoleVoucherController;
import kr.co.programmers.springbootbasic.voucher.domain.VoucherType;
import kr.co.programmers.springbootbasic.voucher.dto.VoucherResponse;
import kr.co.programmers.springbootbasic.wallet.controller.ConsoleWalletController;
import kr.co.programmers.springbootbasic.wallet.dto.WalletResponse;
import kr.co.programmers.springbootbasic.wallet.dto.WalletSaveDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Controller;

import java.util.List;
import java.util.Optional;

@Controller
@Profile("console")
public class DispatcherController implements ApplicationRunner {
private static final Logger logger = LoggerFactory.getLogger(DispatcherController.class);
private final Input inputConsole;
private final Output outputConsole;
private final ConsoleVoucherController voucherController;
private final CustomerController customerController;
private final ConsoleWalletController walletController;
private boolean isExit;

public DispatcherController(Input inputConsole, Output outputConsole,
ConsoleVoucherController voucherController,
CustomerController customerController,
ConsoleWalletController walletController) {
this.inputConsole = inputConsole;
this.outputConsole = outputConsole;
this.voucherController = voucherController;
this.customerController = customerController;
this.walletController = walletController;
}

@Override
public void run(ApplicationArguments args) {
while (!isExit) {
executeServiceLoop();
}
logger.info("서비스를 종료합니다.");
outputConsole.printExit();
}

private void executeServiceLoop() {
try {
doService();
} catch (RuntimeException e) {
outputConsole.printMessage(e.getMessage());
}
}

private void doService() {
outputConsole.printProgramMenu();
EntireServiceCommand command = inputConsole.readEntireServiceCommand();

switch (command) {
case EXIT -> isExit = true;
case VOUCHER_SERVICE -> voucherController.doVoucherService();
case CUSTOMER_SERVICE -> customerController.doCustomerService();
case WALLET_SERVICE -> walletController.doWalletService();
}
}
}
86 changes: 0 additions & 86 deletions src/main/java/kr/co/programmers/springbootbasic/Processor.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package kr.co.programmers.springbootbasic;

import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@Profile("web")
@RequestMapping("/index")
public class WebServiceController {
@GetMapping
public String showIndexPage() {
return "index";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package kr.co.programmers.springbootbasic.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@Profile("web")
public class MvcConfig implements WebMvcConfigurer {
@Bean
public HiddenHttpMethodFilter hiddenHttpMethodFilter() {
return new HiddenHttpMethodFilter();
}
}

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Loading