44
55from fastapi import APIRouter , Depends , Query , status
66from sqlalchemy .orm import Session
7+ from typing import List , Dict , Any
78
89from app .api .dependencies import get_db
910from app .core import security
1314from app .schemas .shared_team import TeamShareRequest , TeamShareResponse , JoinSharedTeamRequest , JoinSharedTeamResponse
1415from app .services .adapters .team_kinds import team_kinds_service
1516from app .services .shared_team import shared_team_service
17+ from app .services .team_favorite import team_favorite_service
1618
1719router = APIRouter ()
1820
@@ -124,4 +126,92 @@ def join_shared_team(
124126 db = db ,
125127 share_token = request .share_token ,
126128 user_id = current_user .id
127- )
129+ )
130+
131+
132+ @router .post ("/{team_id}/favorite" )
133+ def add_team_to_favorites (
134+ team_id : int ,
135+ current_user : User = Depends (security .get_current_user ),
136+ db : Session = Depends (get_db )
137+ ):
138+ """Add a team to user's favorites"""
139+ return team_favorite_service .add_favorite (
140+ db = db ,
141+ team_id = team_id ,
142+ user_id = current_user .id
143+ )
144+
145+
146+ @router .delete ("/{team_id}/favorite" )
147+ def remove_team_from_favorites (
148+ team_id : int ,
149+ current_user : User = Depends (security .get_current_user ),
150+ db : Session = Depends (get_db )
151+ ):
152+ """Remove a team from user's favorites"""
153+ return team_favorite_service .remove_favorite (
154+ db = db ,
155+ team_id = team_id ,
156+ user_id = current_user .id
157+ )
158+
159+
160+ @router .get ("/showcase/recommended" , response_model = List [Dict [str , Any ]])
161+ def get_recommended_teams (
162+ limit : int = Query (6 , ge = 1 , le = 20 , description = "Max teams to return" ),
163+ db : Session = Depends (get_db ),
164+ current_user : User = Depends (security .get_current_user )
165+ ):
166+ """Get recommended teams (is_recommended=true)"""
167+ from app .schemas .kind import Team
168+
169+ # Get all teams where isRecommended is true
170+ teams = db .query (Kind ).filter (
171+ Kind .kind == "Team" ,
172+ Kind .is_active == True
173+ ).all ()
174+
175+ recommended_teams = []
176+ favorite_team_ids = team_favorite_service .get_user_favorite_team_ids (db = db , user_id = current_user .id )
177+
178+ for team in teams :
179+ team_crd = Team .model_validate (team .json )
180+ if team_crd .spec .isRecommended :
181+ team_dict = team_kinds_service ._convert_to_team_dict (team , db , team .user_id )
182+ team_dict ["is_favorited" ] = team .id in favorite_team_ids
183+ recommended_teams .append (team_dict )
184+ if len (recommended_teams ) >= limit :
185+ break
186+
187+ return recommended_teams
188+
189+
190+ @router .get ("/showcase/favorites" , response_model = List [Dict [str , Any ]])
191+ def get_favorite_teams (
192+ limit : int = Query (6 , ge = 1 , le = 20 , description = "Max teams to return" ),
193+ db : Session = Depends (get_db ),
194+ current_user : User = Depends (security .get_current_user )
195+ ):
196+ """Get user's favorite teams"""
197+ from app .models .user_team_favorite import UserTeamFavorite
198+
199+ # Get user's favorite team IDs
200+ favorites = db .query (UserTeamFavorite ).filter (
201+ UserTeamFavorite .user_id == current_user .id
202+ ).order_by (UserTeamFavorite .created_at .desc ()).limit (limit ).all ()
203+
204+ favorite_teams = []
205+ for favorite in favorites :
206+ team = db .query (Kind ).filter (
207+ Kind .id == favorite .team_id ,
208+ Kind .kind == "Team" ,
209+ Kind .is_active == True
210+ ).first ()
211+
212+ if team :
213+ team_dict = team_kinds_service ._convert_to_team_dict (team , db , team .user_id )
214+ team_dict ["is_favorited" ] = True
215+ favorite_teams .append (team_dict )
216+
217+ return favorite_teams
0 commit comments