feat(repairs): add repair documents
This commit is contained in:
parent
884a20e043
commit
6e7e75f864
21 changed files with 1222 additions and 6 deletions
|
|
@ -3,8 +3,8 @@ from datetime import UTC, datetime
|
|||
from sqlalchemy import Select, func, or_, select
|
||||
from sqlalchemy.orm import Session, selectinload
|
||||
|
||||
from app.models.repair import Repair, RepairIntakeEvent, RepairNotificationEvent, RepairPublicAccessToken, RepairStatusHistory
|
||||
from app.schemas.repair import RepairCreate, RepairStatusUpdate, RepairUpdate
|
||||
from app.models.repair import Repair, RepairDocument, RepairIntakeEvent, RepairNotificationEvent, RepairPublicAccessToken, RepairStatusHistory
|
||||
from app.schemas.repair import RepairCreate, RepairDocumentUpdate, RepairStatusUpdate, RepairUpdate
|
||||
|
||||
|
||||
class RepairRepository:
|
||||
|
|
@ -362,6 +362,77 @@ class RepairRepository:
|
|||
.where((Repair.customer_email == "") | Repair.customer_email.is_(None))
|
||||
) or 0
|
||||
|
||||
@staticmethod
|
||||
def list_documents(db: Session, repair_id: int) -> list[RepairDocument]:
|
||||
return list(
|
||||
db.scalars(
|
||||
select(RepairDocument)
|
||||
.where(RepairDocument.repair_id == repair_id)
|
||||
.order_by(RepairDocument.created_at.desc(), RepairDocument.id.desc())
|
||||
)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def get_document(db: Session, *, repair_id: int, document_id: int) -> RepairDocument | None:
|
||||
return db.scalar(
|
||||
select(RepairDocument)
|
||||
.where(RepairDocument.repair_id == repair_id)
|
||||
.where(RepairDocument.id == document_id)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def create_document(
|
||||
db: Session,
|
||||
*,
|
||||
repair_id: int,
|
||||
title: str,
|
||||
document_type: str,
|
||||
original_filename: str,
|
||||
stored_filename: str,
|
||||
storage_path: str,
|
||||
mime_type: str,
|
||||
size_bytes: int,
|
||||
checksum_sha256: str,
|
||||
visibility: str,
|
||||
note: str | None,
|
||||
uploaded_by_user_id: int | None,
|
||||
) -> RepairDocument:
|
||||
document = RepairDocument(
|
||||
repair_id=repair_id,
|
||||
title=title,
|
||||
document_type=document_type,
|
||||
original_filename=original_filename,
|
||||
stored_filename=stored_filename,
|
||||
storage_path=storage_path,
|
||||
mime_type=mime_type,
|
||||
size_bytes=size_bytes,
|
||||
checksum_sha256=checksum_sha256,
|
||||
visibility=visibility,
|
||||
note=note,
|
||||
uploaded_by_user_id=uploaded_by_user_id,
|
||||
)
|
||||
db.add(document)
|
||||
db.commit()
|
||||
db.refresh(document)
|
||||
return RepairRepository.get_document(db, repair_id=repair_id, document_id=document.id) or document
|
||||
|
||||
@staticmethod
|
||||
def update_document(db: Session, document: RepairDocument, payload: RepairDocumentUpdate) -> RepairDocument:
|
||||
for key, value in payload.model_dump().items():
|
||||
setattr(document, key, value)
|
||||
db.commit()
|
||||
db.refresh(document)
|
||||
return RepairRepository.get_document(db, repair_id=document.repair_id, document_id=document.id) or document
|
||||
|
||||
@staticmethod
|
||||
def delete_document(db: Session, document: RepairDocument) -> None:
|
||||
db.delete(document)
|
||||
db.commit()
|
||||
|
||||
@staticmethod
|
||||
def count_documents(db: Session) -> int:
|
||||
return db.scalar(select(func.count(RepairDocument.id))) or 0
|
||||
|
||||
@staticmethod
|
||||
def _payload_data(payload: RepairCreate | RepairUpdate) -> dict:
|
||||
data = payload.model_dump()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue