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)}")