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

[TODO] 로컬 로그인 도입 및 수정 #50

Open
Capoomaru opened this issue Jun 3, 2023 · 0 comments
Open

[TODO] 로컬 로그인 도입 및 수정 #50

Capoomaru opened this issue Jun 3, 2023 · 0 comments

Comments

@Capoomaru
Copy link
Contributor

로컬로그인이 도입되면 해당 내용 수정하도록 수정

Capoomaru added a commit to Capoomaru/YURentCar-be-kang that referenced this issue Jun 3, 2023
 - User Entity class
    - @AllArgs, @equals, @builder 제거
       - @Builder.Default 제거
    - userId 제외한 생성자 및 Builder 추가
    - Update method 실행 시 Null 여부 체크

 - UserController
    - 생성자 @requiredargsconstructor 로 변경
    - 함수명 lookup -> get 변경
    - 경로명 수정
       - 변경에 대한 경로명 수정은 /change 제거
    - 변경 메소드에 대한 반환값 Boolean 변경
    - 사용자 정보 SecurityContext 로부터 호출
       - @CurrentSecurityContext(expression = "authentication.principal") UserAuthDto auth

Related to : YU-RentCar#1, YU-RentCar#27, YU-RentCar#31, YU-RentCar#50
Capoomaru added a commit to Capoomaru/YURentCar-be-kang that referenced this issue Sep 24, 2023
 - User Entity class
    - @AllArgs, @equals, @builder 제거
       - @Builder.Default 제거
    - userId 제외한 생성자 및 Builder 추가
    - Update method 실행 시 Null 여부 체크

 - UserController
    - 생성자 @requiredargsconstructor 로 변경
    - 함수명 lookup -> get 변경
    - 경로명 수정
       - 변경에 대한 경로명 수정은 /change 제거
    - 변경 메소드에 대한 반환값 Boolean 변경
    - 사용자 정보 SecurityContext 로부터 호출
       - @CurrentSecurityContext(expression = "authentication.principal") UserAuthDto auth

Related to : YU-RentCar#1, YU-RentCar#27, YU-RentCar#31, YU-RentCar#50
Capoomaru added a commit that referenced this issue Sep 24, 2023
* Update issue templates

* Feat : User 관련 Entity

- Admin
    - 관리자 Entity

* Feat : Branch 관련 Entity

- Branch
    - 지점 Entity
- KeyStorage
    - 차키 보관함 Entity
- Kiosk
    - 키오스크 Entity
- Notice
    - 공지사항 Entity
- ParkingSpot
    - 주차 자리 Entity

* Feat : Car 관련 Entity

- BranchCar
    - 지점이 가지고 있는 차량 Entity

- Car
    - 자동차 Entity

- CarSpecification
    - 자동차 제원 Entity

- Key
    - 차키 Entity

* Feat : Reservation 관련 Entity

- Card
    - 사용자가 등록한 카드 Entity

- Pay
    - 결제 Entity

- Point
    - 포인트 Entity

- Reservation
    - 예약 Entity

- Review
    - 예약 후기 Entity

* Feat : Insurance 관련 Entity

- BranchInsuranceCompanyContraction
    - 지점과 보험사의 계약 Entity

- InsuranceCompany
    - 보험사 Entity

- InsuranceContract
    - 보험 계약 Entity

* Feat : Spring Security 인증 객체를 위한 UserAuthDto 작성

- UserAuthDto
   - extends User
      - Spring Security 의 User 상속
         - username : 아이디
         - password : 비밀번호
         - authorities : 권한

   - implements OAuth2User
      - 소셜 로그인을 위한 메소드
         - getAttributes 함수를 구현해야함
         - getName 함수가 필요함

* Feat : OAuth2 로그인을 위한 SecurityConfig 클래스 설정

- webBaseUrl
   - application.properties 를 통한 주소 주입
   - PasswordEncoder 주입
   - BCryptPasswordEncoder 사용
   - SecurityFilterChain springSecurity(HttpSecurity http)
      - cors 사용 및 csrf 비활성화
      - oauth2Login 활성화
         - defaultSuccessUrl(webBaseUrl)
            - webBaseUrl 로 이동하도록 설정
         - userInfoEndpoint()
            - 로그인 이후 로그인 정보를 담아주는 함수
            - 아직 미구현
         - userService(oAuth2UserDetailService())
            - oauth2를 위한 Service 연결

* Feat : Enum <-> DB 를 위한 인터페이스 구축

- EnumValue interface
   - 가독성을 위해 한글을 위한 desc 변수와 DB 상의 데이터 DbValue 에 대한 getter interface
      - 이를 상속받는 클래스들을 모아 하나의 abstract Converter 클래스를 상속받아 동일 구현 코드를 제거

- EnumBitmapValue interface
   - EnumSet 을 하나의 Bitmap(int) 로 치환하기 위한 인터페이스
      - EnumSet 에 대한 getter 메소드를 가짐

Related to: #24

* Feat : Enum Converter Utils 구축

- EnumValueConvertUtils class
   - @NoArgsConstructor(access = AccessLevel.PRIVATE)
      - 생성자를 숨겨서 생성 불가능하도록 설정
   - Enum E 에 대한 dbValue 의 타입 T

   - E ofCode(Class<E> enumClass, T code)
      - dbValue -> enum
   - T toCode(E enumValue)
      - enum -> dbValue

   - TODO : 해당 코드의 유효성 검사 필요 -> 실제 사용 X
   - EnumSet<E> ofCode(Class<E> enumClass, T[] codeList)
      - db 타입에 대해 EnumSet 으로 반환
      - dbValue[] -> enumSet
   - T[] toCode(Class<E> enumClass, EnumSet<E> enumSet)
      - EnumSet 에 대해 db에 저장할 T[] 를 반환
      - EnumSet -> dbValue[]

   - EnumSet<E> ofBitCode(Class<E> enumClass, Integer code)
      - bitmap(int) -> EnumSet
   - Integer toBitCode(EnumSet<E> enumSet)
      - EnumSet -> bitmap(int)

   - EnumSet<E> ofBoolListCode(Class<E> enumClass, boolean[] codeList)
      - boolean[] -> EnumSet
      - DB에 boolean[] 로 저장
   - boolean[] toBoolListCode(Class<E> enumClass, EnumSet<E> enumSet)
      - EnumSet -> boolean[]
      - DB의 boolean[] 를 EnumSet 으로 불러오기

