Spaces:
Sleeping
Sleeping
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)
|