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_all_tasks,
get_task_by_id, get_task_by_id,
get_tasks_by_driver, get_tasks_by_driver,
edit_task
) )
from schemas.drivetask import CreateTask from schemas.drivetask import CreateTask
from db.models.user import User from db.models.user import User
@@ -118,3 +119,21 @@ def getTasksByDriver(
status_code=404, detail=f"Driver with id {driver_id} not found" status_code=404, detail=f"Driver with id {driver_id} not found"
) )
return tasks 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 typing import List, Annotated
from apis.v1.route_auth import get_current_user from apis.v1.route_auth import get_current_user
from db.models.user import 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.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() router = APIRouter()
@@ -26,6 +26,16 @@ def create_user(
user = create_new_user(user=user, db=db) user = create_new_user(user=user, db=db)
return user 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) @router.get("/", response_model=List[ShowUser], status_code=status.HTTP_200_OK)
def get_all_users(db: Session = Depends(get_db), role: str = None): 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: if not user:
raise HTTPException(status_code=404, detail="User not found") raise HTTPException(status_code=404, detail="User not found")
return user 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): def get_all_tasks(db: Session):
tasks = db.query(DriveTask).all() tasks = db.query(DriveTask).all()
return tasks 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 # Creating a new user in the database
from sqlalchemy.orm import Session from sqlalchemy.orm import Session


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


@@ -22,10 +22,28 @@ def create_new_user(user: UserCreate, db: Session):
db.commit() db.commit()
db.refresh(user_object) db.refresh(user_object)
return 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() user = db.query(User).filter(User.Id == user_id).first()
if user.Role != role:
return False
return user return user






+ 8
- 3
app/schemas/user.py 查看文件

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


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


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


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


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


class Config: class Config:
orm_mode = True orm_mode = True
validate_assignment = True validate_assignment = True


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

正在加载...
取消
保存