Related to: #24

* Feat : AbstractEnumAttributeConverter 구현

- AbstractEnumAttributeConverter class
   - enum <-> dbValue 에 대한 abstract class
   - E extends Enum<E> & EnumValue<T>, T
      - enum 과 EnumValue 를 상속받는 enum E 와 enum E의 dbValue 의 type T
   - Utils 에 구현된 컨버터 메소드 활용

Related to: #24

* Feat : AbstractEnumSetBoolAttributeConverter 구현 및 활용 클래스 구현

- AbstractEnumSetBoolAttributeConverter class
   - EnumSet <-> dbValue(boolean[]) 에 대한 abstract class
   - E extends Enum<E> & EnumValue<T>, T
      - enum 과 EnumValue 를 상속받는 enum E 와 enum E의 dbValue 의 type T
   - Utils 에 구현된 컨버터 메소드 활용

- CarSizeBoolArrayConverter class
   - 위의 클래스 상속받음

Related to: #24

* Feat : AbstractEnumSetStringAttributeConverter 구현 및 활용 클래스 구현

- AbstractEnumSetStringAttributeConverter class
   - EnumSet <-> dbValue(T[]) 에 대한 abstract class
   - E extends Enum<E> & EnumValue<T>, T
      - enum 과 EnumValue 를 상속받는 enum E 와 enum E의 dbValue 의 type T
   - Utils 에 구현된 컨버터 메소드 활용

- DriverLicenseSetToStringArrayConverter class
   - 위의 클래스 상속받음

Related to: #24

* Feat : AbstractEnumSetToBitmapAttributeConverter 구현 및 활용 클래스 구현

- AbstractEnumSetToBitmapAttributeConverter class
   - equals 지원을 위해 EnumSet 만 가지는 EnumBitmapValue 를 상속받는 클래스에 대한 공통 컨버터
   - EnumBitmapValue(EnumSet) <-> bitmap(int) 에 대한 abstract class
   - EnumBitmapValue<E, T>, Integer
      - enum 과 EnumValue 를 상속받는 enum E 와 enum E의 dbValue 의 type T
   - Utils 에 구현된 컨버터 메소드 활용

- OilTypeBitmapConverter class
   - 위의 클래스 상속받음

- TransmissionBitmapConverter class
   - 위의 클래스 상속받음

Related to: #24

* Feat : User Entity 에 사용되는 enum 구현

- CarSize enum
   - 차량 크기에 대한 enum
   - dbValue : Integer

- DriverLicense enum
   - 면허증에 대한 enum
   - dbValue : String
      - desc 를 재탕해서 사용

- Gender enum
   - 성별에 대한 enum
   - 정보를 제공하는 enumValue 가 다른 것을 enum으로 통일
      - kakaoValue : female/male
      - naverValue : F/M
   - dbValue : String(WOMAN, MAN)

- JoinType enum
   - 가입 경로에 따른 enum
      - 권한 역할도 하게됨
   - LOCAL/NAVER/KAKAO/MANAGER

- OilType enum
   - 차량 유종에 대한 enum
   - dbValue : Integer

- OilTypeBitmap class
   - OilType enum 의 EnumSet 을 저장하는 class
      - implements EnumBitmapValue<OilType, Integer>
   - bitmap 으로 convert 하기 위한 클래스
   - EnumSet <-> Integer(N : 1) convert 를 위해 1:1로 보이도록 만듦

- Transmission enum
   - 트랜스미션에 대한 enum
   - dbValue : boolean(오토 여부)
      - 가독성을 위해 isAutomatic 변수를 따로 사용하고 getDbValue 에서 isAutomatic 반환

- TransmissionBitmap class
   - Transmission enum 의 EnumSet 을 저장하는 class
      - implements EnumBitmapValue<Transmission, Integer>
   - bitmap 으로 convert 하기 위한 클래스
   - EnumSet <-> Integer(N : 1) convert 를 위해 1:1로 보이도록 만듦

Related to: #1, #24

* Chore : converter 페키지 이동

Related to: #24

* [Fix] 오타 수정 차량음크기 -> 차량크기

* Feat : User 도메인 관련 Entity 구현

- User Entity class
   - DynamicUpdate/Insert
   - username(이메일) 수정 불가
   - password -> @SiZe(min=256, max=256)
   - Gender enum -> @Enumerated(EnumType.STRING)
   - totalPoint -> default 0
   - licenseEnumSet -> String[]
   - preferSizeSet -> boolean[]
   - preferOilTypeSet -> int(bitmap)
   - preferTransmissionSet -> int(bitmap)
   - preferMinPassenger -> int
      - MAX(10)

- Admin Entity class
   - extends BaseTimeEntity
      - 생성/수정 시간 추가
   - id -> username
      - 사용자 메일 필드명 수정
   - password -> name 제거 : 필드명 일치하여 제거
   - branchId -> branch : 객체로 참조하므로 가독성 고려

Related to: #1

* Fix : Point Entity

- Point
    - NotNull 어노테이션을 삭제해야할 속성 수정

* Chore : .gitignore 에 .jpb 추가

* Feat : Card Entity 수정

- Car Entity class
   - 타 엔티티 참조 필드명의 id 제거
      - user
   - 수정 불가 지정 : @column(updatable = false)
      - cardNumber, CVC, expiredDate, registerDate
   - CVC 3자리로 제한 : @Length(min = 3, max = 3)
   - expiredDate 미래로 제한 : @future
   - registerDate 현재 이하로 제한 : @PastOrPresent

Related to : #1

