editify-backend / crud.py
Nisha56's picture
Add PostgreSQL authentication and UI improvements
6dd7eae
Raw
History Blame Contribute Delete
2.79 kB
from sqlalchemy.orm import Session
from models import Project, User
def create_project(db: Session, filename: str, file_id: str, upload_path: str, user_id: int) -> Project:
project = Project(
filename = filename,
file_id = file_id,
upload_path = upload_path,
status = "uploaded",
user_id = user_id,
)
db.add(project)
db.commit()
db.refresh(project)
return project
def update_project_ready(db: Session, file_id: str, layer_count: int, processing_ms: int) -> Project:
project = db.query(Project).filter(Project.file_id == file_id).first()
if project:
project.status = "ready"
project.layer_count = layer_count
project.processing_ms = processing_ms
db.commit()
db.refresh(project)
return project
def update_project_error(db: Session, file_id: str) -> Project:
project = db.query(Project).filter(Project.file_id == file_id).first()
if project:
project.status = "error"
db.commit()
return project
def get_all_projects(db: Session, user_id: int) -> list:
return (
db.query(Project)
.filter(Project.user_id == user_id)
.order_by(Project.created_at.desc())
.all()
)
def get_project_by_file_id(db: Session, file_id: str, user_id: int) -> Project:
return (
db.query(Project)
.filter(Project.file_id == file_id, Project.user_id == user_id)
.first()
)
def save_project_state(db: Session, file_id: str, saved_state: str, thumbnail_b64: str, layer_count: int, user_id: int):
project = db.query(Project).filter(
Project.file_id == file_id,
Project.user_id == user_id,
).first()
if not project:
return None
project.saved_state = saved_state
project.thumbnail_b64 = thumbnail_b64
project.layer_count = layer_count
db.commit()
db.refresh(project)
return project
def get_saved_state(db: Session, file_id: str, user_id: int):
project = db.query(Project).filter(
Project.file_id == file_id,
Project.user_id == user_id,
).first()
if not project:
return None
return {
"has_saved_state": project.saved_state is not None,
"saved_state": project.saved_state,
"thumbnail_b64": project.thumbnail_b64,
"filename": project.filename,
"file_id": project.file_id,
"layer_count": project.layer_count,
}
def delete_project(db: Session, file_id: str, user_id: int):
project = db.query(Project).filter(
Project.file_id == file_id,
Project.user_id == user_id,
).first()
if not project:
return None
db.delete(project)
db.commit()
return project