Add backend

This commit is contained in:
Sami Abuzakuk
2025-10-11 00:09:21 +02:00
parent 5e2a6bf213
commit aa67ffa704
2 changed files with 182 additions and 0 deletions

139
backend/backend.py Normal file
View File

@@ -0,0 +1,139 @@
from datetime import datetime
from fastapi import FastAPI
from fastapi.exceptions import HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from model import Log, SessionLocal, Script
import uvicorn
app = FastAPI()
# Update cors
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Define Pydantic models
class ScriptBase(BaseModel):
name: str
script_content: str
class ScriptCreate(ScriptBase):
pass
class ScriptResponse(ScriptBase):
id: int
created_at: datetime
model_config = {"from_attributes": True}
class ScriptLogCreate(BaseModel):
message: str
@app.get("/")
def hello():
return {"message": "Welcome to the Project Monitor API"}
@app.get("/script", response_model=list[ScriptResponse])
def read_scripts():
db = SessionLocal()
scripts = db.query(Script).all()
db.close()
return scripts
@app.post("/script", response_model=ScriptResponse)
def create_script(script: ScriptCreate):
db = SessionLocal()
new_script = Script(name=script.name, script_content=script.script_content)
db.add(new_script)
db.commit()
db.refresh(new_script)
db.close()
return new_script
@app.get("/script/{script_id}", response_model=ScriptResponse)
def read_script(script_id: int):
db = SessionLocal()
script = db.query(Script).filter(Script.id == script_id).first()
db.close()
if not script:
raise HTTPException(status_code=404, detail="Script not found")
return script
@app.delete("/script/{script_id}")
def delete_script(script_id: int):
db = SessionLocal()
script = db.query(Script).filter(Script.id == script_id).first()
if not script:
raise HTTPException(status_code=404, detail="Script not found")
db.delete(script)
db.commit()
db.close()
return {"message": "Script deleted"}
@app.put("/script/{script_id}", response_model=ScriptResponse)
def update_script(script_id: int, script: ScriptCreate):
db = SessionLocal()
existing_script = db.query(Script).filter(Script.id == script_id).first()
if not existing_script:
raise HTTPException(status_code=404, detail="Script not found")
existing_script.name = script.name
existing_script.script_content = script.script_content
db.commit()
db.refresh(existing_script)
db.close()
return existing_script
@app.get("/script/{script_id}/log")
def get_script_logs(script_id: int):
db = SessionLocal()
logs = db.query(Log).filter(Log.script_id == script_id).all()
db.close()
return logs
@app.post("/script/{script_id}/log")
def create_script_log(script_id: int, log: ScriptLogCreate):
db = SessionLocal()
new_log = Log(script_id=script_id, message=log.message)
db.add(new_log)
db.commit()
db.refresh(new_log)
db.close()
return new_log
@app.delete("/script/{script_id}/log/{log_id}")
def delete_script_log(script_id: int, log_id: int):
db = SessionLocal()
log = db.query(Log).filter(Log.id == log_id and Log.script_id == script_id).first()
if not log:
raise HTTPException(status_code=404, detail="Log not found")
db.delete(log)
db.commit()
db.close()
return {"message": "Log deleted"}
@app.get("/health")
def health_check():
return {"status": "healthy"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)