* Feat : Pay Entity 수정

- Pay Entity class
   - 타 엔티티 참조 필드명의 id 제거
      - card, reservation
   - 생성/수정 시간 BaseTimeEntity 상속으로 변경
      - payDate 삭제
   - @tostring 추가
      - 타 엔티티 참조로 인한 Fetch 필요한 필드에 @ToString.Exclude 추가

Related to : #1

* Feat : Point Entity 수정

- Point Entity class
   - 생성/수정 시간 BaseTimeEntity 상속으로 변경
      - accumulationDate 삭제

Related to : #1

* Feat : Reservation Entity 수정

- Reservation Entity class
   - Car -> CarSpecification 오류 정정
   - 타 엔티티 참조 필드명의 id 제거
      - user
   - 생성/수정 시간 BaseTimeEntity 상속으로 변경

Related to : #1

* Feat : Review Entity 수정

- Review Entity class
   - 타 엔티티 참조 필드명의 id 제거
      - reservation
   - 생성/수정 시간 BaseTimeEntity 상속으로 변경
      - issueDate 삭제

Related to : #1

* [Feat] 미사용 import 제거

* Chore : .gitignore properties 경로 설정 변경 -> gradle 설정파일도 날아가는 이슈 발생

* Feat : Branch domain 관련 Entity 수정

 - Branch Entity class
   - BaseTimeEntity 추가
   - branch prefix 제거
      - branchDetailAddress -> detailAddress
      - branchTelephoneNumber -> telephoneNumber
      - branchBossName -> bossName
   - snake -> camel case
      - si_do -> siDo
      - gu_gun -> guGun

 - KeyStore Entity class
    - BaseTimeEntity 추가

 - Kiosk Entity class
    - BaseTimeEntity 추가

 - Notice Entity class
    - id postfix 제거
       - adminId -> admin

 - ParkingSpot Entity class
    - BaseTimeEntity 추가

Related to : #1

* Feat : Car domain 관련 Entity 수정 및 추가

- Car Entity class
   - BaseTimeEntity 추가
   - @builder 추가
      - 접근성을 고려하여 추후 수정 고려 필요
      - Related to : #31
   - CarSpecification Entity 연결
      - CarSpecification carSpec;
   - totalDistance 에 default 0 추가
      - columnDefinition = "int default 0"
      - @Builder.Default
      - totalDistance = 0
   - carState enum 적용
      - @Enumerated(EnumType.STRING) -> 글자로 저장
   - repairList, accidentList 에 대해 배열 적용
      - columnDefinition = "text[]"
      - List<String> 자료형 사용
         - IntelliJ 에서 아래 에러 표시되지만 실행 문제 X
            - 'Basic' attribute type should not be a container

 - CarState enum
    - dbValue 는 0, 1, 2 로 설정 -> 양수 여부로 차량 가용성 체크
    - Related to : #32

 - Key Entity class
    - BaseTimeEntity 추가
    - keyState enum 적용
       - @Enumerated(EnumType.STRING) -> 글자로 저장

 - KeyState enum
    - MASTER, WAITING, USABLE, THEFT

 - CarSpecification Entity class
    - BaseTimeEntity 추가
    - User 에서 정의한 enum 적용
       - CarSize, OilType, Transmission
       - TransmissionToBoolAttributeConverter
          - Transmission 에 대해 auto 여부로 boolean 으로 변환하기 위함
    - CarBrand enum 적용
       - @Enumerated(EnumType.STRING) -> 글자로 저장
    - isKorean default value 적용
       - carBrand enum 에서 korean value 읽어와서 적용
    - @DateTimeFormat 제거

 - TransmissionToBoolAttributeConverter class
    - Transmission 가 AUTO 인지 여부로 변환

 - BranchCar Entity class
    - BaseTimeEntity 추가

Related to: #22

* Chore : import 최적화 및 누락 파일 추가

* Feat : insurance domain 관련 Entity 수정

 - BranchInsuranceCompanyContraction, InsuranceContract Entity class
    - BaseTimeEntity 추가
    - 연관관계 id postfix 제거

 - InsuranceCompany Entity class
    - BaseTimeEntity 추가
    - company prefix 제거
       - companyTelephoneNumber -> phoneNumber
       - companySiteLink -> siteLink

Related to : #1

* Feat : oauth2를 위한 로그인 후 소셜에서 사용자 데이터 가져오고 내부에 저장하는 Service

- CustomOAuth2UserService class
   - loadUser
      - 소셜로부터 정보를 가져오고 저장
      - 현재 kakao는 출생년도, 전화번호를 가져올 수 없어 출생년도는 1999년, 전화번호는 010-1234-5678로 저장
      - 비밀번호는 1111로 저장

Related to: #22

* Feat : oauth2에서 이미 존재하는 계정인지 체크를 위한 repository 체크

- UserRepository
   - findByUsernameAndJoinType
      - nickname 과 jointype 를 통해 유저 조회

Related to: #22

* Feat : User password 조건 변경 및 Branch address type 변경

 - User Entity class
    - password
       - size 조건 제거
       - length 100 제한

 - Branch Entity class
    - branchAddress -> latitude, longitude 변경
       - postgres 에서 point 타입 비공식 지원으로 인한 JPA 사용 어려움
       - Double type 2개로 위도, 경도 표시

Resolves : #1

* Feat : CarSpecification Builder 수정

 - CarSpecification Entity class
    - @Builder.Default 사용 불가로 인한 수정
       - custom 생성자 사용
       - @AllArgsConstructor 제거

Resolves : #1

* Feat : Review Entity title 추가

 - Review Entity class
    - 프론트 요청으로 인한 title column 추가

Resolves : #1

* Feat : Bitmap type equals 수정

 - OilTypeBitmap, TransmissionBitmap equals 구문 수정
    - 기존 : enumset.eqauls()
    - 수정 : enumset.size() & enumset.containsall()

Resolves : #24

