feat:dto accaunt endpoint, dto list events endpoint
This commit is contained in:
@@ -1,15 +1,12 @@
|
||||
from fastapi import (
|
||||
APIRouter,
|
||||
Depends,
|
||||
HTTPException,
|
||||
status,
|
||||
)
|
||||
from fastapi import APIRouter, Depends, HTTPException, status, Query
|
||||
|
||||
from typing import Optional, List
|
||||
from sqlalchemy.ext.asyncio import AsyncConnection
|
||||
|
||||
from api.db.connection.session import get_connection_dep
|
||||
from api.db.logic.account import (
|
||||
create_user,
|
||||
get_user_accaunt_page,
|
||||
get_user_account_page_DTO,
|
||||
get_user_by_id,
|
||||
get_user_by_login,
|
||||
update_user_by_id,
|
||||
@@ -18,7 +15,7 @@ from api.db.logic.keyring import create_password_key, update_password_key
|
||||
from api.db.tables.account import AccountStatus
|
||||
from api.schemas.account.account import User
|
||||
from api.schemas.base import bearer_schema
|
||||
from api.schemas.endpoints.account import AllUser, AllUserResponse, UserCreate, UserUpdate
|
||||
from api.schemas.endpoints.account import AllUserResponse, UserCreate, UserUpdate, UserFilterDTO
|
||||
from api.services.auth import get_current_user
|
||||
from api.services.user_role_validation import db_user_role_validation
|
||||
|
||||
@@ -30,14 +27,33 @@ api_router = APIRouter(
|
||||
|
||||
@api_router.get("", dependencies=[Depends(bearer_schema)], response_model=AllUserResponse)
|
||||
async def get_all_account(
|
||||
page: int = 1,
|
||||
limit: int = 10,
|
||||
page: int = Query(1, description="Page number", gt=0),
|
||||
limit: int = Query(10, description="КNumber of items per page", gt=0),
|
||||
search: Optional[str] = Query(None, description="Search term to filter by name or login or email"),
|
||||
status_filter: Optional[List[str]] = Query(None, description="Filter by status"),
|
||||
role_filter: Optional[List[str]] = Query(None, description="Filter by role"),
|
||||
creator_id: Optional[int] = Query(None, description="Filter by creator id"),
|
||||
order_field: Optional[str] = Query("id", description="Field to sort by"),
|
||||
order_direction: Optional[str] = Query("asc", description="Sort direction (asc/desc)"),
|
||||
connection: AsyncConnection = Depends(get_connection_dep),
|
||||
current_user=Depends(get_current_user),
|
||||
):
|
||||
authorize_user = await db_user_role_validation(connection, current_user)
|
||||
|
||||
user_list = await get_user_accaunt_page(connection, page, limit)
|
||||
filters = {
|
||||
**({"status": status_filter} if status_filter else {}),
|
||||
**({"role": role_filter} if role_filter else {}),
|
||||
**({"creator_id": [str(creator_id)]} if creator_id else {}),
|
||||
}
|
||||
|
||||
filter_dto = UserFilterDTO(
|
||||
pagination={"page": page, "limit": limit},
|
||||
search=search,
|
||||
order={"field": order_field, "direction": order_direction},
|
||||
filters=filters if filters else None,
|
||||
)
|
||||
|
||||
user_list = await get_user_account_page_DTO(connection, filter_dto)
|
||||
|
||||
if user_list is None:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Accounts not found")
|
||||
@@ -45,7 +61,7 @@ async def get_all_account(
|
||||
return user_list
|
||||
|
||||
|
||||
@api_router.get("/{user_id}", dependencies=[Depends(bearer_schema)], response_model=UserUpdate)
|
||||
@api_router.get("/{user_id}", dependencies=[Depends(bearer_schema)], response_model=User)
|
||||
async def get_account(
|
||||
user_id: int,
|
||||
connection: AsyncConnection = Depends(get_connection_dep),
|
||||
@@ -61,7 +77,7 @@ async def get_account(
|
||||
return user
|
||||
|
||||
|
||||
@api_router.post("", dependencies=[Depends(bearer_schema)], response_model=AllUser)
|
||||
@api_router.post("", dependencies=[Depends(bearer_schema)], response_model=User)
|
||||
async def create_account(
|
||||
user: UserCreate,
|
||||
connection: AsyncConnection = Depends(get_connection_dep),
|
||||
|
@@ -1,10 +1,6 @@
|
||||
from fastapi import (
|
||||
APIRouter,
|
||||
Depends,
|
||||
HTTPException,
|
||||
status,
|
||||
)
|
||||
from fastapi import APIRouter, Depends, HTTPException, status, Query
|
||||
|
||||
from typing import Optional, List
|
||||
|
||||
from sqlalchemy.ext.asyncio import AsyncConnection
|
||||
|
||||
@@ -17,8 +13,7 @@ from api.db.logic.listevents import (
|
||||
get_listevents_by_id,
|
||||
create_listevents,
|
||||
update_listevents_by_id,
|
||||
get_listevents_page,
|
||||
get_listevents_page_by_creator_id,
|
||||
get_listevents_page_DTO,
|
||||
)
|
||||
|
||||
|
||||
@@ -27,7 +22,7 @@ from api.db.tables.events import EventStatus
|
||||
|
||||
from api.schemas.base import bearer_schema
|
||||
|
||||
from api.schemas.endpoints.list_events import ListEventUpdate, AllListEventResponse
|
||||
from api.schemas.endpoints.list_events import ListEventUpdate, AllListEventResponse, ListEventFilterDTO
|
||||
|
||||
from api.services.auth import get_current_user
|
||||
|
||||
@@ -37,7 +32,6 @@ from api.services.user_role_validation import (
|
||||
)
|
||||
|
||||
|
||||
|
||||
api_router = APIRouter(
|
||||
prefix="/listevents",
|
||||
tags=["list events"],
|
||||
@@ -46,27 +40,43 @@ api_router = APIRouter(
|
||||
|
||||
@api_router.get("", dependencies=[Depends(bearer_schema)], response_model=AllListEventResponse)
|
||||
async def get_all_list_events(
|
||||
page: int = 1,
|
||||
limit: int = 10,
|
||||
page: int = Query(1, description="Page number", gt=0),
|
||||
limit: int = Query(10, description="Number of items per page", gt=0),
|
||||
search: Optional[str] = Query(None, description="Search term to filter by title or name"),
|
||||
order_field: Optional[str] = Query("id", description="Field to sort by"),
|
||||
order_direction: Optional[str] = Query("asc", description="Sort direction (asc/desc)"),
|
||||
status_filter: Optional[List[str]] = Query(None, description="Filter by status"),
|
||||
state_filter: Optional[List[str]] = Query(None, description="Filter by state"),
|
||||
creator_id: Optional[int] = Query(None, description="Filter by creator id"),
|
||||
connection: AsyncConnection = Depends(get_connection_dep),
|
||||
current_user=Depends(get_current_user),
|
||||
):
|
||||
filters = {
|
||||
**({"status": status_filter} if status_filter else {}),
|
||||
**({"creator_id": [str(creator_id)]} if creator_id else {}),
|
||||
**({"state": state_filter} if state_filter else {}),
|
||||
}
|
||||
|
||||
filter_dto = ListEventFilterDTO(
|
||||
pagination={"page": page, "limit": limit},
|
||||
search=search,
|
||||
order={"field": order_field, "direction": order_direction},
|
||||
filters=filters if filters else None,
|
||||
)
|
||||
|
||||
authorize_user, page_flag = await db_user_role_validation_for_listevents_and_processschema(connection, current_user)
|
||||
|
||||
if page_flag:
|
||||
list_events_page = await get_listevents_page(connection, page, limit)
|
||||
if not page_flag:
|
||||
if filter_dto.filters is None:
|
||||
filter_dto.filters = {}
|
||||
filter_dto.filters["creator_id"] = [str(authorize_user.id)]
|
||||
|
||||
if list_events_page is None:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="List events not found")
|
||||
list_events_page = await get_listevents_page_DTO(connection, filter_dto)
|
||||
|
||||
return list_events_page
|
||||
else:
|
||||
list_events_page = await get_listevents_page_by_creator_id(connection, authorize_user.id, page, limit)
|
||||
if list_events_page is None:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="List events not found")
|
||||
|
||||
if list_events_page is None:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="List events not found")
|
||||
|
||||
return list_events_page
|
||||
return list_events_page
|
||||
|
||||
|
||||
@api_router.get("/{listevents_id}", dependencies=[Depends(bearer_schema)], response_model=ListEvent)
|
||||
|
@@ -1,10 +1,4 @@
|
||||
from fastapi import (
|
||||
APIRouter,
|
||||
Depends,
|
||||
HTTPException,
|
||||
status,
|
||||
Query
|
||||
)
|
||||
from fastapi import APIRouter, Depends, HTTPException, status, Query
|
||||
|
||||
from typing import Optional, Dict, Any, List
|
||||
from sqlalchemy.ext.asyncio import AsyncConnection
|
||||
@@ -18,7 +12,7 @@ from api.db.logic.processschema import (
|
||||
create_process_schema,
|
||||
get_process_schema_by_id,
|
||||
update_process_schema_by_id,
|
||||
get_process_schema_page,
|
||||
get_process_schema_page_DTO,
|
||||
)
|
||||
|
||||
from api.schemas.process.process_schema import ProcessSchema
|
||||
@@ -51,12 +45,11 @@ async def get_all_process_schema(
|
||||
order_field: Optional[str] = Query("id", description="Field to sort by"),
|
||||
order_direction: Optional[str] = Query("asc", description="Sort direction (asc/desc)"),
|
||||
status_filter: Optional[List[str]] = Query(None, description="Filter by status"),
|
||||
owner_id: Optional[List[str]] = Query(None, description="Filter by owner ID"),
|
||||
owner_id: Optional[List[str]] = Query(None, description="Filter by owner id"),
|
||||
connection: AsyncConnection = Depends(get_connection_dep),
|
||||
creator_id: Optional[int] = Query(None, description="Filter by creator ID"),
|
||||
creator_id: Optional[int] = Query(None, description="Filter by creator id"),
|
||||
current_user=Depends(get_current_user),
|
||||
):
|
||||
|
||||
filters = {
|
||||
**({"status": status_filter} if status_filter else {}),
|
||||
**({"owner_id": owner_id} if owner_id else {}),
|
||||
@@ -67,7 +60,7 @@ async def get_all_process_schema(
|
||||
pagination={"page": page, "limit": limit},
|
||||
search=search,
|
||||
order={"field": order_field, "direction": order_direction},
|
||||
filters=filters if filters else None
|
||||
filters=filters if filters else None,
|
||||
)
|
||||
|
||||
authorize_user, page_flag = await db_user_role_validation_for_listevents_and_processschema(connection, current_user)
|
||||
@@ -77,13 +70,10 @@ async def get_all_process_schema(
|
||||
filter_dto.filters = {}
|
||||
filter_dto.filters["creator_id"] = [str(authorize_user.id)]
|
||||
|
||||
process_schema_page = await get_process_schema_page(connection, filter_dto)
|
||||
process_schema_page = await get_process_schema_page_DTO(connection, filter_dto)
|
||||
|
||||
if process_schema_page is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Process schema not found"
|
||||
)
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Process schema not found")
|
||||
|
||||
return process_schema_page
|
||||
|
||||
|
Reference in New Issue
Block a user