Skip to content

Commit

Permalink
Merge: 최신곡 받아오기 오류 수정 및 플레이리스트 불러오기 관련 정렬 기준 수정 Main 브랜치로 머지 (#116)
Browse files Browse the repository at this point in the history
* Merge: `develop` 브랜치에서 `main` 브랜치로 현재 작업 내용 머지 (#96) (#103)

* feat: mysql + docker 세팅

* Be/#2 JPA 엔티티 코드 구성 (#6)

* Fix: `build.gradle` 오타 수정

* Feat: `BaseTimeEntity` 추상 클래스 설계

- `createdAt` : 생성 일자
- `modifiedAt` : 수정 일자

* Feat: `User` 엔티티 설계

- `id` : `user_id`로 Column명 설정
- `name` : 길이 255자 기본 값으로 설정(구글의 경우, 최대 64자)
- `displayName` : 표시 이름은 최대 50자
- `email` : 이메일의 경우 최대 길이 225자이므로 기본 값으로 설정
- `profileImage` : 프로필 이미지 url

* Fix: `User.java` auto formatting

* Feat: `Genre` 엔티티 설계

- `id` : `genre_id`로 Column명 설정
- `name` : 장르의 명은 최대 50자로 설정

* Feat: `Tag` 엔티티 설계

- `id` : `tag_id`로 Column명 설정
- `name` : 태그 명은 최대 50자로 설정

* Feat: `Genre`와 `Tag` 엔티티에 대표 이미지 url을 저장하는 Image 필드 추가

* Feat: `Genre` 엔티티에 Builder 추가

* Feat: `Tag` 엔티티에 Builder 추가

* Feat: `Genre` 엔티티와 `Track` 엔티티 연관관계 설정

- 양방향 연관관계
- Cascade.ALL : `Genre` 삭제 시, 하위 `Track`들도 삭제 됨

* Feat: `Tag` 엔티티와 `Track` 엔티티 다대다 연관관계 설정

- `TrackTag` 조인 테이블(연관관계 테이블)을 이용한 다대다 관계
- 양방향 연관관계
- `TrackTag` 테이블은 개별 PK를 가짐(복합키 X)

* Feat: `TrackDetail` 엔티티 설계

Reference: https://vladmihalcea.com/the-best-way-to-map-a-onetoone-relationship-with-jpa-and-hibernate/

* Feat: `TrackTag` 엔티티와 `TrackDetail` 엔티티에 `BaseTimeEntity` 엔티티 상속

* Feat: `Like` 엔티티 설계

* Feat: `StreamingHistory` 엔티티 설계

* Feat: `User` 엔티티와 `Like`, `StreamingHistory` 엔티티 사이의 일대다 관계 매핑

* Feat: `Track` 엔티티 설계

* Fix: `Genre` 엔티티 필드명 수정

* Feat: `Playlist`, `PlaylistTrack`, MyPlaylist` 엔티티 설계

* Fix: `Tag` 엔티티 필드명 수정

* Remove: `StreamingHistory` 엔티티의 `streamingDuration` 필드 제거

* Fix: `Track` 엔티티 필드명 수정 및 단방향 관계 처리

* Feat: `UserGenre` 엔티티를 통한 회원 취향 일대다 관계 구성

* Fix: `.gitignore` 파일에 `bin`, 프로퍼티 파일 추가 및 `.gitignore` 재적용 (#9)

* Fix: `pull_request.md` 템플릿 경로 수정 및 `issue.md` 템플릿 기능 수정 항목 추가 (#11)

* BE/#3 특정 곡 등록하기 API 구현 (#14)

* Feat: `build.gradle` 의존성 추가

- Test : `mockito`
- AWS S3 : `awssdk:s3`
- Image Processing `thumbnailator`, `imageio-webp`

* Feat: `S3ClientProperties` 프로퍼티 객체 구현 및 Application에서 프로퍼티 스캔 활성화

* Feat: `S3ClientConfig` - S3 클라이언트 빈 등록 및 `S3FileHandler` 파일 핸들링 객체 구현

* Feat: `ImageResizer` - Thumbnailator 라이브러리로 이미지 리사이징 로직 구현

* Feat: MultipartFile 구현체 및 이미지 / 오디오 파일 S3 업로더 구현

* Feat: `User` 제외한 각 도메인 별 빌더 또는 생성자 및 리포지토리 구현

* Feat: `Track` 도메인 컨트롤러 및 DTO 구현

* Feat: 이미지 / 오디오 MultipartFile들의 커스텀 Validation 어노테이션 구현

* Feat: `TagService` - associtateTrackWithTags() 메소드 구현

* Feat: `TrackService` - Track 업로드 비즈니스 로직 구현

* Feat: `Track` 도메인 테스트코드 작성

- Controller 통합 테스트
- Controller 유닛 테스트
- Service 유닛 테스트

* Feat: `ImageUploader` TrackImage 또는 ThumbnailImage 업로드 실패 시, 로깅 로직 추가

* Fix: `TrackController` 에서 `/api/v1` 접두  경로 제거

* Feat: `.gitignore` - `.vscode` 디렉토리 및 `init.sql` 파일 추가

* Feat: `JpaConfig` Configuration 클래스 작성 (#15)

* BE/#8 `.gitignore` 항목 추가 및 템플릿 경로 수정 (#17)

* Feat: `.gitignore` 에 `init.sql` 과 `.vscode` 추가

* Rename: `issue_template.md` 와 `pull_request_template.md` 경로 `.github` 하위로 변경

* BE/#9 `특정 곡 정보 가져오기` API 구현 및 테스트 코드 작성 (#19)

* Rename: `TrackResponseDto` -> `TrackUploadResponseDto` 명칭 변경

* Rename: `TrackResponseDto` -> `TrackUploadResponseDto` 명칭 변경

* Feat: `TrackResponseDto` 구현

* Feat: `특정 곡 정보 가져오기` API 구현

* Fix: `TrackController` 유닛 테스트 및 통합 테스트 API 요청 경로 수정

* Feat: `build.gradle` 에 `assertj-core` 의존성 추가

* Comment: `TrackService` 주석 추가

* Feat: `TrackTagRepository` - findByTagName() 메소드 추가

* Test: `특정 곡 정보 가져오기` API 테스트 코드 작성

* Be/#6 oAuth 2.0 로그인 로직 구현 (#22)

* feat: build.gradle depandence 추가

jwt + security + oAuth 2.0

* feat: build.gradle 의존성 추가

redis 추가

* faet: 카카오 기본 로그인 화면

백엔드 카카오 로그인 화면 구현

* feat: Cors 허용

react와 같은 외부 라이브러리 Cors 규칙 허용

* feat: oAuth 로그인을 위한 기본 entity 구현

controller 환경 + domain role 추가 Detail은 따로 빼서 구현

* feat: 카카오 데이터베이스 환경 설정

카카오 규칙에 맞는 환경설정 로직 추가

* feat: jwt 생성 및 시간 로직 구현

jwt를 통한 인증 과정 + 시간 설정

* feat: jwt 토큰 예외처리

토큰 만료기간에 대한 예외처리 구현

* feat: 카카오 SecurityConfig + handler

SecurityConfig를 통한 카카오 로그인 후 엑세스토큰 및 리프레스 토근 발급

* BE/#12 `Track` 엔티티에 곡 길이 정보 `duration` 필드 추가 (#24)

* Feat: `Track` 엔티티 `duration` 필드 추가

* Feat: Response Dto `duration` 필드 추가

* Feat: `build.gradle` - `jaudiotagger` 의존성 추기

* Feat: `AudioDataParser` - `extractDurationInSeconds` 곡 길이 추출 메소드 구현

* Feat: `TrackService` - 곡 업로드 시, 곡 길이 저장 로직 추가

* Test: `User` 및 `Track` 도메인 수정 사항 반영해서, 테스트 코드 수정

* Comment: `AudioDataParser` 주석 추가

* BE/#13 `특정 곡 재생 이벤트 기록하기` API 구현 (#27)

* Feat: `StreamingHistoryRepository` 구현

* Feat: `StreamingHistory` 엔티티 빌더 패턴 생성자 구성

* Feat: `특정 곡 재생 이벤트 기록하기` API 구현

* Fix: `JwtVertifyFilter` API 테스트 과정에서 임시로 필터 통과하도록 설정

* Test: `특정 곡 재생 이벤트 기록하기` API 테스트 코드 작성

* BE/#15 `모든 장르 리스트 가져오기` API 구현 (#29)

* Fix: `TrackService`에서 uploadTrack()의 `TrackUploadResponseDto`를 생성할 때 toDto()를 사용하도록 변경

* Feat: `GenreResponseDto` 작성

* Feat: `모든 장르 리스트 가져오기` API 구현

* Test: `모든 장르 리스트 가져오기` API 테스트 코드 작성

* BE/#16 `특정 장르의 모든 곡 가져오기` API 구현 (#31)

* Fix: `track_audio` MultipartFile 검증과정에 `wav` 확장자 추가

* Feat: `TrackRepository` Pagination을 적용한 findAllByGenreId() 메소드 작성

* Feat: `특정 장르의 모든 곡 가져오기` API의 반환 Dto인 `GenreWithTracksResponseDto` 구현

* Feat: `특정 장르의 모든 곡 가져오기` API 구현

* Test: `특정 장르의 모든 곡 가져오기` API 테스트 코드 작성

* BE/#17 `장르별 곡 3개씩 가져오기` API 구현 (#33)

* Feat: `TrackOverviewResponseDto` 작성

* Feat: `GenreWithTracksOverviewResponseDto` 작성

* Feat: `GenreRepository` - Pagination을 지원하는 findAll() 작성

* Feat: `장르별 곡 3개씩 가져오기` API 구현

* Fix: `GenreController`의 `장르별 곡 3개씩 가져오기` API Page 객체 리턴하도록 변경

* Comment: `TrackControllerTest.java` - `uploadTrackSuccess()` 테스트 전체 순차적으로 테스트 진행시 오류 나는 부분 주석 상세하게 명시

* Refactor: `TrackServiceTest`에서 Mock 객체 생성시, 파라미터로 생성하도록 코드의 유연성 높임

* Test: `장르별 곡 3개씩 가져오기` API 테스트 코드 작성

* BE/#18 `모든 태그 리스트 가져오기` 및 `특정 태그의 모든 곡 가져오기` API 구현 (#35)

* Fix: `Tag` 엔티티 `tagImage` 필드 활성화

* Feat: `TagResponseDto` 객체 작성

* Feat: `모든 태그 리스트 가져오기` API 구현

* Feat: `TagWithTracksResponseDto` 구현

* Feat: `특정 태그의 모든 곡 가져오기` API 구현

* Fix: `TagController` - @PageableDefault 항목에서 `page` 0으로 기본값 설정

* Test: `모든 태그 리스트 가져오기` 및 `특정 태그의 모든 곡 가져오기` API 테스트 코드 작성

* BE/#19 `새 플레이리스트 생성하기` API 구현 (#37)

* Feat: `CreatePlaylistResponseDto` 작성

* Feat: `CreatePlaylistRequestDto` 작성

* Feat: Playlist 도메인 관련 Repository 생성

* Fix: `CreatePlaylistResponseDto` - `playlistId` 자료형 long -> Long으로 변경

* Feat: `MyPlaylist`, `Playlist` 엔티티 Builder 추가

* Feat: `새 플레이리스트 생성하기` API 구현

* Test: `새 플레이리스트 작성하기` 테스트 코드 작성

* BE/#20 `특정 플레이리스트 정보 가져오기` API 구현 (#39)

* Feat: `CreatePlaylistResponseDto` 작성

* Feat: `CreatePlaylistRequestDto` 작성

* Feat: Playlist 도메인 관련 Repository 생성

* Fix: `CreatePlaylistResponseDto` - `playlistId` 자료형 long -> Long으로 변경

* Feat: `MyPlaylist`, `Playlist` 엔티티 Builder 추가

* Feat: `새 플레이리스트 생성하기` API 구현

* Test: `새 플레이리스트 작성하기` 테스트 코드 작성

* Feat: `PlaylistWithTracksResponseDto` 작성

* Feat: `MyPlaylist`, `PlaylistTrack` 엔티티가 `BaseTimeEntity`를 상속받도록 변경

* Feat: `PlaylistTrackRepository` - Pagination 적용한 `findAllByPlaylistId() 작성

* Feat: `특정 플레이리스트 정보 가져오기` API 구현

* Feat: `PlaylistTrack` 엔티티 Builder 추가

* Test: `특정 플레이리스트 정보 가져오기` API 테스트 코드 작성

* BE/#21 `특정 플레이리스트 이름 수정하기` API 구현 (#43)

* Feat: `CreatePlaylistResponseDto` 작성

* Feat: `CreatePlaylistRequestDto` 작성

* Feat: Playlist 도메인 관련 Repository 생성

* Fix: `CreatePlaylistResponseDto` - `playlistId` 자료형 long -> Long으로 변경

* Feat: `MyPlaylist`, `Playlist` 엔티티 Builder 추가

* Feat: `새 플레이리스트 생성하기` API 구현

* Test: `새 플레이리스트 작성하기` 테스트 코드 작성

* Feat: `PlaylistWithTracksResponseDto` 작성

* Feat: `MyPlaylist`, `PlaylistTrack` 엔티티가 `BaseTimeEntity`를 상속받도록 변경

* Feat: `PlaylistTrackRepository` - Pagination 적용한 `findAllByPlaylistId() 작성

* Feat: `특정 플레이리스트 정보 가져오기` API 구현

* Feat: `PlaylistTrack` 엔티티 Builder 추가

* Test: `특정 플레이리스트 정보 가져오기` API 테스트 코드 작성

* Rename: `CreatePlaylistResponseDto` -> `PlaylistResponseDto` 객체 명칭 변경

* Feat: `Playlist` - `playlistName` 필드 변경하는 `updatePlaylistName()` 메소드 작성

* Feat: `UpldatePlaylistNameRequestDto` 작성

* Feat: `특정 플레이리스트 이름 수정하기` API 구현

* Test: `특정 플레이리스트 이름 수정하기` API 테스트 코드 작성

* Remove: 중복 import 삭제

* Remove: 중복 import 삭제

* Remove: 중복 import 삭제

* Rename: 서비스 계층 유닛 테스트 코드 객체명 수정 (#44)

* Feat: 서비스 계층 메소드에서 `@Transactional(readOnly=true)` 명시하기 (#45)

* BE/#24 `특정 플레이리스트 삭제하기`, `특정 플레이리스트에 곡 추가하기`, `특정 플레이리스트의 곡 삭제하기` API 구현 (#50)

* Feat: `MyPlaylistRepository`, `PlaylistTrackRepository` 에서 플레이리스트 삭제시 호출되는 `deleteByPlaylist()` 메소드 추가

* Feat: `특정 플레이리스트 삭제하기` API 구현

* Test: `특정 플레이리스트 삭제하기` 테스트 코드 작성

* Feat: `AddTrackToPlaylistRequestDto` 작성

* Feat: `PlaylistTrackRepository` - 플레이리스트에 해당 트랙의 존재 여부 확인 메소드 구현

* Feat: `특정 플레이리스트에 곡 추가하기` API 구현

* Feat: `PlaylistTrackRepository` `findByPlaylistAndTrack()` 메소드 추가

* Feat: `특정 플레이리스트의 곡 삭제하기` API 구현

* Test: `특정 플레이리스트에 곡 추가하기` API 테스트 코드 작성

* Test: `특정 플레이리스트의 곡 삭제하기` API 테스트 코드 작성

* BE/#28 `플레이리스트들 가져오기`, `특정 플레이리스트 팔로우하기`, `특정 플레이리스트 언 팔로우하기` API 구현 (#53)

* Rename: `TrackOverviewResponseDto` 경로를 Genre 도메인 하위에서 Track 도메인 하위로 변경

* Feat: `PlaylistWithTracksOverviewResponseDto` 작성

* Fix: `PlaylistTrackRepository` - `findAllByPlaylistId()` 메소드 정렬방식 JPQL -> Pageable Sort로 동작하도록 변경

* Fix: `PlaylistWithTracksOverviewResponseDto` - toDto() 과정에서 User가 null일 경우도 처리 가능하도록 변경

* Feat: `플레이스트들 가져오기` API에서 요청시, RequestParam `type` 검증 커스텀 어노테이션 작성

* Feat: `PlaylistRepository` - `findByIsCuratedTrue()`, `findByIsCuratedFalseAndIsPublicTrue()` 메소드 작성

* Feat: `플레이리스트들 가져오기` API 구현

* Feat: `MyPlaylistRepository` - `existsByUserAndPlaylist()`, `findByUserAndPlaylist()` 추가

* Feat: `특정 플레이리스트 팔로우하기`, `특정 플레이리스트 언 팔로우하기` API 구현

* Teat: `플레이리스트들 가져오기` API 테스트 코드 작성

* Test: `특정 플레이리스트 팔로우하기`, `특정 플레이리스트 언 팔로우하기` 테스트 코드 작성

* feat: refresh 검증 API 구현 (#55)

* feat: refresh 검증 API 구현

/refresh로 만료 확인 가능

* fix: refresh token형식 변형 + mapping 변경

* Be/#10  jwt형식으로 swagger추가  (#56)

* feat: build.gradle 의존성 추가

* feat: swagger + jwt 설정 추가 및 기본 API summary 작성

@Controller -> @RestController 변경

---------



* Test: `PlaylistControllerTest` - `updatePlaylistNameSuccess` 통합테스트 추가 (#57)

* Fix: `contextLoads()` 테스트 `@ActiveProfiles("test")` 어노테이션 명시로 해결 (#59)

* Fix: `특정 플레이리스트 정보 가져오기` API 사용자 검증 과정 추가 (#60)

* Be/#11 redis 설정 및 redis refresh token 삽입 (#61)

* feat: redis.conf 파일 추가

redis 상세 설정을 위한 conf파일 추가

* fix: redis data파일 자동 생성 제외

data에 들어가는 log수집에 대한 내용을 제외하기 위해 추가

* fix: redis 버전 다운그레이드

redis 버전 의존성을 위해서 .3 -> .2로 다운그레이드

* feat: redis 도메인 구성 추가

redis  rogin을 위한 기본 구성 내용 추가

* feat: userId jwt 토큰값 추가

jwt토큰에 포함 시켜 redis refresh 검증에 사용

* faet: redis refresh 검증 로직 추가

* feat: docker-compose redis 삽입

* Create test_deploy.yml

add `test_deploy.yml` on github action

* BE/#33 `ThumnailImageMultipartFile` S3 업로드 폴더 명 수정 (#68)

* BE/#34 `TrackDetail` 도메인 `prompt` 필드 VARCHAR 사이즈 수정 (#67)

* BE/#35 테스트 서버 배포하기 (#66)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* fix: 로그인 구현 형식 json -> cookie (#70)

json 전달형식에서 cookie 형식으로 변경

* Be/#32 좋아요 기능 구현 (#71)

* fix: 로그인 구현 형식 json -> cookie

json 전달형식에서 cookie 형식으로 변경

* fix: 리다이렉션 url 수정

genre -> genre_select

* fix: swagger 설정 변경

허용 범위 변경 및 설정 변경

* fix: jwt 시간 및 정보 변경

userId 추가 및 기본 토큰 지속 시간 변경

* fix: Genre 형식 변경

기존 enum형식 Genre 삭제 후 Genre 내용 변경

* feat: 좋아요 기능 구현

좋아요 추가 기능 및 삭제 기능 구현

* feat: track 전달 get내용 likes추가

* feat: likesFlag 형식 구현

Boolean likesFlag 형식

* Test 브랜치 `test.Dockerfile` 수정 및 `test_deploy.yml` Github Action 수정 (#72)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* `Develop` -> `Test` 브랜치 머지 (#69)

* BE/#33 `ThumnailImageMultipartFile` S3 업로드 폴더 명 수정 (#68)

* BE/#34 `TrackDetail` 도메인 `prompt` 필드 VARCHAR 사이즈 수정 (#67)

* BE/#35 테스트 서버 배포하기 (#66)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* Fix: `test.Dockerfile` CPU 아키텍쳐 호환성 문제로 jdk-alpine에서 jdk로 변경

* Fix: `test_deploy.yml` docker buildx 를 사용해서 멀티 아키텍처를 지원하도록 변경

* BE/#36 `곡 검색하기` API 구현 (#74)

* Feat: `build.gradle` elasticsearch-java 클라이언트 의존성 추가

* Feat: `ElasticsearchConfig` 및 `ElasticsearchProperties` 작성

* Fix: `DreamvaultBackendApplication` 에서 프로퍼티 검사 경로 변경

* Fix: `LikeRepository` - existsByUserIdAndTrackId() 메소드 `@Param` 어노테이션 명시

* Feat: `JacksonConfig` - Elasticsearch java client에서 요청 시 사용하는 `objectMapper` 빈 등록

* Feat: `TrackDocument` Elasticsearch 검색 결과 반환받는 객체 작성

* Feat: `SearchTrackResponseDto`, 페이지네이션을 위한 `CustomPage` 및 기타 하위 Dto 작성

* Feat: `TrackDocumentUtil` - 검색 결과에서 하이라이팅 된 필드랑 원본 결합용 유틸 클래스 작성

* Feat: `SearchController`, `SearchService` 검색 비즈니스 로직 구현

* fix: Swagger JWT 형식 변경 (#79)

Components - > SecurityScheme

* Fix: `PlaylistService`의 `createPlaylist()`에서 MyPlaylist를 추가하지 않도록 변경 (#81)

* Fix: `JwtVerifyFilter` - whitelist에 `/search` 경로 추가 (#83)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* `Develop` -> `Test` 브랜치 머지 (#69)

* BE/#33 `ThumnailImageMultipartFile` S3 업로드 폴더 명 수정 (#68)

* BE/#34 `TrackDetail` 도메인 `prompt` 필드 VARCHAR 사이즈 수정 (#67)

* BE/#35 테스트 서버 배포하기 (#66)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* Fix: `test.Dockerfile` CPU 아키텍쳐 호환성 문제로 jdk-alpine에서 jdk로 변경

* Fix: `test_deploy.yml` docker buildx 를 사용해서 멀티 아키텍처를 지원하도록 변경

* Fix: `JwtVerifyFilter` - whitelist에 `/search/**` 경로 추가

* Fix: `JwtVerifyFilter` - whitelist에 `/search/**` -> `/search` 경로 변경

* BE/#42 `AuthenticationPriciple`이 필요한 API에 사용자 식별 로직 붙이기 && `getPlaylistWithTracks()`에서 플레이리스트 소유 정보 추가 반환 (#85)

* Refactor: `GenreController` - userId 파라미터 전달방식 수정

* Fix: `AuthenticationPriciple`을 통한사용자 식별로직 추가

* Comment: `PlaylistService` 주석 추가

* Refacotr: `TagController` 파라미터 전달 방식 수정

* Fix: `TrackService` API에 사용자 식별로직 추가

* Refactor: 파라미터와 로직코드 가시적 구분을 위해 개행 추가

* Feat: 기본 경로들 whitelist에 추가

* Fix: `PlaylistService` - `getPlaylistWithTracks()` 특정 플레이리스트 정보 가져오기에서 `isOwner` 필드 추가

* Be/#38 User 곡 , 플레이리스트, 취향 API 구현 (#86)

* feat: 로그인 index.html 업데이트

구글 + 네이버 간편 백엔드 로그인 추가

* fix: 로그인 토큰 url 형식 변경

cookie -> params로 변경

* fix: 토큰 만료 status코드 변경

토큰 만료 내역 변경 status 200 -> 401

* feat: 네이버, 구글 로그인 형식 추가

ouath 네이버, 구글 로그인 추가

* fix: 장르 DB 형식 변겅

* feat: user 관련 API 구현

* feat: track 관련 api 구현

* feat: playlist 관련 api 구현

* feat: like 관련 api 구현

* Feat: `SwaggerConfig`에 테스트 서버 도메인 추가 (#89)

* Be/#44 JwtVerifyFilter 도메인 허용 whitelist user추가 및 도메인명 수정 (#90)

* fix: JwtVerifyFilter 도메인 허용 변경

user관련 도메인 추가 허용

* fix: user 관련 외부 controller 엔드포인트 값 변경

playlist controller, trackcontroller 각각 명칭 삭제

* Fix: `JwtVerifyFilter`에서 whitelist의 `/user` 경로 `/users`로 수정 (#93)

* BE/#47 Cors, RedirectURL 및 Swagger 설정 관련 URL들 프로퍼티로 치환 && 배포관련 파일 변경 (#95)

* Fix: `SwaggerConfig` 스웨거 서버 URL 프로퍼티 명칭 변경 `domain.test` -> `domain.backend`

* Fix: `CommonLoginSuccessHandler` - `determinTargetUrl()`에서 redirectURL 도메인을 프로퍼티에서 가져오도록 설정

* Fix: `SecurityConfig` - `corsConfiguration()`에 frontendUrl 추가

* Fix: `.gitignore`에 init*.sql 추가

* Rename: `test.Dockerfile` -> `prod.Dockerfile` 파일명 변경

* Fix: `test_deploy.yml` -> `deploy.yml` 로 변경 및 `prod.Dockerfile` 사용하도록 설정

* Fix: `appspec.yml` ECS 컨테이너 명 변경

---------

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

* Fix: `deploy.yml` 오타 수정 (#105)

* Fix: `TagService` - 새 태그 생성 시, 사용자가 업로드한 곡의 이미지를 태그 이미지로 사용하도록 변경 (#109)

* fix: 로그인 redirecturl 변경 (#108)

/auth/login, /auth/signup

* Main -> develop 다시 머지 진행 (#111)

* Merge: `develop` 브랜치에서 `main` 브랜치로 현재 작업 내용 머지 (#96)

* feat: mysql + docker 세팅

* Be/#2 JPA 엔티티 코드 구성 (#6)

* Fix: `build.gradle` 오타 수정

* Feat: `BaseTimeEntity` 추상 클래스 설계

- `createdAt` : 생성 일자
- `modifiedAt` : 수정 일자

* Feat: `User` 엔티티 설계

- `id` : `user_id`로 Column명 설정
- `name` : 길이 255자 기본 값으로 설정(구글의 경우, 최대 64자)
- `displayName` : 표시 이름은 최대 50자
- `email` : 이메일의 경우 최대 길이 225자이므로 기본 값으로 설정
- `profileImage` : 프로필 이미지 url

* Fix: `User.java` auto formatting

* Feat: `Genre` 엔티티 설계

- `id` : `genre_id`로 Column명 설정
- `name` : 장르의 명은 최대 50자로 설정

* Feat: `Tag` 엔티티 설계

- `id` : `tag_id`로 Column명 설정
- `name` : 태그 명은 최대 50자로 설정

* Feat: `Genre`와 `Tag` 엔티티에 대표 이미지 url을 저장하는 Image 필드 추가

* Feat: `Genre` 엔티티에 Builder 추가

* Feat: `Tag` 엔티티에 Builder 추가

* Feat: `Genre` 엔티티와 `Track` 엔티티 연관관계 설정

- 양방향 연관관계
- Cascade.ALL : `Genre` 삭제 시, 하위 `Track`들도 삭제 됨

* Feat: `Tag` 엔티티와 `Track` 엔티티 다대다 연관관계 설정

- `TrackTag` 조인 테이블(연관관계 테이블)을 이용한 다대다 관계
- 양방향 연관관계
- `TrackTag` 테이블은 개별 PK를 가짐(복합키 X)

* Feat: `TrackDetail` 엔티티 설계

Reference: https://vladmihalcea.com/the-best-way-to-map-a-onetoone-relationship-with-jpa-and-hibernate/

* Feat: `TrackTag` 엔티티와 `TrackDetail` 엔티티에 `BaseTimeEntity` 엔티티 상속

* Feat: `Like` 엔티티 설계

* Feat: `StreamingHistory` 엔티티 설계

* Feat: `User` 엔티티와 `Like`, `StreamingHistory` 엔티티 사이의 일대다 관계 매핑

* Feat: `Track` 엔티티 설계

* Fix: `Genre` 엔티티 필드명 수정

* Feat: `Playlist`, `PlaylistTrack`, MyPlaylist` 엔티티 설계

* Fix: `Tag` 엔티티 필드명 수정

* Remove: `StreamingHistory` 엔티티의 `streamingDuration` 필드 제거

* Fix: `Track` 엔티티 필드명 수정 및 단방향 관계 처리

* Feat: `UserGenre` 엔티티를 통한 회원 취향 일대다 관계 구성

* Fix: `.gitignore` 파일에 `bin`, 프로퍼티 파일 추가 및 `.gitignore` 재적용 (#9)

* Fix: `pull_request.md` 템플릿 경로 수정 및 `issue.md` 템플릿 기능 수정 항목 추가 (#11)

* BE/#3 특정 곡 등록하기 API 구현 (#14)

* Feat: `build.gradle` 의존성 추가

- Test : `mockito`
- AWS S3 : `awssdk:s3`
- Image Processing `thumbnailator`, `imageio-webp`

* Feat: `S3ClientProperties` 프로퍼티 객체 구현 및 Application에서 프로퍼티 스캔 활성화

* Feat: `S3ClientConfig` - S3 클라이언트 빈 등록 및 `S3FileHandler` 파일 핸들링 객체 구현

* Feat: `ImageResizer` - Thumbnailator 라이브러리로 이미지 리사이징 로직 구현

* Feat: MultipartFile 구현체 및 이미지 / 오디오 파일 S3 업로더 구현

* Feat: `User` 제외한 각 도메인 별 빌더 또는 생성자 및 리포지토리 구현

* Feat: `Track` 도메인 컨트롤러 및 DTO 구현

* Feat: 이미지 / 오디오 MultipartFile들의 커스텀 Validation 어노테이션 구현

* Feat: `TagService` - associtateTrackWithTags() 메소드 구현

* Feat: `TrackService` - Track 업로드 비즈니스 로직 구현

* Feat: `Track` 도메인 테스트코드 작성

- Controller 통합 테스트
- Controller 유닛 테스트
- Service 유닛 테스트

* Feat: `ImageUploader` TrackImage 또는 ThumbnailImage 업로드 실패 시, 로깅 로직 추가

* Fix: `TrackController` 에서 `/api/v1` 접두  경로 제거

* Feat: `.gitignore` - `.vscode` 디렉토리 및 `init.sql` 파일 추가

* Feat: `JpaConfig` Configuration 클래스 작성 (#15)

* BE/#8 `.gitignore` 항목 추가 및 템플릿 경로 수정 (#17)

* Feat: `.gitignore` 에 `init.sql` 과 `.vscode` 추가

* Rename: `issue_template.md` 와 `pull_request_template.md` 경로 `.github` 하위로 변경

* BE/#9 `특정 곡 정보 가져오기` API 구현 및 테스트 코드 작성 (#19)

* Rename: `TrackResponseDto` -> `TrackUploadResponseDto` 명칭 변경

* Rename: `TrackResponseDto` -> `TrackUploadResponseDto` 명칭 변경

* Feat: `TrackResponseDto` 구현

* Feat: `특정 곡 정보 가져오기` API 구현

* Fix: `TrackController` 유닛 테스트 및 통합 테스트 API 요청 경로 수정

* Feat: `build.gradle` 에 `assertj-core` 의존성 추가

* Comment: `TrackService` 주석 추가

* Feat: `TrackTagRepository` - findByTagName() 메소드 추가

* Test: `특정 곡 정보 가져오기` API 테스트 코드 작성

* Be/#6 oAuth 2.0 로그인 로직 구현 (#22)

* feat: build.gradle depandence 추가

jwt + security + oAuth 2.0

* feat: build.gradle 의존성 추가

redis 추가

* faet: 카카오 기본 로그인 화면

백엔드 카카오 로그인 화면 구현

* feat: Cors 허용

react와 같은 외부 라이브러리 Cors 규칙 허용

* feat: oAuth 로그인을 위한 기본 entity 구현

controller 환경 + domain role 추가 Detail은 따로 빼서 구현

* feat: 카카오 데이터베이스 환경 설정

카카오 규칙에 맞는 환경설정 로직 추가

* feat: jwt 생성 및 시간 로직 구현

jwt를 통한 인증 과정 + 시간 설정

* feat: jwt 토큰 예외처리

토큰 만료기간에 대한 예외처리 구현

* feat: 카카오 SecurityConfig + handler

SecurityConfig를 통한 카카오 로그인 후 엑세스토큰 및 리프레스 토근 발급

* BE/#12 `Track` 엔티티에 곡 길이 정보 `duration` 필드 추가 (#24)

* Feat: `Track` 엔티티 `duration` 필드 추가

* Feat: Response Dto `duration` 필드 추가

* Feat: `build.gradle` - `jaudiotagger` 의존성 추기

* Feat: `AudioDataParser` - `extractDurationInSeconds` 곡 길이 추출 메소드 구현

* Feat: `TrackService` - 곡 업로드 시, 곡 길이 저장 로직 추가

* Test: `User` 및 `Track` 도메인 수정 사항 반영해서, 테스트 코드 수정

* Comment: `AudioDataParser` 주석 추가

* BE/#13 `특정 곡 재생 이벤트 기록하기` API 구현 (#27)

* Feat: `StreamingHistoryRepository` 구현

* Feat: `StreamingHistory` 엔티티 빌더 패턴 생성자 구성

* Feat: `특정 곡 재생 이벤트 기록하기` API 구현

* Fix: `JwtVertifyFilter` API 테스트 과정에서 임시로 필터 통과하도록 설정

* Test: `특정 곡 재생 이벤트 기록하기` API 테스트 코드 작성

* BE/#15 `모든 장르 리스트 가져오기` API 구현 (#29)

* Fix: `TrackService`에서 uploadTrack()의 `TrackUploadResponseDto`를 생성할 때 toDto()를 사용하도록 변경

* Feat: `GenreResponseDto` 작성

* Feat: `모든 장르 리스트 가져오기` API 구현

* Test: `모든 장르 리스트 가져오기` API 테스트 코드 작성

* BE/#16 `특정 장르의 모든 곡 가져오기` API 구현 (#31)

* Fix: `track_audio` MultipartFile 검증과정에 `wav` 확장자 추가

* Feat: `TrackRepository` Pagination을 적용한 findAllByGenreId() 메소드 작성

* Feat: `특정 장르의 모든 곡 가져오기` API의 반환 Dto인 `GenreWithTracksResponseDto` 구현

* Feat: `특정 장르의 모든 곡 가져오기` API 구현

* Test: `특정 장르의 모든 곡 가져오기` API 테스트 코드 작성

* BE/#17 `장르별 곡 3개씩 가져오기` API 구현 (#33)

* Feat: `TrackOverviewResponseDto` 작성

* Feat: `GenreWithTracksOverviewResponseDto` 작성

* Feat: `GenreRepository` - Pagination을 지원하는 findAll() 작성

* Feat: `장르별 곡 3개씩 가져오기` API 구현

* Fix: `GenreController`의 `장르별 곡 3개씩 가져오기` API Page 객체 리턴하도록 변경

* Comment: `TrackControllerTest.java` - `uploadTrackSuccess()` 테스트 전체 순차적으로 테스트 진행시 오류 나는 부분 주석 상세하게 명시

* Refactor: `TrackServiceTest`에서 Mock 객체 생성시, 파라미터로 생성하도록 코드의 유연성 높임

* Test: `장르별 곡 3개씩 가져오기` API 테스트 코드 작성

* BE/#18 `모든 태그 리스트 가져오기` 및 `특정 태그의 모든 곡 가져오기` API 구현 (#35)

* Fix: `Tag` 엔티티 `tagImage` 필드 활성화

* Feat: `TagResponseDto` 객체 작성

* Feat: `모든 태그 리스트 가져오기` API 구현

* Feat: `TagWithTracksResponseDto` 구현

* Feat: `특정 태그의 모든 곡 가져오기` API 구현

* Fix: `TagController` - @PageableDefault 항목에서 `page` 0으로 기본값 설정

* Test: `모든 태그 리스트 가져오기` 및 `특정 태그의 모든 곡 가져오기` API 테스트 코드 작성

* BE/#19 `새 플레이리스트 생성하기` API 구현 (#37)

* Feat: `CreatePlaylistResponseDto` 작성

* Feat: `CreatePlaylistRequestDto` 작성

* Feat: Playlist 도메인 관련 Repository 생성

* Fix: `CreatePlaylistResponseDto` - `playlistId` 자료형 long -> Long으로 변경

* Feat: `MyPlaylist`, `Playlist` 엔티티 Builder 추가

* Feat: `새 플레이리스트 생성하기` API 구현

* Test: `새 플레이리스트 작성하기` 테스트 코드 작성

* BE/#20 `특정 플레이리스트 정보 가져오기` API 구현 (#39)

* Feat: `CreatePlaylistResponseDto` 작성

* Feat: `CreatePlaylistRequestDto` 작성

* Feat: Playlist 도메인 관련 Repository 생성

* Fix: `CreatePlaylistResponseDto` - `playlistId` 자료형 long -> Long으로 변경

* Feat: `MyPlaylist`, `Playlist` 엔티티 Builder 추가

* Feat: `새 플레이리스트 생성하기` API 구현

* Test: `새 플레이리스트 작성하기` 테스트 코드 작성

* Feat: `PlaylistWithTracksResponseDto` 작성

* Feat: `MyPlaylist`, `PlaylistTrack` 엔티티가 `BaseTimeEntity`를 상속받도록 변경

* Feat: `PlaylistTrackRepository` - Pagination 적용한 `findAllByPlaylistId() 작성

* Feat: `특정 플레이리스트 정보 가져오기` API 구현

* Feat: `PlaylistTrack` 엔티티 Builder 추가

* Test: `특정 플레이리스트 정보 가져오기` API 테스트 코드 작성

* BE/#21 `특정 플레이리스트 이름 수정하기` API 구현 (#43)

* Feat: `CreatePlaylistResponseDto` 작성

* Feat: `CreatePlaylistRequestDto` 작성

* Feat: Playlist 도메인 관련 Repository 생성

* Fix: `CreatePlaylistResponseDto` - `playlistId` 자료형 long -> Long으로 변경

* Feat: `MyPlaylist`, `Playlist` 엔티티 Builder 추가

* Feat: `새 플레이리스트 생성하기` API 구현

* Test: `새 플레이리스트 작성하기` 테스트 코드 작성

* Feat: `PlaylistWithTracksResponseDto` 작성

* Feat: `MyPlaylist`, `PlaylistTrack` 엔티티가 `BaseTimeEntity`를 상속받도록 변경

* Feat: `PlaylistTrackRepository` - Pagination 적용한 `findAllByPlaylistId() 작성

* Feat: `특정 플레이리스트 정보 가져오기` API 구현

* Feat: `PlaylistTrack` 엔티티 Builder 추가

* Test: `특정 플레이리스트 정보 가져오기` API 테스트 코드 작성

* Rename: `CreatePlaylistResponseDto` -> `PlaylistResponseDto` 객체 명칭 변경

* Feat: `Playlist` - `playlistName` 필드 변경하는 `updatePlaylistName()` 메소드 작성

* Feat: `UpldatePlaylistNameRequestDto` 작성

* Feat: `특정 플레이리스트 이름 수정하기` API 구현

* Test: `특정 플레이리스트 이름 수정하기` API 테스트 코드 작성

* Remove: 중복 import 삭제

* Remove: 중복 import 삭제

* Remove: 중복 import 삭제

* Rename: 서비스 계층 유닛 테스트 코드 객체명 수정 (#44)

* Feat: 서비스 계층 메소드에서 `@Transactional(readOnly=true)` 명시하기 (#45)

* BE/#24 `특정 플레이리스트 삭제하기`, `특정 플레이리스트에 곡 추가하기`, `특정 플레이리스트의 곡 삭제하기` API 구현 (#50)

* Feat: `MyPlaylistRepository`, `PlaylistTrackRepository` 에서 플레이리스트 삭제시 호출되는 `deleteByPlaylist()` 메소드 추가

* Feat: `특정 플레이리스트 삭제하기` API 구현

* Test: `특정 플레이리스트 삭제하기` 테스트 코드 작성

* Feat: `AddTrackToPlaylistRequestDto` 작성

* Feat: `PlaylistTrackRepository` - 플레이리스트에 해당 트랙의 존재 여부 확인 메소드 구현

* Feat: `특정 플레이리스트에 곡 추가하기` API 구현

* Feat: `PlaylistTrackRepository` `findByPlaylistAndTrack()` 메소드 추가

* Feat: `특정 플레이리스트의 곡 삭제하기` API 구현

* Test: `특정 플레이리스트에 곡 추가하기` API 테스트 코드 작성

* Test: `특정 플레이리스트의 곡 삭제하기` API 테스트 코드 작성

* BE/#28 `플레이리스트들 가져오기`, `특정 플레이리스트 팔로우하기`, `특정 플레이리스트 언 팔로우하기` API 구현 (#53)

* Rename: `TrackOverviewResponseDto` 경로를 Genre 도메인 하위에서 Track 도메인 하위로 변경

* Feat: `PlaylistWithTracksOverviewResponseDto` 작성

* Fix: `PlaylistTrackRepository` - `findAllByPlaylistId()` 메소드 정렬방식 JPQL -> Pageable Sort로 동작하도록 변경

* Fix: `PlaylistWithTracksOverviewResponseDto` - toDto() 과정에서 User가 null일 경우도 처리 가능하도록 변경

* Feat: `플레이스트들 가져오기` API에서 요청시, RequestParam `type` 검증 커스텀 어노테이션 작성

* Feat: `PlaylistRepository` - `findByIsCuratedTrue()`, `findByIsCuratedFalseAndIsPublicTrue()` 메소드 작성

* Feat: `플레이리스트들 가져오기` API 구현

* Feat: `MyPlaylistRepository` - `existsByUserAndPlaylist()`, `findByUserAndPlaylist()` 추가

* Feat: `특정 플레이리스트 팔로우하기`, `특정 플레이리스트 언 팔로우하기` API 구현

* Teat: `플레이리스트들 가져오기` API 테스트 코드 작성

* Test: `특정 플레이리스트 팔로우하기`, `특정 플레이리스트 언 팔로우하기` 테스트 코드 작성

* feat: refresh 검증 API 구현 (#55)

* feat: refresh 검증 API 구현

/refresh로 만료 확인 가능

* fix: refresh token형식 변형 + mapping 변경

* Be/#10  jwt형식으로 swagger추가  (#56)

* feat: build.gradle 의존성 추가

* feat: swagger + jwt 설정 추가 및 기본 API summary 작성

@Controller -> @RestController 변경

---------

Co-authored-by: gerry-mandering <[email protected]>

* Test: `PlaylistControllerTest` - `updatePlaylistNameSuccess` 통합테스트 추가 (#57)

* Fix: `contextLoads()` 테스트 `@ActiveProfiles("test")` 어노테이션 명시로 해결 (#59)

* Fix: `특정 플레이리스트 정보 가져오기` API 사용자 검증 과정 추가 (#60)

* Be/#11 redis 설정 및 redis refresh token 삽입 (#61)

* feat: redis.conf 파일 추가

redis 상세 설정을 위한 conf파일 추가

* fix: redis data파일 자동 생성 제외

data에 들어가는 log수집에 대한 내용을 제외하기 위해 추가

* fix: redis 버전 다운그레이드

redis 버전 의존성을 위해서 .3 -> .2로 다운그레이드

* feat: redis 도메인 구성 추가

redis  rogin을 위한 기본 구성 내용 추가

* feat: userId jwt 토큰값 추가

jwt토큰에 포함 시켜 redis refresh 검증에 사용

* faet: redis refresh 검증 로직 추가

* feat: docker-compose redis 삽입

* Create test_deploy.yml

add `test_deploy.yml` on github action

* BE/#33 `ThumnailImageMultipartFile` S3 업로드 폴더 명 수정 (#68)

* BE/#34 `TrackDetail` 도메인 `prompt` 필드 VARCHAR 사이즈 수정 (#67)

* BE/#35 테스트 서버 배포하기 (#66)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* fix: 로그인 구현 형식 json -> cookie (#70)

json 전달형식에서 cookie 형식으로 변경

* Be/#32 좋아요 기능 구현 (#71)

* fix: 로그인 구현 형식 json -> cookie

json 전달형식에서 cookie 형식으로 변경

* fix: 리다이렉션 url 수정

genre -> genre_select

* fix: swagger 설정 변경

허용 범위 변경 및 설정 변경

* fix: jwt 시간 및 정보 변경

userId 추가 및 기본 토큰 지속 시간 변경

* fix: Genre 형식 변경

기존 enum형식 Genre 삭제 후 Genre 내용 변경

* feat: 좋아요 기능 구현

좋아요 추가 기능 및 삭제 기능 구현

* feat: track 전달 get내용 likes추가

* feat: likesFlag 형식 구현

Boolean likesFlag 형식

* Test 브랜치 `test.Dockerfile` 수정 및 `test_deploy.yml` Github Action 수정 (#72)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* `Develop` -> `Test` 브랜치 머지 (#69)

* BE/#33 `ThumnailImageMultipartFile` S3 업로드 폴더 명 수정 (#68)

* BE/#34 `TrackDetail` 도메인 `prompt` 필드 VARCHAR 사이즈 수정 (#67)

* BE/#35 테스트 서버 배포하기 (#66)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* Fix: `test.Dockerfile` CPU 아키텍쳐 호환성 문제로 jdk-alpine에서 jdk로 변경

* Fix: `test_deploy.yml` docker buildx 를 사용해서 멀티 아키텍처를 지원하도록 변경

* BE/#36 `곡 검색하기` API 구현 (#74)

* Feat: `build.gradle` elasticsearch-java 클라이언트 의존성 추가

* Feat: `ElasticsearchConfig` 및 `ElasticsearchProperties` 작성

* Fix: `DreamvaultBackendApplication` 에서 프로퍼티 검사 경로 변경

* Fix: `LikeRepository` - existsByUserIdAndTrackId() 메소드 `@Param` 어노테이션 명시

* Feat: `JacksonConfig` - Elasticsearch java client에서 요청 시 사용하는 `objectMapper` 빈 등록

* Feat: `TrackDocument` Elasticsearch 검색 결과 반환받는 객체 작성

* Feat: `SearchTrackResponseDto`, 페이지네이션을 위한 `CustomPage` 및 기타 하위 Dto 작성

* Feat: `TrackDocumentUtil` - 검색 결과에서 하이라이팅 된 필드랑 원본 결합용 유틸 클래스 작성

* Feat: `SearchController`, `SearchService` 검색 비즈니스 로직 구현

* fix: Swagger JWT 형식 변경 (#79)

Components - > SecurityScheme

* Fix: `PlaylistService`의 `createPlaylist()`에서 MyPlaylist를 추가하지 않도록 변경 (#81)

* Fix: `JwtVerifyFilter` - whitelist에 `/search` 경로 추가 (#83)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* `Develop` -> `Test` 브랜치 머지 (#69)

* BE/#33 `ThumnailImageMultipartFile` S3 업로드 폴더 명 수정 (#68)

* BE/#34 `TrackDetail` 도메인 `prompt` 필드 VARCHAR 사이즈 수정 (#67)

* BE/#35 테스트 서버 배포하기 (#66)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* Fix: `test.Dockerfile` CPU 아키텍쳐 호환성 문제로 jdk-alpine에서 jdk로 변경

* Fix: `test_deploy.yml` docker buildx 를 사용해서 멀티 아키텍처를 지원하도록 변경

* Fix: `JwtVerifyFilter` - whitelist에 `/search/**` 경로 추가

* Fix: `JwtVerifyFilter` - whitelist에 `/search/**` -> `/search` 경로 변경

* BE/#42 `AuthenticationPriciple`이 필요한 API에 사용자 식별 로직 붙이기 && `getPlaylistWithTracks()`에서 플레이리스트 소유 정보 추가 반환 (#85)

* Refactor: `GenreController` - userId 파라미터 전달방식 수정

* Fix: `AuthenticationPriciple`을 통한사용자 식별로직 추가

* Comment: `PlaylistService` 주석 추가

* Refacotr: `TagController` 파라미터 전달 방식 수정

* Fix: `TrackService` API에 사용자 식별로직 추가

* Refactor: 파라미터와 로직코드 가시적 구분을 위해 개행 추가

* Feat: 기본 경로들 whitelist에 추가

* Fix: `PlaylistService` - `getPlaylistWithTracks()` 특정 플레이리스트 정보 가져오기에서 `isOwner` 필드 추가

* Be/#38 User 곡 , 플레이리스트, 취향 API 구현 (#86)

* feat: 로그인 index.html 업데이트

구글 + 네이버 간편 백엔드 로그인 추가

* fix: 로그인 토큰 url 형식 변경

cookie -> params로 변경

* fix: 토큰 만료 status코드 변경

토큰 만료 내역 변경 status 200 -> 401

* feat: 네이버, 구글 로그인 형식 추가

ouath 네이버, 구글 로그인 추가

* fix: 장르 DB 형식 변겅

* feat: user 관련 API 구현

* feat: track 관련 api 구현

* feat: playlist 관련 api 구현

* feat: like 관련 api 구현

* Feat: `SwaggerConfig`에 테스트 서버 도메인 추가 (#89)

* Be/#44 JwtVerifyFilter 도메인 허용 whitelist user추가 및 도메인명 수정 (#90)

* fix: JwtVerifyFilter 도메인 허용 변경

user관련 도메인 추가 허용

* fix: user 관련 외부 controller 엔드포인트 값 변경

playlist controller, trackcontroller 각각 명칭 삭제

* Fix: `JwtVerifyFilter`에서 whitelist의 `/user` 경로 `/users`로 수정 (#93)

* BE/#47 Cors, RedirectURL 및 Swagger 설정 관련 URL들 프로퍼티로 치환 && 배포관련 파일 변경 (#95)

* Fix: `SwaggerConfig` 스웨거 서버 URL 프로퍼티 명칭 변경 `domain.test` -> `domain.backend`

* Fix: `CommonLoginSuccessHandler` - `determinTargetUrl()`에서 redirectURL 도메인을 프로퍼티에서 가져오도록 설정

* Fix: `SecurityConfig` - `corsConfiguration()`에 frontendUrl 추가

* Fix: `.gitignore`에 init*.sql 추가

* Rename: `test.Dockerfile` -> `prod.Dockerfile` 파일명 변경

* Fix: `test_deploy.yml` -> `deploy.yml` 로 변경 및 `prod.Dockerfile` 사용하도록 설정

* Fix: `appspec.yml` ECS 컨테이너 명 변경

---------

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

* Merge: 로그인 리다이렉트 URL 변경 및 태그 생성 시, 이미지 적용 로직 수정 main 브랜치로 머지 (#110)

* Merge: `develop` 브랜치에서 `main` 브랜치로 현재 작업 내용 머지 (#96) (#103)

* feat: mysql + docker 세팅

* Be/#2 JPA 엔티티 코드 구성 (#6)

* Fix: `build.gradle` 오타 수정

* Feat: `BaseTimeEntity` 추상 클래스 설계

- `createdAt` : 생성 일자
- `modifiedAt` : 수정 일자

* Feat: `User` 엔티티 설계

- `id` : `user_id`로 Column명 설정
- `name` : 길이 255자 기본 값으로 설정(구글의 경우, 최대 64자)
- `displayName` : 표시 이름은 최대 50자
- `email` : 이메일의 경우 최대 길이 225자이므로 기본 값으로 설정
- `profileImage` : 프로필 이미지 url

* Fix: `User.java` auto formatting

* Feat: `Genre` 엔티티 설계

- `id` : `genre_id`로 Column명 설정
- `name` : 장르의 명은 최대 50자로 설정

* Feat: `Tag` 엔티티 설계

- `id` : `tag_id`로 Column명 설정
- `name` : 태그 명은 최대 50자로 설정

* Feat: `Genre`와 `Tag` 엔티티에 대표 이미지 url을 저장하는 Image 필드 추가

* Feat: `Genre` 엔티티에 Builder 추가

* Feat: `Tag` 엔티티에 Builder 추가

* Feat: `Genre` 엔티티와 `Track` 엔티티 연관관계 설정

- 양방향 연관관계
- Cascade.ALL : `Genre` 삭제 시, 하위 `Track`들도 삭제 됨

* Feat: `Tag` 엔티티와 `Track` 엔티티 다대다 연관관계 설정

- `TrackTag` 조인 테이블(연관관계 테이블)을 이용한 다대다 관계
- 양방향 연관관계
- `TrackTag` 테이블은 개별 PK를 가짐(복합키 X)

* Feat: `TrackDetail` 엔티티 설계

Reference: https://vladmihalcea.com/the-best-way-to-map-a-onetoone-relationship-with-jpa-and-hibernate/

* Feat: `TrackTag` 엔티티와 `TrackDetail` 엔티티에 `BaseTimeEntity` 엔티티 상속

* Feat: `Like` 엔티티 설계

* Feat: `StreamingHistory` 엔티티 설계

* Feat: `User` 엔티티와 `Like`, `StreamingHistory` 엔티티 사이의 일대다 관계 매핑

* Feat: `Track` 엔티티 설계

* Fix: `Genre` 엔티티 필드명 수정

* Feat: `Playlist`, `PlaylistTrack`, MyPlaylist` 엔티티 설계

* Fix: `Tag` 엔티티 필드명 수정

* Remove: `StreamingHistory` 엔티티의 `streamingDuration` 필드 제거

* Fix: `Track` 엔티티 필드명 수정 및 단방향 관계 처리

* Feat: `UserGenre` 엔티티를 통한 회원 취향 일대다 관계 구성

* Fix: `.gitignore` 파일에 `bin`, 프로퍼티 파일 추가 및 `.gitignore` 재적용 (#9)

* Fix: `pull_request.md` 템플릿 경로 수정 및 `issue.md` 템플릿 기능 수정 항목 추가 (#11)

* BE/#3 특정 곡 등록하기 API 구현 (#14)

* Feat: `build.gradle` 의존성 추가

- Test : `mockito`
- AWS S3 : `awssdk:s3`
- Image Processing `thumbnailator`, `imageio-webp`

* Feat: `S3ClientProperties` 프로퍼티 객체 구현 및 Application에서 프로퍼티 스캔 활성화

* Feat: `S3ClientConfig` - S3 클라이언트 빈 등록 및 `S3FileHandler` 파일 핸들링 객체 구현

* Feat: `ImageResizer` - Thumbnailator 라이브러리로 이미지 리사이징 로직 구현

* Feat: MultipartFile 구현체 및 이미지 / 오디오 파일 S3 업로더 구현

* Feat: `User` 제외한 각 도메인 별 빌더 또는 생성자 및 리포지토리 구현

* Feat: `Track` 도메인 컨트롤러 및 DTO 구현

* Feat: 이미지 / 오디오 MultipartFile들의 커스텀 Validation 어노테이션 구현

* Feat: `TagService` - associtateTrackWithTags() 메소드 구현

* Feat: `TrackService` - Track 업로드 비즈니스 로직 구현

* Feat: `Track` 도메인 테스트코드 작성

- Controller 통합 테스트
- Controller 유닛 테스트
- Service 유닛 테스트

* Feat: `ImageUploader` TrackImage 또는 ThumbnailImage 업로드 실패 시, 로깅 로직 추가

* Fix: `TrackController` 에서 `/api/v1` 접두  경로 제거

* Feat: `.gitignore` - `.vscode` 디렉토리 및 `init.sql` 파일 추가

* Feat: `JpaConfig` Configuration 클래스 작성 (#15)

* BE/#8 `.gitignore` 항목 추가 및 템플릿 경로 수정 (#17)

* Feat: `.gitignore` 에 `init.sql` 과 `.vscode` 추가

* Rename: `issue_template.md` 와 `pull_request_template.md` 경로 `.github` 하위로 변경

* BE/#9 `특정 곡 정보 가져오기` API 구현 및 테스트 코드 작성 (#19)

* Rename: `TrackResponseDto` -> `TrackUploadResponseDto` 명칭 변경

* Rename: `TrackResponseDto` -> `TrackUploadResponseDto` 명칭 변경

* Feat: `TrackResponseDto` 구현

* Feat: `특정 곡 정보 가져오기` API 구현

* Fix: `TrackController` 유닛 테스트 및 통합 테스트 API 요청 경로 수정

* Feat: `build.gradle` 에 `assertj-core` 의존성 추가

* Comment: `TrackService` 주석 추가

* Feat: `TrackTagRepository` - findByTagName() 메소드 추가

* Test: `특정 곡 정보 가져오기` API 테스트 코드 작성

* Be/#6 oAuth 2.0 로그인 로직 구현 (#22)

* feat: build.gradle depandence 추가

jwt + security + oAuth 2.0

* feat: build.gradle 의존성 추가

redis 추가

* faet: 카카오 기본 로그인 화면

백엔드 카카오 로그인 화면 구현

* feat: Cors 허용

react와 같은 외부 라이브러리 Cors 규칙 허용

* feat: oAuth 로그인을 위한 기본 entity 구현

controller 환경 + domain role 추가 Detail은 따로 빼서 구현

* feat: 카카오 데이터베이스 환경 설정

카카오 규칙에 맞는 환경설정 로직 추가

* feat: jwt 생성 및 시간 로직 구현

jwt를 통한 인증 과정 + 시간 설정

* feat: jwt 토큰 예외처리

토큰 만료기간에 대한 예외처리 구현

* feat: 카카오 SecurityConfig + handler

SecurityConfig를 통한 카카오 로그인 후 엑세스토큰 및 리프레스 토근 발급

* BE/#12 `Track` 엔티티에 곡 길이 정보 `duration` 필드 추가 (#24)

* Feat: `Track` 엔티티 `duration` 필드 추가

* Feat: Response Dto `duration` 필드 추가

* Feat: `build.gradle` - `jaudiotagger` 의존성 추기

* Feat: `AudioDataParser` - `extractDurationInSeconds` 곡 길이 추출 메소드 구현

* Feat: `TrackService` - 곡 업로드 시, 곡 길이 저장 로직 추가

* Test: `User` 및 `Track` 도메인 수정 사항 반영해서, 테스트 코드 수정

* Comment: `AudioDataParser` 주석 추가

* BE/#13 `특정 곡 재생 이벤트 기록하기` API 구현 (#27)

* Feat: `StreamingHistoryRepository` 구현

* Feat: `StreamingHistory` 엔티티 빌더 패턴 생성자 구성

* Feat: `특정 곡 재생 이벤트 기록하기` API 구현

* Fix: `JwtVertifyFilter` API 테스트 과정에서 임시로 필터 통과하도록 설정

* Test: `특정 곡 재생 이벤트 기록하기` API 테스트 코드 작성

* BE/#15 `모든 장르 리스트 가져오기` API 구현 (#29)

* Fix: `TrackService`에서 uploadTrack()의 `TrackUploadResponseDto`를 생성할 때 toDto()를 사용하도록 변경

* Feat: `GenreResponseDto` 작성

* Feat: `모든 장르 리스트 가져오기` API 구현

* Test: `모든 장르 리스트 가져오기` API 테스트 코드 작성

* BE/#16 `특정 장르의 모든 곡 가져오기` API 구현 (#31)

* Fix: `track_audio` MultipartFile 검증과정에 `wav` 확장자 추가

* Feat: `TrackRepository` Pagination을 적용한 findAllByGenreId() 메소드 작성

* Feat: `특정 장르의 모든 곡 가져오기` API의 반환 Dto인 `GenreWithTracksResponseDto` 구현

* Feat: `특정 장르의 모든 곡 가져오기` API 구현

* Test: `특정 장르의 모든 곡 가져오기` API 테스트 코드 작성

* BE/#17 `장르별 곡 3개씩 가져오기` API 구현 (#33)

* Feat: `TrackOverviewResponseDto` 작성

* Feat: `GenreWithTracksOverviewResponseDto` 작성

* Feat: `GenreRepository` - Pagination을 지원하는 findAll() 작성

* Feat: `장르별 곡 3개씩 가져오기` API 구현

* Fix: `GenreController`의 `장르별 곡 3개씩 가져오기` API Page 객체 리턴하도록 변경

* Comment: `TrackControllerTest.java` - `uploadTrackSuccess()` 테스트 전체 순차적으로 테스트 진행시 오류 나는 부분 주석 상세하게 명시

* Refactor: `TrackServiceTest`에서 Mock 객체 생성시, 파라미터로 생성하도록 코드의 유연성 높임

* Test: `장르별 곡 3개씩 가져오기` API 테스트 코드 작성

* BE/#18 `모든 태그 리스트 가져오기` 및 `특정 태그의 모든 곡 가져오기` API 구현 (#35)

* Fix: `Tag` 엔티티 `tagImage` 필드 활성화

* Feat: `TagResponseDto` 객체 작성

* Feat: `모든 태그 리스트 가져오기` API 구현

* Feat: `TagWithTracksResponseDto` 구현

* Feat: `특정 태그의 모든 곡 가져오기` API 구현

* Fix: `TagController` - @PageableDefault 항목에서 `page` 0으로 기본값 설정

* Test: `모든 태그 리스트 가져오기` 및 `특정 태그의 모든 곡 가져오기` API 테스트 코드 작성

* BE/#19 `새 플레이리스트 생성하기` API 구현 (#37)

* Feat: `CreatePlaylistResponseDto` 작성

* Feat: `CreatePlaylistRequestDto` 작성

* Feat: Playlist 도메인 관련 Repository 생성

* Fix: `CreatePlaylistResponseDto` - `playlistId` 자료형 long -> Long으로 변경

* Feat: `MyPlaylist`, `Playlist` 엔티티 Builder 추가

* Feat: `새 플레이리스트 생성하기` API 구현

* Test: `새 플레이리스트 작성하기` 테스트 코드 작성

* BE/#20 `특정 플레이리스트 정보 가져오기` API 구현 (#39)

* Feat: `CreatePlaylistResponseDto` 작성

* Feat: `CreatePlaylistRequestDto` 작성

* Feat: Playlist 도메인 관련 Repository 생성

* Fix: `CreatePlaylistResponseDto` - `playlistId` 자료형 long -> Long으로 변경

* Feat: `MyPlaylist`, `Playlist` 엔티티 Builder 추가

* Feat: `새 플레이리스트 생성하기` API 구현

* Test: `새 플레이리스트 작성하기` 테스트 코드 작성

* Feat: `PlaylistWithTracksResponseDto` 작성

* Feat: `MyPlaylist`, `PlaylistTrack` 엔티티가 `BaseTimeEntity`를 상속받도록 변경

* Feat: `PlaylistTrackRepository` - Pagination 적용한 `findAllByPlaylistId() 작성

* Feat: `특정 플레이리스트 정보 가져오기` API 구현

* Feat: `PlaylistTrack` 엔티티 Builder 추가

* Test: `특정 플레이리스트 정보 가져오기` API 테스트 코드 작성

* BE/#21 `특정 플레이리스트 이름 수정하기` API 구현 (#43)

* Feat: `CreatePlaylistResponseDto` 작성

* Feat: `CreatePlaylistRequestDto` 작성

* Feat: Playlist 도메인 관련 Repository 생성

* Fix: `CreatePlaylistResponseDto` - `playlistId` 자료형 long -> Long으로 변경

* Feat: `MyPlaylist`, `Playlist` 엔티티 Builder 추가

* Feat: `새 플레이리스트 생성하기` API 구현

* Test: `새 플레이리스트 작성하기` 테스트 코드 작성

* Feat: `PlaylistWithTracksResponseDto` 작성

* Feat: `MyPlaylist`, `PlaylistTrack` 엔티티가 `BaseTimeEntity`를 상속받도록 변경

* Feat: `PlaylistTrackRepository` - Pagination 적용한 `findAllByPlaylistId() 작성

* Feat: `특정 플레이리스트 정보 가져오기` API 구현

* Feat: `PlaylistTrack` 엔티티 Builder 추가

* Test: `특정 플레이리스트 정보 가져오기` API 테스트 코드 작성

* Rename: `CreatePlaylistResponseDto` -> `PlaylistResponseDto` 객체 명칭 변경

* Feat: `Playlist` - `playlistName` 필드 변경하는 `updatePlaylistName()` 메소드 작성

* Feat: `UpldatePlaylistNameRequestDto` 작성

* Feat: `특정 플레이리스트 이름 수정하기` API 구현

* Test: `특정 플레이리스트 이름 수정하기` API 테스트 코드 작성

* Remove: 중복 import 삭제

* Remove: 중복 import 삭제

* Remove: 중복 import 삭제

* Rename: 서비스 계층 유닛 테스트 코드 객체명 수정 (#44)

* Feat: 서비스 계층 메소드에서 `@Transactional(readOnly=true)` 명시하기 (#45)

* BE/#24 `특정 플레이리스트 삭제하기`, `특정 플레이리스트에 곡 추가하기`, `특정 플레이리스트의 곡 삭제하기` API 구현 (#50)

* Feat: `MyPlaylistRepository`, `PlaylistTrackRepository` 에서 플레이리스트 삭제시 호출되는 `deleteByPlaylist()` 메소드 추가

* Feat: `특정 플레이리스트 삭제하기` API 구현

* Test: `특정 플레이리스트 삭제하기` 테스트 코드 작성

* Feat: `AddTrackToPlaylistRequestDto` 작성

* Feat: `PlaylistTrackRepository` - 플레이리스트에 해당 트랙의 존재 여부 확인 메소드 구현

* Feat: `특정 플레이리스트에 곡 추가하기` API 구현

* Feat: `PlaylistTrackRepository` `findByPlaylistAndTrack()` 메소드 추가

* Feat: `특정 플레이리스트의 곡 삭제하기` API 구현

* Test: `특정 플레이리스트에 곡 추가하기` API 테스트 코드 작성

* Test: `특정 플레이리스트의 곡 삭제하기` API 테스트 코드 작성

* BE/#28 `플레이리스트들 가져오기`, `특정 플레이리스트 팔로우하기`, `특정 플레이리스트 언 팔로우하기` API 구현 (#53)

* Rename: `TrackOverviewResponseDto` 경로를 Genre 도메인 하위에서 Track 도메인 하위로 변경

* Feat: `PlaylistWithTracksOverviewResponseDto` 작성

* Fix: `PlaylistTrackRepository` - `findAllByPlaylistId()` 메소드 정렬방식 JPQL -> Pageable Sort로 동작하도록 변경

* Fix: `PlaylistWithTracksOverviewResponseDto` - toDto() 과정에서 User가 null일 경우도 처리 가능하도록 변경

* Feat: `플레이스트들 가져오기` API에서 요청시, RequestParam `type` 검증 커스텀 어노테이션 작성

* Feat: `PlaylistRepository` - `findByIsCuratedTrue()`, `findByIsCuratedFalseAndIsPublicTrue()` 메소드 작성

* Feat: `플레이리스트들 가져오기` API 구현

* Feat: `MyPlaylistRepository` - `existsByUserAndPlaylist()`, `findByUserAndPlaylist()` 추가

* Feat: `특정 플레이리스트 팔로우하기`, `특정 플레이리스트 언 팔로우하기` API 구현

* Teat: `플레이리스트들 가져오기` API 테스트 코드 작성

* Test: `특정 플레이리스트 팔로우하기`, `특정 플레이리스트 언 팔로우하기` 테스트 코드 작성

* feat: refresh 검증 API 구현 (#55)

* feat: refresh 검증 API 구현

/refresh로 만료 확인 가능

* fix: refresh token형식 변형 + mapping 변경

* Be/#10  jwt형식으로 swagger추가  (#56)

* feat: build.gradle 의존성 추가

* feat: swagger + jwt 설정 추가 및 기본 API summary 작성

@Controller -> @RestController 변경

---------



* Test: `PlaylistControllerTest` - `updatePlaylistNameSuccess` 통합테스트 추가 (#57)

* Fix: `contextLoads()` 테스트 `@ActiveProfiles("test")` 어노테이션 명시로 해결 (#59)

* Fix: `특정 플레이리스트 정보 가져오기` API 사용자 검증 과정 추가 (#60)

* Be/#11 redis 설정 및 redis refresh token 삽입 (#61)

* feat: redis.conf 파일 추가

redis 상세 설정을 위한 conf파일 추가

* fix: redis data파일 자동 생성 제외

data에 들어가는 log수집에 대한 내용을 제외하기 위해 추가

* fix: redis 버전 다운그레이드

redis 버전 의존성을 위해서 .3 -> .2로 다운그레이드

* feat: redis 도메인 구성 추가

redis  rogin을 위한 기본 구성 내용 추가

* feat: userId jwt 토큰값 추가

jwt토큰에 포함 시켜 redis refresh 검증에 사용

* faet: redis refresh 검증 로직 추가

* feat: docker-compose redis 삽입

* Create test_deploy.yml

add `test_deploy.yml` on github action

* BE/#33 `ThumnailImageMultipartFile` S3 업로드 폴더 명 수정 (#68)

* BE/#34 `TrackDetail` 도메인 `prompt` 필드 VARCHAR 사이즈 수정 (#67)

* BE/#35 테스트 서버 배포하기 (#66)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* fix: 로그인 구현 형식 json -> cookie (#70)

json 전달형식에서 cookie 형식으로 변경

* Be/#32 좋아요 기능 구현 (#71)

* fix: 로그인 구현 형식 json -> cookie

json 전달형식에서 cookie 형식으로 변경

* fix: 리다이렉션 url 수정

genre -> genre_select

* fix: swagger 설정 변경

허용 범위 변경 및 설정 변경

* fix: jwt 시간 및 정보 변경

userId 추가 및 기본 토큰 지속 시간 변경

* fix: Genre 형식 변경

기존 enum형식 Genre 삭제 후 Genre 내용 변경

* feat: 좋아요 기능 구현

좋아요 추가 기능 및 삭제 기능 구현

* feat: track 전달 get내용 likes추가

* feat: likesFlag 형식 구현

Boolean likesFlag 형식

* Test 브랜치 `test.Dockerfile` 수정 및 `test_deploy.yml` Github Action 수정 (#72)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* `Develop` -> `Test` 브랜치 머지 (#69)

* BE/#33 `ThumnailImageMultipartFile` S3 업로드 폴더 명 수정 (#68)

* BE/#34 `TrackDetail` 도메인 `prompt` 필드 VARCHAR 사이즈 수정 (#67)

* BE/#35 테스트 서버 배포하기 (#66)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* Fix: `test.Dockerfile` CPU 아키텍쳐 호환성 문제로 jdk-alpine에서 jdk로 변경

* Fix: `test_deploy.yml` docker buildx 를 사용해서 멀티 아키텍처를 지원하도록 변경

* BE/#36 `곡 검색하기` API 구현 (#74)

* Feat: `build.gradle` elasticsearch-java 클라이언트 의존성 추가

* Feat: `ElasticsearchConfig` 및 `ElasticsearchProperties` 작성

* Fix: `DreamvaultBackendApplication` 에서 프로퍼티 검사 경로 변경

* Fix: `LikeRepository` - existsByUserIdAndTrackId() 메소드 `@Param` 어노테이션 명시

* Feat: `JacksonConfig` - Elasticsearch java client에서 요청 시 사용하는 `objectMapper` 빈 등록

* Feat: `TrackDocument` Elasticsearch 검색 결과 반환받는 객체 작성

* Feat: `SearchTrackResponseDto`, 페이지네이션을 위한 `CustomPage` 및 기타 하위 Dto 작성

* Feat: `TrackDocumentUtil` - 검색 결과에서 하이라이팅 된 필드랑 원본 결합용 유틸 클래스 작성

* Feat: `SearchController`, `SearchService` 검색 비즈니스 로직 구현

* fix: Swagger JWT 형식 변경 (#79)

Components - > SecurityScheme

* Fix: `PlaylistService`의 `createPlaylist()`에서 MyPlaylist를 추가하지 않도록 변경 (#81)

* Fix: `JwtVerifyFilter` - whitelist에 `/search` 경로 추가 (#83)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* `Develop` -> `Test` 브랜치 머지 (#69)

* BE/#33 `ThumnailImageMultipartFile` S3 업로드 폴더 명 수정 (#68)

* BE/#34 `TrackDetail` 도메인 `prompt` 필드 VARCHAR 사이즈 수정 (#67)

* BE/#35 테스트 서버 배포하기 (#66)

* Fix: `build.gradle`에서 plain 빌드파일 생성하지 않도록 변경

* Feat: `test.Dockerfile` 생성

* Feat: `appspec.yml` 파일 작성

* Feat: `spring-actuator` 의존성 추가 및 `redis` 의존성 주석처리

* Feat: `test_deploy.yml` 추가

* Fix: `appspec.yml` - 컨테이너 명 수정

* Feat: `.gitignore` 파일에 `init_test.sql` 추가

* Fix: `test.Dockerfile` CPU 아키텍쳐 호환성 문제로 jdk-alpine에서 jdk로 변경

* Fix: `test_deploy.yml` docker buildx 를 사용해서 멀티 아키텍처를 지원하도록 변경

* Fix: `JwtVerifyFilter` - whitelist에 `/search/**` 경로 추가

* Fix: `JwtVerifyFilter` - whitelist에 `/search/**` -> `/search` 경로 변경

* BE/#42 `AuthenticationPriciple`이 필요한 API에 사용자 식별 로직 붙이기 && `getPlaylistWithTracks()`에서 플레이리스트 소유 정보 추가 반환 (#85)

* Refactor: `GenreController` - userId 파라미터 전달방식 수정

* Fix: `AuthenticationPriciple`을 통한사용자 식별로직 추가

* Comment: `PlaylistService` 주석 추가

* Refacotr: `TagController` 파라미터 전달 방식 수정

* Fix: `TrackService` API에 사용자 식별로직 추가

* Refactor: 파라미터와 로직코드 가시적 구분을 위해 개행 추가

* Feat: 기본 경로들 whitelist에 추가

* Fix: `PlaylistService` - `getPlaylistWithTracks()` 특정 플레이리스트 정보 가져오기에서 `isOwner` 필드 추가

* Be/#38 User 곡 , 플레이리스트, 취향 API 구현 (#86)

* feat: 로그인 index.html 업데이트

구글 + 네이버 간편 백엔드 로그인 추가

* fix: 로그인 토큰 url 형식 변경

cookie -> params로 변경

* fix: 토큰 만료 status코드 변경

토큰 만료 내역 변경 status 200 -> 401

* feat: 네이버, 구글 로그인 형식 추가

ouath 네이버, 구글 로그인 추가

* fix: 장르 DB 형식 변겅

* feat: user 관련 API 구현

* feat: track 관련 api 구현

* feat: playlist 관련 api 구현

* feat: like 관련 api 구현

* Feat: `SwaggerConfig`에 테스트 서버 도메인 추가 (#89)

* Be/#44 JwtVerifyFilter 도메인 허용 whitelist user추가 및 도메인명 수정 (#90)

* fix: JwtVerifyFilter 도메인 허용 변경

user관련 도메인 추가 허용

* fix: user 관련 외부 controller 엔드포인트 값 변경

playlist controller, trackcontroller 각각 명칭 삭제

* Fix: `JwtVerifyFilter`에서 whitelist의 `/user` 경로 `/users`로 수정 (#93)

* BE/#47 Cors, RedirectURL 및 Swagger 설정 관련 URL들 프로퍼티로 치환 && 배포관련 파일 변경 (#95)

* Fix: `SwaggerConfig` 스웨거 서버 URL 프로퍼티 명칭 변경 `domain.test` -> `domain.backend`

* Fix: `CommonLoginSuccessHandler` - `determinTargetUrl()`에서 redirectURL 도메인을 프로퍼티에서 가져오도록 설정

* Fix: `SecurityConfig` - `corsConfiguration()`에 frontendUrl 추가

* Fix: `.gitignore`에 init*.sql 추가

* Rename: `test.Dockerfile` -> `prod.Dockerfile` 파일명 변경

* Fix: `test_deploy.yml` -> `deploy.yml` 로 변경 및 `prod.Dockerfile` 사용하도록 설정

* Fix: `appspec.yml` ECS 컨테이너 명 변경

---------

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

* Fix: `deploy.yml` 오타 수정 (#105)

* Fix: `TagService` - 새 태그 생성 시, 사용자가 업로드한 곡의 이미지를 태그 이미지로 사용하도록 변경 (#109)

* fix: 로그인 redirecturl 변경 (#108)

/auth/login, /auth/signup

---------

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

---------

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

* BE/#53 track 최신곡 받아오기 오류 수정  (#113)

* fix: track 최신곡 받아오기 오류 수정

id 중복 허용 및 변경 감지

* feat: 최신곡 중복 제거 형식 추가

* Fix: `PlaylistController` - `getPlaylistsWithTracksOverview()`와 `getPlaylistWithTracks()` 정렬 기준 변경 (#115)

---------

Co-authored-by: kwongwangjae <[email protected]>
Co-authored-by: kwongwangjae <[email protected]>
  • Loading branch information
3 people authored May 23, 2024
1 parent 6b33561 commit 46eb3f6
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public ResponseEntity<PlaylistResponseDto> createPlaylist(
@GetMapping
public ResponseEntity<Page<PlaylistWithTracksOverviewResponseDto>> getPlaylistsWithTracksOverview(
@ValidPlaylistType @RequestParam("type") String type,
@PageableDefault(page = 0, size = 6, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable) {
@PageableDefault(page = 0, size = 6, sort = "id", direction = Sort.Direction.DESC) Pageable pageable) {

return ResponseEntity.ok(playlistService.getPlaylistsWithTracksOverview(type, pageable));
}
Expand All @@ -71,7 +71,7 @@ public ResponseEntity<Page<PlaylistWithTracksOverviewResponseDto>> getPlaylistsW
@Operation(summary = "특정 플레이스트 정보 가져오기")
public ResponseEntity<PlaylistWithTracksResponseDto> getPlaylistWithTracks(
@PathVariable("playlist_id") Long playlistId,
@PageableDefault(page = 0, size = 30, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable,
@PageableDefault(page = 0, size = 30, sort = "id", direction = Sort.Direction.DESC) Pageable pageable,
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal) {

return ResponseEntity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public Page<PlaylistWithTracksOverviewResponseDto> getPlaylistsWithTracksOvervie
return playlistPage.map(playlist -> {
// Playlist에 해당하는 Track 가져오기
List<TrackOverviewResponseDto> tracks = playlistTrackRepository
.findAllByPlaylistId(playlist.getId(), PageRequest.of(0, 3, Sort.by("createdAt").descending()))
.findAllByPlaylistId(playlist.getId(), PageRequest.of(0, 3, Sort.by("id").descending()))
.stream()
.map(PlaylistTrack::getTrack)
.map(TrackOverviewResponseDto::toDto)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
Expand Down Expand Up @@ -80,7 +81,7 @@ public ResponseEntity<Void> recordStreamEvent(@PathVariable("track_id") Long tra
@GetMapping("/users/played")
public ResponseEntity<Page<TrackResponseDto>> getRecentTracks(
@AuthenticationPrincipal UserDetailPrincipal userDetailPrincipal,
@PageableDefault(size = 12, sort = "createdAt") Pageable pageable) {
@PageableDefault(size = 12, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable) {

Long userId = userDetailPrincipal.getUserId();
Page<TrackResponseDto> recentTracks = trackService.getUserResentTrack(userId, pageable);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,5 @@

@Repository
public interface StreamingHistoryRepository extends JpaRepository<StreamingHistory, Long>, StreamingHistoryRepositoryCustom {
@Query("SELECT sh.track FROM StreamingHistory sh WHERE sh.user.userId = :userId ORDER BY sh.createdAt DESC")
Page<Track> findTracksByUserId(Long userId, Pageable pageable);


}
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@

public interface StreamingHistoryRepositoryCustom {
Page<Track> findPopularTracks(Pageable pageable);

Page<Track> findDistinctAndRecentTracksByUserId(Long userId, Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.dreamvalutbackend.domain.track.repository;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
Expand All @@ -13,6 +14,7 @@
import com.example.dreamvalutbackend.domain.track.domain.QStreamingHistory;
import com.example.dreamvalutbackend.domain.track.domain.QTrack;
import com.example.dreamvalutbackend.domain.track.domain.Track;
import com.querydsl.core.Tuple;
import com.querydsl.jpa.impl.JPAQueryFactory;

import jakarta.persistence.EntityManager;
Expand Down Expand Up @@ -64,5 +66,55 @@ public Page<Track> findPopularTracks(Pageable pageable) {
return new PageImpl<>(sortedTracks, pageable, total);
}

@Override
public Page<Track> findDistinctAndRecentTracksByUserId(Long userId, Pageable pageable) {
QStreamingHistory streamingHistory = QStreamingHistory.streamingHistory;
QTrack track = QTrack.track;

// 각 track_id에 대한 최신 created_at을 찾아서 중복을 제거
List<Tuple> latestEntries = queryFactory
.select(streamingHistory.track.id, streamingHistory.createdAt.max().as("latestCreatedAt"))
.from(streamingHistory)
.where(streamingHistory.user.userId.eq(userId))
.groupBy(streamingHistory.track.id)
.fetch();

// 최신 created_at 기준으로 정렬된 track_id 리스트 추출
List<Long> trackIds = latestEntries.stream()
.sorted((t1, t2) -> {
LocalDateTime t1Date = t1.get(1, LocalDateTime.class);
LocalDateTime t2Date = t2.get(1, LocalDateTime.class);
return t2Date.compareTo(t1Date); // 최신순 정렬
})
.map(tuple -> tuple.get(streamingHistory.track.id))
.skip(pageable.getOffset())
.limit(pageable.getPageSize())
.collect(Collectors.toList());

if (trackIds.isEmpty()) {
return Page.empty(pageable);
}

// 트랙 세부 정보 조회
List<Track> tracks = queryFactory
.selectFrom(track)
.where(track.id.in(trackIds))
.fetch();

// 트랙 ID 목록의 순서대로 트랙을 정렬
List<Track> sortedTracks = trackIds.stream()
.map(id -> tracks.stream()
.filter(t -> t.getId().equals(id))
.findFirst()
.orElse(null))
.collect(Collectors.toList());

// 중복 제거된 track_id를 기반으로 총 수를 계산
long total = latestEntries.size();

return new PageImpl<>(sortedTracks, pageable, total);
}


}

Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ public void recordStreamEvent(Long trackId, Long userId) {

@Transactional
public Page<TrackResponseDto> getUserResentTrack(Long userId, Pageable pageable) {
Page<Track> tracks = streamingHistoryRepository.findTracksByUserId(userId, pageable);
Page<Track> tracks = streamingHistoryRepository.findDistinctAndRecentTracksByUserId(userId, pageable);
return tracks.map(track -> {
TrackDetail trackDetail = trackDetailRepository.findById(track.getId())
.orElseThrow(() -> new IllegalArgumentException("Track detail not found"));
Expand Down

0 comments on commit 46eb3f6

Please sign in to comment.