* Feat : QueryDsl 적용

 - build.gradle
    - queryDsl에 필요한 파일 추가
    - queryDsl 사용할 경로 추가

 - QueryDslConfig class
    - JPA entityManager 반환 설정

Resolves : #37

* Merge branch 'feature/api/user' of C:\Users\rnjs1\OneDrive\YURentCar-be-yj with conflicts.

* Feat : User Entity 관련 Api 개발

- AuthController
    - checkNicknameDuplicate
        - 닉네임 중복 체크
    - saveSignUpAdditionalInfo
        - SignUpRequestDTO로 데이터 Patch
    - changeNickname
        - 닉네임 변경
    - changeUserProfile
        - UserProfileDTO로 데이터 Patch
    - lookupPoint
        - 사용자 보유 포인트 조회

- AuthService
    - checkNicknameDuplicate
        - UserRepository의 existsByNickname으로 조회
    - saveSignInAdditionalInfo
        - UserRepository의 save로 SignupRequestDto 저장
    - changeNickname
        - UserRepository의 save로 Nickname 저장
    - changeProfile
        - UserRepository의 save로 UserProfileDto 저장
    - lookupPoint
        - UserRepository의 findByNickname으로 조회

- User
    - updatePrefer
        - SignupRequestDto의 값으로 수정

- UserRepository
    - User Entity 관련 Repository

- SignupRequestDto
    - 선호 조건 선택의 DTO

- UserProfileDto
    - 사용자 개인정보의 DTO

Related to : #27

* Revert : 잘못된 커밋 복구

* Revert : 잘못된 커밋 복구

* Feat : User Entity 관련 개발

-AuthController
    - changePreferFilter
        - saveSignUpAdditionalInfo에서 이름 변경
    - lookupPreferFilter
        - 사용자 선호 필터 조회
    - changeNickname
        - changeNicknameDto로 변경
    - lookupUserProfile
        - 사용자 프로필 조회

- AuthService
    - changePreferFilter
        - saveSignInAdditionalInfo에서 이름 변경
    - lookupPreferFilter
        - 닉네임으로 사용자 선호 필터 조회
    - changeNickname
        - 함수 인자 변경
    - lookupUserProfile
        - username으로 사용자 프로필 조회

- PreferFilterDto
    - 선호 필터 DTO

- SignupRequestDto
    - 이름 변경으로 인한 삭제

- User
    - updatePrefer
        - 함수 인자 변경

- UserProfileDto
    - 생성자 추가

- ChangeNicknameDto
    - 닉네임 변경 DTO
    - username은 사용자 이메일
    - nickname은 변경할 닉네임

Related to : #27

* Fix : AuthController -> UserController

Related to : #27

* Fix : 경로 수정

-changeNickname
    - "/nicknames/change" -> "/nicknames"

Related to : #27

* Feat : Redis 연동 설정 및 RefreshToken 저장 구현

 - application.properties(not commit)
    - add line
    spring.data.redis.host=localhost
    spring.data.redis.port=6379

 - Token class
    - 레디스에 저장될 타입
    - @id username
    - refreshToken
    - expiration

 - TokenRedisRepository
    - CurdRepository 상속

 - TokenRedisService
    - saveToken(TokenDto)
    - getToken(username)
    - deleteToken(Token)
    - deleteToken(tokenString)

 - TokenDto
    - grantType(Bearer)
    - username
    - accessToken & expiration
    - refreshToken & expiration

Related to : #36

* Feat : UserAuthDto 속성 추가

 - UserAuthDto class
    - nickname, phoneNumber 추가

Related to : #36

* Chore : jwt를 위한 라이브러리 추가

 - io.jsonwebtoken:jjwt:0.9.1
    - jwts 메소드 사용

 - javax.xml.bind:jaxb-api:2.3.0
    - 위 라이브러리에서 사용되지만 최근 jdk에서 deprecated 되면서 추가

Related to : #36

* Fix : 권한명 변경 및 기본 유저 정보 추가 CustomOAuth2UserService

 - CustomOAuth2UserService
    - uesr -> USER_ROLE

 - newUser 생성 시 아래 추가
    - EnumSet 데이터들 추가

Related to : #36

* Feat : LoginCookies, UserInfoDto, CookieProvider 구현

 - LoginCookies
    - 로그인 당시 생상하는 쿠키들
    - accessCookie
    - refreshCookie

 - UserInfoDto
    - 프론트에서 저장하는 사용자 정보를 담은 DTO
    - username
    - nickname

 - CookieProvider class
    - @component 로 bean 에 등록됨
    - makeLoginCookies(TokenDto)
       - TokenDto 정보 기반으로 accessCookie, refreshCookie 생성

Related to : #36

* Feat : JwtFilter, TokenProvider, LoginSuccessHandler 구현 및 SecurityConfig에 적

 - JwtFilter
    - OncePerRequestFilter 상속
    - doFilterInternal
       - 받아온 request 로부터 jwt accessCookie 를 읽어서 TokenProvider 로 검증
       - 검증 결과를 SecurityContextHolder 에 담음
    - resolveToken
       - 쿠키로부터 accessToken 반환

 - TokenProvider util
    - generateTokenDto(token)
       - authentication 를 통해 토큰을 생성하여 반환
    - getAuthentication(accessToken)
       - token 을 통해 authentication 반환
    - validateToken(token)
       - token 유효성 검사
    - parseName(token)
       - token 에서 제목(subject) 추출
    - parseClaims(token)
       - token 에서 claims 추출

 - UserLoginSuccessHandler
    - 인증 정보를 읽어서 토큰을 생성
    - 토큰을 redis 에 저장
    - 쿠키 생성 및 response 에 담음
    - home 으로 redirect

 - SecurityConfig
    - 각 bean 객체 생성자에 필요한 인자들을 제공
    - 유효하지 않은 접근에 대한 에러 처리
       - authenticationEntryPoint
       - accessDeniedHandler
    - 세션 없애기
    - 접근권한 설정
        - 현재 설정은 구현된 메소드의 접근 모두 허용
    - 소셜 로그인 성공 후 처리 handler 설정
       - UserLoginSuccessHandler
    - 로그아웃 로직 추가
       - logout 접근 시 로그아웃
       - logoutHandler
          - 쿠키 삭제
          - SecurityContextHolder 삭제
          - 로그아웃 이후 200(OK) 반환
          - 헤더에서 읽어온 토큰에 대해 삭제 처리 -> 해당 코드는 주석(미사용)

