After_Chido_Api/services/technical_issue_service.py

68 lines
2.7 KiB
Python

from sqlalchemy import insert, select, update, delete
from fastapi import HTTPException
from models.db import technical_issues_table
from models.schemas import TechnicalIssue, UpdateTechnicalIssue
class TechnicalIssueService:
@staticmethod
async def create_issue(issue: TechnicalIssue, db):
query = insert(technical_issues_table).values(
user_id=issue.user_id,
description=issue.description,
status=issue.status
)
try:
result = await db.execute(query)
await db.commit()
issue_id = result.inserted_primary_key[0]
return {"id": issue_id, **issue.dict()}
except Exception as e:
await db.rollback()
raise HTTPException(status_code=500, detail=f"Could not create issue: {str(e)}")
@staticmethod
async def get_issue(issue_id: int, db):
query = select(technical_issues_table).where(technical_issues_table.c.id == issue_id)
result = await db.execute(query)
issue = result.fetchone()
if not issue:
raise HTTPException(status_code=404, detail="Technical issue not found")
return dict(issue)
@staticmethod
async def get_all_issues(db):
query = select(technical_issues_table)
result = await db.execute(query)
return [dict(row) for row in result.fetchall()]
@staticmethod
async def update_issue(issue_id: int, issue_data: UpdateTechnicalIssue, db):
query = (
update(technical_issues_table)
.where(technical_issues_table.c.id == issue_id)
.values(**issue_data.dict(exclude_unset=True))
)
try:
result = await db.execute(query)
if result.rowcount == 0:
raise HTTPException(status_code=404, detail="Technical issue not found")
await db.commit()
return {"message": "Technical issue updated successfully"}
except Exception as e:
await db.rollback()
raise HTTPException(status_code=500, detail=f"Could not update issue: {str(e)}")
@staticmethod
async def delete_issue(issue_id: int, db):
query = delete(technical_issues_table).where(technical_issues_table.c.id == issue_id)
try:
result = await db.execute(query)
if result.rowcount == 0:
raise HTTPException(status_code=404, detail="Technical issue not found")
await db.commit()
return {"message": "Technical issue deleted successfully"}
except Exception as e:
await db.rollback()
raise HTTPException(status_code=500, detail=f"Could not delete issue: {str(e)}")