fix: model, name

This commit is contained in:
TheNoxium 2025-06-03 13:01:10 +05:00
parent 31236d558f
commit c60d19262e
12 changed files with 59 additions and 114 deletions

View File

@ -13,9 +13,9 @@ from api.schemas.account.account import User
from api.schemas.endpoints.account import AllUserResponse, all_user_adapter
async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) -> Optional[User]:
async def get_user_accaunt_page(connection: AsyncConnection, page, limit) -> Optional[User]:
"""
Получает id и login всех юзеров
Получает список ползовелей заданных значениями page, limit.
"""
first_user = page*limit-(limit)
@ -39,22 +39,11 @@ async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) -
result = await connection.execute(query)
count_result = await connection.execute(count_query)
users_data = result.fetchall()
users_data = result.mappings().all()
total_count = count_result.scalar()
total_pages = math.ceil(total_count / limit)
print(users_data)
validated_users = all_user_adapter.validate_python(
[{"id": u.id,
"name": u.name,
"login": u.login,
"email": u.email,
"bind_tenant_id": u.bind_tenant_id,
"role": u.role.name,
"created_at": u.created_at,
"status": u.status.name} for u in users_data]
)
validated_users = all_user_adapter.validate_python(users_data)
return AllUserResponse(
users=validated_users,

View File

@ -8,16 +8,16 @@ from api.db import metadata
class AccountRole(str,Enum):
OWNER = auto()
ADMIN = auto()
EDITOR = auto()
VIEWER = auto()
OWNER = 'OWNER'
ADMIN = 'ADMIN'
EDITOR = 'EDITOR'
VIEWER = 'VIEWER'
class AccountStatus(str,Enum):
ACTIVE = auto()
DISABLED = auto()
BLOCKED = auto()
DELETED = auto()
ACTIVE = 'ACTIVE'
DISABLED = 'DISABLED'
BLOCKED = 'BLOCKED'
DELETED = 'DELETED'
account_table = Table(
@ -38,15 +38,15 @@ account_table = Table(
)
class KeyType(str,Enum):
PASSWORD = auto()
ACCESS_TOKEN = auto()
REFRESH_TOKEN = auto()
API_KEY = auto()
PASSWORD = "PASSWORD"
ACCESS_TOKEN = "ACCESS_TOKEN"
REFRESH_TOKEN = "REFRESH_TOKEN"
API_KEY = "API_KEY"
class KeyStatus(str,Enum):
ACTIVE = auto()
EXPIRED = auto()
DELETED = auto()
ACTIVE = "ACTIVE"
EXPIRED = "EXPIRED"
DELETED = "DELETED"
account_keyring_table = Table(
'account_keyring', metadata,

View File

@ -11,9 +11,10 @@ from sqlalchemy.ext.asyncio import AsyncConnection
from api.db.connection.session import get_connection_dep
from api.db.logic.account import get_user_id, update_user_id, create_user,get_user_login,get_all_users_login_and_id
from api.db.logic.account import get_user_id, update_user_id, create_user,get_user_login,get_user_accaunt_page
from api.schemas.account.account import User,Status
from api.schemas.account.account import User
from api.db.tables.account import AccountStatus
from api.schemas.endpoints.account import UserUpdate,AllUserResponse
@ -41,7 +42,7 @@ async def get_all_account(
current_user = request.state.current_user
authorize_user = await db_user_role_validation(connection, current_user)
user_list = await get_all_users_login_and_id(connection,page,limit)
user_list = await get_user_accaunt_page(connection,page,limit)
if user_list is None:
raise HTTPException(
@ -146,7 +147,7 @@ async def delete_account(
detail="Account not found")
user_update = UserUpdate(status=Status.DELETED.value)
user_update = UserUpdate(status=AccountStatus.DELETED.value)
update_values = update_user_data_changes(user_update,user)

View File

@ -2,9 +2,7 @@ from datetime import datetime, timedelta, timezone
from fastapi import (
APIRouter,
Body,
Depends,
Form,
HTTPException,
Request,
Response,

View File

@ -17,7 +17,8 @@ from api.db.connection.session import get_connection_dep
from api.db.logic.keyring import get_key_id,create_key,update_key_id
from api.schemas.account.account import Status
from api.db.tables.account import KeyStatus
from api.schemas.endpoints.account_keyring import AccountKeyringUpdate
from api.schemas.account.account_keyring import AccountKeyring
@ -135,7 +136,7 @@ async def delete_keyring(
detail="keyring not found")
keyring_update = AccountKeyringUpdate(status=Status.DELETED.value)
keyring_update = AccountKeyringUpdate(status=KeyStatus.DELETED.value)
update_values = update_key_data_changes(keyring_update,keyring)

View File

@ -1,22 +1,9 @@
import datetime
from enum import Enum
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, EmailStr, Field
from api.db.tables.account import AccountRole,AccountStatus
# Модель для хранения информации из запроса
class Role(Enum):
OWNER = 'OWNER'
ADMIN = 'ADMIN'
EDITOR = 'EDITOR'
VIEWER = 'VIEWER'
class Status(Enum):
ACTIVE = 'ACTIVE'
DISABLED = 'DISABLED'
BLOCKED = 'BLOCKED'
DELETED = 'DELETED'
class User(BaseModel):
id: Optional[int] = None
@ -24,8 +11,8 @@ class User(BaseModel):
login: str = Field(..., max_length=100)
email: Optional[EmailStr] = Field(None, max_length=100) # Электронная почта (может быть None)
bind_tenant_id: Optional[str] = Field(None, max_length=40)
role: Role
role: AccountRole
meta: dict
creator_id: Optional[int] = None
created_at: datetime
status: Status
status: AccountStatus

View File

@ -1,28 +1,15 @@
import datetime
from enum import Enum
from typing import Optional, Dict
from typing import Optional
from pydantic import BaseModel, Field
from datetime import datetime
# Модель для хранения информации из запроса
class TypeKey(Enum):
PASSWORD = "PASSWORD"
ACCESS_TOKEN = "ACCESS_TOKEN"
REFRESH_TOKEN = "REFRESH_TOKEN"
API_KEY = "API_KEY"
class StatusKey(Enum):
ACTIVE = "ACTIVE"
EXPIRED = "EXPIRED"
DELETED = "DELETED"
from api.db.tables.account import KeyType,KeyStatus
class AccountKeyring(BaseModel):
owner_id: int
key_type: TypeKey # Используем тот же KeyType
key_id: Optional[str] = Field(None, max_length=40) # Изменено на None как default
key_type: KeyType
key_id: Optional[str] = Field(None, max_length=40)
key_value: str = Field(..., max_length=255)
created_at: datetime
expiry: Optional[datetime] = None
status: StatusKey
status: KeyStatus

View File

@ -1,21 +1,10 @@
from enum import Enum
from typing import Optional, List
from datetime import datetime
from pydantic import BaseModel, EmailStr, Field, TypeAdapter
# Таблица для получения информации из запроса
from api.db.tables.account import AccountRole,AccountStatus
class Role(Enum):
OWNER = 'OWNER'
ADMIN = 'ADMIN'
EDITOR = 'EDITOR'
VIEWER = 'VIEWER'
class Status(Enum):
ACTIVE = 'ACTIVE'
DISABLED = 'DISABLED'
BLOCKED = 'BLOCKED'
DELETED = 'DELETED'
class UserUpdate(BaseModel):
id: Optional[int] = None
@ -23,21 +12,21 @@ class UserUpdate(BaseModel):
login: Optional[str] = Field(None, max_length=100)
email: Optional[EmailStr] = None
bind_tenant_id: Optional[str] = Field(None, max_length=40)
role: Optional[Role] = None
role: Optional[AccountRole] = None
meta: Optional[dict] = None
creator_id: Optional[int] = None
created_at: Optional[datetime] = None
status: Optional[Status] = None
status: Optional[AccountStatus] = None
class AllUser(BaseModel):
id: int
name: str
login: str
email: EmailStr
bind_tenant_id: str
role: Role
email: Optional[EmailStr] = None
bind_tenant_id: Optional[str] = None
role: AccountRole
created_at: datetime
status: Status
status: AccountStatus
class AllUserResponse(BaseModel):

View File

@ -1,28 +1,15 @@
import datetime
from enum import Enum
from typing import Optional
from pydantic import BaseModel, Field
from datetime import datetime
# Таблица для получения информации из запроса
class TypeKey(Enum):
PASSWORD = "PASSWORD"
ACCESS_TOKEN = "ACCESS_TOKEN"
REFRESH_TOKEN = "REFRESH_TOKEN"
API_KEY = "API_KEY"
class StatusKey(Enum):
ACTIVE = "ACTIVE"
EXPIRED = "EXPIRED"
DELETED = "DELETED"
from api.db.tables.account import KeyType,KeyStatus
class AccountKeyringUpdate(BaseModel):
owner_id: Optional[int] = None
key_type: Optional[TypeKey] = None
key_type: Optional[KeyType] = None
key_id: Optional[str] = Field(None, max_length=40)
key_value: Optional[str] = Field(None, max_length=255)
created_at: Optional[datetime] = None
expiry: Optional[datetime] = None
status: Optional[StatusKey] = None
status: Optional[KeyStatus] = None

View File

@ -2,7 +2,9 @@ from typing import Optional
from sqlalchemy.ext.asyncio import AsyncConnection
from api.db.logic.auth import get_user
# # from backend.schemas.users.token import TokenData
from api.schemas.account.account import User,Status
from api.schemas.account.account import User
from api.db.tables.account import AccountStatus
from api.utils.hasher import Hasher
@ -14,7 +16,7 @@ async def authenticate_user(
sql_user,sql_password = await get_user(connection, username)
if not sql_user or sql_user.status != Status.ACTIVE :
if not sql_user or sql_user.status != AccountStatus.ACTIVE :
return None
hasher = Hasher()
if not hasher.verify_data(password, sql_password.key_value):

View File

@ -1,7 +1,9 @@
from enum import Enum
from typing import Optional
from api.schemas.endpoints.account import UserUpdate, Role, Status
from api.schemas.endpoints.account_keyring import AccountKeyringUpdate, StatusKey, TypeKey
from api.schemas.endpoints.account import UserUpdate
from api.db.tables.account import KeyType,KeyStatus
from api.schemas.endpoints.account_keyring import AccountKeyringUpdate
from api.db.tables.account import AccountRole,AccountStatus
def update_user_data_changes(update_data: UserUpdate, user) -> Optional[dict]:
"""
@ -17,7 +19,7 @@ def update_user_data_changes(update_data: UserUpdate, user) -> Optional[dict]:
if value is None:
continue
if isinstance(value, (Role, Status)):
if isinstance(value, (AccountRole, AccountStatus)):
update_values[field] = value.value
else:
update_values[field] = value
@ -50,7 +52,7 @@ def update_key_data_changes(update_data: AccountKeyringUpdate, key) -> Optional[
if value is None:
continue
if isinstance(value, (TypeKey, StatusKey)):
if isinstance(value, (KeyType, KeyStatus)):
update_values[field] = value.value
else:
update_values[field] = value

View File

@ -3,12 +3,14 @@ from fastapi import (
status,
)
from api.db.logic.account import get_user_login
from api.schemas.account.account import Role,Status
from api.db.tables.account import AccountRole
async def db_user_role_validation(connection, current_user):
authorize_user = await get_user_login(connection, current_user)
if authorize_user.role not in {Role.OWNER, Role.ADMIN}:
if authorize_user.role not in {AccountRole.OWNER, AccountRole.ADMIN}:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="You do not have enough permissions")