MCPcopy Create free account
hub / github.com/dbunt1tled/python-fast-api / UserController

Class UserController

src/app/user/controller/user_controller.py:12–57  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10
11
12class UserController(BaseController):
13 def __init__(self, app: FastAPI, container: Container) -> None:
14 super().__init__(container=container)
15 router = APIRouter(prefix="/users", tags=["users"])
16 router.add_api_route(path="", endpoint=self.list, methods=["GET"])
17 router.add_api_route(path="", endpoint=self.create, methods=["POST"])
18 router.add_api_route(path="/{user_id}", endpoint=self.view, methods=["GET"])
19 app.include_router(router=router)
20
21 async def list(self, req: UserListRequest = Depends()) -> JsonApiResponse:
22 users = await self.container.user_service().all(
23 filters=[
24 Filter("email", Oper.EQ, req.email),
25 ],
26 pagination=Pagination(
27 per_page=req.per_page or 10,
28 page=req.page or 1,
29 ),
30 )
31
32 return await self.response(data=users, include=req.include)
33
34 async def view(self, user_id: int, req: Request) -> JsonApiResponse:
35 user = await self.container.user_service().get_by_id(user_id)
36 return await self.response(data=user, include=req.query_params.get("include", None))
37
38 async def create(
39 self,
40 req: UserCreateRequest,
41 ) -> JsonApiResponse:
42 user = await self.container.user_service().one(
43 filters=[
44 Filter("email", Oper.EQ, req.email),
45 ]
46 )
47 if user is not None:
48 raise UnprocessableEntityException(
49 error_no=ErrorNo.USER_EMAIL_ALREADY_EXISTS, message="User already exists"
50 )
51
52 user = req.to_user()
53 user.session = self.container.hash_service().random_string()
54 user.hash_password = self.container.hash_service().hash_password(req.password)
55 user = await self.container.user_service().create(data=user)
56
57 return await self.response(data=user)

Callers 1

lifespanFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected