async def patch(self, id=None, *args, **kwargs) -> Response: if not id: raise TeamNotFound team = Team.get_item(id) if not team: raise TeamNotFound json_body = await self.deserialize_body(partial=True) name = json_body.get('name') if name: team.name = name user_ids = json_body.get('users') if user_ids: users = [] for user_id in user_ids: user = User.get_item(int(user_id)) if not user: raise UserNotFound users.append(user) team.users = users team.save() return await self.to_response(await self.serialize(data=team))
async def get(self, id=None, *args, **kwargs) -> Response: if not id: raise TeamNotFound team = Team.get_item(id) if not team: raise TeamNotFound return await self.to_response(await self.serialize(data=team))
async def delete(self, id=None, *args, **kwargs) -> Response: if not id: raise TeamNotFound team = Team.get_item(id) if not team: raise TeamNotFound team.delete() return JSONAPIResponse(status_code=204)
async def delete(self, parent_id: str, *args, **kwargs) -> Response: team = Team.get_item(int(parent_id)) if not team: raise TeamNotFound user_ids = await self.deserialize_ids() if not user_ids: user_ids = [] users = [] for user in team.users: if str(user.id) not in user_ids: users.append(user) team.users = users team.save() return await self.to_response(await self.serialize(data=team))
async def post(self, parent_id: str, *args, **kwargs) -> Response: team = Team.get_item(int(parent_id)) if not team: raise TeamNotFound user_ids = await self.deserialize_ids() if not user_ids: users = [] else: users = team.users for user_id in user_ids: user = User.get_item(int(user_id)) if not user: raise UserNotFound users.append(user) team.users = users team.save() return await self.to_response(await self.serialize(data=team))
async def get_related(self, id: Any, relationship: str, related_id: Any = None, *args, **kwargs) -> Response: team = Team.get_item(id) if not team: raise TeamNotFound if relationship == 'users': if not related_id: return await self.to_response(await self.serialize_related( team.users, many=True)) else: filtered_users = list( filter(lambda user: user.id == related_id, team.users)) if len(filtered_users) == 1: return await self.to_response(await self.serialize_related( filtered_users[0])) raise HTTPException(status_code=404)
async def get(self, parent_id: str, *args, **kwargs) -> Response: team = Team.get_item(int(parent_id)) if not team: raise TeamNotFound return await self.to_response(await self.serialize(data=team))