Spaces:
Running
Running
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.
|
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
|
4 |
-
from trauma.api.security.schemas import (
|
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)
|