brestok commited on
Commit
aabf8ec
·
1 Parent(s): b1eced0

add account CRUD

Browse files
trauma/api/account/db_requests.py CHANGED
@@ -1,6 +1,8 @@
1
  import asyncio
2
 
3
  from trauma.api.account.model import AccountModel
 
 
4
  from trauma.core.config import settings
5
 
6
 
@@ -15,3 +17,14 @@ async def get_all_model_obj(page_size: int, page_index: int) -> tuple[list[Accou
15
  settings.DB_CLIENT.accounts.count_documents({})
16
  )
17
  return objects, total_count
 
 
 
 
 
 
 
 
 
 
 
 
1
  import asyncio
2
 
3
  from trauma.api.account.model import AccountModel
4
+ from trauma.api.account.schemas import CreateAccountRequest
5
+ from trauma.api.common.db_requests import check_unique_fields_existence
6
  from trauma.core.config import settings
7
 
8
 
 
17
  settings.DB_CLIENT.accounts.count_documents({})
18
  )
19
  return objects, total_count
20
+
21
+
22
+ async def create_account_obj(data: CreateAccountRequest) -> AccountModel:
23
+ await check_unique_fields_existence("email", data.email)
24
+ account = AccountModel(**data.model_dump())
25
+ await settings.DB_CLIENT.accounts.insert_one(account.to_mongo())
26
+ return account
27
+
28
+
29
+ async def delete_account(account_id: str) -> None:
30
+ await settings.DB_CLIENT.accounts.delete_one({"id": account_id})
trauma/api/account/schemas.py CHANGED
@@ -12,3 +12,8 @@ class AccountWrapper(TraumaResponseWrapper[AccountModel]):
12
  class AllAccountsResponse(BaseModel):
13
  paging: Paging
14
  data: list[AccountModel]
 
 
 
 
 
 
12
  class AllAccountsResponse(BaseModel):
13
  paging: Paging
14
  data: list[AccountModel]
15
+
16
+
17
+ class CreateAccountRequest(BaseModel):
18
+ email: str
19
+ password: str
trauma/api/account/views.py CHANGED
@@ -3,10 +3,10 @@ from typing import Optional
3
  from fastapi import Depends, Query
4
 
5
  from trauma.api.account import account_router
6
- from trauma.api.account.db_requests import get_all_model_obj
7
  from trauma.api.account.dto import AccountType
8
  from trauma.api.account.model import AccountModel
9
- from trauma.api.account.schemas import AccountWrapper, AllAccountsResponse
10
  from trauma.api.common.dto import Paging
11
  from trauma.core.security import PermissionDependency
12
  from trauma.core.wrappers import TraumaResponseWrapper
@@ -31,3 +31,20 @@ async def get_account(
31
  account: AccountModel = Depends(PermissionDependency([AccountType.Admin, AccountType.User]))
32
  ) -> AccountWrapper:
33
  return AccountWrapper(data=account)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  from fastapi import Depends, Query
4
 
5
  from trauma.api.account import account_router
6
+ from trauma.api.account.db_requests import get_all_model_obj, create_account_obj, delete_account
7
  from trauma.api.account.dto import AccountType
8
  from trauma.api.account.model import AccountModel
9
+ from trauma.api.account.schemas import AccountWrapper, AllAccountsResponse, CreateAccountRequest
10
  from trauma.api.common.dto import Paging
11
  from trauma.core.security import PermissionDependency
12
  from trauma.core.wrappers import TraumaResponseWrapper
 
31
  account: AccountModel = Depends(PermissionDependency([AccountType.Admin, AccountType.User]))
32
  ) -> AccountWrapper:
33
  return AccountWrapper(data=account)
