added database migrations + soft delete

This commit is contained in:
msramalho
2023-02-27 13:12:22 +01:00
parent 39da4e4eb7
commit 56c18dd96b
16 changed files with 304 additions and 20 deletions

View File

@@ -15,10 +15,6 @@ def search_tasks_by_url(db: Session, url:str, skip: int = 0, limit: int = 100):
def search_tasks_by_email(db: Session, email:str, skip: int = 0, limit: int = 100):
return base_query(db).filter(models.Task.author==email).offset(skip).limit(limit).all()
def base_query(db:Session):
# allow only some fields to be returned, for example author should remain hidden
return db.query(models.Task).options(load_only(models.Task.id, models.Task.created_at, models.Task.url, models.Task.result))
def create_task(db: Session, task: schemas.TaskCreate):
db_task = models.Task(id=task.id, url=task.url, author=task.author, result=task.result)
db.add(db_task)
@@ -26,10 +22,22 @@ def create_task(db: Session, task: schemas.TaskCreate):
db.refresh(db_task)
return db_task
# TODO: implement soft delete so that S3 content can be found ant not dangling
def delete_task(db: Session, task_id: str, email:str)->bool:
db_task = db.query(models.Task).filter(models.Task.id == task_id, models.Task.author==email).first()
# def delete_task(db: Session, task_id: str, email:str)->bool:
# db_task = db.query(models.Task).filter(models.Task.id == task_id, models.Task.author==email).first()
# if db_task:
# db.delete(db_task)
# db.commit()
# return db_task is not None
def soft_delete_task(db: Session, task_id: str, email:str)->bool:
db_task = db.query(models.Task).filter(models.Task.id == task_id, models.Task.author==email, models.Task.deleted==False).first()
if db_task:
db.delete(db_task)
db_task.deleted = True
db.commit()
return db_task is not None
return db_task is not None
def base_query(db:Session):
# allow only some fields to be returned, for example author should remain hidden
return db.query(models.Task)\
.options(load_only(models.Task.id, models.Task.created_at, models.Task.url, models.Task.result))\
.filter(models.Task.deleted == False)

View File

@@ -1,9 +1,12 @@
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import os
SQLALCHEMY_DATABASE_URL = "sqlite:///./auto-archiver.db"
SQLALCHEMY_DATABASE_URL = os.environ.get("DATABASE_PATH")#"sqlite:///./auto-archiver.db"
# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
print("-"*50)
print(SQLALCHEMY_DATABASE_URL)
engine = create_engine(
SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}

View File

@@ -1,4 +1,4 @@
from sqlalchemy import Column, String, JSON, DateTime
from sqlalchemy import Column, String, JSON, DateTime, Boolean
from sqlalchemy.sql import func
from .database import Base
@@ -12,5 +12,7 @@ class Task(Base):
result = Column(JSON, default=None)
created_at = Column(DateTime(timezone=True), server_default=func.now())
# updated_at = Column(DateTime(timezone=True), onupdate=func.now())
deleted = Column(Boolean, default=False)
# items = relationship("Item", back_populates="owner")

View File

@@ -10,6 +10,7 @@ class TaskCreate(BaseModel):
class Task(TaskCreate):
created_at: datetime
deleted: bool
class Config:
orm_mode = True