Related to : #36

* Fix : DynamicUpdate 적용

Related to : #27

* Fix : Update 메소드 추가

Related to : #27

* Feat : AuthController 추가

 - AuthController class
    - POST /api/v1/auth/user-info
    - auth 에 필요한 정보 제공

Related to : #36

* Fix : AuthService -> UserService 이름 변경 및 Log4j2 추가

 - UserController 에 사용되는 명칭 수정

Related to : #36

* Feat : 로그인 검증 후 인증 객체 넣기

 - CustomUserDetailsService 추가
    - username 으로 UserAuthDto 반환
    - 임시 커밋

 - JwtFilter 수정
    - 기존 Authentication 새로 생성 후 제공

 - SecurityConfig
    - DOMAIN 추가
    - JwtFilter 생성자 수정
    - CORS 설정 추가

 - UserAuthDto 수정
    - name, nickname setter 생성

Related to : #36

* Style : PreferFilterDto 주석 제거

* Feat : User Entity 인덱스 추가, DynamicUpdate 수정 및 UserController 함수명 변경

 - User Entity class
    - @AllArgs, @equals, @builder 제거
       - @Builder.Default 제거
    - userId 제외한 생성자 및 Builder 추가
    - Update method 실행 시 Null 여부 체크

 - UserController
    - 생성자 @requiredargsconstructor 로 변경
    - 함수명 lookup -> get 변경
    - 경로명 수정
       - 변경에 대한 경로명 수정은 /change 제거
    - 변경 메소드에 대한 반환값 Boolean 변경
    - 사용자 정보 SecurityContext 로부터 호출
       - @CurrentSecurityContext(expression = "authentication.principal") UserAuthDto auth

Related to : #1, #27, #31, #50

* Fix : UserService @transactional 추가(Transmission 변경 안되던 이슈 해결) 및 메소드명 변경

 - UserService
    - @transactional 추가
       - 해당 문제로 인해 Transmission 변경에서 에러 발생
       - 하나의 트랜잭션으로 인식하도록 변경
       - 읽기만 하는 경우 readOnly=true 옵션 추가
    - 유저 검색에 실패하는 경우 RuntimeException 추가
    - 메소드명 lookup -> get

Related to : #27
Resolved : #49

* Fix : CarSizeBoolArrayConverter nullable 변경

 - CarSizeBoolArrayConverter
    - nullable true 로 변경

Related to : #24

* Fix : SecurityConfig 빠진 setCookie 라인 추가 및 로그아웃 경로 수정

Related to : #22, #36

* Fix : Entity 수정 및 삭제

- BranchCar
    - Car에 통합

- Car
    - Branch 외래키 추가

- Reservation
    - CarSpecification -> Car로 외래키 수정

Related to : #1

* Fix : 소셜 회원가입 당시 기본정보가 덜채워지는 버그 수정

 - EnumValueConvertUtils
    - EnumSet to Integer 로 변환 당시 빈 값이면 0으로 반환하도록 수정

 - CustomOAuth2UserService
    - 선호 탑승 인원 숫자를 1로 지정하도록 설정

Related to : #22

* Feat : ChangeNicknameDto의 요소 수정

 - ChangeNicknameDto
    - 인증 정보로부터 사용자정보를 가져오므로 nickname만 남겨둠

Related to : #27

* Fix : ChangeNicknameDto의 요소 수정

 - ChangeNicknameDto
    - @NoArgsConstructor 추가
       - JSON parse를 위해 기본생성자를 추가해줌

Related to : #27

* Feat : Point Api 개발

-Point
    -@tostring 추가, Id값 제외한 생성자 @builder 추가
    -type을 Enum으로 변경
       -@Enumerated(EnumType.STRING)

-PointController
    -GET api/v1/points
        -사용자 포인트 리스트 조회

-PointRepository
    -포인트 레포지토리

-PointRepositoryCustom
    -findAllPointByUsername
        -사용자 포인트 조회

-PointRepositoryImpl
    -findAllPointByUsername
        -List<PointDetailsResponseDto>로 반환

-PointDetailsResponseDto
   -포인트 내역 반환 dto

-PointDto
   -pointId를 제외한 연동용 dto

-PointService
   -getPointList
      -JPA를 통해 사용자의 포인트 내역 반환
   -updatePoint
      -PointType에 따라 포인트 적립 유효성 검사 후 포인트 내역 추가

Related to : #57

* Feat : Review Api 개발

-Review
    -@tostring 추가, Id값 제외한 생성자 @builder 추가

-ReviewController
    -POST api/v1/reservations/reviews
        -리뷰 생성
        -request : ReviewDto
        -response : Boolean

-ReviewRepository 추가

-ReviewService
   -insertReview
      -예약일로부터 30일, 7일 이전인지 검토 후 30일 이전이면 리뷰 추가하고 7일 이전이면 포인트 업데이트

-User Entity
   -updatePoint(int point)
       -point 만큼 기존 포인트에 추가하여 @DynamicUpdate한 user 반환

Related to : #58

