88from app .user .auth import get_current_user
99from app .diary .models import Diary , RecommendedSong
1010from app .diary .schemas import DiaryCreateRequest , DiaryUpdateRequest , DiaryResponse , DiaryCountResponse , SongResponse , \
11- DiaryPreviewResponse
11+ DiaryPreviewResponse , RecommendSongResponse
1212from app .user .models import User
1313from app .embedding .models import kobert , save_diary_embedding , split_sentences , get_user_preferred_genres , \
1414 get_songs_by_genre , get_song_embeddings , calculate_similarity
@@ -745,15 +745,14 @@ def get_diary(
745745
746746 return diary
747747
748- @router .get ("/{diary_id}/recommended-songs" , response_model = list [ SongResponse ],
748+ @router .get ("/diary/ {diary_id}/recommended-songs" , response_model = List [ RecommendSongResponse ],
749749 summary = "추천 노래 조회" ,
750750 description = "특정 일기에 대한 추천 노래 리스트를 조회합니다." )
751751def get_recommended_songs_by_diary (
752752 diary_id : int ,
753- current_user : User = Depends (get_current_user ),
753+ current_user = Depends (get_current_user ),
754754 db : Session = Depends (get_db )
755755):
756- # 1. 해당 일기가 유저의 것인지 검증
757756 diary = db .query (Diary ).filter (
758757 Diary .id == diary_id ,
759758 Diary .user_id == current_user .id
@@ -762,7 +761,6 @@ def get_recommended_songs_by_diary(
762761 if not diary :
763762 raise HTTPException (status_code = 404 , detail = "일기를 찾을 수 없습니다." )
764763
765- # 2. 추천곡 조회
766764 songs = db .query (RecommendedSong ).filter (
767765 RecommendedSong .diary_id == diary_id
768766 ).order_by (RecommendedSong .similarity_score .desc ()).all ()
@@ -876,3 +874,25 @@ def get_diary_count_by_month(
876874 month = month ,
877875 diary_count = diary_count
878876 )
877+
878+ @router .put ("/{diary_id}/set-main-song" , status_code = 200 )
879+ async def set_main_song (
880+ diary_id : int ,
881+ recommended_song_id : int ,
882+ current_user = Depends (get_current_user ),
883+ db : Session = Depends (get_db )
884+ ):
885+ diary = db .query (Diary ).filter (Diary .id == diary_id , Diary .user_id == current_user .id ).first ()
886+ if not diary :
887+ raise HTTPException (status_code = 404 , detail = "일기를 찾을 수 없습니다." )
888+
889+ song = db .query (RecommendedSong ).filter (
890+ RecommendedSong .id == recommended_song_id ,
891+ RecommendedSong .diary_id == diary .id
892+ ).first ()
893+ if not song :
894+ raise HTTPException (status_code = 400 , detail = "추천곡이 일기와 일치하지 않습니다." )
895+
896+ diary .main_recommended_song_id = song .id
897+ db .commit ()
898+ return {"message" : "대표 음악이 설정되었습니다." }
0 commit comments