Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
55e7ee145c | |||
cfbaf8a0b2 | |||
c8e7ea7365 |
22
api/main.py
22
api/main.py
@ -6,10 +6,31 @@ from api.routes.links_routes import router as links_router
|
|||||||
from api.routes.user_routes import router as user_router
|
from api.routes.user_routes import router as user_router
|
||||||
from api.routes.log_routes import router as log_router
|
from api.routes.log_routes import router as log_router
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
from apscheduler.schedulers.background import BackgroundScheduler
|
||||||
|
from contextlib import asynccontextmanager
|
||||||
|
|
||||||
from api.util.db_dependency import get_db
|
from api.util.db_dependency import get_db
|
||||||
|
from api.util.clean_db import clean_db
|
||||||
from api.util.log import log
|
from api.util.log import log
|
||||||
from models import Link
|
from models import Link
|
||||||
|
from config import LOG
|
||||||
|
|
||||||
|
scheduler = BackgroundScheduler()
|
||||||
|
|
||||||
|
|
||||||
|
# Handle the database cleanup scheduler
|
||||||
|
def start_scheduler():
|
||||||
|
scheduler.add_job(clean_db, "interval", days=1)
|
||||||
|
scheduler.start()
|
||||||
|
|
||||||
|
|
||||||
|
@asynccontextmanager
|
||||||
|
async def lifespan(app: FastAPI):
|
||||||
|
try:
|
||||||
|
start_scheduler()
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
scheduler.shutdown()
|
||||||
|
|
||||||
|
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
@ -21,6 +42,7 @@ app = FastAPI(
|
|||||||
"identifier": "Unlicense",
|
"identifier": "Unlicense",
|
||||||
"url": "https://unlicense.org",
|
"url": "https://unlicense.org",
|
||||||
},
|
},
|
||||||
|
lifespan=lifespan,
|
||||||
)
|
)
|
||||||
|
|
||||||
app.add_middleware(
|
app.add_middleware(
|
||||||
|
@ -43,7 +43,7 @@ async def login_for_access_token(
|
|||||||
key="access_token",
|
key="access_token",
|
||||||
value=access_token,
|
value=access_token,
|
||||||
httponly=True, # Prevents client-side access
|
httponly=True, # Prevents client-side access
|
||||||
# secure=True, # Cookies are only sent over HTTPS
|
secure=True, # Cookies are only sent over HTTPS
|
||||||
)
|
)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
25
api/util/clean_db.py
Normal file
25
api/util/clean_db.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import datetime
|
||||||
|
|
||||||
|
from api.util.db_dependency import get_db
|
||||||
|
from models import Link, Log
|
||||||
|
|
||||||
|
"""
|
||||||
|
Remove expired short links and their associated logs
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def clean_db():
|
||||||
|
db = next(get_db())
|
||||||
|
# Get all expired short links
|
||||||
|
expired_links = (
|
||||||
|
db.query(Link)
|
||||||
|
.filter(Link.expire_date < datetime.datetime.today())
|
||||||
|
.all()
|
||||||
|
)
|
||||||
|
|
||||||
|
# Delete all expired short links and their logs
|
||||||
|
for link in expired_links:
|
||||||
|
logs = db.query(Log).filter(Log.link == link.link).all()
|
||||||
|
for log in logs:
|
||||||
|
db.delete(log)
|
||||||
|
db.delete(link)
|
@ -29,7 +29,7 @@
|
|||||||
"globals": "^15.11.0",
|
"globals": "^15.11.0",
|
||||||
"typescript": "~5.6.2",
|
"typescript": "~5.6.2",
|
||||||
"typescript-eslint": "^8.11.0",
|
"typescript-eslint": "^8.11.0",
|
||||||
"vite": "^6.0.3"
|
"vite": "^6.0.4"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
||||||
}
|
}
|
||||||
|
@ -1593,10 +1593,10 @@ uri-js@^4.2.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
punycode "^2.1.0"
|
punycode "^2.1.0"
|
||||||
|
|
||||||
vite@^6.0.3:
|
vite@^6.0.4:
|
||||||
version "6.0.3"
|
version "6.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.3.tgz#cc01f403e326a9fc1e064235df8a6de084c8a491"
|
resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.4.tgz#fe7cfaedff7c701d5582be5c4ed6a2150538ea9d"
|
||||||
integrity sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==
|
integrity sha512-zwlH6ar+6o6b4Wp+ydhtIKLrGM/LoqZzcdVmkGAFun0KHTzIzjh+h0kungEx7KJg/PYnC80I4TII9WkjciSR6Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild "^0.24.0"
|
esbuild "^0.24.0"
|
||||||
postcss "^8.4.49"
|
postcss "^8.4.49"
|
||||||
|
@ -10,3 +10,4 @@ SQLAlchemy==2.0.31
|
|||||||
validators==0.28.3
|
validators==0.28.3
|
||||||
requests==2.32.3
|
requests==2.32.3
|
||||||
ua-parser==0.18.0
|
ua-parser==0.18.0
|
||||||
|
APScheduler==3.11.0
|
Loading…
x
Reference in New Issue
Block a user