Skip to content

Commit

Permalink
[FIX] 깃 충돌 방지를 위한 PR (#554)
Browse files Browse the repository at this point in the history
* [FEAT] 백엔드 프로젝트 설정 (#3)

* feat: backend initial setup

* refactor: .gitignore 수정

* refactor: .env 적용 방법 이미지 수정

* Update README.md

* Update .env.sample

* feat : backend pr 빌드봇 추가 (#6)

* feat: swagger 설정 추가 (#13)

* feat : springdoc swagger 의존성 추가

* feat : swagger config 추가

* feat: ERD 기반 Entity 정의 (#15)

* feat: RSS 기능 구현 (#22)

* feat: Entity 재정의 (#26)

* feat: 기획 변경에 따른 Entity 재정의

* refactor: 서비스 이름 변경에 따라 linkpick으로 수정

* refactor: 리뷰 반영, 불필요한 클래스, 오타 수정, url BLOB 타입으로 지정

* refactor: linkpick -> techpick 변경

* feat: 엔티티 최종 수정  (#34)

* :recycle: refactor: 멀티 모듈을 고려한 디레토리 구조 정리

* :recycle: refactor: 불필요한 디렉토리 제거

* :recycle: refactor: Admin 제거 (User로 통합)

* :recycle: refactor: dummy readme 이동

* :recycle: refactor: 최종 Entity 수정

* :recycle: refactor: 최종 Entity 수정

* :recycle: refactor: url을 Blob에서 varchar로 변경

* feat: 디렉토리 구조 및 공통 예외처리 설정 (#43)

* :recycle: refactor: 디렉토리 구조 변경

* :recycle: refactor: 디렉토리 구조 추가 및 예시용 코드 작성

* :sparkles: ApiException

* :recycle: refactor: Class 이름 변경

* :recycle: 예외 코드를 같이 표시 합니다

* :recycle: 예외 코드를 같이 표시 합니다

* :recycle: 스웨거 interface 분리

* feat: 소셜로그인 구현 (#44)

* feat : security 관련 의존성 추가

* feat : Jwt token provider 구현

* feat : jwt 설정 추가 및 oauth 설정 분리

* feat : jwt 관련 의존성 추가

* feat : cookie 관련 유틸 추가

* feat : jwt 관련 유틸 추가

* feat : thymeleaf 의존성 추가

* feat : oauth2 인증을 위한 메소드 추가

* feat : providerId 필드 추가

* feat : Jwt에 role도 포함되도록 수정

* feat : oauth2 config 설정 yaml

* feat : oauth2 구현

* feat : oauth 로그인 유저 생성을 위한 user 엔티티 수정

* fix : 토큰 유효성 검증 메소드명 수정 : validateToken->isValidToken

* fix : 쿠키 검색 메소드 분리

* fix : 불필요한 주석 삭제

* fix : var -> Object 로 명시적으로 보이게 수정

* fix : 개행 추가

* fix : var -> Object 로 명시적으로 보이게 수정

* fix : User 엔티티 패키지 수정

* fix : 패키지 구조 변경 적용

* fix : User static factory method 파라미터 수정

* feat : OAuth2 exception 및 errorcode 추가

* refactor: 에러 코드 기능별 분리 (#49)

* :art: ApiErrorCode 각 기능 별로 분리

* :art: ApiOAuth2ErrorCode 추가

* :recycle: chore: 단순 주석 통일 및 개행 제거

* :recycle: chore: 접근 지정자 제한

* :recycle: feat: 핸들러 함수 위임

* :recycle: chore: env 샘플 업데이트

* :recycle: chore: exception abstract 제거, 주석 추가

* :recycle: chore: exception abstract 제거, 주석 추가

* :bug: fix: servletRequest / Response 받지 않는 것으로 변경 (수형님 리뷰)

* feat: 테스트 api 서버 배포 (#64)

* Back/feat/#54 (#55)

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 compose 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* deploy: api 서버 배포 테스트 (#56)

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 compose 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* deploy: api 서버 배포 테스트 (#57)

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 compose 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* deploy: api 서버 배포 테스트 (#58)

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 compose 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정 (#60)

* deploy test (#61)

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* Update test-server-deploy.yml

* Update test-server-deploy.yml

* Update test-server-deploy.yml

* Update test-server-deploy.yml

* Update test-server-deploy.yml

* :rocket: feat: 배포용 action 설정

* :rocket: feat: 배포용 action 설정

* :rocket: feat: docker compose 내용 변경

* :rocket: feat: github action 환경 변수 분리

* :rocket: feat: github action 환경 변수 분리

* :rocket: feat: github action 환경 변수 분리

* :rocket: feat: github action 환경 변수 분리

* :rocket: feat: github action 환경 변수 분리

* :rocket: feat: github action 환경 변수 분리

* feat: RSS 기능 구현 (#46)

* feature: RSS 기능 구현, csv 파일로 초기 데이터 설정, RssRawData column 제약 조건 제거

* refactor: package 구조 변경으로 인해 import 수정

* refactor: 리뷰에 따라 코드 리팩토링

* Update test-server-deploy.yml

* �[feat] Link CRUD 구현 (#63)

* feat : (임시) favicon 추가

* feat : swagger 경로 설정 추가

* feat : Link exception, error code 추가

* fix : logging 항목 변경

* fix : swagger url 추가

* feat: Link를 가지고있는 pick 확인 메소드 구현

* feat: Link 엔티티 수정 및 정적 메소드 추가

* feat: Link dto 구현

* feat: Link CRUD 구현

* feat: Link swagger 인터페이스 추가

* fix: LinkService 메소드명 명확하게 수정

* fix: LinkService 메소드명 명확하게 수정

* fix: LinkController 리팩토링

* feat: LinkMapper 추가

* refactor: Transactional 어노테이션 추가

* fix: Path 수정

* refactor: LinkProvider 추가

* refactor: PickTag 엔티티 필드 변경 user->pick (#73)

* [feat] 태그 API 구현 (#71)

* refactor: 불필요한 클래스 삭제

* refactor: 불필요한 클래스 삭제

* feat: Tag 예외처리 및 에러코드 구현

* refactor: order필드 및 생성 및 삭제를 위한 정적 메소드 추가

* feat: 태그 crud 구현

* feat: 태그 컨트롤러 및 swagger 명세 구현

* feat: (임시) 태그 삭제시 검증을 위한 PickTagRepository 구현

* fix: createTag 메소드에 ApiUserException 추가

* refactor: tag 삭제방식 변경

* refactor: validate 로직 분리 - TagValidator 추가

* refactor: TagRepository 사용하지 않는 메소드 삭제

* refactor: mapper, provider 패키지 구조 변경

* feat: order 중복 에러 추가 및 pick 존재 에러 삭제

* feat: 사용자가 등록한 태그를 map 타입으로 제공하는 메소드 추가

* feat: 중복 order 검증 로직 추가

* refactor: Tag update 로직 수정 - 중복 order 검증, 사용자 태그 검증 로직 변경

* refactor: delete 로직에서 메소드명 typo 수정 및 주석 추가

* refactor: typo 수정

* refactor: tag order 가 음수일때 검증 로직 추가

* refactor: tag order 가 0부터 시작하도록 수정

* refactor: orElse -> orElseGet 으로 리팩토링

* refactor: format refactoring

* refactor: tag update시 검증 로직 변경

* refactor: snake case -> camel case로 리팩토링

* refactor: Tag 엔티티 order 필드명 수정 -> order -> tagOrder

* refactor: userTagList 제공 메소드 정렬기준에 따라 분리 - OrderByTagOrder, OrderByTagId

* refactor: userTagList 제공 메소드 정렬기준에 따라 분리 - OrderByTagOrder, OrderByTagId

* refactor: updateTag 로직 수정 validator에서 update할 tag의 index를 가져옴

* refactor: 불필요한 메소드 삭제

* refactor: TagUpdater 클래스 추가

* refactor: TagUpdater 클래스를 사용해 updateTag 로직 구현

* refactor: format 수정

* refactor: 미사용 메소드 삭제

* refactor: validator 삭제 및 관련 로직 service로 이관

* refactor: 다음 tagOrder 가져오는 메소드 명 명확하게 수정

* [test] 테스트용 mysql 분리 (#79)

* test: test용 mysql 분리

* refactor: 테스트용 db가 분리됨에 따라 패키지 구조 변경

* refactor: 테스트용 db가 분리됨에 따라 패키지 구조 변경

* refactor: 개발 db와 테스트 db의 mysql관련 파일 패키지 분리

* Refactor: Security, Exception, Package 리팩토링 (#82)

* [refactor] 태그 수정 검증로직 추가 및 태그 순서 필드명 수정 (#89)

* refactor: 중복 이름 검증 로직 추가 및 순서,이름 로직를 하나로 묶음

* refactor: 태그 순서 필드명 수정 order -> tagOrder

* refactor: 태그 순서 필드명 수정 order -> tagOrder

* refactor: 태그 수정시 결과 리스트 tagOrder로 오름차순 정렬하여 반환

* [test] 테스트 Fixture 구현 (#86)

* refactor: 테스트를 위한 lombok 의존성 추가

* refactor: env 파일 적용

* test: 테스트를 위한 fixture 객체 구현

* refactor: lombok 의존성 변경

* Feat: 테스트 서버 API 설정 (#91)

* :recycle: refactor: Exception core 패키지를 각 기능별 패키지로 이동

* :recycle: refactor: 시큐리티 - ACCESS_TOKEN_KEY 직접 비교로 수정

* :recycle: refactor: Exception - OAuth 예외도 auth 패키지 안으로 이동

* :sparkles: feat: API 에러 레벨 구현

* :sparkles: feat: 에러 코드에 에러 레벨 적용

* :sparkles: feat: 에러 레벨 별 다른 작동 구현

* :recycle: refactor: dto를 service 패지키로 이동

* :recycle: refactor: api 테스트 서버 설정

* :recycle: refactor: api 테스트 서버 설정

* :recycle: refactor: api 테스트 서버 설정

* :recycle: refactor: api 테스트 서버 설정

* :recycle: refactor: 배포 스크립트에 환경 변수 추가

* Refactor: RSS Exception 처리 (#81)

* feat: Rss 에러 코드, Exception 구현

* refactor: dto 경로 변경에 따라 import 수정, 주석 제거

* feat: rss exception 처리 및 provider로 분리

* refactor: retry 로직 추가, 예외 처리 수정

* refactor: 충돌 해결 및 에러 레벨 추가

* refactor: RssRawData에 RssBlogId 추가, 도커 경로 변경으로 인해 csv 파일 추가

* refactor: oauth uri 변경 (#94)

* fix: /api/login uri 접근 허용 (#97)

* fix: /api/login uri 접근 허용 (#99)

* refactor: cors 설정 추가 (#102)

* feat: mysql에서 rss blog url sql 파일 import (#100)

* feat: rss blog url setting 방법 추가, blog url unique 추가, csv 파일에 중복 제거

* feat: sql 파일 도커 경로로 추가

* refactor: 미사용 설정 / 파일 제거 (#105)

* refactor: 스케줄러 설정 추가 (#110)

* [feat] Folder 기본 설계 (#111)

* feat: folder entity 구현

* feat: folder 예외, 에러코드 구현

* feat: User 추가

* feat: FolderType 필드 접근제어자 추가

* [feat] FolderStructure 설계 (#113)

* feat: FolderStructure Entity 구현

* feat: FolderStructure Repository, Provider 구현

* Feat: Parser Dto 및 구조 작성 (#118)

* :construction: Parser Dto 및 구조 작성

* :recycle: refactor: FolderAction 제거

* :recycle: refactor: 함수 이름 수정

* :recycle: refactor: 공백 제거

* :recycle: refactor: 미사용 파일 제거

* [feat] Folder Service 구현 (#121)

* fix: 생성자와 정적메소드에 User 파라미터 추가

* feat: Folder update 메소드 추가

* feat: Folder dto 구현

* feat: Folder Mapper 구현

* feat: Folder Provider Repository 구현

* feat: Folder Service 구현

* feat: 부모 폴더 업데이트 메소드 구현

* feat: 사용자의 미분류폴더, 휴지통 조회하는 메소드 구현

* feat: 특정폴더를 본인의 미분류폴더, 휴지통으로 이동시키는 메소드 구현

* refactor: 검증로직에 assertion 추가

* refactor: 검증로직 기존코드로 롤백

* feat: Pick DTO 설계 (#124)

* feat: pick error code, exception 구현

* refactor: link entity에 imageUrl 추가

* refactor: link mapper에 imageUrl 추가

* refactor: link dto에 imageUrl 추가

* refactor: 패키지 구조 변경에 따라 import 수정, linkFixture imageUrl 추가

* refactor: pick에 folder 연관 관계 추가

* feat: pick, pickTag dto 구현

* refactor: pick dto 필드명 수정

* refactor: pick entity folder 변수명 변경

* [FEAT] 프론트 로그인 로컬 테스트를 위한 redirect url 설정 (#129)

* feat: 인증 성공 후 redirect url 추가

* feat: 인증 성공 후 redirect url 추가

* [�REFACTOR] 기본 폴더 CRUD 관련 리팩토링 (#127)

* refactor: 필드명 수정 parent -> parentFolder로 수정

* refactor: 필드명 수정 parent -> parentFolder로 수정

* refactor: 필드명 수정 parent -> parentFolder로 수정

* refactor: 기본폴더 조회 메소드 수정

* feat: 회원가입시 기본폴더 생성 로직 구현

* feat: 기본폴더 수정 및 삭제 방지 로직 구현

* feat: 기본폴더 변경 불가 에러코드 설명 구체적으로 수정

* refactor: 필드명 수정 parent -> parentFolder로 수정

* refactor: 필드명 수정 parent -> parentFolder로 수정

* refactor: 필드명 수정 parent -> parentFolder로 수정

* refactor: EnumSet을 이용해 BasicFolderType을 검증하도록 수정

* refactor: 프론트 로컬 테스트를 위한 설정 (#135)

* [REFACTOR] 프론트 로컬 테스트를 위한 설정 (#137)

* refactor: 프론트 로컬 테스트를 위한 설정

* refactor: 프론트 로컬 테스트를 위한 설정

* fix: @NotNull 어노테이션 제거 (#132)

* [FEAT] 기본 폴더로 root 폴더 추가 (#140)

* feat: 기본 폴더로 root 폴더 추가

* feat: 회원가입시 root 폴더 생성

* [feat] 클라이언트 폴더 구조 JSON 파싱 (#147)

* :construction: Parser Dto 및 구조 작성

* :recycle: refactor: FolderAction 제거

* :recycle: refactor: 함수 이름 수정

* :recycle: refactor: 공백 제거

* :recycle: refactor: 미사용 파일 제거

* :sparkles: 파서 에러 코드 추가

* :sparkles: 파서 인터페이스 변경

* :sparkles: 파서 테스트 코드

* :sparkles: feat: 파서 구현

* :recycle: refactor: 구현체 코드 정리

* :recycle: refactor: 구현체 코드 정리

* :recycle: refactor: enum 변환에 custom exception 추가

* :recycle: refactor: 코드 리뷰 반영

* :recycle: refactor: 미사용 파일 제

* :recycle: refactor: 리팩토링 주석 추가

* :recycle: refactor: 테스트 케이스 최종 수정

* :recycle: refactor: Jackson으로 구조 리팩토링.

* :recycle: refactor: 디렉토리 이동

* :recycle: refactor: 테스트 케이스 작성 모두 완료

* :recycle: refactor: 함수명 수정

* :recycle: refactor: 함수명 수정

* :recycle: refactor: 주석 추가

* :recycle: refactor: 리팩토링 제안 주석 제거 (이슈로 등록)

* :recycle: refactor: 코드 리뷰 반영

* :recycle: refactor: 코드 리뷰 반영

* [FEAT] FolderService 추가 비즈니스 로직 구현 및 리팩토링 (#143)

* feat: root 폴더 조회 로직 구현

* refactor: 업데이트 메소드 분리 (이름/부모폴더)

* refactor: 업데이트 메소드 분리 (이름/부모폴더)

* refactor: 업데이트 메소드 분리 (이름/부모폴더) & 삭제시 휴지통으로 이동되도록 수정

* refactor: 부모 폴더가 삭제되면 자식 폴더/픽도 삭제되도록 @OnDelete 추가

* feat: 휴지통에 있지 않은 폴더를 삭제하려 할 때, 발생하는 오류 추가

* feat: 현재 폴더가 어떤 기본폴더에 속해있는지 반환하는 메소드 추가

* feat: 휴지통에 있는 폴더 영구 삭제하는 기능 추가

* refactor: 폴더 이름 변경시에도 구조json 검증

* refactor: 재귀 로직 수정

---------

Co-authored-by: Minky <[email protected]>

* feat: 로그인 확인용 쿠키(techPickLogin) 구현 (#155)

* [HOTFIX] 로그인 쿠키 버그 수정 (#156)

* feat: 로그인 확인용 쿠키(techPickLogin) 구현

* fix: 로그인 확인용 쿠키(techPickLogin)가 access_token을 덮어씌우는 버그 수정

* [FEAT] 직렬화 비직렬화 및 데이터 세팅 과정 구현 (#151)

* :recycle: refactor: 테스트 케이스 업데이트

* :recycle: refactor: 미사용 파일 삭제

* :recycle: refactor: 테스트 케이스 업데이트

* :recycle: refactor: 디렉토리를 스트럭쳐로 이름 변경

* :sparkles: feat: 클라이언트용 구조 노드 DTO

* :sparkles: feat: 서버용 구조 노드 DTO

* :sparkles: feat: 파일 위치 이동

* :sparkles: feat: 파일 위치 이동

* :sparkles: feat: 클라이언트 전송을 위한 name 데이터 설정 - provider

* :sparkles: feat: 최종 Structure 완료

* :sparkles: feat: 최종 Structure 완료

* :sparkles: feat: 코드 리뷰 바탕으로 한번에 로드하는 메소드 추가

* [FEAT] Folder Api 구현 및 FolderService 리팩토링 (#161)

* refactor: 접근권한이 없는 폴더 에러코드 HttpStatus 403으로 변경

* feat: dto 세분화

* refactor: validator 분리

* feat: Structure api에서 사용할 FolderStructureService 분리

* feat: Folder Api 구현

* refactor: FolderStructureService 반환형식 수정

* refactor: updateFolderName 메소드 응답 누락 해결

* refactor: @PathVariable 어노테이션 추가

* refactor: 잘못된 검증 로직 수정

* [FEAT] Structure와 연관된 Pick Service 구현 (#163)

* feat: pick dto 세분화

* refactor: pick update, delete 추가

* feat: Structure 관련된 pick 구현

* feat: pick service 틀 잡기

* refactor: 변수명 수정, 잘못 사용한 메서드 변경

* [FEAT] Structure API 구현 및 Folder Create 로직 수정 (#164)

* refactor: 누락된 검증 로직 추가

* refactor: 폴더 생성 로직 변경 parentId는 별도 주입

* refactor: Folder Dto 수정

* refactor: Folder Create 로직 변경 (create->move 한세트로)

* refactor: 불필요한 필드 삭제

* refactor: Structure Json 엔티티 이름 명확하게 변경

* refactor: StructureJson Repository Structure 패키지로 이동

* refactor: Structure API 구현

* refactor: StructureJson 이름 변경

* refactor: FolderCreate 로직 분리

* refactor: PickDeleteDto 분리

* feat: Structure Dto 및 Mapper 구현

* feat: Structure Service 구현

* refactor: Mapper 에 UserRepository 의존성이 추가되면서 임시로 수정

* refactor: ApiDirectory->ApiStructure로 이름 변경

* feat: 회원가입시 자동으로 root,recycle_bin이 빈 폴더구조json 생성

* refactor: model 패키지 이동

* refactor: model 패키지 이동

* refactor: create folder시 무조건 parentId가 null이므로 그에대한 로직 추가

* refactor: model 패키지 이동

* refactor: @RequestBody 추가

* refactor: Structure를 필드로 직접 가지도록 수정

* refactor: 포맷수정

* feat: StructureJsonProvider 구현

* refactor: 불필요한 클래스 삭제

* refactor: StructureJson 업데이트 로직 Provider로 이관

* refactor: Folder 생성자 수정

* refactor: Structure ErrorCode 코드명/주석 수정

* refactor: var 제거

* refactor: 부모폴더가 없을 시 parentFolderId = -1로 응답하도록 수정

* hotfix: getParentFolderId -> findParentFolderId JPA 오류 수정

* refactor: access_token 사용하도록 설정 (#175)

* [FEAT] Structure Validator 구현 (#178)

* refactor: 불필요한 메소드 삭제 및 Folder 조회 조건 변경(ParentFolder Not Null)

* refactor: 불필요한 메소드 삭제

* refactor: 메소드명 구체화

* refactor: 유저 픽 리스트 조회 메소드 추가

* feat: StructureValidator 구현 및 적용

* refactor: 메소드 이름 명확하게 변경

* feat: 로그 추가

* refactor: 메소드명 통일 IsNotEmpty -> IsNotNull

* refactor: root, recycleBin 정보 요청으로 받지 않고 db에서 받도록 수정

* [HOTFIX] swagger 쿠키 설정 수정 (#179)

* refactor: access_token 사용하도록 설정

* fix: swagger 쿠키 설정 수정

* hotfix: swagger 쿠키 설정 수정

* hotfix: samesite 설정 제거

* [REFACTOR] UserService 구현 포함, 전체 코드 리팩토링 (#180)

* :recycle: docker compose 테스트 DB 설정 제거

* :sparkles: feat: UserService 기능 구현

* :recycle: refactor: Tag Feature 리팩토링 (의존성 제거)

* :recycle: refactor: Pick 도메인 리팩토링

* :recycle: refactor: Structure 도메인 리팩토링

* :recycle: refactor: Link 도메인 리팩토링

* :recycle: refactor: Folder 도메인 리팩토링

* :recycle: refactor: FolderStructure 도메인 리펙토링

* :recycle: refactor: FolderStructure 도메인 리펙토링 (기존 코드 삭제)

* :recycle: refactor: OAuth 도메인 리펙토링

* :recycle: refactor: User 이름 랜덤 생성기 추가

* :recycle: refactor: Folder 예외 추가

* :recycle: refactor: Parser 테스트 주석 처리 (provider 의존성 필요)

* :recycle: refactor: 주석 오류 수정

* :recycle: refactor: 테스트 코드 준비

* :recycle: refactor: 코드 리뷰 피드백 반영

* :recycle: refactor: 코드 리뷰 피드백 반영

* :sparkles: feat: 태그 color 추가 (#185)

* :bug: fix: 익스텐션 CORS 추가

* [FEAT] Pick �API + Service 구현 (#186)

* feat: Link Service 기능 추가

* feat: UserProvider 구현

* refactor: TagService 수정

* feat: Pick Service 구현

* feat: Pick Tag 구현

* feat: Pick Api 구현

* refactor: FolderMapper 모두 general 타입으로 들어가는 문제 해결

* feat: folder type 메서드 추가

* refactor: Authentication 제거

* refactor: dto 삭제

* refactor: UserId -> User로 변경 및 메서드명 통일

* refactor: Request Param 변경

* refactor: 리뷰 반영

* [HOTFIX] Valid 관련 에러 설정 (#189)

* feat: Link Service 기능 추가

* feat: UserProvider 구현

* refactor: TagService 수정

* feat: Pick Service 구현

* feat: Pick Tag 구현

* feat: Pick Api 구현

* refactor: FolderMapper 모두 general 타입으로 들어가는 문제 해결

* feat: folder type 메서드 추가

* refactor: Authentication 제거

* refactor: dto 삭제

* refactor: UserId -> User로 변경 및 메서드명 통일

* refactor: Request Param 변경

* refactor: 리뷰 반영

* refactor: valid 수정

* :bug: fix: link 생성 순서 오류 수정 및 swagger에 baseURL 수정

* [CI] API V2 브랜치 - 서버 설정 (#195)

* ci:  API V2 브랜치 - 서버 설정

* [REFACTOR] V2를 위한 패키지 리셋 (#237)

* refactor: v2에 불필요한 패키지 삭제

* refactor: auth폴더 중 새로구현하게되는 부분 삭제

* refactor: 테스트 폴더 삭제

* [FEAT] V2 엔티티 설계 (#240)

* refactor: TimeTracking -> BaseEntity로 클래스명 변경

* refactor: 불필요한 클래스 삭제

* refactor: 정적 메소드 삭제

* feat: id List <-> String Converter 구현

* feat: 자식 픽/폴더/태그의 순서를 저장하는 필드 추가

* feat: FK 제약조건 제거

* refactor: OnDelete옵션을 위해 FK 제약조건 원복

* refactor: Converter 어노테이션 추가

* refactor: Link 비활성화 구현 및 Pick 관련 필드 추가

* refactor: 필드명 수정 deletedAt -> invalidatedAt

* refactor: FK 제약조건 원복

* [FEAT] V2 패키지 구조 재설계 (#258)

* feat: mapstruct 의존성 추가

* feat: 초기 프로젝트 구조 설정

* feat: 서비스 / 컨트롤러 어노테이션 추가

* feat: SQL 로그 파일 설정 추가

* feat: 도커 컴포즈 주석 제거

* feat: 잘못 들어간 코드 삭제

* feat: 코드 리뷰 반영

* [CHORE] API 명세 (#264)

* feat: api 명세

* feat: api 명세

* feat: api 명세 반영

* feat: api 명세 반영

* [FEAT] pick v2 도메인 개발 (#278)

* feat: Link, Pick, Folder 엔티티

* feat: PickTag 엔티티 작업

* chore: 미사용 파일 제거

* chore: 스펙의 변수명 변경

* chore: sql 파일 위치 이동

* chore: 필요 예외 코드 추가

* feat: 유저 infra

* feat: JPA Repository 구현

* :sparkles: feat: Pick 도메인 구현

* :sparkles: feat: Pick 인프라 구현

* :sparkles: feat: Link 인프라 구현

* :sparkles: feat: Folder 인프라 구현

* :sparkles: feat: MapStruct 매퍼 구현

* chore: 리팩토링 및 null 처리 추가

* chore: 리팩토링 및 MapStruct 빌드 오류 수정

* chore: 테스트코드 패키지 사라진거 복원

* chore: 테스트코드 준비

* refactor: 현재 사용자 조회 메소드 구현

* chore:  코드 리뷰 결과 반영

* chore:  코드 리뷰 결과 반영

---------

Co-authored-by: PSH <[email protected]>

* [REFACTOR] pick service 코드에서 chaining 제거 (#280)

* chore:  코드 리뷰 결과 반영

* chore:  코드 리뷰 결과 반영

* [FEAT] Tag v2 Service 구현 (#281)

* feat: tag infra 구현

* feat: tag entity, repository 구현

* feat: tag dto, mapper 구현

* feat: tag service 구현

* refactor: user tagOrderList에 ArrayList 주입

* feat: tag api request/response 구현

* feat: tag api mapper 구현

* refactor: pickTag 삭제 메서드 구현

* refactor: tag dto 공통화 및 태그 이동 dto 추가

* refactor: 검증 로직 writer로 이동 및 reader 수정

* refactor: 태그 service 리뷰 반영 및 유저의 태그 이동 기능 구현, 태그 삭제 시 픽 태그도 삭제되도록 구현

* [FIX] Pick API 예외 미흡 수정  (#283)

* fix: Tag 미사용 Exception 제거

* fix: 미사용 Fixture 제거

* fix: Pick Write 예외 처리 추가 (권한)

* fix: Pick Write 예외 처리 추가 (권한) (#290)

* [REFACTOR] 테스트 코드 구현을 위한 Pick 도메인 수정 (#297)

* refactor: Writer, Reader를 PickAdaptor로 인터페이스 통합

* refactor: Writer, Reader 삭제

* refactor: userId 파라미터로 분리

* refactor: 서비스 구현체 수정

* chore: 레포지토리 수정 및 주석 변경

* chore: 누락된 변경 사항 적용

* [FEAT] Folder Domain/Infrastructure 구현 (#284)

* feat: 폴더 update remove 메소드 구현

* feat: 폴더 reader/writer 구현

* feat: 폴더 dto 구현

* feat: 폴더 service 구현

* feat: 폴더 repository 자식폴더 조회 메소드 구현

* refactor: FolderReader FolderWriter를 FolderAdapter로 병합

* feat: Folder equals, hashcode 구현

* fix: TODO로 작성했던 태그 리스트 비교 로직 업데이트 (#300)

* [FEAT] Tag Service 테스트 코드 작성 및 리팩토링 (#302)

* refactor: 테스트 설정 파일 수정

* refactor: reader, writer -> adaptor로 통합

* refactor: user entity builder 추가 및 reader에 private final 추가

* refactor: parameter에 userId 추가

* feat: tag service test code 작성

* refactor: 비관락 설정, 에러 코드 메세지 검증 추가

* refactor: 동시성 테스트 트랜잭션 추가

* [REFACTOR] 폴더구조 변경 (#308)

* refactor: shared 폴더 제거

* refactor: entities/pick 폴더 제거

* refactor: entities/tag 제거

* refactor: features/tag 제거

* refactor: features/userManagement 제거

* refactor: features/themeManagement 제거

* refactor: features/nodeManagement 제거

* refactor: widgets 제거

* [REFACTOR] import 순서 변경 (#311)

* chore: eslint import 순서 정리
* reafactor: import 순서 변경

* [REFACTOR] Tag Service Infrastructure 리팩토링 (#309)

* refactor: TagAdaptor로 db로직 이관

* refactor: TagService에는 비즈니스 검증 로직 구현

* refactor: 테스트에 리팩토링 사항 반영

* refactor: TagRepository 비관락 타임아웃 설정

* refactor: findBy -> findAllBy로 명확하게 메소드명 수정

* fix: 오타 수정

* refactor: TagCommand dto안에 userId 포함

* feat: 디자인 토큰 추가

* feat: 디자인 토큰 적용

* feat: �commontThemeContract 삭제

* fix: ThemeProvider 변경사항 적용

* fix: 위치 조정

* [FEAT] 디자인 토큰 추가

* [REFACTOR] Folder 도메인 리팩토링 (#316)

* refactor: FolderCommand가 userId를 가지도록 변경

* refactor: FolderAdapter 리팩토링

* refactor: FolderService 리팩토링

* refactor: FolderFacade 제거

* fix: typo 수정(FolderAdapter->FolderAdaptor)

* refactor: FolderAdaptor 메소드명 변경에 따른 관련 메소드 리팩토링

* refactor: Command에 userId 포함하도록 변경됨에 따라 mapper 수정

* refactor: TagFacade 삭제

* feat: 기본폴더 조회 메소드 구현

* feat: Order를 보장하는 조회 메소드 분리

* refactor: 정렬 로직 adaptor로 이관

* refactor: 다른 부모폴더에있는 폴더들을 동시에 이동시키려고 할때 발생시킬 예외 추가

* refactor: 필드명 명확하게 변경 parentFolderId -> destinationFolderId

* refactor: 순서보장이 필요한 경우와 아닌경우에 따라 adaptor메소드 분리

* [REFACTOR] tag, folder 검증로직 메소드 분리 (#323)

* refactor: 태그 검증로직 메소드 분리

* refactor: 폴더 검증로직 메소드 분리

* [FEAT] Tag API 구현 및 Swagger 명세 (#328)

* feat: swagger 가 패키지를 포함하여 관리하도록 설정 추가

* style : 파라미터 순서 변경

* refactor: colorNumber 타입 수정

* feat: Tag Api 구현 및 Swagger 명세, 예시 추가

* refactor: 오타 수정

* [FEAT] LoginUserId 커스텀 어노테이션 구현 (#326)

* feat: 커스텀 어노테이션 구현

* feat: ArgumentResolver 구현

* feat: ArgumentResolver 등록

* [REFACTOR] Rss 서비스 리팩토링 (#321)

* refactor: 불필요한 클래스 삭제

* refactor: batch 패키지로 이동

* refactor: RssBlog 엔티티에 blogName 필드 추가 및 관련 dto 구현

* refactor: RssFeed 엔티티 필드명 수정 및 파싱용 dto 구현

* feat: Rss infra 구현

* feat: Rss domain 구현

* feat: (임시) rss 수집 블로그 구현 - 이후 관리자기능으로 이관할 예정

* chore : 코드 포맷 수정

* refactor: 매일 3시에 수집하도록 스케줄 설정

* chore: 주석 typo 수정

* feat: 메소드 실행시간측정 커스텀 어노테이션 구현

* feat: rssCrawling 실행시간 측정

* [FEAT] Folder Api 구현 및 Swagger 명세 (#331)

* refactor: 불필요한 인터페이스 삭제

* refactor: 기본폴더 변경불가 검증로직 추가

* feat: FolderApi dto, mapper 구현

* feat: FolderApi Controller 구현

* [FEAT] 같은 계층일 때, 폴더 multi select 구현 (#332)

* chore: dnd-kit 설치 및 tree 페이지 생성

* feat: jest 설정추가

* fix: jest monorepo별 적용

* chore: root jest config 삭제

* feat: 같은 부모 밑에서 1개씩 폴더 이동

* design: tree page margin 변경

* test: 복수의 폴더 이동 테스트코트 작성

* feat: 현재 드래그 여부 상태 zustand에 추가

* feat: 폴더 다중 선택 기능 추가

* feat: DragOverlay추가

* design: primary color로 변경

* fix: test문 it.only 제거

* refactor: dndTreeStore에 hasIndex 적용

* [FEAT] 검색창 및 리스트 로직 설계 (#333)

* feat: 검색 위젯 로직 구현

* feat: 유틸리티 클래스 구현 (파싱, 필터링)

* doc: 유틸리티 참고 이미지 및 설명

* feat: zustand, react query 추가

* feat: 뷰포트 리액트 컴포넌트

* refactor: esToolkit import

* refactor: useViewScope 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: Util 함수 리팩토링

* [FEAT] Pick 리팩토링 진행 및 API 구현 (#342)

* fix: 미사용 파일 제거

* chore: 트래잭션 로깅 옵션 추가

* fix: 폴더, 태그에 unique 제약 조건 추가

* fix: 미사용 파일 제거

* fix: 미사용 파일 제거

* feat: User Adaptor로 로직 통일

* feat: Link Adaptor로 로직 통일

* feat:  request dto에서 userId 제거

* feat:  userAdaptor 로 변경

* fix:  Pick 도메인 오류 수정

* fix:  Tag 도메인 수정

* fix: User 내용 추가

* fix: OrderConverter 수정

* feat: 테스트 코드 1차 작성

* feat: 엔티티내 조건 체크 제거

* fix: 폴더 어뎁터 오타 수정

* fix: 테스트 코드 추가 작성

* fix: 테스트 코드 추가 작성

* refactor: Pick Service 리팩토링 진행 및 임시 커밋

* refactor: Folder에 있는 Order List에 ArrayList, null 체크 추가

* refactor: Link에 synchronized 제거

* refactor: 휴지통 외에 다른 폴더에서 삭제하지 못한다는 에러 코드 및 메시지 추가

* refactor: 태그 오더 리스트 조건으로 태그 리스트 가져오는 로직 추가

* refactor: tagOrder -> tagOrderList로 변수명 변경

* refactor: PickTagRepository, PickMapper 수정

* refactor: Pick Dto 수정

* refactor: Pick Adaptor, Service 리팩토링

* refactor: Pick Service Test 코드 작성

* refactor: error code 상태 변경

* refactor: 테스트 코드에 트랜잭션 추가

* refactor: 픽한 링크인지 확인하기 위한 로직 추가

* refactor: 픽한 링크인지 확인하기 위한 로직 추가

* feat: 픽 API 구현 및 스웨거 설정 추가

---------

Co-authored-by: kimminkyeu <[email protected]>

* [REFACTOR] 멀티모듈 적용 (#344)

* refactor: 멀티모듈로의 패키지 이동

* refactor: 멀티모듈로 분리되며 패키지 경로 수정

* refactor: 멀티모듈로 분리되며 각 모듈에 종속된 config 이동

* refactor: 멀티모듈 적용을 위한 gradle 설정

* refactor: 멀티모듈 적용을 위한 application.yaml 분리

* refactor: 멀티모듈 적용을 위한 docker 설정 변경

* refactor: 멀티모듈 적용을 위한 패키지 이동

* refactor: application-core import 방식 수정

* ci/cd: 멀티모듈 ci/cd 파이프 라인 구현 (#346)

* [CI/CD] 멀티모듈 ci/cd 적용 (#347)

* ci/cd: 멀티모듈 ci/cd 파이프 라인 구현

* ci/cd: 불필요한 스크립트 삭제

* ci/cd: api, batch 모듈 cicd 스크립트 작성

* refactor: 정보 수정

* refactor: 대상 브랜치 수정

* refactor: 액션 버전 업

* [FEAT] 시큐리티 모듈 분리 및 소셜로그인 기능 복구 (#350)

* refactor: core 모듈 패키지 구조 리팩토링

* refactor: api 모듈 패키지 구조 리팩토링

* refactor: batch 모듈 패키지 구조 리팩토링

* refactor: core 모듈 패키지 구조 리팩토링

* feat: 시큐리티 모듈 구현

* refactor: core에 있는 시큐리티 관련 설정 security로 이관

* refactor: 빌드 설정 변경 - 테스트 제외 및 시큐리티 모듈 추가

* refactor: 토큰 추가 메소드명 수정

* refactor: 회원가입시 기본폴더 생성 로직 추가

* refactor: 잘못된 인증정보를 가질 시 예외처리 및 쿠키삭제

* hotfix: 배포 테스트

* hotfix: 잘못된 배포 스크립트 제거

* hotfix: 잘못된 배포 스크립트 제거

* hotfix: 쿠키 설정 변경

* hotfix: dockerhub 업로드시 모듈명 추가

* hotfix: deploy test - core 모듈 수정

* hotfix: 배포 스크립트 수정

* hotfix: 배포 테스트 - core 모듈 수정

* hotfix: 배포 테스트 - batch 모듈 수정

* [FEAT] 픽 리스트 - 사용자 설정 필터 & 뷰 템플릿 (#348)

* feat: 검색 위젯 로직 구현

* feat: 유틸리티 클래스 구현 (파싱, 필터링)

* doc: 유틸리티 참고 이미지 및 설명

* feat: zustand, react query 추가

* feat: 뷰포트 리액트 컴포넌트

* refactor: esToolkit import

* refactor: useViewScope 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: Util 함수 리팩토링

* chore: 파일 제거 및 위치 이동

* chore: use-Immer 패키지 추가

* feat: 유틸리티 (Stream, Tokenizer) 리팩토링 및 개선

* chore: 공통 타입 추가 및 일부 변경

* feat: 태그 아이템 UI 컴포넌트 (익스텐션에서 가져옴)

* feat: 최상단 컴포넌트 (뷰어) 및 상태 구현

* test: 쿼리 더미 데이터 추가

* feat: 옵션 리스트 위젯 및 상태 구현

* feat: 검색창 위젯 구현

* feat: 필터 옵션 기능 구현

* feat: 뷰 템플릿 (리스트 vs 그리드) 옵션 구현

* chore: 디렉토리 이름 변경, 기존 폴더 제거

* chore: dummy data 업데이트

* :recycle: refactor: 코드 리뷰 기반으로 리팩토링 진행

* [REFACTOR] Drag & Drop 함수 및 컴포넌트 분리  (#351)

* test: moveFolder test code 삭제

* feat: mockdata 변경에 따른 로직 변경

* refactor: 중앙 스토어에서 로직 분리

* design: treePageWrapper css 변경

* feat: shift + click시에 active가 부모 폴더가 다르면 초기화

* feat: 다른 폴더간 이동 구현

* chore: 테스트코드 예제 삭제

* refactor: reorderFolderInSameParent 함수명 수정

* refactor: SelectedFolderListType으로 대체

* refactor: handleClick 함수 분리

* chore: tree 컴포넌트를 components 폴더로 이동

* [FEAT] 공통 테마에 jsdoc 추가 (#354)

* [FIX] drag & drop 후 정렬 변경 (#360)

* fix: drag & drop 후 정렬 변경

* refactor: isSameParentFolder parameter 변경(동일한 값)

* [REFACTOR] 인터페이스 제거, Adaptor 이름 변경, Pick 리팩토링 (#357)

* refactor: 인터페이스 제거 및 어댑터 변경으로 인한 불필요한 클래스 제거

* refactor: 유저 인터페이스 제거, 어댑터 변수명 변경

* refactor: 태그 리팩토링, unique 재설정, 태그 삭제 시 픽의 태그 리스트 삭제되는 부분에 pickId -> tagId로 수정

* refactor: open-in-view 설정 추가

* refactor: root에 픽 추가하는 경우, 예외 추가

* refactor: 링크 인터페이스 제거, 어댑터 이름 변경

* refactor: 폴더 인터페이스 제거, 어댑터 이름 변경, unique 수정

* refactor: Pick unique 설정

* refactor: 픽 리팩토링 진행, 픽 리스트로 조회 시 순서 보장,
Result Dto 분리

* refactor: 픽 api 폴더 리스트 안에 있는 픽 리스트 조회 구현, response dto 분리

* refactor: 픽, 태그 실패하는 테스트 수정

* refactor: 불필요한 파일 제거

* refactor: 멀티 모듈로 변환하는 과정에서 import문 변경

* refactor: 태그 수정 시 null인 경우 수정되지 않도록 변경

* refactor: 폴더 리스트 내 픽 리스트 조회하는 경우, get으로 하면 json 데이터를 받지 못해 post로 변경

* refactor: 테스트 코드 위치 변경

* refactor: 태그 테스트코드 userId 값 하드 코딩 리팩토링

* refactor: 테스트 끝나고 drop 하도록 변경

* refactor: 폴더 api 생성시 folderId 제거

* refactor: Fetch -> Search로 Dto명 변경

* refactor: Fetch -> Search로 Dto명 변경

* refactor: 픽 리스트 조회 메소드 분리

* refactor: 픽 리스트 조회 post -> get으로 변경

* [FEAT] 폴더 생성 UI 및 상태 관리 로직 변경 (#365)

* design: 작업 전 디자인 변경

* design: CreateFolderInput 디자인 추가

* feat: 폴더 생성 UI 구현

* design: FolderTree 전체적인 레이아웃 변경

* design: 폴더 트리 디자인 개선

* feat: CreateFolderInput 생성시 focus 이동

* design: createFolderInputLayout 디자인 변경

* [FEAT] 폴더 이름 변경 UI 및 로직 구현 (#367)

* feat: CreateFolderInput, FolderInput 컴포넌트로 추출

* design: 공통 테마 사이즈 추가

* chore: PORTAL_CONTAINER_ID 상수로 변경

* feat: 폴더 이름 변경 UI 및 로직 연결

* feat: 우클릭시에 포커스되는 폴더 변경

* [FEAT]: 삭제 UI 및 로직 추가 (#369)

* [FIX] 태그 api 수정 및 Swagger 파라미터 수정 (#372)

* fix: @LoginUserId 누락 해결

* fix: swagger에서 long userId 파라미터로 안받게 수정

* fix: swagger에서 long userId 파라미터로 안받게 수정

* [FIX] 스웨거 응답값 수정 및 픽 update 버그 수정 (#376)

* refactor: tag-change

* fix: api 스웨거 타입 배열로 수정

* fix: 태그 서버 에러 디버깅용 메시지 추가

* chore: 코드 리뷰 바탕으로 반환 타입 제거 (스웨거가 자동으로 설정)

---------

Co-authored-by: sangwonsheep <[email protected]>

* [FEAT] 소셜 로그인 리다이렉션 구현 (#377)

* refactor: CookieUtil 리팩토링

* feat: authorizationRequestRepository 구현

* refactor: redirectUrl 로직 리팩토링 - 쿼리스트링으로 redirectUrl 받음

* refactor: redirectUrl 쿼리 파라미터명 변경

* [REFACTOR] Folder API 수정, Folder 리팩토링 (#379)

* refactor: tag-change

* refactor: folder 유니크 제약조건 제거

* refactor: pick void 반환 타입 응답 코드 204로 변경

* refactor: 폴더 응답 값, 프론트와 통일

* refactor: 폴더 생성 시 생성 메서드 사용 및 부모 폴더의 하위 폴더 리스트에 id 추가하도록 변경

* refactor: 루트 폴더와 루트 하위 폴더 리스트 조회 추가, 기본 폴더 리스트 조회 추가, 기본 폴더 각각 조회하는 Api 제거

* refactor: 주석 제거

* refactor: Dto에 @Valid로 검증하여 터진 에러 핸들링, 응답 코드 400으로 설정

* refactor: 코드 리뷰 반영

* [CI/CD] nextjs docker image 사이즈 감소 (#380)

* hotfix: argument resolver 수정

* [REFACTOR] local-dev-prod 설정 분리 (#381)

* refactor: local-dev-prod 설정 분리

* refactor: 설정 분리에 따른 변수명 수정

* refactor: docker-compose 기본 프로파일 local로 설정

* refactor: jpa 설정 local dev prod 분리

* [REFACTOR] Folder, Tag 리팩토링 (#384)

* refactor: api에 있던 swaager dependency 최상단으로 이동

* refactor: 태그 리스트 조회 시 순서 보장, Request Body 누락한 것 추가

* refactor: 커스텀 어노테이션에 스웨거 파라미터 hidden 설정 추가하는 것으로 변경

* refactor: Folder, Tag API에 Valid, Request Body 추가

* hotfix: cors 수정

* hotfix: cors 수정

* hotfix: dev profile base-url 수정

* refactor: local mysql 설정 변경 (#389)

* [REFACTOR] api request, response 양식 통일 (#396)

* refactor: env sample 수정

* refactor: folderId -> id로 통일

* refactor: tagId -> id로 통일

* refactor: pickId -> id로 통일

* refactor: dto로 List를 감싸서 반환하던 방법에서 List를 반환하도록 변경, dto명 변경

* hotfix: cors 설정에 https://local.minlife.me:3000 추가

* [REFACTOR] 폴더 멀티 이동 관련 버그 수정, Pick, Folder 변수명 통일 (#397)

* refactor: pick 변수명 통일

* refactor: Pick 관련 tagOrderList -> tagIdOrderedList 변경

* refactor: 픽 생성, 수정 시 태그 리스트가 존재하는지 검증하는 로직 추가

* refactor: Folder childFolderOrderList -> childFolderIdOrderedList로 변경

* refactor: 여러 폴더를 선택하여 이동되지 않는 문제 해결

* [FEAT] Folder API 연결 (#399)

* chore: api 변경에 따른 스키마 업데이트

* feat: 폴더 관련 api 타입 지정

* refactor: api 변경에 따른 타입 변환

* feat: top level error 추가

* feat: folder crud api 추가

* chore: api 변경에 따른 타입 변경

* feat: 폴더 드래그 앤 드랍 api 연결

* feat: 폴더 이름 변경 api 연결

* feat: 휴지통 이동 api 연결

* refactor: -1 매직넘버 상수로 변경

* chore: mockdata 삭제

* chore: re-resizable 의존성 설치

* faet: FolderTree 크기 조정 가능하게 변경

* chore: api 변경에 따른 타입 최신화

* feat: createFolder api 연결

* refactor: getFolders, getBasicFolders 로 함수명 변경

* reafactor: getRootFolderList로 변경

* fix: 테스트 application.yaml 수정 (#402)

* [FIX] 다른 폴더로 이동되지 않는 문제, 스웨거 응답 예시 추가 (#403)

* refactor: 스웨거 응답 예시 데이터 추가

* refactor: 폴더를 다른 폴더로 이동시키지 못하는 문제 해결

* refactor: 미분류 폴더로 이동 금지, Service로 검증 로직 이동

* refactor: 추후 변경될 사항 주석 추가

* [FEAT] 폴더 클릭에 따른 라우팅 변경 (#405)

* feat: 라우팅 설정 변경

* chore: root 폴더에서 tsc 동작시 build된 파일 생성 차단

* chore: legacy 삭제

* feat: 폴더 클릭시마다 라우팅 이동

* feat: useTreeStore subscribeWithSelector 적용

* refactor: FolderInfoItem 컴포넌트 분리

* feat: url을 이용해 folder 선택하게 변경

* feat: route 경로 추가

* feat: middleware redirect url 변경

* feat: 휴지통 및 미분류 폴더 추가

* design: 최초 로딩시에 사이드바 사이즈 지정

* design: 사이드바 디자인 조정

* chore: 쓰지 않는 props 제거

* refactor: useEffect 함수명 추가

* [FEAT] 검색 위젯 기능 구현 및 미사용 필터 제거 (#410)

* chore: 중간 작업 공유

* chore: 타입 변경 및 기존 SearchWidget.tsx 리팩토링

* chore: 타입 변경 및 기존 SearchWidget.tsx 리팩토링

* feat: 기존 로직에서 미사용하는 필터 제거

* feat: dndTreeStore 병합 작업

* [FEAT] SecurityProperties 분리 (#415)

* feat: Security 관련 설정값을들 모아두는 SecurityProperties 구현

* refactor: SecurityProperites를 의존하도록 리팩토링

* refactor: 필드 순서 변경 및 줄바꿈 추가

* [FEAT] 검색창 자동 완성 (#418)

* refactor: PrefixTokenizer 구현 수정

* refactor: PrefixTokenizer 구현 수정

* feat: 검색 위젯 토큰화 구현

* chore: 화면 테스트를 위한 뷰어 패널 코드 수정 (반영 안될 수 있는 커밋)

* feat: 토큰 검색창 CSS 설정

* chore: 일부 주석 추가 및 코드 위치 변경

* chore: yarn.lock 파일 커밋

* [FEAT] 같은 폴더 내에서 Pick Drag&Drop 구현 (#420)

* chore: 백엔드 api 타입 최신화

* chore: util 스펠링 정확하게 변경

* feat: pickType 추가

* feat: getPicksByFolderId 추가

* refactor: viewTemplate 코드 변경

* refactor: 바로 호출이 아닌, useEffect 내에서 비동기함수 호출

* chore: git pull을 위한 커밋

* refactor: pickCardListViewer로 PickCard 컴포넌트 이동

* design: card link style 변경

* feat: 더블 클릭시 링크 이동

* feat: dnd가 가능한 list와 그렇지 않은 list분리

* refactor: dnd여부에 따라 PickListViewer분리

* refactor: DnDCurrentType을 dnd.type으로 이동

* refactor: 공통 utils함수로 추출

* feat: 픽에서 픽으로 이동(api 미연결)

* feat: pick multi-select 구현

* feat: multi-select drag&drop 구현(api 미연결)

* feat: 같은 폴더 내 픽 drag&drop api 연결

* [FIX] 깃허브 액션 API 테스트

* [FEAT] pick bulk insert 구현 및 테스트 작성 (#409)

* feat: pick bulk insert 구현 및 테스트 작성

* refactor: pick bulk insert 클래스 분리 및 클래스명 변경

* [FIX] 검색창 버그 수정 및 URL 업데이트 (#424)

* :rotating_light: fix: useSearchParams 사용처에 <Suspence> 추가

* [DESIGN] 폴더 영역 디자인 개선 (#430)

* [FEAT] 픽을 폴더로 이동하는 기능 추가 (#432)

* refactor: draggable type에 따라 검증 함수 분리

* chore: store barrel export 추가

* feat: pick to folder를 위한 dnd context 생성

* fix: dnd context 변경에 따른 로직 변경

* refactor: 컴포넌트명 변경

* refactor: useGetDndContextSensor로 로직 분리

* fix: 로직에 따라 pickId 문자열 대신 정수로 수정

* feat: PickDraggableObjectType에 부모 폴더 id 추가

* feat: 드래깅하는 카드 정보 store에 추가

* feat: pick to pick 시 overlay 카드 생성

* feat: folder drag시 folder overlay 보이도록 변경

* design: 카드 드래그 시 크기 줄이기

* feat: pick to folder drag over시 폴더 색상 변경

* refactor: movePicksToEqualFolder로 함수명 변경

* feat: 휴지통 및 미분류로 픽 이동 감지

* feat: 다른 폴더로 픽 이동 로직 추가

* feat: 폴더 디테일 페이지 뷰 연결

* feat: �휴지통 페이지 카드 렌더링

* [REFACTOR] 시큐리티 및 예외처리 리팩토링 (#427)

* refactor: 쿠키 삭제 메소드 리팩토링

* refactor: base-url 리팩토링 (환경변수->property로 이관)

* feat: add exceptionhandler for Json Parse error

* [FIX] FolderService 로직 변경 (#434)

* feat: 부모폴더 검증을 위한 예외 추가

* fix: MoveFolder, changeFolderOrder 분리, 요청에 parentFolderId 추가

* fix: MoveFolder, changeFolderOrder 분리 및 delete 로직 변경

* fix: 픽 리스트를 휴지통으로 이동하는 로직 수정

* fix: 폴더 이동 로직 롤백.. 기존 로직에 검증 로직만 추가함

* [FIX] DragOver 수정 및 휴지통 이동 로직 변경 (#441)

* fix: DragOver 개선

* refactor: 백엔드 API 변경에 따른 휴지통 이동 로직 변경

* [FIX] 현재 포커스된 폴더 삭제 시에 미분류 페이지로 리다이렉트 (#446)

* fix: 현재 포커스된 폴더 삭제 시에 미분류 페이지로 리다이렉트

* design: 드래그시 outline 제거

* [FEAT] 로그인 리다이렉트 URL 추가 (#450)

* chore: sample 대신 관용적으로 사용되는 example로 변경

* feat: 로그인 redirect url 추가

* ci/cd: github Actions secrets 추가 및 적용

* [FEAT] 검색 기능 구현 (#454)

* feat: querydsl 설정 추가

* feat: querydsl 설정 추가

* refactor: pick memo 제거 및 픽 리스트 조회 dto명 변경

* refactor: pick 제목만 수정 가능하도록 변경, pick 수정 시 pickTag 테이블 갱신 로직 추가

* refactor: 검색 관련 dto 추가, 기존에 pickApiResponse에 잘못 작성된 부분 수정 후 mapper도 수정

* refactor: 검색 관련 querydsl로 구현

* refactor: 검색 관련 API 구현, 픽 조회 API 분리, 페이지네이션 dto 구현

* refactor: 테스트 코드 작성 및 수정

* refactor: 주석 변경

* refactor: SliceReponse -> PickSliceResponse로 변경

* refactor: Pick entity memo 제거, sliceResponse에 hasNext 추가

* [TEST] FolderService 단위 테스트 구현 (#440)

* feat: test를 위한 mockito 의존성 추가

* feat: 단위테스트를 위한 Fixture 구현

* feat: FolderService 단위 테스트 구현

* refactor: security 모듈 api 모듈로 통합 (#451)

* [REFACTOR] 익스텐션 폴더 구조 변경 및 API 최신화 (#458)

* feat: 익스텐션 로그인 페이지 디자인 변경

* chore: 백엔드 타입 최신화

* chore: 백엔드 타입 최신화

* refactor: type은 types폴더로 이동

* chore: 백엔드 타입 최신화

* refactor: api 호출 함수 변경

* refactor: api url 상수로 관리

* feat: barrel export에서 값과 함수 제거

* refactor: 도메인 의존성 없는 컴포넌트 lib폴더로 이동

* refactor: toast 관련 함수 lib 폴더로 이동

* refactor: store는 store폴더로 이동

* chore: 사용하지 않는 타입 제거

* refactor: util함수 util 폴더로 이동

* refactor: 페이지 폴더 제거

* refactor: 컴포넌트는 컴포넌트 폴더로 이동

* fix: returnErrorFromHTTPError에 await 문구 추가

* chore: 백엔드 api 변경에 따른 타입 변경

* [FIX] 로그인 이후 뒤로가기 시 로그인 화면으로 이동하지 못하게 수정 (#453)

* [fix] 픽 검색 API 페이지네이션 적용 (#460)

* chore: 무한스크롤 라이브러리 추가

* chore: 무한스크롤 라이브러리 추가

* feat: 무한 스크롤 구현

* chore: pick 조회 스토어 함수 수정

* chore: 불필요한 코드 수정

* [FEAT] radix-color 추가 (#462)

* feat: radix-color 추가

* chore: radix-color 추가 변경사항 적용

* chore: route 변수 수정

* feat:  breadcrumb 적용

* chore: 기타 스타일링

* chore: 입력창 스타일링

* feat: 무한 스크롤 다듬기 작업

* feat: 검색창 변수 수정

* [DESIGN] 검색 바 디자인 개선 (#463)

* chore: route 변수 수정

* feat:  breadcrumb 적용

* chore: 기타 스타일링

* chore: 입력창 스타일링

* feat: 무한 스크롤 다듬기 작업

* feat: 검색창 변수 수정

* fix: useSearchParams는 suspense로 반드시 감싸야 한다.

* refactor: ApiFolderErrorCode 오타 수정 (#468)

* Update README.md

* [CHORE] 운영환경 배포를 위한 frontend 브랜치 merge (#471)

* chore: 세팅중인 상태

* fix: vanilla-extract 설정 변경

* fix: storybook 실행 안되는 오류 해결

@chromatic-com/storybook이 문제였음.

* chore: storybook tset 확인

* chore: eslint 예외 추가

* chore: eslint, prettier 설정

* chore: DS_Store ignore

* chore: husky 테스트

* chore: husky 적용 중

* chore: husky 적용

* chore: 테스트용 컴포넌트 삭제

* chore: jest 적용

* chore: ts를 devDependencies로 이동

* chore: sample test 파일 삭제

* chore: add files to gitignore

* chore: vscode setting 추가

* chore: playwright example test code 삭제

* chore: e2e test github action 추가

* fix: action 오타 수정

* fix: 깃허브 액션 오타 수정

* chore: add corepack

* chore: 실행 순서 변경

* chore: browser 설치

* chore: playwright-report path 변경

* chore: �액션 if문 제거

* fix: 액션 탭 간격 변경

* chore: github action 테스트를 위한 싶패 테스트

* chore: 항상 report를 뽑을 수 있게 변경

* chore: github action 테스트를 위한 성공 테스트

* chore: vanilla-extract storybook 적용

* chore: 프로젝트 세팅을 위한 필요없는 파일 없애기

* chore: playwright yarn script 추가

* chore: react-hot-toast 적용

* feat: 깃허브 액션 테스트용 PR (#4)

* chore: 세팅중인 상태

* fix: vanilla-extract 설정 변경

* fix: storybook 실행 안되는 오류 해결

@chromatic-com/storybook이 문제였음.

* chore: storybook tset 확인

* chore: eslint 예외 추가

* chore: eslint, prettier 설정

* chore: DS_Store ignore

* chore: husky 테스트

* chore: husky 적용 중

* chore: husky 적용

* chore: 테스트용 컴포넌트 삭제

* chore: jest 적용

* chore: ts를 devDependencies로 이동

* chore: sample test 파일 삭제

* chore: add files to gitignore

* chore: vscode setting 추가

* chore: playwright example test code 삭제

* chore: github action 테스트를 위한 싶패 테스트

* chore: github action 테스트를 위한 성공 테스트

* chore: vanilla-extract storybook 적용

* chore: 프로젝트 세팅을 위한 필요없는 파일 없애기

* chore: playwright yarn script 추가

* chore: react-hot-toast 적용

---------

Co-authored-by: Jason <[email protected]>

* chore: 프로젝트 구조 세팅 (#11)

* chore: 필요없는 파일 제거

* fix: 파일명 오타 수정

* feat: 기본 디렉토리 추가

* chore: yarn set version berry (#12)

* chore: 깃허브 액션 변경

* feat: 모노레포 분리 (#28)

* chore: 서비스 디렉토리 이동

* chore: eslint 적용중

* fix: eslint 설정

* chore: extension 프로젝트 세팅 중 husky 충돌

* fix: pre-commit 동작 수정

* chore: backup

* chore: backup

* chore: backup2

* chore: setting

* chore: ignore 설정

* chore: husky 설치

* chore: monorepo로 변경된 뒤 액션 변경

* chore: husky 설치

---------

Co-authored-by: Jason <[email protected]>

* chore: 폴더명 변경에 따른 액션 변경

* chore: 폴더명 변경 (#37)

* Front/feat/#35 (#40)

* chore: 폴더명 변경
* build: 크롬 익스텐션 빌드 설정
* feat: css 파일 제거
* build: 파일 수정시마다 build되는 스크립트 추가
* chore: 의존성 설치
@tanstack/react-query, @vanilla-extract/css, react-router-dom, zustand
* feat: 디렉토리 생성
* feat: router 추가
* feat: react-query provider 설정
* feat: vanilla-extract 세팅

* feat: 현재 탭에서 데이터 가져오기 (#50)

* feat: 북마크 페이지 생성
* chore: 절대경로 수정
* build: build시에는 빌드를 한번하게 변경
* feat: 새로운 링크로 이동할 시 og image가져오는 동작 추
* feat: tab 열 때 마다 og image 가져오기
* refactor: 쓰지 않는 코드 제거
* chore: 주석 제거
* feat: 파비콘 가져오기
* feat: 서비스워커를 이용해서 동작하는 것으로 변경
* refactor: useGetTabInfo hook으로 분리
* refactor: background.ts 제거
* feat: og:description 가져오기
* chore: 쓰지 않는 상수 제거

* feat: 페이지 기본 요소 렌더링 (#52)

* chore: init

* design: theme 설정

* design: dirView 구조 정의

* chore: downgrade version - yarn 4.3.1 / typescript 5.5.4

* feat: react-arborist 적용 및 테스트 완료

* feat: 디렉토리 구성 및 아이콘 추가

* chore: use-resize-observer 라이브러리 추가

* design: tree 높이 동적 조절되도록 수정

* feat: 우측 view에 folder 및 link 표시

* chore: 컴포넌트 분리

* chore: 불필요한 주석 제거

* chore: 4.3.1 cjs 추가

* refactor: pr 수정요청사항 적용

* chore: import 수정

* chore: index.ts 추가

* chore: index.ts 추가

* chore: conflict 해결

* refactor: barrel exports pattern 적용

* refactor: icon export 처리

* refactor: directoryNode export 처리

* refactor: icon 이동

* refactor: icon을 public으로 이동

* chore: 불필요한 index 제거

* chore: 이름 변경

* chore: 이름 변경

* chore: 이름 변경

* chore: 이름 변경

* chore: 이름 변경

* [FEAT] 익스텐션 태그 인풋 핵심 로직 구현 (#126)

* feat: 북마크 페이지 생성
* chore: 절대경로 수정
* build: build시에는 빌드를 한번하게 변경
* feat: 새로운 링크로 이동할 시 og image가져오는 동작 추가
* feat: tab 열 때 마다 og image 가져오기
* refactor: 쓰지 않는 코드 제거
* chore: 주석 제거
* feat: 파비콘 가져오기
* feat: 서비스워커를 이용해서 동작하는 것으로 변경
* refactor: useGetTabInfo hook으로 분리
* refactor: background.ts 제거
* feat: og:description 가져오기
* chore: 쓰지 않는 상수 제거
* feat: cmdk 적용
* feat: 현재 선택한 태그가 보이도록 변경
* feat: 비동기 호출 흉내내서 라벨 데이터 가져오기
* chore: immer 설치
* feat: tagStore CRUD 구현
* chore: lucide icon 설치
* feat: deselect button ui 추가
* feat: deselect 기능 추가
* feat: SelectedTag ui 개선
* chore: todo 주석 제거
* feat: 동일한 태그가 없을 때 생성 아이템 추가
* feat: 태그 생성 로직 구현
* chore: 폴더 변경
* feat: TagInfoPopover 간단한 UI 구현
* feat: tag update 기능 추가
* chore: tagStore 폴더 변경
* chore: @radix-ui/react-dialog 설치
* chore: showDeleteTagDialogButton 파일 변경
* feat: DeleteTagDialog 상태 관리 구현
* chore: 다음 작업에 할 Todo 내용 추가
* feat: DeleteTag 관련 컴포넌트 구현
* chore: Command.Dialog css 변경
* refactor: useEffect내 함수 기명함수로 변경
* refactor: 분리되어있던 컴포넌트 SelectedTagItem폴더로 이동
* chore: components 에서 ui로 폴더명 변경
* refactor: TagInput컴포넌트에서 TagSelectionDialog컴포넌트 분리
* refactor: TagInput에서 TagPicker로 컴포넌트명 변경
* refactor: TagAutocompleteDialog로 컴포넌트명 변경
* refactor: TagPicker css명 변경
* refactor: css classname 변경
* refactor: 분리되어있던 css 합치기
* refactor: onSelectTag함수로 반복되는 함수 호출 합침
* refactor: 문자열 상수로 변경
* chore: 주석 추가
* feat: enter키 입력시 popover 켜지게 변경
* refactor: PopoverTriggerButton으로 분리
* chore: 사용하지 않는 index.ts 제거
* chore: 폴더명 components에서 ui로 변경
* chore: 폴더명 변경
* chore: tsbuildinfo update
* chore: 폴더 위치 이동
* chore: 폴더 이동
* chore: git pull frontend
* chore: todo 주석 추가

* [FEAT] Drag&Drop 구현: Directory (#117)

* test: mockdata 동적 생성

* chore: react-dnd, react-dnd-html5-backend 추가

* feat: dragDropManager 적용

* feat: dragDropManager 적용

* feat: Drag&Drop 시 mockData도 변경되도록 수정

* feat: treeData를 전역 상태로 관리

* design: LinkEditorSection 렌더링 요소 변경

* design: hover 시 음영 추가

* refactor: type 변경

* feat: 현재 위치에 폴더가 없으면 표시하지 않도록 변경

* fix: 아래로 이동 시 한칸씩 밀리는 버그 수정

* feat: FolderSection에 dnd 적용

* feat: LinkEditorSection 에서 DirectoryTreeSection 으로 Folder Drag and Drop 가능

* fix: DirectorySection에서 동일 부모의 자식 간 순서 변경 시 폴더를 아래쪽으로 이동할 경우 두칸씩 움직이는 문제 해결

* feat: DirectorySection에서 Folder를 이동 시 폴더 사라지는 로직 추가

* feat: LinkEditorSection에서 Pick Dnd 가능

* refactor: 중복 코드 hook으로 분리

* refactor: 이름 변경

* refactor: 이름 변경

* design: Lucid Icon 적용

* refactor: 중복 코드 제거

* chore: marged branch frontend

* chore: yarn cache clean and re-installed

* [FEAT] 우측으로 dnd 작업 가능 (#145)

* design: theme 변경시 icon 색상도 변경되도록 수정

* feat: LinkEditorSection 상단에 Directory Name 동적 변화

* design: 선택된 항목 강조 표시

* fix: DirectorySection 내부에서 dnd 작업 시 우측에도 반영되도록 수정

* fix: DirectorySection 내부에서 dnd 작업 시 우측에도 반영되도록 수정: 순서 변경 적용

* fix: DirectorySection 내부에서 dnd 작업 시 우측에도 반영되도록 수정: 순서 변경 적용

* fix: 순서 변경 시 인덱스 오차 수정

* feat: 폴더 클릭 시 해당 폴더로 이동

* fix: 내부에 요소가 없으면 빈 화면 표시

* feat: 좌측->우측 dnd 가능

* fix: 최초 로드 시 treeApi를 받아오지 못하는 문제 해결

* �[FEAT] .env 파일 설정 및 서버와 연결 확인 (#158)

* feat: 환경변수로 도메인 저장
* feat: 간단한 login 페이지 생성 및 .env파일 세팅

* �[FEAT] 크롬 익스텐션 로그인 링크 페이지 구현 (#167)

* build: dev 모드, production 모드에 따라 환경변수 주입
* build: build시에 manifest.json에 환경변수 주입
* fix: mode에 따른 환경변수 주입
* fix: script 오타 수정
* chore: ky 종속성 설치
* feat: ky를 이용한 baseApi 생성
* feat: 로그인 여부 파악 후 페이지 렌더링
* chore: tsbuildinfo 삭제
* chore: 주석 제거
* feat: Text 컴포넌트 구현
* feat: Button 컴포넌트 구현
* feat: 로그인 링크 페이지 구현
* feat: 상수로 적용
* fix: 상수대신 .env 직접 적용
- 해당 코드에서 에러가 생겨서 추후 수정할 예정
* chore: 주석 추가

* [FEAT] Swagger의 api-doc을 이용한 type 생성 (#177)

* feat: type 생성
* chore: root의 ts version 원상 복구

* [CI] 프론트엔드 서버 배포 스크립트 (#202)

* :rocket: 프론트 서버 배포 설정

* :rocket: 프론트 브랜치와 연결

* :rocket: docker image 빌드 전 환경변수 생성(for next build)

* build: 필요하지 않은 github action script 제거

* fix: cd script 원상 복구

---------

Co-authored-by: dmdgpdi <[email protected]>

* [FEAT] 북마크 생성 페이지 디자인 및 태그 API 연결, (#210)

* chore: 북마크 페이지 폴더 내로 이동

* feat: 북마크 페이지 기초적인 레이아웃 설정

* refactor: BookmarkHeader 컴포넌트 분리

* feat: Gap 컴포넌트 구현

* feat: Gap 컴포넌트 default값 변경

* feat: 북마크 페이지 style 분리

* feat: ogImage 가져오기

* feat: ThumbnailImage 컴포넌트 구현

* feat: 이미지 로딩 시 애니메이션 적용

* chore: 주석 제거

* refactor: ThumbnailImage 컴포넌트 수정

* feat: input tag css 적용

* feat: TagPicker tab 및 focus 애니메이션 적용

* refactor: onKeyDown 함수 뺴기

* chore: 인풋 값 확인

* feat: 위, 아래 화살표에 따라 focus를 변경하는 hook 생성

* feat: 화살표따라 탭 포커스 이동 적용

* feat: props에 따라 고정된 속성 제공

* chore: SelectedTagListLayout 폴더 이동

* feat: 공통 스타일 적용

* feat: SelectedTagList의 스타일 추가

* chore: 간단한 색 변경

* chore: 필요없는 data-desc 제거

* feat: 팝오버 버튼 tab 이동 막기, 엔터 키 제거

* chore: style 변경

* feat: 태그픽커 및 다이얼로그에 style 적용

* feat: radix-ui popover 를 floating-ui로 대체

* feat: 팝오버 버튼 디자인 구현

* feat: 태그 삭제 모달 디자인 추가

* feat: tag 목록이 길 때 스타일 변경

* �chore: 스크롤바 제거 globalStyle에 적용

* feat: 선택한 라벨 높이에 따라 commandListHeight 변경

* chore: css 제거

* feat: CommandList 로딩 화면 추가

* chore: randomcolor 라이브러리 설치

* chore: pre-commit command 수정

* fix: pre-commit command 수정

* feat: numberColor 함수 구현 및 태그 생성시 적용

* feat: randomColor style 적용

* chore: type 생성

* fix: 태그 다이얼로그에서 공백 입력시 아무것도 뜨지 않게 변경

* chore: schema를 위한 절대 경로 추가

* feat: 실제 서버의 타입으로 변경

* fix: 태그 리스트가 없을 때, Command.Empty가 보이게 조건문 변경

* fix: �적용되지 않는 함수 제거

* feat: 태그 생성 api 연결

* refactor: 태그 선택 취소 시에 id값만 이용

* feat: delete tag api 연결

* feat: updateTag api 연결

* chore: schema 타입 최신화

* fix: tagName 수정 후 enter key 입력시 모달창 생기는 버그 수정

* feat: 사용하지 않는 CurrentTabInfo 컴포넌트 삭제

* refactor: useGetTabInfo 폴더 이동

* refactor: api 적용을 위해 default value 변경

* fear: create pick api 연결

* chore: react hot toast 라이브러리 설치

* chore: 사용하지 않는 SAMPLE_DATA 제거

* feat: toast 라이브러리 적용

* feat: ApiErrorBody type 선언

* chore: todo 제거

* feat: post api 통신 에러 핸들링 추가

* feat: deleteTag optimistic update 추가

* feat: update tag optimistic update 추가

* refactor: useCalculateCommandListHeight hook으로 분리

* refactor: onSelectCreatableTag 함수 분리

* chore: 쓰지 않는 return 제거

* feat: enter key로 태그 삭제 및 취소 가능

* feat: 간단한 에러 페이지 생성

* feat: 에러 핸들링 추가

* [FEAT] sanitizeHtml에서 DOMPurify로 교체 (#213)

* fix: 런타임 에러 해결(잘못된 변수 접근) (#215)

* [FEAT] 크롬 익스텐션 픽 수정 기능 구현 (#229)

* chore: schema 최신화
* feat: getLinkByUrl api 추가
* feat: useHasLink hook 구현
* chore: API 변경에 따른 type 최신화
* feat: CreatePickForm, UpdatePickForm 분리
* feat: chore: Pick API 변경에 따른 type 최신화
* feat: link api 삭제
* feat: getPickByUrl api 추가
* feat: useHasPick 변경
* chore: ThumbnailImage backgroundColor 변경
* feat: updateForm 구현
* feat: 로딩 상태 시의 Skeleton 구현
* feat: DeferredComponent 구현
* feat: 로딩화면 구현
* chore: 주석 제거

* [FEAT] Backend api 연결 및 ux 미세조정 (#227)

* design: flex wrap 설정

* design: flex wrap 이중 줄바꿈 문제 수정

* feat: 우클릭 시 context menu 표시

* chore: 주석 제거

* chore: alt 이름 변경

* feat: treeRef 추가

* feat: mockData create 가능

* feat: api 연동: create&move

* feat: api 연동: dnd move 동작 확인

* refactor: 핸들러 함수 hook으로 분리

* feat: edit ux 추가 및 arborist node outline 제거

* feat: folder rename 연결 완료

* feat: folder delete(move to recyclebin) 연결 완료

* feat: create 로직 수정

* feat: 초기 로드 시 recycleBin 생성(향후 수정 예정)

* feat: Tree 컴포넌트 추가 전 커밋

* chore: popover Demo 추가

* design: 버튼 및 팝오버 디자인 수정

* feat: 휴지통 붙임:수정예정

* feat: 휴지통 숨김 설정

* design: 전체적인 디자인 미세 조정

* feat: 로그아웃 버튼 추가 및 디렉토리 조정

* feat: client 로그인 검증로직 추가

* design: 로그인 페이지 디자인 추가

* refactor: 폴더 create 로직 수정

* refactor: 폴더 create 로직 수정2

* refactor: 필요없어진 popover제거

* fix: 중첩 폴더 구조에서 폴더 생성 불가한 문제 해결

* design: 에러 토스트 메시지 추가

* refactor: 삭제 로직 수정(id 부여 방식)

* feat: 휴지통에서 폴더 완전삭제 가능

* [FEAT] 익스텐션 테마 적용 (#241)

* feat: theme을 techpick-shared 모노레포로 분리
* feat: theme 적용
* design: 익스텐션 테마 적용
* fix: peerDependencies제거
* design: techpick의 theme을 techpick-shared에 의존하게 변경
* feat: techpick reset.css 수정
* feat: git pull 이후 필요없는 파일 삭제
* feat: theme 동기화

* [FEAT] 카드 컴포넌트 디자인 구현 (#246)

* fix: ky middleware credentials속성 올바르게 적용

* feat: teckpick-service와 동일하게 id 변경

* feat: techpick-shared의 export 추가

* feat: images모든 url을 허용 및 next.config.mjs제거

* chore: 의존성 설치

* chore: @/schema 절대 경로 추가

* chore: portalContainer id 변경

* feat: pickCard 컴포넌트 디자인 및 레이아웃 구현

* feat: TagPicker 컴포넌트 복사

* [FEAT] 버그 수정, 휴지통 복원, context menu, pr 요청사항 적용 (#247)

* fix: 한글 입력시 폴더 두번 생성되는 문제 해결

* fix: 생성중인 폴더가 있을 때, 폴더 추가생성 방지로직 추가

* refactor: 폴더 위치 변경 및 Input 테마 적용

* fix: 노드 클릭 시 2개의 트리 중 한 노드만 focus되도록 수정

* refactor: 프로젝트 디렉토리 및 파일 구조 수정

* refactor: 프로젝트 디렉토리 및 파일 구조 수정2

* feat: recycleBin에서 contextmenu 사용 가능

* feat: recycleBin에서 restore 가능

* refactor: 이전 코드리뷰 comment 반영

* fix: 폴더 생성시 input이 사라지는 문제 수정

* fix: 폴더 삭제 시 우측 화면 업데이트 안되는 문제 수정

* fix: DirectorySection ui 틀어짐 수정

* feat: 휴지통 내부 dnd 가능

* fix: 좌측 디렉토리 절반만 표시되는 문제 수정

* fix: 간격 수정

* fix: 휴지통 dnd 비활성화

* fix: 생성 또는 이름변경 실패 이후 + 버튼클릭 안되는 버그 수정

* feat: 우측 folder contextMenu 이용가능
*버그 수정 필요(recycleBin menu 출력되는 문제)*

* fix: 우측 contextMenu 버그 수정

* fix: 우측 context 수정중

* chore:충돌 방지용 git pull

* [CI] 도커 이미지 build 관련 버그 수정 (#252)

* build: Dockerfile yarn berry 적용 및 필요한 파일 추가
* chore: 주석 변경

* fix: tag 생성 연속 입력 문제 해결 (#257)

* [FIX] 로그인된 상태일 때 메인 페이지로 리다이렉트 (#260)

* [FEAT] unclassified 표시 가능 (#261)

* feat: unclassifiedPicks api 호출 코드 추가

* feat: unclassified 표시됨

* [FEAT] PickCard API 연결 (#266)

* chore: 주석 추가

* feat: PickCard 이미지 스타일 수정

* chore: 쓰지 않는 apis 폴더 삭제

* refactor: 중복된 api middleware 제거

* fix: ky middleware content-type 추가

* feat: getPick api 연결

* design: 디자인 변경

* chore: import 순서 변경

* feat: updatePick api 연결

* feat: selected Tag 태그 삭제시 상태 변경

* chore: 주석제거

---------

Co-authored-by: Jason <[email protected]>

* feat: skelton 적용 (#268)

* feat: skelton 적용

* feat: link 추가 및 tagPicker 동작 수정

* [FIX] 태그 생성 후 창 유지후에 수정 했을 때, 생성한게 추가가 안되는 로직 (#270)

* [FEAT] pick dnd (#272)

* feat: nodeApi로 변환 로직 추가

* fix: 임시 디바운싱 적용

* fix: api 교체

* fix: 간헐적으로 unclassified 안보이는 문제 수정

* feat: pick 휴지통, 복원, 삭제 api 연결완료

* fix: 이름 길어지면 ...으로 표시

* fix: 가상 미분류 폴더 렌더링 방지 처리

* fix: 버그유발 기능 비활성화

* fix: fix

* fix: fix2

* [REFACTOR] 폴더구조 변경 (#308)

* refactor: shared 폴더 제거

* refactor: entities/pick 폴더 제거

* refactor: entities/tag 제거

* refactor: features/tag 제거

* refactor: features/userManagement 제거

* refactor: features/themeManagement 제거

* refactor: features/nodeManagement 제거

* refactor: widgets 제거

* [REFACTOR] import 순서 변경 (#311)

* chore: eslint import 순서 정리
* reafactor: import 순서 변경

* feat: 디자인 토큰 추가

* feat: 디자인 토큰 적용

* feat: �commontThemeContract 삭제

* fix: ThemeProvider 변경사항 적용

* fix: 위치 조정

* [FEAT] 디자인 토큰 추가

* [FEAT] 같은 계층일 때, 폴더 multi select 구현 (#332)

* chore: dnd-kit 설치 및 tree 페이지 생성

* feat: jest 설정추가

* fix: jest monorepo별 적용

* chore: root jest config 삭제

* feat: 같은 부모 밑에서 1개씩 폴더 이동

* design: tree page margin 변경

* test: 복수의 폴더 이동 테스트코트 작성

* feat: 현재 드래그 여부 상태 zustand에 추가

* feat: 폴더 다중 선택 기능 추가

* feat: DragOverlay추가

* design: primary color로 변경

* fix: test문 it.only 제거

* refactor: dndTreeStore에 hasIndex 적용

* [FEAT] 검색창 및 리스트 로직 설계 (#333)

* feat: 검색 위젯 로직 구현

* feat: 유틸리티 클래스 구현 (파싱, 필터링)

* doc: 유틸리티 참고 이미지 및 설명

* feat: zustand, react query 추가

* feat: 뷰포트 리액트 컴포넌트

* refactor: esToolkit import

* refactor: useViewScope 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: Util 함수 리팩토링

* [FEAT] 픽 리스트 - 사용자 설정 필터 & 뷰 템플릿 (#348)

* feat: 검색 위젯 로직 구현

* feat: 유틸리티 클래스 구현 (파싱, 필터링)

* doc: 유틸리티 참고 이미지 및 설명

* feat: zustand, react query 추가

* feat: 뷰포트 리액트 컴포넌트

* refactor: esToolkit import

* refactor: useViewScope 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: useQuery 함수명 파일명 변경

* refactor: Util 함수 리팩토링

* chore: 파일 제거 및 위치 이동

* chore: use-Immer 패키지 추가

* feat: 유틸리티 (Stream, Tokenizer) 리팩토링 및 개선

* chore: 공통 타입 추가 및 일부 변경

* feat: 태그 아이템 UI 컴포넌트 (익스텐션에서 가져옴)

* feat: 최상단 컴포넌트 (뷰어) 및 상태 구현

* test: 쿼리 더미 데이터 추가

* feat: 옵션 리스트 위젯 및 상태 구현

* feat: 검색창 위젯 구현

* feat: 필터 옵션 기능 구현

* feat: 뷰 템플릿 (리스트 vs 그리드) 옵션 구현

* chore: 디렉토리 이름 변경, 기존 폴더 제거

* chore: dummy data 업데이트

* :recycle: refactor: 코드 리뷰 기반으로 리팩토링 진행

* [REFACTOR] Drag & Drop 함수 및 컴포넌트 분리  (#351)

* test: moveFolder test code 삭제

* feat: mockdata 변경에 따른 로직 변경

* refactor: 중앙 스토어에서 로직 분리

* design: treePageWrapper css 변경

* feat: shift + click시에 active가 부모 폴더가 다르면 초기화

* feat: 다른 폴더간 이동 구현

* chore: 테스트코드 예제 삭제

* refactor: reorderFolderInSameParent 함수명 수정

* refactor: SelectedFolderListType으로 대체

* refactor: handleClick 함수 분리

* chore: tree 컴포넌트를 components 폴더로 이동

* [FEAT] 공통 테마에 jsdoc 추가 (#354)

* [FIX] drag & drop 후 정렬 변경 (#360)

* fix: drag & drop 후 정렬 변경

* refactor: isSameParentFolder parameter 변경(동일한 값)

* [FEAT] 폴더 생성 UI 및 상태 관리 로직 변경 (#365)

* design: 작업 전 디자인 변경

* design: CreateFolderInput 디자인 추가

* feat: 폴더 생성 UI 구현

* design: FolderTree 전체적인 레이아웃 변경

* design: 폴더 트리 디자인 개선

* feat: CreateFolderInput 생성시 focus 이동

* design: createFolderInputLayout 디자인 변경

* [FEAT] 폴더 이름 변경 UI 및 로직 구현 (#367)

* feat: CreateFolderInput, FolderInput 컴포넌트로 추출

* design: 공통 테마 사이즈 추가

* chore: PORTAL_CONTAINER_ID 상수로 변경

* feat: 폴더 이름 변경 UI 및 로직 연결

* feat: 우클릭시에 포커스되는 폴더 변경

* [FEAT]: 삭제 UI 및 로직 추가 (#369)

* [CI/CD] nextjs docker image 사이즈 감소 (#380)

* [FEAT] Folder API 연결 (#399)

* chore: api 변경에 따른 스키마 업데이트

* feat: 폴더 관련 api 타입 지정

* refactor: api 변경에 따른 타입 변환

* feat: top level error 추가

* feat: folder crud api 추가

* chore: api 변경에 따른 타입 변경

* feat: 폴더 드래그 앤 드랍 api 연결

* feat: 폴더 이름 변경 api 연결

* feat: 휴지통 이동 api 연결

* refactor: -1 매직넘버 상수로 변경

* chore: mockdata 삭제

* chore: re-resizable 의존성 설치

* faet: FolderTree 크기 조정 가능하게 변경

* chore: api 변경에 따른 타입 최신화

* feat: createFolder api 연결

* refactor: getFolders, getBasicFolders 로 함수명 변경

* reafactor: getRootFolderList로 변경

* [FEAT] 폴더 클릭에 따른 라우팅 변경 (#405)

* feat: 라우팅 설정 변경

* chore: root 폴더에서 tsc 동작시 build된 파일 생성 차단

* chore: legacy 삭제

* feat: 폴더 클릭시마다 라우팅 이동

* feat: useTreeStore subscribeWithSelector 적용

* refactor: FolderInfoItem 컴포넌트 분리

* feat: url을 이용해 folder 선택하게 변경

* feat: route 경로 추가

* feat: middleware redirect url 변경

* feat: 휴지통 및 미분류 폴더 추가

* design: 최초 로딩시에 사이드바 사이즈 지정

* design: 사이드바 디자인 조정

* chore: 쓰지 않는 props 제거

* refactor: useEffect 함수명 추가

* [FEAT] 검색 위젯 기능 구현 및 미사용 필터 제거 (#410)

* chore: 중간 작업 공유

* chore: 타입 변경 및 기존 SearchWidget.tsx 리팩토링

* chore: 타입 변경 및 기존 SearchWidget.tsx 리팩토링

* feat: 기존 로직에서 미사용하는 필터 제거

* feat: dndTreeStore 병합 작업

* [FEAT] 검색창 자동 완성 (#418)

* refactor: PrefixTokenizer 구현 수정

* refactor: PrefixTokenizer 구현 수정

* feat: 검색 위젯 토큰화 구현

* chore: 화면 테스트를 위한 뷰어 패널 코드 수정 (반영 안될 수 있는 커밋)

* feat: 토큰 검색창 CSS 설정

* chore: 일부 주석 추가 및 코드 위치 변경

* chore: yarn.lock 파일 커밋

* [FEAT] 같은 폴더 내에서 Pick Drag&Drop 구현 (#420)

* chore: 백엔드 api 타입 최신화

* chore: util 스펠링 정확하게 변경

* feat: pickType 추가

* feat: getPicksByFolderId 추가

* refactor: viewTemplate 코드 변경

* refactor: 바로 호출이 아닌, useEffect 내에서 비동기함수 호출

* chore: git pull을 위한 커밋

* refactor: pickCardListViewer로 PickCard 컴포넌트 이동

* design: card link style 변경

* feat: 더블 클릭시 링크 이동

* feat: dnd가 가능한 list와 그렇지 않은 list분리

* refactor: dnd여부에 따라 PickListViewer분리

* refactor: DnDCurrentType을 dnd.type으로 이동

* refactor: 공통 utils함수로 추출

* feat: 픽에서 픽으로 이동(api 미연결)

* feat: pick multi-select 구현

* feat: multi-select drag&drop 구현(api 미연결)

* feat: 같은 폴더 내 픽 drag&drop api 연결

* [FIX] 깃허브 액션 API 테스트

* [FIX] 검색창 버그 수정 및 URL 업데이트 (#424)

* :rotating_light: fix: useSearchParams 사용처에 <Suspence> 추가

* [DESIGN] 폴더 영역 디자인 개선 (#430)

* [FEAT] 픽을 폴더로 이동하는 기능 추가 (#432)

* refactor: draggable type에 따라 검증 함수 분리

* chore: store barrel export 추가

* feat: pick to folder를 위한 dnd context 생성

* fix: dnd context 변경에 따른 로직 변경

* refactor: 컴포넌트명 변경

* refactor: useGetDndContextSensor로 로직 분리

* fix: 로직에 따라 pickId 문자열 대신 정수로 수정

* feat: PickDraggableObjectType에 부모 폴더 id 추가

* feat: 드래깅하는 카드 정보 store에 추가

* feat: pick to pick 시 overlay 카드 생성

* feat: folder drag시 folder overlay 보이도록 변경

* design: 카드 드래그 시 크기 줄이기

* feat: pick to folder drag over시 폴더 색상 변경

* refactor: movePicksToEqualFolder로 함수명 변경

* feat: 휴지통 및 미분류로 픽 이동 감지

* feat: 다른 폴더로 픽 이동 로직 추가

* feat: 폴더 디테일 페이지 뷰 연결

* feat: �휴지통 페이지 카드 렌더링

* [FIX] DragOver 수정 및 휴지통 이동 로직 변경 (#441)

* fix: DragOver 개선

* refactor: 백엔드 API 변경에 따른 휴지통 이동 로직 변경

* [FIX] 현재 포커스된 폴더 삭제 시에 미분류 페이지로 리다이렉트 (#446)

* fix: 현재 포커스된 폴더 삭제 시에 미분류 페이지로 리다이렉트

* design: 드래그시 outline 제거

* [FEAT] 로그인 리다이렉트 URL 추가 (#450)

* chore: sample 대신 관용적으로 사용되는 example로 변경

* feat: 로그인 redirect url 추가

* ci/cd: github Actions secrets 추가 및 적용

* [REFACTOR] 익스텐션 폴더 구조 변경 및 API 최신화 (#458)

* feat: 익스텐션 로그인 페이지 디자인 변경

* chore: 백엔드 타입 최신화

* chore: 백엔드 타입 최신화

* refactor: type은 types폴더로 이동

* chore: 백엔드 타입 최신화

* refactor: api 호출 함수 변경

* refactor: api url 상수로 관리

* feat: barrel export에서 값과 함수 제거

* refactor: 도메인 의존성 없는 컴포넌트 lib폴더로 이동

* refactor: toast 관련 함수 lib 폴더로 이동

* refactor: store는 store폴더로 이동

* chore: 사용하지 않는 타입 제거

* refactor: util함수 util 폴더로 이동

* refactor: 페이지 폴더 제거

* refactor: 컴포넌트는 컴포넌트 폴더로 이동

* fix: returnErrorFromHTTPError에 await 문구 추가

* chore: 백엔드 api 변경에 따른 타입 변경

* [FIX] 로그인 이후 뒤로가기 시 로그인 화면으로 이동하지 못하게 수정 (#453)

* [fix] 픽 검색 API 페이지네이션 적용 (#460)

* chore: 무한스크롤 라이브러리 추가

* chore: 무한스크롤 라이브러리 추가

* feat: 무한 스크롤 구현

* chore: pick 조회 스토어 함수 수정

* chore: 불필요한 코드 수정

* [FEAT] radix-color 추가 (#462)

* feat: radix-color 추가

* chore: radix-color 추가 변경사항 적용

* chore: route 변수 수정

* feat:  breadcrumb 적용

* chore: 기타 스타일링

* chore: 입력창 스타일링

* feat: 무한 스크롤 다듬기 작업

* feat: 검색창 변수 수정

* [DESIGN] 검색 바 디자인 개선 (#463)

* chore: route 변수 수정

* feat:  breadcrumb 적용

* chore: 기타 스타일링

* chore: 입력창 스타일링

* feat: 무한 스크롤 다듬기 작업

* feat: 검색창 변수 수정

* fix: useSearchParams는 suspense로 반드시 감싸야 한다.

---------

Co-authored-by: dmdgpdi <[email protected]>
Co-authored-by: Jason <[email protected]>
Co-authored-by: Jason <[email protected]>
Co-authored-by: Minky <[email protected]>

* [FEAT] 메모 제거, 폴더 선택 추가(API 미연결), 우클릭시 사이트 이동 (#473)

* feat: 익스텐션 아이콘 추가

* feat: 로그인 로고 변경

* feat: 북마크 페이지 아이콘 변경 및 링크로 이동

* chore: 오타 수정

* feat: theme 추가

* feat: 메모 제거

* feat: 로그인 페이지 삭제

* chore: radix select 설치

* feat: 폴더 선택 select 간단한 컴포넌트 구현

* feat: createPick시에 폴더 선택 기능 구현

* feat: update시에도 폴더 선택 기능 추가(api 미연결)

* feat: 크롬 익스텐션 우클릭시에 서비스 링크로 이동

* feat: 로딩 화면 추가

* [REFACTOR] 픽 리팩토링, 검색 테스트 구현 (#474)

* refactor: FolderType label 수정

* refactor: 파라미터 idList -> pickIdList 명시적으로 변경

* refactor: folder 내부에 있는 pick_order 리스트에 pickId가 중복 생성되는 문제 해결

* refactor: root folder 검색 못하도록 예외 처리

* refactor: pick controller 메서드명 수정

* refactor: DB fleid 함수를 이용하여 정렬된 픽 리스트 조회할 수 있는 메서드 구현

* refactor: 픽 검색 시 폴더 리스트가 null인 경우 검증하지 않도록 변경, tag 검증 추가

* refactor: 테스트 코드 작성

* refactor: 테스트 코드 ParameterizedTest로 리팩토링 (#476)

* [DESIGN] 익스텐션 디자인 변경 (#479)

* chore: title 설정

* chore: 아이콘 변경 및 안쓰는 아이콘 제거

* feat: radix-ui 의존성 설치

* design: 테마 추가

* design: globalStyle a tag 제거

* design: TagPicker 디자인 변경

* refactor: numberToRandomColor 변경

* design: folder select 디자인 변경

* design: TagPicker placeholder 추가

* design: ThumbnailImage css 변경

* design: CreatePickForm 변경

* feat: BookmarkHeader 제거

* feat: useCalculateCommandListHeight 삭제

* design: 업데이트 및 로딩 화면 디자인 변경 적용

* design: 로딩 화면 변경 적용

* refactor: loginGuard 로직 변경

* feat: FolderSelect 화살표 이동 추가

* chore: 사용하지 않는 헤더 삭제

* [FIX] 픽 수정 리팩토링 및 검증로직 개선 (#477)

* refactor: 불필요한 초기값 제거

* fix: 엔티티를 list로 조회시 존재하지 않는 엔티티를 조회하려고 하면 NOT_FOUND 예외 발생

* fix: pick update시 부모폴더 id도 변경 가능하도록 수정, 누락된 검증 로직 추가

* fix: 기능 변경에 의한 테스트 코드 수정

* fix: idList로 폴더 조회시 존재하지 않는 폴더id로 조회하면 예외 발생

* refactor: 파라미터명 명확하게 수정 idList -> folderIdList

* [FEAT] error 메세지 전송 및 폰트 적용방식 변경 (#482)

* feat: 에러 메세지 명세

* feat: error 메세지 명세

* feat: 폰트 적용 방식 변경

* chore: react-router-dom 버전 변경

v7 점진적으로 도입하는 버전이라 warning log가 떠서 변경

* feat: 폴더 응답에 생성 수정 일자 추가 (#485)

* [�FEAT] 익스텐션 배포 전, 수정 (#489)

* fix: 디자인 변경

* chore: 익스텐션에서 사용하지 않는 의존성 제거

* fix: 휴지통 보이지 않게 하기

* feat: 서버 에러시 toast 알림

* feat: 정상 동작 시 창닫기

* feat: error message 추가

* feat: 폴더 최신순 정렬

* design: 색 추가 및 적용

* design: 인풋 디자인 변경

* feat: font 재적용

* fix: http로 시작하지않으면 저장 안되게 수정

* fix: update시에 폴더 추가

* design: footer 디자인 추가

* docs: manifest.json description 추가

* hotfix: 익스텐션 design 변경

* fix: zip파일 제거

* [CICD] AWS 배포 CICD 구축 (#494)

* refactor: ApiFolderErrorCode 오타 수정 (#468)

* [REFACTOR] 픽 리팩토링, 검색 테스트 구현 (#474)

* refactor: FolderType label 수정

* refactor: 파라미터 idList -> pickIdList 명시적으로 변경

* refactor: folder 내부에 있는 pick_order 리스트에 pickId가 중복 생성되는 문제 해결

* refactor: root folder 검색 못하도록 예외 처리

* refactor: pick controller 메서드명 수정

* refactor: DB fleid 함수를 이용하여 정렬된 픽 리스트 조회할 수 있는 메서드 구현

* refactor: 픽 검색 시 폴더 리스트가 null인 경우 검증하지 않도록 변경, tag 검증 추가

* refactor: 테스트 코드 작성

* refactor: 테스트 코드 ParameterizedTest로 리팩토링 (#476)

* [FIX] 픽 수정 리팩토링 및 검증로직 개선 (#477)

* refactor: 불필요한 초기값 제거

* fix: 엔티티를 list로 조회시 존재하지 않는 엔티티를 조회하려고 하면 NOT_FOUND 예외 발생

* fix: pick update시 부모폴더 id도 변경 가능하도록 수정, 누락된 검증 로직 추가

* fix: 기능 변경에 의한 테스트 코드 수정

* fix: idList로 폴더 조회시 존재하지 않는 폴더id로 조회하면 예외 발생

* refactor: 파라미터명 명확하게 수정 idList -> folderIdList

* feat: 폴더 응답에 생성 수정 일자 추가 (#485)

* cicd: aws 배포 action 추가

---------

Co-authored-by: Sangwon Yang <[email protected]>

* [FEAT] 에러 요청에 대한 로깅 구현 (#481)

* feat: error request logging 구현

* feat: 기존 예외처리 로직에 요청 로깅 추가

* chore: 주석 추가

* fix: 로깅 방식 변경 - application.log에 sql 로깅 제외

* fix: 누락된 로깅 로직 추가

* [fix] refetch 검색 안되는 문제 해결 (#496)

* [FEAT] 픽 렌더링 카드에서 리스트 아이템으로 교체 (#501)

* feat: PickRenderModeState 구현

* feat: PickRecordListLayout 컴포넌트 구현

* feat: PickCard대신 PickRecord 렌더링으로 변경

* feat: usePickRenderModeStore 의존성 제거

* �[FEAT] 폴더 export 기능 구현 (#504)

* feat: 폴더 export 기능 구현

* feat: url 수정

* [DESIGN] 디자인 변경 (#500)

* [FEAT] 파비콘 추가 및 title 변경 (#503)

* [FEAT] 픽 제목 최대 길이 검증 및 Validation 검증 리팩토링 (#499)

* refactor: 픽 제목 최대 길이 제약조건 추가

* feat: 픽 제목 최대 길이 제약조건 예외, 예외 코드 추가

* refactor: bean validation 예외 상세하게 반환하도록 수정

* refactor: tag 이동 시 리스트 길이보다 큰 인덱스로 이동 시 IndexOutOfBoundsException 발생하는 문제 해결

* fix: title이 null일 때 터지는 오류 해결

* fix: && 문법 오류 수정

* [BUG] 픽 태그 삭제 버그, 픽 수정 버그 수정 (#509)

* refactor: 픽에 사용되었던 유저 태그 삭제 시 500에러 해결

* refactor: pick unique index title 제거

* refactor: 픽을 휴지통으로 이동 시 폴더 내에 있는 픽 리스트 제거 및 가독성을 위해 로직 공통 처리

* refactor: 불필요한 메서드 제거 및 메서드명 변경

* refactor: 운영 환경에서 스웨거 접근 못하도록 하는 설정 추가

* refactor: 폴더 삭제 시 픽들이 휴지통으로 이동될 때 부모 폴더의 픽 리스트 수정이 필요하지 않음.

* refactor: 미분류, 휴지통 폴더에 폴더 생성하지 못하도록 변경, 에러 메세지 변경

* refactor: 메서드명 수정

* refactor: 픽 생성 시 타이틀이 없으면 터지는 예외 해결

* refactor: 데드락 문제 해결을 위해 트랜잭션 범위 최소화

* [FEAT] PickRecord 컴포넌트 구현 및 pick 수정(태그, 타이틀)기능 구현 (#513)

* feat: PickRecord에서 PickListItem 분리

* r…
  • Loading branch information
6 people authored Nov 22, 2024
1 parent 5effe9b commit cadc1bf
Show file tree
Hide file tree
Showing 708 changed files with 25,775 additions and 7,988 deletions.
114 changes: 114 additions & 0 deletions .github/workflows/api-module-cicd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
name: Tech-pick Api-Module CI/CD

on:
push:
branches:
- "backend-v2" # 배포 대상 브랜치
paths:
- 'backend/techpick-core/**'
- 'backend/techpick-security/**'
- 'backend/techpick-api/**'
workflow_dispatch:

jobs:
deploy:
runs-on: ubuntu-latest
env:
api-version: 'v2'

steps:
# 저장소 Checkout
- name: Checkout source code
uses: actions/checkout@v4

# Gradle 실행 권한 부여
- name: Grant execute permission to gradlew
run: chmod +x ./backend/gradlew

# JDK 설치
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'

# Spring boot application, Docker image 빌드
- name: Build and Deploy techpick-api Module
run: |
echo "Building and deploying techpick-api..."
./backend/gradlew -p backend/techpick-api clean build -x test
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/techpick:${{ env.api-version }}-api-${{ github.sha }} backend/techpick-api
- # Docker hub 로그인
name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- # Docker hub 업로드
name: Publish to docker hub
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/techpick:${{ env.api-version }}-api-${{ github.sha }}

- name: Deploy on Test-Server
uses: appleboy/ssh-action@master
with:
host: minlife.me
port: 4242
username: root
password: ${{ secrets.SSH_TEST_SERVER_KYEU_PASSWORD }}
script: |
echo "login docker hub for private repository access ..."
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
echo "docker - pulling..."
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/techpick:${{ env.api-version }}-api-${{ github.sha }}
echo "docker - changing image name and tag ..."
docker tag ${{ secrets.DOCKERHUB_USERNAME }}/techpick:${{ env.api-version }}-api-${{ github.sha }} techpick:${{ env.api-version }}-api-staging
cd /home/project/techpick
echo "create .env file with github repository's ENV setting ..."
cd /home/project/techpick/database
rm -rf .env
touch .env
echo "DOCKER_MYSQL_USERNAME=${{ secrets.DOCKER_MYSQL_USERNAME }}" >> .env
echo "DOCKER_MYSQL_PASSWORD=${{ secrets.DOCKER_MYSQL_PASSWORD }}" >> .env
cd /home/project/techpick/${{ env.api-version }}
rm -rf .env
touch .env
echo "DOCKER_MYSQL_USERNAME=${{ secrets.DOCKER_MYSQL_USERNAME }}" >> .env
echo "DOCKER_MYSQL_PASSWORD=${{ secrets.DOCKER_MYSQL_PASSWORD }}" >> .env
echo "DOCKER_MYSQL_DATABASE=${{ secrets.DOCKER_MYSQL_DATABASE }}_${{ env.api-version }}" >> .env
echo "DOCKER_MYSQL_URL=jdbc:mysql://techpick-mysql:3306/${{ secrets.DOCKER_MYSQL_DATABASE }}_${{ env.api-version }}?createDatabaseIfNotExist=true" >> .env
echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> .env
echo "JWT_ISSUER=${{ secrets.JWT_ISSUER }}" >> .env
echo "GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }}" >> .env
echo "GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}" >> .env
echo "KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}" >> .env
echo "KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}" >> .env
echo "NAVER_CLIENT_ID=${{ secrets.NAVER_CLIENT_ID }}" >> .env
echo "NAVER_CLIENT_SECRET=${{ secrets.NAVER_CLIENT_SECRET }}" >> .env
echo "TECHPICK_BASE_URL=https://${{ env.api-version }}.${{ secrets.TECHPICK_DOMAIN }}" >> .env
docker-compose stop techpick-api
docker-compose rm -f techpick-api
docker-compose up -d techpick-api
echo "docker - pruning images that passed 24h ..."
docker image prune -af --filter "until=24h"
- name: Discord Webhook Notification
uses: sarisia/[email protected]
if: always()
with:
webhook: ${{ secrets.DISCORD_WEBHOOK_URL }}
status: ${{ job.status }}
title: "TechPick ${{ env.api-version }} - Api Deployment Result"
description: "배포가 완료되었습니다."
color: 0xff91a4
url: "https://github.com/sarisia/actions-status-discord"
username: GitHub Actions
102 changes: 102 additions & 0 deletions .github/workflows/aws-api-module-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: Tech-pick Api-Module CI/CD

on:
push:
branches:
- "release" # 배포 대상 브랜치
paths:
- 'backend/techpick-core/**'
- 'backend/techpick-api/**'
workflow_dispatch:

jobs:
deploy:
runs-on: ubuntu-latest
env:
api-version: 'v2'

steps:
# 저장소 Checkout
- name: Checkout source code
uses: actions/checkout@v4

# Gradle 실행 권한 부여
- name: Grant execute permission to gradlew
run: chmod +x ./backend/gradlew

# JDK 설치
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'

# Spring boot application, Docker image 빌드
- name: Build and Deploy techpick-api Module
run: |
echo "Building and deploying techpick-api..."
./backend/gradlew -p backend/techpick-api clean build -x test
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/techpick:${{ env.api-version }}-api-${{ github.sha }} backend/techpick-api
- # Docker hub 로그인
name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- # Docker hub 업로드
name: Publish to docker hub
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/techpick:${{ env.api-version }}-api-${{ github.sha }}

- name: Deploy on AWS
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.AWS_API_SERVER_IP }}
port: 22
username: ${{ secrets.AWS_USERNAME }}
key: ${{ secrets.AWS_ACCESS_KEY }}
script: |
echo "Login to Docker Hub for private repository access on bastion..."
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
echo "Pulling Docker image on bastion..."
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/techpick:${{ env.api-version }}-api-${{ github.sha }}
echo "Tagging Docker image..."
docker tag minkyeki/techpick:${{ env.api-version }}-api-${{ github.sha }} techpick:${{ env.api-version }}-api-staging
cd /home/ubuntu
rm -rf .env
touch .env
echo "DOCKER_MYSQL_USERNAME=${{ secrets.DOCKER_MYSQL_USERNAME }}" >> .env
echo "DOCKER_MYSQL_PASSWORD=${{ secrets.DOCKER_MYSQL_PASSWORD }}" >> .env
echo "DOCKER_MYSQL_DATABASE=${{ secrets.DOCKER_MYSQL_DATABASE }}_${{ env.api-version }}" >> .env
echo "DOCKER_MYSQL_URL=jdbc:mysql://techpick-mysql:3306/${{ secrets.DOCKER_MYSQL_DATABASE }}_${{ env.api-version }}?createDatabaseIfNotExist=true" >> .env
echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> .env
echo "JWT_ISSUER=${{ secrets.JWT_ISSUER }}" >> .env
echo "GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }}" >> .env
echo "GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}" >> .env
echo "KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}" >> .env
echo "KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}" >> .env
echo "NAVER_CLIENT_ID=${{ secrets.NAVER_CLIENT_ID }}" >> .env
echo "NAVER_CLIENT_SECRET=${{ secrets.NAVER_CLIENT_SECRET }}" >> .env
echo "Restarting techpick-api service..."
docker-compose stop techpick-api
docker-compose rm -f techpick-api
docker-compose up -d techpick-api
echo "Cleanup Images..."
docker image prune -af
- name: Discord Webhook Notification
uses: sarisia/[email protected]
if: always()
with:
webhook: ${{ secrets.DISCORD_WEBHOOK_URL }}
status: ${{ job.status }}
title: "TechPick ${{ env.api-version }} - Api Deployment Result"
description: "AWS 배포가 완료되었습니다."
color: 0xff91a4
url: "https://github.com/sarisia/actions-status-discord"
username: GitHub Actions
102 changes: 102 additions & 0 deletions .github/workflows/aws-batch-module-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: Tech-pick Batch-Module CI/CD

on:
push:
branches:
- "release" # 배포 대상 브랜치
paths:
- 'backend/techpick-core/**'
- 'backend/techpick-batch/**'
workflow_dispatch:

jobs:
deploy:
runs-on: ubuntu-latest
env:
api-version: 'v2'

steps:
# 저장소 Checkout
- name: Checkout source code
uses: actions/checkout@v4

# Gradle 실행 권한 부여
- name: Grant execute permission to gradlew
run: chmod +x ./backend/gradlew

# JDK 설치
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'

# Spring boot application, Docker image 빌드
- name: Build and Deploy techpick-batch Module
run: |
echo "Building and deploying techpick-batch..."
./backend/gradlew -p backend/techpick-batch clean build -x test
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/techpick:${{ env.api-version }}-batch-${{ github.sha }} backend/techpick-batch
- # Docker hub 로그인
name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- # Docker hub 업로드
name: Publish to docker hub
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/techpick:${{ env.api-version }}-batch-${{ github.sha }}

- name: Deploy on AWS
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.AWS_API_SERVER_IP }}
port: 22
username: ${{ secrets.AWS_USERNAME }}
key: ${{ secrets.AWS_ACCESS_KEY }}
script: |
echo "Login to Docker Hub for private repository access on bastion..."
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
echo "Pulling Docker image on bastion..."
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/techpick:${{ env.api-version }}-batch-${{ github.sha }}
echo "Tagging Docker image..."
docker tag minkyeki/techpick:${{ env.api-version }}-batch-${{ github.sha }} techpick:${{ env.api-version }}-batch-staging
cd /home/ubuntu
rm -rf .env
touch .env
echo "DOCKER_MYSQL_USERNAME=${{ secrets.DOCKER_MYSQL_USERNAME }}" >> .env
echo "DOCKER_MYSQL_PASSWORD=${{ secrets.DOCKER_MYSQL_PASSWORD }}" >> .env
echo "DOCKER_MYSQL_DATABASE=${{ secrets.DOCKER_MYSQL_DATABASE }}_${{ env.api-version }}" >> .env
echo "DOCKER_MYSQL_URL=jdbc:mysql://techpick-mysql:3306/${{ secrets.DOCKER_MYSQL_DATABASE }}_${{ env.api-version }}?createDatabaseIfNotExist=true" >> .env
echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> .env
echo "JWT_ISSUER=${{ secrets.JWT_ISSUER }}" >> .env
echo "GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }}" >> .env
echo "GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}" >> .env
echo "KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}" >> .env
echo "KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}" >> .env
echo "NAVER_CLIENT_ID=${{ secrets.NAVER_CLIENT_ID }}" >> .env
echo "NAVER_CLIENT_SECRET=${{ secrets.NAVER_CLIENT_SECRET }}" >> .env
echo "Restarting techpick-batch service..."
docker-compose stop techpick-batch
docker-compose rm -f techpick-batch
docker-compose up -d techpick-batch
echo "Cleanup Images..."
docker image prune -af
- name: Discord Webhook Notification
uses: sarisia/[email protected]
if: always()
with:
webhook: ${{ secrets.DISCORD_WEBHOOK_URL }}
status: ${{ job.status }}
title: "TechPick ${{ env.api-version }} - Batch Deployment Result"
description: "AWS 배포가 완료되었습니다."
color: 0xff91a4
url: "https://github.com/sarisia/actions-status-discord"
username: GitHub Actions
Loading

0 comments on commit cadc1bf

Please sign in to comment.