Saruar преди 1 година
родител
ревизия
1de543d925
променени са 5 файла, в които са добавени 81 реда и са изтрити 8 реда
  1. +19
    -0
      app/apis/v1/route_task.py
  2. +22
    -2
      app/apis/v1/route_user.py
  3. +11
    -0
      app/db/repository/drivetask.py
  4. +21
    -3
      app/db/repository/user.py
  5. +8
    -3
      app/schemas/user.py

+ 19
- 0
app/apis/v1/route_task.py Целия файл

@@ -9,6 +9,7 @@ from db.repository.drivetask import (
get_all_tasks,
get_task_by_id,
get_tasks_by_driver,
edit_task
)
from schemas.drivetask import CreateTask
from db.models.user import User
@@ -118,3 +119,21 @@ def getTasksByDriver(
status_code=404, detail=f"Driver with id {driver_id} not found"
)
return tasks

@router.put("/{task_id}", status_code=status.HTTP_200_OK)
def updateTask(
task_id: int,
task: CreateTask,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
):
if current_user.Role != "Admin":
raise HTTPException(
status_code=403, detail="You are not authorized to perform this action"
)
task = edit_task(task_id, task, db)
if task == "notaskfound":
raise HTTPException(
status_code=404, detail=f"Task with id {task_id} not found"
)
return task

+ 22
- 2
app/apis/v1/route_user.py Целия файл

@@ -5,9 +5,9 @@ from fastapi import Depends
from typing import List, Annotated
from apis.v1.route_auth import get_current_user
from db.models.user import User
from schemas.user import UserCreate, ShowUser
from schemas.user import UserCreate, ShowUser, ShowDriver, DriverCreate
from db.session import get_db
from db.repository.user import create_new_user, list_users, get_user_by_id, replace_user_data
from db.repository.user import create_new_user, list_users, get_user_by_id, replace_user_data, create_new_driver


router = APIRouter()
@@ -26,6 +26,16 @@ def create_user(
user = create_new_user(user=user, db=db)
return user

@router.post("/driver", response_model=ShowDriver, status_code=status.HTTP_201_CREATED)
def create_driver(
driver: DriverCreate,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
):
if (current_user.Role != "Admin"):
raise HTTPException(status_code=403, detail="You are not authorized to perform this action")
driver = create_new_driver(driver=driver, db=db)
return driver

@router.get("/", response_model=List[ShowUser], status_code=status.HTTP_200_OK)
def get_all_users(db: Session = Depends(get_db), role: str = None):
@@ -63,3 +73,13 @@ def get_user(user_id: int, db: Session = Depends(get_db)):
if not user:
raise HTTPException(status_code=404, detail="User not found")
return user


@router.get("/driver/{driver_id}", response_model=ShowDriver, status_code=status.HTTP_200_OK)
def get_driver(driver_id: int, db: Session = Depends(get_db)):
driver = get_user_by_id(user_id=driver_id, role = "Driver", db=db)
res = driver.__dict__
res["AssignedVehicle"] = driver.vehicle
if not driver:
raise HTTPException(status_code=404, detail="Driver not found")
return driver

+ 11
- 0
app/db/repository/drivetask.py Целия файл

@@ -64,3 +64,14 @@ def get_task_by_id(task_id: int, db: Session):
def get_all_tasks(db: Session):
tasks = db.query(DriveTask).all()
return tasks

def edit_task(task_id: int, task: CreateTask, db: Session):
tasks = db.query(DriveTask).filter(DriveTask.Id == task_id).first()
if not tasks:
return "notaskfound"
tasks.Description = task.Description
tasks.StartLocation = task.StartLocation
tasks.EndLocation = task.EndLocation
db.commit()
db.refresh(tasks)
return tasks

+ 21
- 3
app/db/repository/user.py Целия файл

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

from schemas.user import UserCreate
from schemas.user import UserCreate, DriverCreate
from db.models.user import User
from core.hashing import Hasher

@@ -22,10 +22,28 @@ def create_new_user(user: UserCreate, db: Session):
db.commit()
db.refresh(user_object)
return user_object
def create_new_driver(driver: DriverCreate, db: Session):
driver_object = User(
Email=driver.Email,
Name=driver.Name,
MiddleName=driver.MiddleName,
LastName=driver.LastName,
GovernmentId=driver.GovernmentId,
Address=driver.Address,
ContactNumber=driver.ContactNumber,
Role="Driver",
HashedPassword=Hasher.get_password_hash(driver.Password),
DrivingLicenseNumber=driver.DrivingLicenseNumber
)
db.add(driver_object)
db.commit()
db.refresh(driver_object)
return driver_object


def get_user_by_id(user_id: int, db: Session):
def get_user_by_id(user_id: int, role: str, db: Session):
user = db.query(User).filter(User.Id == user_id).first()
if user.Role != role:
return False
return user




+ 8
- 3
app/schemas/user.py Целия файл

@@ -1,7 +1,7 @@
# Purpose: User schema for pydantic (validation, inside-api usage)

from pydantic import BaseModel, EmailStr, Field
from schemas.vehicle import OutputVehicle

class UserCreate(BaseModel):
Email: EmailStr
@@ -13,8 +13,10 @@ class UserCreate(BaseModel):
GovernmentId: str = Field(...)
Address: str = Field(...)
Email: EmailStr = Field(...)
Role: str = Field(..., min_length=3, max_length=50)

class DriverCreate(UserCreate):
DrivingLicenseNumber: str = Field(...)

class ShowUser(BaseModel):
Id: int
@@ -26,9 +28,12 @@ class ShowUser(BaseModel):
Address: str
Email: EmailStr
Role: str
AssignedVehicle: int | None

class Config:
orm_mode = True
validate_assignment = True

class ShowDriver(ShowUser):
DrivingLicenseNumber: str | None
AssignedVehicle: OutputVehicle | None

Зареждане…
Отказ
Запис