34
+
35
+
36
+ @account_router.post('')
37
+ async def create_account(
38
+ account_data: CreateAccountRequest,
39
+ _: AccountModel = Depends(PermissionDependency([AccountType.Admin]))
40
+ ) -> AccountWrapper:
41
+ account = await create_account_obj(account_data)
42
+ return AccountWrapper(data=account)
43
+
44
+ @account_router.delete('/{accountId}')
45
+ async def update_account(
46
+ accountId: str,
47
+ _: AccountModel = Depends(PermissionDependency([AccountType.Admin]))
48
+ ) -> TraumaResponseWrapper:
49
+ await delete_account(accountId)
50
+ return TraumaResponseWrapper()
trauma/api/security/db_requests.py CHANGED
@@ -1,23 +1,11 @@
1
- import asyncio
2
-
3
  from fastapi import HTTPException
4
 
5
  from trauma.api.account.model import AccountModel
6
- from trauma.api.common.db_requests import check_unique_fields_existence
7
- from trauma.api.security.schemas import RegisterAccountRequest, LoginAccountRequest
8
  from trauma.core.config import settings
9
  from trauma.core.security import verify_password
10
 
11
 
12
- async def save_account(data: RegisterAccountRequest) -> AccountModel:
13
- await check_unique_fields_existence("email", data.email)
14
- account = AccountModel(
15
- **data.model_dump()
16
- )
17
- await settings.DB_CLIENT.accounts.insert_one(account.to_mongo())
18
- return account
19
-
20
-
21
  async def authenticate_account(data: LoginAccountRequest) -> AccountModel:
22
  account = await settings.DB_CLIENT.accounts.find_one(
23
  {"email": data.email},
 
 
 
1
  from fastapi import HTTPException
2
 
3
  from trauma.api.account.model import AccountModel
4
+ from trauma.api.security.schemas import LoginAccountRequest
 
5
  from trauma.core.config import settings
6
  from trauma.core.security import verify_password
7
 
8
 
 
 
 
 
 
 
 
 
 
9
  async def authenticate_account(data: LoginAccountRequest) -> AccountModel:
10
  account = await settings.DB_CLIENT.accounts.find_one(
11
  {"email": data.email},
trauma/api/security/schemas.py CHANGED
@@ -5,15 +5,6 @@ from trauma.api.account.model import AccountModel
5
  from trauma.core.wrappers import TraumaResponseWrapper
6
 
7
 
8
- class RegisterAccountRequest(BaseModel):
9
- email: EmailStr
10
- password: str
11
-
12
-
13
- class RegisterAccountWrapper(TraumaResponseWrapper[AccountModel]):
14
- pass
15
-
16
-
17
  class LoginAccountRequest(BaseModel):
18
  email: EmailStr
19
  password: str
 
5
  from trauma.core.wrappers import TraumaResponseWrapper
6
 
7
 
 
 
 
 
 
 
 
 
 
8
  class LoginAccountRequest(BaseModel):
9
  email: EmailStr
10
  password: str
trauma/api/security/views.py CHANGED
@@ -1,20 +1,12 @@
1
  from trauma.api.account.dto import AccessToken
2
  from trauma.api.security import security_router
3
- from trauma.api.security.db_requests import authenticate_account, save_account
4
- from trauma.api.security.schemas import (RegisterAccountRequest,
5
- RegisterAccountWrapper,
6
- LoginAccountResponse,
7
  LoginAccountWrapper,
8
  LoginAccountRequest)
9
  from trauma.core.security import create_access_token
10
 
11
 
12
- @security_router.post('/register')
13
- async def register_user(data: RegisterAccountRequest) -> RegisterAccountWrapper:
14
- account = await save_account(data)
15
- return RegisterAccountWrapper(data=account)
16
-
17
-
18
  @security_router.post('/login')
19
  async def login(data: LoginAccountRequest) -> LoginAccountWrapper:
20
  account = await authenticate_account(data)
 
1
  from trauma.api.account.dto import AccessToken
2
  from trauma.api.security import security_router
3
+ from trauma.api.security.db_requests import authenticate_account
4
+ from trauma.api.security.schemas import (LoginAccountResponse,
 
 
5
  LoginAccountWrapper,
6
  LoginAccountRequest)
7
  from trauma.core.security import create_access_token
8
 
9
 
 
 
 
 
 
 
10
  @security_router.post('/login')
11
  async def login(data: LoginAccountRequest) -> LoginAccountWrapper:
12
  account = await authenticate_account(data)