mirror of
https://github.com/bellingcat/auto-archiver-api.git
synced 2026-06-11 13:08:34 +03:00
added database migrations + soft delete
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -10,6 +10,7 @@ class TaskCreate(BaseModel):
|
||||
|
||||
class Task(TaskCreate):
|
||||
created_at: datetime
|
||||
deleted: bool
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
Reference in New Issue
Block a user