Skip to content

Commit

Permalink
부산대_BE_진서현_3주차_1단계 (kakao-tech-campus-2nd-step2#189)
Browse files Browse the repository at this point in the history
* Initial commit

* Initial commit

* feat: set up the project

* Docs : 파일 형식자 변경

* Test : 컨트롤러 잘 돌아가는지..ㅎ

* Feat: 컨트롤러 작성

* Feat: 컨버터 작성

* Feat: Product 엔티티

* Feat: dto 작성

* Feat: 컨트롤러 작성

* fix : getter 없던 오류 추가

* feat: 요청 객체 추가

* fix : 1. 메서드 접근 제어자 수정, 2. id 발급 전략 선택 3.

* fix : 1. 메서드 접근 제어자 수정, 2. id 발급 전략 선택 3. 쿼리파라미터 타입형 long으로 수정 4. 불필요한 예외처리 삭제

* Feat: thymeleaf 공부

* style : ProductRequest의 줄바꿈

* Feat: Product에 toString 추가

* Feat: 타임리프를 적용한 html 문서 추가

* Feat:수정을 위한 별도의 페이지 추가

* Feat: 관리자페이지 관련 컨트롤러 추가

* Feat: 폼에서 put 메서드를 쓰기 위한 빈등록

* chore : 타임리프 사용을 위한 의존성 추가

* Style : 페이지 한글로 통일

* Style : 페이지 한글로 통일

* refactor : 전체 메서드의 매핑 url에 처음을  rest로 수정

* refactor : @RestMapping 사용하고, 변수명 바꿈(오타수정등)

* refactor :쿼리 파라미터를 @ModelAttribute 사용해서 한버ㅓㄴ에 받도록

* style: 필요없는 거 지움

* chore : application.properties 에 jdbc 설정 추가

* style : toString 삭제

* feat : JDBC를 사용한 레파지토리 Dao 추가

* feat : JDBC Dao 를 사용해서 DB 기능 추가

* style : MapToProductTransformer -> ProductTransformer클래스 명 변경

* docs : README.md 작성

* feat: set up the project

* 부산대_BE_진서현_2주차_과제 _Step0 (kakao-tech-campus-2nd-step2#60)

* Initial commit

* feat: set up the project

* Docs : 파일 형식자 변경

* Test : 컨트롤러 잘 돌아가는지..ㅎ

* Feat: 컨트롤러 작성

* Feat: 컨버터 작성

* Feat: Product 엔티티

* Feat: dto 작성

* Feat: 컨트롤러 작성

* fix : getter 없던 오류 추가

* feat: 요청 객체 추가

* fix : 1. 메서드 접근 제어자 수정, 2. id 발급 전략 선택 3.

* fix : 1. 메서드 접근 제어자 수정, 2. id 발급 전략 선택 3. 쿼리파라미터 타입형 long으로 수정 4. 불필요한 예외처리 삭제

* Feat: thymeleaf 공부

* style : ProductRequest의 줄바꿈

* Feat: Product에 toString 추가

* Feat: 타임리프를 적용한 html 문서 추가

* Feat:수정을 위한 별도의 페이지 추가

* Feat: 관리자페이지 관련 컨트롤러 추가

* Feat: 폼에서 put 메서드를 쓰기 위한 빈등록

* chore : 타임리프 사용을 위한 의존성 추가

* Style : 페이지 한글로 통일

* Style : 페이지 한글로 통일

* refactor : 전체 메서드의 매핑 url에 처음을  rest로 수정

* refactor : @RestMapping 사용하고, 변수명 바꿈(오타수정등)

* refactor :쿼리 파라미터를 @ModelAttribute 사용해서 한버ㅓㄴ에 받도록

* style: 필요없는 거 지움

* chore : application.properties 에 jdbc 설정 추가

* style : toString 삭제

* feat : JDBC를 사용한 레파지토리 Dao 추가

* feat : JDBC Dao 를 사용해서 DB 기능 추가

* style : MapToProductTransformer -> ProductTransformer클래스 명 변경

* docs : README.md 작성

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* docs(README.md): 기능 구현 사항 작성

* chore(controller) : 컨트롤러 명 변경

* docs(README.md): 유효성 검사 위치 추가 고민 작성

* refactor(ProductDao) : id 전략 위치 Dao로 변경

* refactor(ProductDao) : id 전략 위치 Dao로 변경

* refactor(ProductDao) : idㄹ를 Dao 내부에서 생성하도록

* build(build.gradle): validation 의존성 추가

* refactor: 상품 추가 로직에 유효성 검사를 추가하고,컨트롤러,서비스 단으로 분리하였음

* refactor: 삼품 삳제 로직에, Dao에서 유효성을 검사할 수 있게, 서비스와 컨트롤러를 구분하도록 수정

* refactor:상품 정보 변경 로직 수정

* fix(

* refactor:상품 정보 찾기  로직 수정, 컨트롤러와 서비스 분리

* fix (ProductService) : Servide내에서 Dao 클래스 주입안돼서 코드 수정

* docs(READE.md): 예외 발생 처리 로직 추가

* docs(READE.md): 예외 클래스 작성

* docs(product.html) : 헤더 추가^^

* docs(error.html) : 스타일 변경

* feat: 에러 핸들러 추가

* bug(ProductValidator): 가격 유효성 검사 로직 추가

* bug(ProductValidator): 가격 유효성 검사 로직 추가

* docs : 타임리프 탬플릿 변경

* fetch: Valid 구현

* fetch: vaild 사용

* build: 의존성 추가

* docs: 구현 고민 정리

* style:

* bug: 유효성 검사 안되는 오류 해결

* stlye: 패키지 구조 변경

* stlye: 패키지 구조 변경

* refactor: 타임리프 -> ajax로!! 로 변환

* refactor: 유효성 검사를 컨트롤러에서 진행

* refactor: DB id 생성 전략으로 변경

* Merge step2_ajax into step1 with preference to step2_ajax changes

* chore: 패키지 변경

* feat : User 객체 구현과 레파지토리 구현

* feat : Jwt 발급 검증 util 객체 구현

* feat : Jwt 발급 검증 util 객체 구현

* feat : 회원가입 로직 구현

* feat :로그인  로직 구현

* refactor:메서드 명 수정

* fix: url 잘못 등록되어있단 부분 고침 -> 무한 리디렉션..

* fix: 쉬운 키로, 생성안되는 오류 해결

* fix: 바디데이터 응답 객체에 담기

* chore(UserException) : 패키지 위치 변경

* fix(UserJoinRequest): 알고보니까 member 페이지에서 키로 잘 전달 중임

* fix(ProductDao): id 발급 전략에 따른 변경

* fix(MemberService) : != 연산자 고침

* fix : 에러 처리 부분

* fix:jwt 검증 부분 오류 해결

* fetch: 커스텀예외 구현

* refactor:오류 핸들링 동일하게 변경

* build: 의존성 추가

* chore: ㄱ공백 추가..?

* docs: 문서 작성

* 3단계 과제 요구사항에 맞춰서, 인증 토큰 키 변경

* docs : 기능 구현 계획

* build : 의존성 추가

* refactor: 위시리스트 등록시, 유저 id 가 필요해서 JWT에 id도 추가함(DB 접근 ㄴㄴ)

* fetch : 위시리스트 상품 Dto, Entity, Dao 구현

* refactor: jwt 발급시 id도 추가

* refactor: jwt 발급시 id도 추가

* chore :

* chore : 수정사항 딱히 없음

* refactor: 보안을 위해 password를 뺌

* refactor: 로그인, 회원가입, 유효성 검사 추가

* 부산대 BE 진서현 2주차 step1 (kakao-tech-campus-2nd-step2#198)

* Initial commit

* feat: set up the project

* Docs : 파일 형식자 변경

* Test : 컨트롤러 잘 돌아가는지..ㅎ

* Feat: 컨트롤러 작성

* Feat: 컨버터 작성

* Feat: Product 엔티티

* Feat: dto 작성

* Feat: 컨트롤러 작성

* fix : getter 없던 오류 추가

* feat: 요청 객체 추가

* fix : 1. 메서드 접근 제어자 수정, 2. id 발급 전략 선택 3.

* fix : 1. 메서드 접근 제어자 수정, 2. id 발급 전략 선택 3. 쿼리파라미터 타입형 long으로 수정 4. 불필요한 예외처리 삭제

* Feat: thymeleaf 공부

* style : ProductRequest의 줄바꿈

* Feat: Product에 toString 추가

* Feat: 타임리프를 적용한 html 문서 추가

* Feat:수정을 위한 별도의 페이지 추가

* Feat: 관리자페이지 관련 컨트롤러 추가

* Feat: 폼에서 put 메서드를 쓰기 위한 빈등록

* chore : 타임리프 사용을 위한 의존성 추가

* Style : 페이지 한글로 통일

* Style : 페이지 한글로 통일

* refactor : 전체 메서드의 매핑 url에 처음을  rest로 수정

* refactor : @RestMapping 사용하고, 변수명 바꿈(오타수정등)

* refactor :쿼리 파라미터를 @ModelAttribute 사용해서 한버ㅓㄴ에 받도록

* style: 필요없는 거 지움

* chore : application.properties 에 jdbc 설정 추가

* style : toString 삭제

* feat : JDBC를 사용한 레파지토리 Dao 추가

* feat : JDBC Dao 를 사용해서 DB 기능 추가

* style : MapToProductTransformer -> ProductTransformer클래스 명 변경

* docs : README.md 작성

* docs(README.md): 기능 구현 사항 작성

* chore(controller) : 컨트롤러 명 변경

* docs(README.md): 유효성 검사 위치 추가 고민 작성

* refactor(ProductDao) : id 전략 위치 Dao로 변경

* refactor(ProductDao) : id 전략 위치 Dao로 변경

* refactor(ProductDao) : idㄹ를 Dao 내부에서 생성하도록

* build(build.gradle): validation 의존성 추가

* refactor: 상품 추가 로직에 유효성 검사를 추가하고,컨트롤러,서비스 단으로 분리하였음

* refactor: 삼품 삳제 로직에, Dao에서 유효성을 검사할 수 있게, 서비스와 컨트롤러를 구분하도록 수정

* refactor:상품 정보 변경 로직 수정

* fix(

* refactor:상품 정보 찾기  로직 수정, 컨트롤러와 서비스 분리

* fix (ProductService) : Servide내에서 Dao 클래스 주입안돼서 코드 수정

* docs(READE.md): 예외 발생 처리 로직 추가

* docs(READE.md): 예외 클래스 작성

* docs(product.html) : 헤더 추가^^

* docs(error.html) : 스타일 변경

* feat: 에러 핸들러 추가

* bug(ProductValidator): 가격 유효성 검사 로직 추가

* bug(ProductValidator): 가격 유효성 검사 로직 추가

* docs : 타임리프 탬플릿 변경

* fetch: Valid 구현

* fetch: vaild 사용

* build: 의존성 추가

* docs: 구현 고민 정리

* style:

* bug: 유효성 검사 안되는 오류 해결

* stlye: 패키지 구조 변경

* stlye: 패키지 구조 변경

* refactor: 타임리프 -> ajax로!! 로 변환

* refactor: 유효성 검사를 컨트롤러에서 진행

* refactor: DB id 생성 전략으로 변경

* Merge step2_ajax into step1 with preference to step2_ajax changes

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* 부산대 BE_진서현_2주차 과제(2단계) (kakao-tech-campus-2nd-step2#332)

* Initial commit

* feat: set up the project

* Docs : 파일 형식자 변경

* Test : 컨트롤러 잘 돌아가는지..ㅎ

* Feat: 컨트롤러 작성

* Feat: 컨버터 작성

* Feat: Product 엔티티

* Feat: dto 작성

* Feat: 컨트롤러 작성

* fix : getter 없던 오류 추가

* feat: 요청 객체 추가

* fix : 1. 메서드 접근 제어자 수정, 2. id 발급 전략 선택 3.

* fix : 1. 메서드 접근 제어자 수정, 2. id 발급 전략 선택 3. 쿼리파라미터 타입형 long으로 수정 4. 불필요한 예외처리 삭제

* Feat: thymeleaf 공부

* style : ProductRequest의 줄바꿈

* Feat: Product에 toString 추가

* Feat: 타임리프를 적용한 html 문서 추가

* Feat:수정을 위한 별도의 페이지 추가

* Feat: 관리자페이지 관련 컨트롤러 추가

* Feat: 폼에서 put 메서드를 쓰기 위한 빈등록

* chore : 타임리프 사용을 위한 의존성 추가

* Style : 페이지 한글로 통일

* Style : 페이지 한글로 통일

* refactor : 전체 메서드의 매핑 url에 처음을  rest로 수정

* refactor : @RestMapping 사용하고, 변수명 바꿈(오타수정등)

* refactor :쿼리 파라미터를 @ModelAttribute 사용해서 한버ㅓㄴ에 받도록

* style: 필요없는 거 지움

* chore : application.properties 에 jdbc 설정 추가

* style : toString 삭제

* feat : JDBC를 사용한 레파지토리 Dao 추가

* feat : JDBC Dao 를 사용해서 DB 기능 추가

* style : MapToProductTransformer -> ProductTransformer클래스 명 변경

* docs : README.md 작성

* docs(README.md): 기능 구현 사항 작성

* chore(controller) : 컨트롤러 명 변경

* docs(README.md): 유효성 검사 위치 추가 고민 작성

* refactor(ProductDao) : id 전략 위치 Dao로 변경

* refactor(ProductDao) : id 전략 위치 Dao로 변경

* refactor(ProductDao) : idㄹ를 Dao 내부에서 생성하도록

* build(build.gradle): validation 의존성 추가

* refactor: 상품 추가 로직에 유효성 검사를 추가하고,컨트롤러,서비스 단으로 분리하였음

* refactor: 삼품 삳제 로직에, Dao에서 유효성을 검사할 수 있게, 서비스와 컨트롤러를 구분하도록 수정

* refactor:상품 정보 변경 로직 수정

* fix(

* refactor:상품 정보 찾기  로직 수정, 컨트롤러와 서비스 분리

* fix (ProductService) : Servide내에서 Dao 클래스 주입안돼서 코드 수정

* docs(READE.md): 예외 발생 처리 로직 추가

* docs(READE.md): 예외 클래스 작성

* docs(product.html) : 헤더 추가^^

* docs(error.html) : 스타일 변경

* feat: 에러 핸들러 추가

* bug(ProductValidator): 가격 유효성 검사 로직 추가

* bug(ProductValidator): 가격 유효성 검사 로직 추가

* docs : 타임리프 탬플릿 변경

* fetch: Valid 구현

* fetch: vaild 사용

* build: 의존성 추가

* docs: 구현 고민 정리

* style:

* bug: 유효성 검사 안되는 오류 해결

* stlye: 패키지 구조 변경

* stlye: 패키지 구조 변경

* refactor: 타임리프 -> ajax로!! 로 변환

* refactor: 유효성 검사를 컨트롤러에서 진행

* refactor: DB id 생성 전략으로 변경

* Merge step2_ajax into step1 with preference to step2_ajax changes

* chore: 패키지 변경

* feat : User 객체 구현과 레파지토리 구현

* feat : Jwt 발급 검증 util 객체 구현

* feat : Jwt 발급 검증 util 객체 구현

* feat : 회원가입 로직 구현

* feat :로그인  로직 구현

* refactor:메서드 명 수정

* fix: url 잘못 등록되어있단 부분 고침 -> 무한 리디렉션..

* fix: 쉬운 키로, 생성안되는 오류 해결

* fix: 바디데이터 응답 객체에 담기

* chore(UserException) : 패키지 위치 변경

* fix(UserJoinRequest): 알고보니까 member 페이지에서 키로 잘 전달 중임

* fix(ProductDao): id 발급 전략에 따른 변경

* fix(MemberService) : != 연산자 고침

* fix : 에러 처리 부분

* fix:jwt 검증 부분 오류 해결

* fetch: 커스텀예외 구현

* refactor:오류 핸들링 동일하게 변경

* build: 의존성 추가

* chore: ㄱ공백 추가..?

* docs: 문서 작성

---------

Co-authored-by: 박재성(Jason) <[email protected]>

* refactor: 에러 메시지를 enum으로 구현과 적용

* test : 유저 회원가입 로직 테스트 구현

* chore: member -> user로 통일

* chore: member -> user로 통일

* Refactor: URI를 Restful 한 설계에 맞춰변경

* Refactor: jwt 인증에 필요없는 이메일 값을 제외함, enum을 사용해서 에러 메시지를 설정함,         HttpHeaders.AUTHORIZATION

* refator:products 반환 방식을 Map 형태에서 객체 그대로 반환하는 방법으로 변경

* refactor: user의 role enum 적용

* fetch(AuthUtil): 세션의 user가져오는 메서드 추가

* refactor: AuthUtil -> JwtUtil로 클래스 명 변경

* refactor: AuthUtil -> Jwtutil 변경

* style: 패키지 구조 변경

* refactor: session에서 user 가져오기 어노테이션으로 구현

* chore: 위치 변경 등

* refactor: 테이블 생성 위치 스크립트로 변경

* 테스트 파일 올라가도록 설정 변경

* docs : 기능 요구사항 정리

* build:JPA 의존성 추가

* fetch: wishProduct 에 JPA 도입

* fetch: User JPA 도입

* refator: product를 JPA로 관리

* fetch: 제품 관련 에러 추가

* chore: 자바 코드컨벤션 지키기

* chore: 자바 코드컨벤션 지키기

* refator: wishProduct Serive로 변경

* fix: User객체 ENUM 적용으로 인한 테스트 코드 오류 수정

* refactor : WishProductRepository 의 deleteByProductIdAndUserId메서드 반환값 수정

* fetch: WishProductRepositoryTest 추가

* fetch: ProductRepositoryTest 추가

* fetch: UserRepositoryTest 추가

* chore:빈칸 , 공백 삭제 등

* git : 충돌 해결

* git : 충돌 해결

---------

Co-authored-by: 박재성(Jason) <[email protected]>
  • Loading branch information
jinseohyun1228 and wotjd243 authored Jul 10, 2024
1 parent d08f6e6 commit ceb824c
Show file tree
Hide file tree
Showing 29 changed files with 519 additions and 379 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
<<<<<<< HEAD

# spring-gift-jpa

## 기능 요구 사항

> 아래의 DDL(Data Definition Language)을 보고 유추하여 엔티티 클래스와 리포지토리 클래스를 작성해 본다.
> @DataJpaTest를 사용하여 학습 테스트를 해 본다.
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'

compileOnly 'jakarta.servlet:jakarta.servlet-api:6.0.0'
implementation 'org.springframework:spring-jdbc:6.1.8'
implementation 'org.springframework.boot:spring-boot-starter-validation'
Expand All @@ -32,7 +32,7 @@ dependencies {
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
testImplementation 'org.assertj:assertj-core:3.24.2'

implementation 'org.springframework.data:spring-data-jpa:3.3.0'
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
}

Expand Down
1 change: 1 addition & 0 deletions src/main/java/gift/main/Exception/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public enum ErrorCode {
INVALID_TOKEN(HttpStatus.UNAUTHORIZED, "인증에 실패했습니다."),
ALREADY_EMAIL(HttpStatus.BAD_REQUEST, "이미 존재하는 이메일입니다."),
ERROR_LOGIN(HttpStatus.BAD_REQUEST, "이메일과 비밀번호를 정확히 입력해주세요"),
PRODUCT_NOT_FOUND(HttpStatus.NOT_FOUND, "해당 제품을 찾을 수 없습니다."),
;
//이메일과 비밀번호 코드가 401이 아닌 400인 이유: 코드를 보고 해당 유저가 있다고 판단할 것 같아서

Expand Down
8 changes: 6 additions & 2 deletions src/main/java/gift/main/annotation/IsValidName.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,17 @@


@Documented
@Constraint(validatedBy = ProductNameValidator.class )
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER })

@Constraint(validatedBy = ProductNameValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface IsValidName {

String value() default "";

String message() default "Invalid product name";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};
}
9 changes: 4 additions & 5 deletions src/main/java/gift/main/config/WebConfig.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package gift.main.config;

import gift.main.interceptor.AuthInterceptor;


import gift.main.resolver.SessionUserArgumentResolver;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
Expand All @@ -14,11 +12,10 @@

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
public class WebConfig implements WebMvcConfigurer {

private final AuthInterceptor authLoginInterceptor;


public WebConfig(AuthInterceptor authLoginInterceptor) {
this.authLoginInterceptor = authLoginInterceptor;
}
Expand All @@ -33,5 +30,7 @@ public void addInterceptors(InterceptorRegistry registry) {
// 인터셉터를 등록하는 메서드/members/register
// CustomInterceptor를 등록하고, 모든 URL에 대해 인터셉터를 적용하도록 설정
registry.addInterceptor(authLoginInterceptor)
.excludePathPatterns("/members/login", "/members/register","","/").addPathPatterns("/**");}
.excludePathPatterns("/members/login", "/members/register", "", "/").addPathPatterns("/**");
}

}
1 change: 0 additions & 1 deletion src/main/java/gift/main/controller/PageController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package gift.main.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.GetMapping;

@Controller
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/gift/main/controller/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,21 @@ public UserController(UserService userService) {

@PostMapping("/members/register")
public ResponseEntity<?> joinMember(@Valid @RequestBody UserJoinRequest userJoinRequest, HttpServletResponse response) {

Map<String, Object> responseBody = new HashMap<>();
String token = userService.joinUser(userJoinRequest);
String token = userService.joinUser(userJoinRequest);
responseBody.put("redirectUrl", "/spring-gift");
return ResponseEntity.status(HttpStatus.CREATED)
.header(HttpHeaders.AUTHORIZATION,token)
.body(responseBody);}
.header(HttpHeaders.AUTHORIZATION, token)
.body(responseBody);
}

@PostMapping("/members/login")
public ResponseEntity<?> loinMember(@Valid @RequestBody UserLoginRequest userloginDto, HttpServletResponse response) {
Map<String, Object> responseBody = new HashMap<>();
String token = userService.loginUser(userloginDto);
String token = userService.loginUser(userloginDto);
responseBody.put("redirectUrl", "/spring-gift");
return ResponseEntity.status(HttpStatus.CREATED)
.header(HttpHeaders.AUTHORIZATION,token)
.header(HttpHeaders.AUTHORIZATION, token)
.body(responseBody);

}
Expand Down
43 changes: 21 additions & 22 deletions src/main/java/gift/main/controller/WishProductController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,12 @@

import gift.main.annotation.SessionUser;
import gift.main.dto.UserVo;
import gift.main.dto.WishListProductDto;
import gift.main.entity.Product;
import gift.main.entity.WishlistProduct;
import gift.main.repository.ProductDao;
import gift.main.repository.WishlistProductDao;
import gift.main.util.AuthUtil;
import gift.main.util.JwtUtil;
import jakarta.servlet.http.HttpSession;
import gift.main.entity.WishProduct;
import gift.main.service.ProductService;
import gift.main.service.WishProductService;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
Expand All @@ -20,40 +17,42 @@
@RestController
@RequestMapping("/product")
public class WishProductController {
private final ProductDao productDao;
private final WishlistProductDao wishlistProductDao;

public WishProductController(ProductDao productDao, WishlistProductDao wishlistProductDao) {
this.productDao = productDao;
this.wishlistProductDao = wishlistProductDao;
private final WishProductService wishProductService;
private final ProductService productService;

public WishProductController(WishProductService wishProductService, ProductService productService) {
this.wishProductService = wishProductService;
this.productService = productService;
}

@GetMapping()
@GetMapping
public ResponseEntity<?> getProducts() {
List<Product> products = productDao.selectProductAll();
List<Product> products = productService.getProducts();
Map<String, List<Product>> response = new HashMap<>();
response.put("products", products);
return ResponseEntity.ok(response);
}

@DeleteMapping("/wishlist/{productId}")
public ResponseEntity<?> deleteProducts(@PathVariable(name = "productId") Long productId, @SessionUser UserVo sessionUserVo) {
wishlistProductDao.deleteWishlistProductByUserIdAndProductId(sessionUserVo.getId(), productId);
@Transactional
public ResponseEntity<?> deleteWishProduct(@PathVariable(name = "productId") Long productId, @SessionUser UserVo sessionUserVo) {
wishProductService.deleteProducts(productId, sessionUserVo);
return ResponseEntity.ok("성공적으로 삭제 완료~!");
}

@GetMapping("/wishlist")
public ResponseEntity<?> deleteProducts(@SessionUser UserVo sessionUser) {
List<WishlistProduct> wishlistProducts = wishlistProductDao.selectWishlistProductsByUserId(sessionUser.getId());
Map<String, List<WishlistProduct>> response = new HashMap<>();
response.put("wishlistProducts", wishlistProducts);
public ResponseEntity<?> getWishProduct(@SessionUser UserVo sessionUser) {
List<WishProduct> wishProducts = wishProductService.getWishProducts(sessionUser.getId());
Map<String, List<WishProduct>> response = new HashMap<>();
response.put("wishlistProducts", wishProducts);
return ResponseEntity.ok(response);
}

@Transactional
@PostMapping("/wishlist/{productId}")
public ResponseEntity<?> addWishlistProduct(@PathVariable(name = "productId") Long productId, @SessionUser UserVo sessionUser){
WishListProductDto wishListProductDto = new WishListProductDto(productId, sessionUser.getId());
wishlistProductDao.insertWishlistProduct(wishListProductDto);
wishProductService.addWishlistProduct(productId, sessionUser);
return ResponseEntity.ok("성공적으로 등록~");
}

Expand Down
9 changes: 5 additions & 4 deletions src/main/java/gift/main/dto/ProductRequest.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package gift.main.dto;
import gift.main.annotation.IsValidName;

import gift.main.annotation.IsValidName;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.PositiveOrZero;

public record ProductRequest(@IsValidName String name,
@PositiveOrZero(message = "상품 가격은 음수일 수 없습니다.") int price,
@NotBlank(message = "이미지주소를 등록해주세요.") String imageUrl) {
public record ProductRequest(
@IsValidName String name,
@PositiveOrZero(message = "상품 가격은 음수일 수 없습니다.") int price,
@NotBlank(message = "이미지주소를 등록해주세요.") String imageUrl) {

}
53 changes: 45 additions & 8 deletions src/main/java/gift/main/entity/Product.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,57 @@
package gift.main.entity;

import gift.main.dto.ProductRequest;
import jakarta.persistence.*;

@Entity
public class Product {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(nullable = false)
private String name;
@Column(nullable = false, columnDefinition = "decimal(10,2) check (price >= 0)")
private int price;
@Column(nullable = false)
private String imageUrl;

public Product() {

}

public Product(ProductRequest productRequest) {
this.name = productRequest.name();
this.price = productRequest.price();
this.imageUrl = productRequest.imageUrl();
}

public Product(long id, String name, int price, String imageUrl) {
this.id = id;
this.name = name;
this.price = price;
this.imageUrl = imageUrl;
}

public Product(String name, int price, String imageUrl) {
this.name = name;
this.price = price;
this.imageUrl = imageUrl;

}

public void setName(String name) {
this.name = name;
}

public void setPrice(int price) {
this.price = price;
}

public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}

public long getId() {
return id;
Expand All @@ -24,12 +69,4 @@ public String getImageUrl() {
return imageUrl;
}

public Product(long id, String name, int price, String imageUrl) {
this.id = id;
this.name = name;
this.price = price;
this.imageUrl = imageUrl;
}


}
52 changes: 47 additions & 5 deletions src/main/java/gift/main/entity/User.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,30 @@
package gift.main.entity;

import gift.main.dto.UserJoinRequest;
import jakarta.persistence.*;

@Entity
@Table(name = "`user`")
public class User {
private final long id;
private final String name;
private final String email;
private final String password;
private final Role role;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(nullable = false)
private String name;

@Column(nullable = false, unique = true)
private String email;

@Column(nullable = false)
private String password;

@Column(nullable = false)
private Role role;

public User() {
}

public User(long id, String name, String email, String password, Role role) {
this.id = id;
Expand All @@ -15,6 +34,14 @@ public User(long id, String name, String email, String password, Role role) {
this.role = role;
}

public User(String name, String email, String password, Role role) {
this.name = name;
this.email = email;
this.password = password;
this.role = role;
}



public User(long id, String name, String email, String password, String role) {
this.id = id;
Expand All @@ -24,6 +51,21 @@ public User(long id, String name, String email, String password, String role) {
this.role = Role.valueOf(role.toUpperCase());
}

public User(UserJoinRequest userJoinRequest) {
this.name = userJoinRequest.name();
this.email = userJoinRequest.email();
this.password = userJoinRequest.password();
this.role = Role.valueOf(userJoinRequest.role());
}

public User(String name, String email, String password, String role) {
this.name = name;
this.email = email;
this.password = password;
this.role = Role.valueOf(role.toUpperCase());
}


public long getId() {
return id;
}
Expand Down
Loading

0 comments on commit ceb824c

Please sign in to comment.