update logging

This commit is contained in:
matthias@matsewe.de
2024-06-01 11:34:06 +02:00
parent 1a15252e7a
commit 7d6c7591dd
7 changed files with 53 additions and 20 deletions

View File

@@ -1,6 +1,8 @@
import app.models as models import app.models as models
from sqlalchemy import func from sqlalchemy import func, and_
from sqlalchemy.orm.attributes import flag_modified from sqlalchemy.orm.attributes import flag_modified
from starlette_context import context
from starlette_context.header_keys import HeaderKeys
def get_songs_and_vote_for_session(db, session_name) -> list[models.Song]: def get_songs_and_vote_for_session(db, session_name) -> list[models.Song]:
@@ -80,6 +82,7 @@ def create_or_update_vote(db, song_id, session_name, vote):
db.add(vote_entry) db.add(vote_entry)
db.commit() db.commit()
def create_or_update_comment(db, song_id, session_name, comment): def create_or_update_comment(db, song_id, session_name, comment):
session_entry = activate_session(db, session_name) session_entry = activate_session(db, session_name)
@@ -96,14 +99,20 @@ def create_or_update_comment(db, song_id, session_name, comment):
db.add(vote_entry) db.add(vote_entry)
db.commit() db.commit()
def activate_session(db, session_name): def activate_session(db, session_name):
session_entry = db.query(models.Session).filter( ip = context.data[HeaderKeys.forwarded_for]
(models.Session.session_name == session_name)).first()
session_entry = db.query(models.Session).filter(and_(
models.Session.session_name == session_name, models.Session.ip == ip)).first()
if session_entry: if session_entry:
print(session_entry.__dict__)
session_entry.active = True session_entry.active = True
else: else:
session_entry = models.Session(session_name=session_name, active=True) session_entry = models.Session(
session_name=session_name, active=True, ip=ip)
db.add(session_entry) db.add(session_entry)
flag_modified(session_entry, "active") flag_modified(session_entry, "active")
db.commit() db.commit()
@@ -111,25 +120,32 @@ def activate_session(db, session_name):
def deactivate_session(db, session_name): def deactivate_session(db, session_name):
session_entry = db.query(models.Session).filter( ip = context.data[HeaderKeys.forwarded_for]
(models.Session.session_name == session_name)).first()
session_entry = db.query(models.Session).filter(and_(
models.Session.session_name == session_name, models.Session.ip == ip)).first()
if session_entry: if session_entry:
session_entry.active = False session_entry.active = False
flag_modified(session_entry, "active")
db.commit()
else: else:
session_entry = models.Session(session_name=session_name, active=False) pass
db.add(session_entry) # session_entry = models.Session(session_name=session_name, ip=ip, active=False)
db.commit() # db.add(session_entry)
def get_setting(db, key): def get_setting(db, key):
entry = db.query(models.Config.value).filter(models.Config.key == key).first() entry = db.query(models.Config.value).filter(
models.Config.key == key).first()
if entry: if entry:
return entry[0] return entry[0]
else: else:
return None return None
def set_setting(db, key, value): def set_setting(db, key, value):
setting_entry = db.query(models.Config).filter(models.Config.key == key).first() setting_entry = db.query(models.Config).filter(
models.Config.key == key).first()
if setting_entry: if setting_entry:
setting_entry.value = value setting_entry.value = value
else: else:

View File

@@ -22,5 +22,6 @@ async def get_db():
class Base(DeclarativeBase): class Base(DeclarativeBase):
type_annotation_map = { type_annotation_map = {
dict[str, bool]: PickleType, dict[str, bool]: PickleType,
object: PickleType object: PickleType,
set: PickleType
} }

View File

@@ -10,9 +10,23 @@ from typing import Annotated
from app.schemas import Song from app.schemas import Song
import json import json
from starlette.middleware import Middleware
from starlette_context import context, plugins
from starlette_context.middleware import RawContextMiddleware
Base.metadata.create_all(engine) Base.metadata.create_all(engine)
app = FastAPI() middleware = [
Middleware(
RawContextMiddleware,
plugins=(
plugins.ForwardedForPlugin(),
)
)
]
app = FastAPI(middleware=middleware)
app.include_router(admin.router) app.include_router(admin.router)
app.include_router(user.router) app.include_router(user.router)

View File

@@ -30,10 +30,11 @@ class Song(Base):
class Session(Base): class Session(Base):
__tablename__ = 'sessions' __tablename__ = 'sessions'
id: Mapped[int] = mapped_column(primary_key=True) id: Mapped[int] = mapped_column(primary_key=True)
session_name: Mapped[int] session_name: Mapped[str]
active: Mapped[bool] active: Mapped[bool]
time_created: Mapped[datetime] = mapped_column(server_default=func.now()) ip: Mapped[str]
time_updated: Mapped[Optional[datetime] first_seen: Mapped[datetime] = mapped_column(server_default=func.now())
last_seen: Mapped[Optional[datetime]
] = mapped_column(onupdate=func.now()) ] = mapped_column(onupdate=func.now())

View File

@@ -1,5 +1,5 @@
from typing import Annotated from typing import Annotated
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends, Request
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
import app.models as models import app.models as models

View File

@@ -1,5 +1,5 @@
from typing import Annotated from typing import Annotated
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends, Request
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
import app.models as models import app.models as models

View File

@@ -9,3 +9,4 @@ python-multipart
jinja2 jinja2
openpyxl openpyxl
requests requests
starlette-context