diff --git a/src/db/crud.py b/src/db/crud.py index c724caf..ce5f07c 100644 --- a/src/db/crud.py +++ b/src/db/crud.py @@ -2,6 +2,7 @@ from functools import cache from sqlalchemy.orm import Session, load_only from sqlalchemy import Column, or_ from loguru import logger +from datetime import datetime from . import models, schemas import yaml, os @@ -19,10 +20,15 @@ def get_tasks(db: Session, skip: int = 0, limit: int = 100): return base_query(db).offset(skip).limit(limit).all() -def search_tasks_by_url(db: Session, url: str, email: str, skip: int = 0, limit: int = 100): +def search_tasks_by_url(db: Session, url: str, email: str, skip: int = 0, limit: int = 100, archived_after: datetime = None, archived_before: datetime = None): email = email.lower() groups = get_user_groups(db, email) - return base_query(db).filter(or_(models.Archive.public == True, models.Archive.author_id == email, models.Archive.group_id.in_(groups))).filter(models.Archive.url.like(f'%{url}%')).offset(skip).limit(limit).all() + query = base_query(db).filter(or_(models.Archive.public == True, models.Archive.author_id == email, models.Archive.group_id.in_(groups))).filter(models.Archive.url.like(f'%{url}%')) + if archived_after: + query = query.filter(models.Archive.created_at >= archived_after) + if archived_before: + query = query.filter(models.Archive.created_at <= archived_before) + return query.offset(skip).limit(limit).all() def search_tasks_by_email(db: Session, email: str, skip: int = 0, limit: int = 100): @@ -75,6 +81,7 @@ def search_tags(db: Session, tag: str, skip: int = 0, limit: int = 100): def is_user_in_group(db: Session, group_name: str, email: str) -> models.Group: return len(group_name) and len(email) and group_name in get_user_groups(db, email) + def get_user_groups(db: Session, email: str): email = email.lower() global DOMAIN_GROUPS, DOMAIN_GROUPS_LOADED diff --git a/src/main.py b/src/main.py index cfa9694..c086745 100644 --- a/src/main.py +++ b/src/main.py @@ -9,6 +9,7 @@ import alembic.config from dotenv import load_dotenv import traceback, os, logging from loguru import logger +from datetime import datetime import sqlalchemy from prometheus_fastapi_instrumentator import Instrumentator @@ -24,7 +25,7 @@ load_dotenv() # Configuration ALLOWED_ORIGINS = os.environ.get("ALLOWED_ORIGINS", "chrome-extension://ondkcheoicfckabcnkdgbepofpjmjcmb,chrome-extension://ojcimmjndnlmmlgnjaeojoebaceokpdp").split(",") -VERSION = "0.5.2" +VERSION = "0.5.3" # min-version refers to the version of auto-archiver-extension on the webstore BREAKING_CHANGES = {"minVersion": "0.3.1", "message": "The latest update has breaking changes, please update the extension to the most recent version."} @@ -76,9 +77,9 @@ def get_user_groups(db: Session = Depends(get_db), email = Depends(get_bearer_au return crud.get_user_groups(db, email) @app.get("/tasks/search-url", response_model=list[schemas.Archive]) -def search_by_url(url:str, skip: int = 0, limit: int = 100, db: Session = Depends(get_db), email = Depends(get_bearer_auth)): +def search_by_url(url:str, skip: int = 0, limit: int = 100, archived_after:datetime=None, archived_before:datetime=None, db: Session = Depends(get_db), email = Depends(get_bearer_auth)): #TODO: test strip - return crud.search_tasks_by_url(db, url.strip(), email, skip=skip, limit=limit) + return crud.search_tasks_by_url(db, url.strip(), email, skip=skip, limit=limit, archived_after=archived_after, archived_before=archived_before) @app.get("/tasks/sync", response_model=list[schemas.Archive]) def search(skip: int = 0, limit: int = 100, db: Session = Depends(get_db), email = Depends(get_bearer_auth)):