Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions backend/app/routes/api/tag/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
async def get_tags_by_description(
project_id: int, service: TagServiceDep
) -> GeneratedTagsResponse:
return await service.get_tags(project_id)
return await service.get_generated_tags(project_id)


@router.post("/add/{project_id}")
async def add_project_tags(
project_id: int, service: TagServiceDep, user: AuthUserDep, tags: list[TagSchema]
) -> list[TagSchema]:
return await service.add_project_tags(project_id, tags, user)
return await service.add_tags_to_project(project_id, tags, user)
4 changes: 2 additions & 2 deletions backend/app/routes/api/tag/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ def __init__(
self.ai_agent = ai_agent
self.tag_data_access = tag_data_access

async def get_tags(self, project_id: int) -> GeneratedTagsResponse:
async def get_generated_tags(self, project_id: int) -> GeneratedTagsResponse:
project = await self.data_access.get_project_by_id(project_id)
if project is None:
raise HTTPException(status_code=404, detail="Project not found")
result = await self.ai_agent.get_tags_by_description(project.brief_description)

return result

async def add_project_tags(
async def add_tags_to_project(
self, project_id: int, tags: list[TagSchema], user: UserInDB
) -> list[TagSchema]:
project = await self.data_access.get_project_by_id(project_id)
Expand Down
6 changes: 6 additions & 0 deletions backend/app/routes/api/user/data_access.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from sqlalchemy import select, update
from models import User
from models.users import UserRole
from routes.api.user.schemas import GetUserSchema


class UserDataAccess:
Expand All @@ -21,5 +22,10 @@ async def set_user_role(self, username: str, role: UserRole) -> None:
update(User).where(User.username == username).values(role=role)
)

async def get_users_by_ids(self, users_ids: list[int]) -> list[GetUserSchema]:
res = await self.db_session.execute(select(User).where(User.id.in_(users_ids)))
users = res.scalars().all()
return [GetUserSchema.model_validate(user) for user in users]


UserDataAccessDep = Annotated[UserDataAccess, Depends(UserDataAccess)]
13 changes: 11 additions & 2 deletions backend/app/routes/api/user/router.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from fastapi import APIRouter, Depends
from fastapi import APIRouter, Depends, Query
from typing import Annotated
from dependencies.auth import get_current_user
from routes.api.user.service import UserServiceDep
from routes.api.user.schemas import SetUserRoleSchema
from routes.api.user.schemas import SetUserRoleSchema, GetUserSchema
from schemas.user import User

router = APIRouter(prefix="/user", tags=["user"])
Expand All @@ -22,3 +23,11 @@ async def get_me(
current_user=Depends(get_current_user),
) -> User:
return current_user


@router.get("/get_users")
async def get_users_by_ids(
service: UserServiceDep,
users_ids: Annotated[list[int], Query(description="List of user IDs")],
) -> list[GetUserSchema]:
return await service.get_users_by_ids(users_ids)
9 changes: 9 additions & 0 deletions backend/app/routes/api/user/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,12 @@

class SetUserRoleSchema(BaseModel):
role: UserRole


class GetUserSchema(BaseModel):
id: int
username: str
role: UserRole

class Config:
from_attributes = True
11 changes: 9 additions & 2 deletions backend/app/routes/api/user/service.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
from typing import Annotated
from fastapi import Depends, HTTPException

from models.users import UserRole
from routes.api.user.data_access import UserDataAccessDep, UserDataAccess
from routes.api.user.schemas import SetUserRoleSchema
from routes.api.user.schemas import SetUserRoleSchema, GetUserSchema
from schemas.user import User


Expand All @@ -28,5 +27,13 @@ async def set_user_role(self, user_role: SetUserRoleSchema, current_user: User):
"message": f"User '{user.username}' role set to {user_role.role.value}."
}

async def get_users_by_ids(self, users_ids: list[int]) -> list[GetUserSchema]:
users = await self.user_repository.get_users_by_ids(users_ids)
if not users:
raise HTTPException(
status_code=404, detail="No users found with the provided IDs."
)
return users


UserServiceDep = Annotated[UserService, Depends(UserService)]
Loading