* Fix : 경로 수정 point -> points (#60)

- GET /api/v1/point -> points

Related to : #27

* Feat : 지점 관련 API 개발

 - BranchController
    - GET /api/v1/branches
       - request : String siDo
       - response : List<String> branchNames

 - BranchRepository interface
    - JPA 및 BranchRepositoryCustom 상속

 - BranchRepositoryCustom interface
    - List<String> findBranchNameListBySiDo(String siDo)
       - 시도에 속하는 지점명 리스트 반환

 - BranchRepositoryImpl class
    - siDo 인자가 있으면 조건에 추가하여 값 반환
    - branchName 기준으로 오름차순 정렬하여 반환

 - BranchService
    - List<String> getBranchNameList(String siDo)

Related to : #63

* Feat : 차량 관련 API 개발

 - CarController
    - GET /api/v1/branches/cars
       - request : UsableCarSearchRequestDto
       - response : UsableCarResponseDto

    - GET /api/v1/branches/cars/details
       - request : String carNumber
       - response : CarDetailsResponseDto

 - CarDetailsResponseDto
    - Enum은 한글로 반환 -> 추후 프론트 협의 필요

 - CarRepository interface
    - JPA 및 CarRepositoryCustom 상속

 - CarRepositoryCustom interface
    - List<UsableCarResponseDto> searchUsableCar(UsableCarSearchRequestDto requestDto)
       - 지점 및 조건에 속하는 차량 정보 리스트 반환
    - CarDetailsResponseDto findCarDetailsByCarNumber(String carNumber)
       - 차량번호로 차 및 차량제원 반환

 - CarRepositoryImpl class
    - 지점 내 사용 가능한 차량 조회
       - 차량 제원에 따른 필터 적용
       - 예약 가능 여부 확인
          - 희망 예약 기간과 차량별 예약 시간 조회
          - 희망 예약 시간의 시작 시간/끝 시간을 반납 이후 처리시간 적용
             - 시작 시간 -> 12시 이전 : 전날 12시, 12시 이후 : 당일 0시
             - 끝 시간 -> 12시 이전 : 다음날 12시, 12시 이후 : 이틀뒤 0시
          - 희망 예약 기간 사이에 겹치는 곳이 있는지 확인하는 로직
             - where(reservation.startDate.before(endOffset).and(reservation.endDate.after(startOffset))
       - carName 기준으로 오름차순 정렬하여 반환
    - 차량번호와 일치하는 차량의 기본 제원 및 정보 반환
       - car, carSpec join

 - CarService
    - List<UsableCarResponseDto> getUsableCarList(UsableCarSearchRequestDto requestDto)
    - CarDetailsResponseDto getCarDetails(String carNumber)

 - UsableCarSearchRequestDto
    - EnumSet의 경우 bool[] 로 받아와 EnumValueConverterUtils 활용
       - Usages : #24

 - UsableCarResponseDto
    - price, imageUri 는 이후 추가 예정

Related to : #62

* Chore : 패키지 경로 수정 -> global 추가

* Feat : 시/도에 대한 enum 생성 및 적용

 - Branch Entity class
    - siDo type 변경
       - String -> SiDoType

 - BranchRepositoryImpl
    - findBranchNameListBySiDo 인자 변경
       - String -> SiDoType
       - StringUtils.hasText -> siDo != null

 - BranchService
    - 받아온 siDo에 대한 String을 SiDoTYpe으로 변경하는 로직 추가
       - 존재하지않는 지역명의 경우 null 반환
       - EnumUtils.ofCode 메소드 활용

 - CarRepositoryImpl
    - siDo type 변경

 - SiDoType enum 생성
    - EnumValue<String> 구현
    - desc : 한국어
    - dbValue : desc
    - regionCode : 지역코드
       - 현재 활용하는 곳이 없지만 추후 확장성을 고려하여 주입해둠

 - UsableCarSearchRequestDto
    - siDo에 대해 String으로 읽어온 후 SiDoType으로 변환

Usages : #24
Related to : #63
Resolved : #66

* Feat : 공지사항 관련 API 개발

- Notice
    - BaseTimeEntity 상속
    - @builder 추가

- NoticeContentResponseDto
    - 공지사항 상세조회 DTO

- NoticeController
    - GET /api/v1/branches/notices
        - request : String province, String branchName
        - response : List<NoticeResponseDto>
    - GET /api/v1/branches/notices/details
        - request : Long noticeId
        - response : NoticeContentResponseDto

- NoticeRepository interface
    - JPA 및 NoticeRepositoryCustom 상속

- NoticeRepositoryCustom interface
    - getNoticesByBranchName
        - 지점에 해당하는 공지사항 리스트 반환

- NoticeRepositoryImpl class
    - getNoticesByBranchName
        - branchName과 finishDate를 통해 where절 작성
        - 수정일시의 내림차순으로 정렬하여 반환

- NoticeResponseDto
    - 공지사항 리스트 Dto

- NoticeService
    - getNoticesByBranchName
    - getNoticeContentByNoticeId

Related to : #65

* Feat : 사용자 관련 API 개발

- DriverLicenseResponseDto
    - 운전면허증 조회 DTO

- UserController
    - GET /api/v1/users/licenses
        - request : UserAuthDto auth
        - response : DriverLicenseResponseDto

- UserService
    - getLicense
        - username으로 사용자 운전면허증 조회

Related to : #27

* Feat : 예약 관련 API 개발

- ReservationController
    - GET /api/v1/reservations/users/accidents
        - request : UserAuthDto auth
        - response : List<String>
    - GET /api/v1/reservations/users/repairs
        - request : UserAuthDto auth
        - response : List<String>
    - GET /api/v1/reservations/users/prices
        - request : UserAuthDto auth
        - response : Integer
    - GET /api/v1/reservations/users/cars
        - request : UserAuthDto auth
        - response : CarResponseDto
    - GET /api/v1/reservations/users/car-specs
        - request : UserAuthDto auth
        - response : CarSpecDto
    - GET /api/v1/reservations/users/branches/points
        - request : UserAuthDto auth
        - response : Point
    - GET /api/v1/reservations/users/details
        - request : UserAuthDto auth
        - response : ReservationDetailDto

- ReservationDetailDto
    - 예약 상세 조회 DTO

- ReservationRepository
    - JPA 및 NoticeRepositoryCustom 상속

- ReservationRepositoryCustom
    - getAccidentListByUsername
        - Username에 해당하는 사용자의 렌트 대기중인 차량의 사고내역 리스트 반환
    - getRepairListByUsername
        - Username에 해당하는 사용자의 렌트 대기중인 차량의 수리내역 리스트 반환
    - getPriceByUsername
        - Username에 해당하는 사용자의 렌트 대기중인 예약의 가격 반환
    - getCarDtoByUsername
        - Username에 해당하는 사용자의 렌트 대기중인 차량의 정보 반환
    - getCarSpecificationDtoByUsername
        - Username에 해당하는 사용자의 렌트 대기중인 차량의 제원 반환
    - getBranchPointByUsername
        - Username에 해당하는 사용자의 렌트 대기중인 지점의 위도와 경도 반환
    - findNowReservationDetailByUsername
        - Username에 해당하는 사용자의 렌트 대기중인 예약의 상세 정보 반환

- ReservationRepositoryImpl
    - getAccidentListByUsername
        - username으로 렌트 대기중인 예약을 조회
        - 렌트 대기중인 예약의 차량 조회 후 사고내역 반환
    - getRepairListByUsername
        - username으로 렌트 대기중인 예약을 조회
        - 렌트 대기중인 예약의 차량 조회 후 수리내역 반환
    - getPriceByUsername
        - username으로 렌트 대기중인 예약을 조회 후 가격 반환
    - getCarDtoByUsername
        - username으로 렌트 대기중인 예약을 조회
        - 렌트 대기중인 예약의 차량 조회 후 차 정보 반환
    - getCarSpecificationDtoByUsername
        - username으로 렌트 대기중인 예약을 조회
        - 렌트 대기중인 예약의 차량 제원 조회 후 차량 제원 반환
    - getBranchPointByUsername
        - username으로 렌트 대기중인 예약을 조회
        - 렌트 대기중인 예약의 지점 정보 조회 후 위도와 경도 반환
    - findNowReservationDetailByUsername
        - username으로 렌트 대기중인 예약을 조회
        - 필요한 테이블을 innerjoin 후 ReservationDetailDto로 반환
    - findLatestReservationInfo
        - username으로 렌트 대기중인 예약의 JPAQuery문 반환

- ReservationService
    - getAccidentListByUsername
    - getRepairListByUsername
    - getPriceByUsername
    - getCarByUsername
    - getCarSpecByUsername
    - getBranchPointByUsername
    - getNowReservationDetailByUsername

- CarResponseDto
    - 차량 정보 DTO

- CarSpecDto
    - 차량 제원 DTO

Related to : #61

* Feat : 차량 관련 API 개발

- CarSpecController
    - GET /api/v1/car-spec/car-sizes
        - response : List<String>
    - GET /api/v1/car-spec/oil-types
        - response : List<String>
    - GET /api/v1/car-spec/transmissions
        - response : List<String>

- CarSpecification
    - @builder, @tostring 추가

- CarSpecificationRepository
    - JPA 상속

- CarSpecService
    - getCarSize
    - getOilTypes
    - getTransmissions

- EnumValueConvertUtils
    - getEnumToDescList
        - Enumclass의 모든 속성값들을 리스트로 반환

Related to : #62

* Fix : ACCESS_EXPIRE commit rollback

* Fix : Notice 속성 추가 및 Response 값 추가

- Notice
    - startDate 속성 추가

- NoticeContentResponseDto
    - 속성 추가

- NoticeRepositoryImpl
    - select하는 칼럼 추가

- NoticeResponseDto
    - startDate 추가

- NoticeService
    - getNoticeContentByNoticeId
        - 수정된 DTO에 맞게 수정

Related to : #68

* Fix : Controller 이동

- ReservationController
    - getAccidentListByUsername 삭제
    - getRepairListByUsername 삭제
    - getPriceByUsername 삭제
    - getCarByUsername 삭제
    - getCarSpecByUsername 삭제
    - getBranchPointByUsername 삭제
    - getNowReservationDetailByUsername 삭제

- UserController
    - getAccidentListByUsername 추가
    - getRepairListByUsername 추가
    - getPriceByUsername 추가
    - getCarByUsername 추가
    - getCarSpecByUsername 추가
    - getBranchPointByUsername 추가
    - getNowReservationDetailByUsername 추가

Related to : #27

* Feat : Car Entity 관련 API 개발

- CarController
    - GET /api/v1/branches/cars/simple
        - request : String carNumber
        - response : CarResponseDto
    - GET /api/v1/branches/cars/car-specs
        - request : String carNumber
        - response : CarSpecDto
    - GET /api/v1/branches/cars/accidents
        - request : String carNumber
        - response : List<String>
    - GET /api/v1/branches/cars/repairs
        - request : String carNumber
        - response : List<String>

- CarRepositoryCustom
    - findCarResponseDtoByCarNumber
        - carNumber에 해당하는 차량의 정보 반환
    - findCarSpecByCarNumber
        - carNumber에 해당하는 차량의 제원 반환
    - findAccidentListByCarNumber
        - carNumber에 해당하는 차량의 사고내역 반환
    - findRepairListByCarNumber
        - carNumber에 해당하는 차량의 수리내역 반환

- CarRepositoryImpl
    - findCarResponseDtoByCarNumber
        - carNumber로 car 정보 조회
    - findCarSpecByCarNumber
        - car와 carSpec을 innerJoin후 carNumber로 차량 제원 조회
    - findAccidentListByCarNumber
        - carNumber로 car 사고내역 조회
    - findRepairListByCarNumber
        - carNumber로 car 수리내역 조회

- CarResponseDto
    - createdAt -> carName으로 속성 변경

- CarService
    - @transactional 추가
    - getCarResponseDTO
    - getCarSpecByCarNumber
    - getAccidentListByCarNumber
    - getRepairListByCarNumber

- CarSpecDto
    - 속성 추가 및 삭제

Related to : #62

* Feat : Reservation Entity 관련 API 개발

- ReservationListResponseDto
    - 예약 내역 리스트 DTO

- ReservationRepositoryCustom
    - getReservationListByUsername
        - username에 해당하는 예약 리스트 반환

- ReservationRepositoryImpl
    - getReservationListByUsername
        - username으로 reservation 조회
        - endDate가 현재보다 이전인 레코드 조회
        - reservation과 review를 leftJoin
        - endDate의 내림차순으로 정렬

- ReservationService
    - getReservationListByUsername

- ReviewType
    - 리뷰 타입에 대한 enum

- UserController
    - getReservationListByUsername
        - GET /api/v1/users/reservations
            - request : UserAuthDto auth
            - response : List<ReservationListResponseDto>

Related to : #61

* Chore : 패키지 경로 수정 -> global 추가로 인한 import 변경

* Refactor : @transactional 적용

* Feat : 시/도에 대한 enum 생성 및 적용

 - NoticeRepositoryCustom, NoticeRepositoryImpl
    - String -> SiDoType

 - NoticeService
    - String to SiDoType 변환
       - EnumValueConverterUtils.ofCode 활용
    - 컨버터에서 null이면 error 보내므로 try/catch 활용하여 null 주입

Usages : #24

* Chore : 메일 서버를 위한 build.gradle 및 properties 설정

 - build.gradle
    - org.springframework.boot:spring-boot-starter-mail 추가

 - application.properties
    spring.mail.default-encoding=UTF-8
    spring.mail.protocol=smtp
    spring.mail.host=smtp.gmail.com
    spring.mail.port=587
    spring.mail.username=
    spring.mail.password=

    spring.mail.properties.mail.host=smtp.gmail.com
    spring.mail.properties.mail.port=587
    spring.mail.properties.mail.smtp.auth=true
    spring.mail.properties.mail.smtp.starttls.enable=true

Related to : #72

* Feat : 메일 관련 util 제공하는 class 생성

 - MailUtils
    - mailFormatCheck
       - 메일 포멧이 맞는지 확인
    - makeMessageFromReservation
       - 예약에 대한 메세지 내용 생성
    - sendMail(메일주소, 제목, 내용)
       - @sync
          - 메일 전송은 오래걸리므로 비동기 설정
          - 비동기 활성화에 따라 Application.java에 어노테이션 추가

 - YUrentcarApplication
    - @EnableAsync

Resolved : #72

* Fix : 소셜 회원가입 당시 기본 데이터 오류 해결

 - CustomOAuth2UserService
    - 신규 유저 생성 시 EnumSet을 null로 만들어서 DB에 추가될 수 있도록 수정

Related to : #22

* Refactor : 차량 예약 가능 여부 확인을 위해 BooleanExpression 로직 분리

 - CarRepositoryImpl
    - getUsableDateFilter
       - 예약하고자 하는 시작/종료 일시를 기반으로 현재 렌트 종료 시간이 오전이면 다음날 12시까지, 오후이면 다음날 24시까지 렌트가 불가능한 로직에 대한 쿼리를 제공하는 함수로 분리

Related to : #62

* Feat : 차량번호, 예약시작/종료일로 차량 렌트 가능 여부 반환하는 기능 개발

 - CarRepository
    - Optional<Car> findByCarNumber(String carNumber) 추가

 - CarRepositoryCustom
    - Boolean usableByCarNumberAndDate(String carNumber, LocalDateTime startTime, LocalDateTime endTime)

 - CarRepositoryImpl
    - 차량번호, 예약시작/종료일로 차량 렌트 가능 여부 반환하는 메소드 추가

Related to : #62

* Fix : response 내 enum에 대해 한글로 반환하도록 수정

 - CarSpecDto

Resolved : #73

* Feat : 예약 확정에 대한 API 개발

 - ReservationController
    - POST /api/v1/reservations
       - 예약 생성 후 예약 id 반환

 - Reservation Entity class
    - @AllArgsConstructor 제거 및 id 제거한 생성자 추가

 - ReservationRequestDto
    - 날짜에 대한 반환은 @jsonformat 을 통해 제공

 - ReservationService
    - Long makeReservation(ReservationRequestDto requestDto, String username)
       - 해당 시간대에 예약이 가능한지 확인
       - 예약 생성
       - (미구현) 포인트 적립 및 사용 추가
       - 사용자에게 예약 완료 메일 전송
       - 에약 id 반환

Resolved : #61

* Feat : Car Entity 관련 API 개발

- CarController
    - GET /api/v1/branches/cars/views
        - request : String[] carNumbers
        - response : List<CarResponseDto>

- CarRepositoryCustom
    - findCarsByCarNumbers
        - carNames에 해당하는 차량 정보 리스트 반환

- CarRepositoryImpl
    - findCarsByCarNumbers
        - carNames에 해당하는 차량 정보 조회

- CarService
    - getCarListByCarNumbers
        - 입력받은 carNumbers 순서에 맞게 변환하여 반환

Related to : #62

* Fix : request로부터 enum value 파싱할 때 desc -> enum  변환로직 추가

 - BranchService, NoticeService
    - ofCode -> ofDesc

 - EnumValueConvertUtils
    - ofDesc 추가
       - 한글을 통한 enum 변환 메소드 추가

Resolved : #24

* Fix : 변환한 enum을 DB상에도 한글(desc)로 저장

 - Branch Entity class
    - siDo
       - @convert(SiDoTypeToStringAttributeConverter)

 - SiDoTypeToStringAttributeConverter
    - SiDoType에 대해 Desc로 변환하여 DB에 저장

Related to : #24

* Feat : Branch 위도/경도 반환하는 API 개발

 - BranchController
    - GET /api/v1/branches/location
    - request : province, branchName
    - response : x(위도), y(경도)

 - BranchRepositoryCustom
    - Point getGeoPointByBranchName(SiDoType siDo, String branchName) 추가

 - BranchRepositoryImpl
    - 시/도, 지점명이 일치하는 지점의 위도, 경도 반환

 - BranchService
    - 입력받은 province를 SiDoType으로 변환 후 repository에 요청

Usages : #24
Resolved : #63

---------

Co-authored-by: Yeongjun <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant