Ver código fonte

some slight refactoring

main
Madiwka3 1 ano atrás
pai
commit
89cbdce1d2
3 arquivos alterados com 58 adições e 28 exclusões
  1. +18
    -25
      app/apis/v1/route_user.py
  2. +35
    -2
      app/db/repository/user.py
  3. +5
    -1
      app/schemas/user.py

+ 18
- 25
app/apis/v1/route_user.py Ver arquivo

@@ -8,7 +8,14 @@ from typing import List, Annotated
from apis.v1.route_auth import get_current_user
from core.config import settings
from db.models.user import User
from schemas.user import UserCreate, ShowUser, ShowDriver, DriverCreate, OutputUser, UsersPage
from schemas.user import (
UserCreate,
ShowUser,
ShowDriver,
DriverCreate,
OutputUser,
UsersPage,
)
from db.session import get_db
from db.repository.user import (
create_new_user,
@@ -17,11 +24,11 @@ from db.repository.user import (
replace_user_data,
create_new_driver,
delete_user_data,
get_users_by_name
get_users_by_name,
user_search_query,
)



router = APIRouter()


@@ -133,25 +140,11 @@ def delete_user(


@router.get("/search/", response_model=UsersPage)
def search_users(db: Session = Depends(get_db), name: str = None, role: str = None, page: int = 1, per_page: int = 20):
query = db.query(User).filter(User.Name.like(f"{name}%"))
if role is not None and role != "Admin":
query = query.filter(User.Role == role)
total_users = query.count()
total_pages = ceil(total_users / per_page)
users = query.offset((page - 1) * per_page).limit(per_page).all()

output_users = [OutputUser(
id= user.Id,
Name=user.Name,
MiddleName = user.MiddleName,
LastName=user.LastName,
ContactNumber=user.ContactNumber,
Address=user.Address,
Email=user.Email,
Role=user.Role,
AssignedVehicle= None
) for user in users]


return {"users": output_users, "total_pages": total_pages}
def search_users(
db: Session = Depends(get_db),
name: str = None,
role: str = None,
page: int = 1,
per_page: int = 20,
):
return user_search_query(db=db, name=name, role=role, page=page, per_page=per_page)

+ 35
- 2
app/db/repository/user.py Ver arquivo

@@ -1,7 +1,8 @@
# Creating a new user in the database
from math import ceil
from sqlalchemy.orm import Session

from schemas.user import UserCreate, DriverCreate
from schemas.user import OutputUser, UserCreate, DriverCreate
from db.models.user import User
from core.hashing import Hasher
from db.models.drivetask import DriveTask
@@ -83,7 +84,10 @@ def list_users(db: Session, role: str = "Any"):
users = db.query(User).filter((User.Role == role) | (role == "Any")).all()
return users

def get_users_by_name(db: Session, name: str = "", role: str = None, page: int = 1, per_page: int = 20):

def get_users_by_name(
db: Session, name: str = "", role: str = None, page: int = 1, per_page: int = 20
):
if role == "Admin":
return None
if role is None:
@@ -93,6 +97,7 @@ def get_users_by_name(db: Session, name: str = "", role: str = None, page: int =
users = users.offset((page - 1) * per_page).limit(per_page).all()
return users


def replace_user_data(user_id: int, user_data: UserCreate, db: Session):
user = db.query(User).filter(User.Id == user_id).first()
if not user:
@@ -121,3 +126,31 @@ def delete_user_data(id: int, db: Session):
db.delete(user)
db.commit()
return "userDeleted"


def user_search_query(
db: Session, name: str = "", role: str = None, page: int = 1, per_page: int = 20
):
query = db.query(User).filter(User.Name.like(f"{name}%"))
if role is not None and role != "Admin":
query = query.filter(User.Role == role)
total_users = query.count()
total_pages = ceil(total_users / per_page)
users = query.offset((page - 1) * per_page).limit(per_page).all()

output_users = [
OutputUser(
id=user.Id,
Name=user.Name,
MiddleName=user.MiddleName,
LastName=user.LastName,
ContactNumber=user.ContactNumber,
Address=user.Address,
Email=user.Email,
Role=user.Role,
AssignedVehicle=None,
)
for user in users
]

return {"users": output_users, "total_pages": total_pages}

+ 5
- 1
app/schemas/user.py Ver arquivo

@@ -46,15 +46,19 @@ class OutputUser(BaseModel):
Address: str
Email: EmailStr
Role: str
AssignedVehicle: Optional[str] # replace str with the actual type of AssignedVehicle
AssignedVehicle: Optional[
str
] # replace str with the actual type of AssignedVehicle

class Config:
orm_mode = True


class UsersPage(BaseModel):
users: List[OutputUser]
total_pages: int


class ShowDriverNoVehicle(ShowUser):
DrivingLicenseNumber: str | None



Carregando…
Cancelar
Salvar