make somewhat anonymous, improve evaluation
All checks were successful
release-tag / release-image (push) Successful in 6m27s
All checks were successful
release-tag / release-image (push) Successful in 6m27s
This commit is contained in:
47
app/crud.py
47
app/crud.py
@@ -1,9 +1,7 @@
|
||||
import app.models as models
|
||||
from sqlalchemy import func, and_
|
||||
from sqlalchemy.orm.attributes import flag_modified
|
||||
from starlette_context import context
|
||||
from starlette_context.header_keys import HeaderKeys
|
||||
|
||||
from sqlalchemy.sql import text
|
||||
|
||||
def get_songs_and_vote_for_session(db, session_name) -> list[models.Song]:
|
||||
session_entry = activate_session(db, session_name)
|
||||
@@ -17,19 +15,20 @@ def get_songs_and_vote_for_session(db, session_name) -> list[models.Song]:
|
||||
|
||||
return songs_and_votes
|
||||
|
||||
def get_all_songs_and_votes(db) -> list:
|
||||
res = db.execute(text("""SELECT
|
||||
songs.og_artist,
|
||||
songs.aca_artist,
|
||||
songs.title,
|
||||
songs.url,
|
||||
COUNT(vote) FILTER (where vote = -1) as "nein" ,
|
||||
COUNT(vote) FILTER (where vote = 0) as "neutral",
|
||||
COUNT(vote) FILTER (where vote = 1) as "ja"
|
||||
FROM votes INNER JOIN songs ON votes.song_id = songs.id
|
||||
GROUP BY song_id ORDER BY song_id
|
||||
""")).fetchall()
|
||||
|
||||
def get_all_songs_and_votes(db) -> dict[int, dict[int, int]]:
|
||||
_v = db.query(models.Vote.song_id, models.Vote.vote, func.count(
|
||||
models.Vote.song_id)).group_by(models.Vote.song_id, models.Vote.vote).all()
|
||||
|
||||
votes = {}
|
||||
|
||||
for v in _v:
|
||||
if v[0] not in votes:
|
||||
votes[v[0]] = {-1: 0, 0: 0, 1: 0}
|
||||
votes[v[0]][v[1]] = v[2]
|
||||
|
||||
return votes
|
||||
return [dict(r._mapping) for r in res]
|
||||
|
||||
|
||||
def create_song(db,
|
||||
@@ -101,33 +100,25 @@ def create_or_update_comment(db, song_id, session_name, comment):
|
||||
|
||||
|
||||
def activate_session(db, session_name):
|
||||
ip = context.data[HeaderKeys.forwarded_for]
|
||||
user_agent = context.data[HeaderKeys.user_agent]
|
||||
|
||||
session_entry = db.query(models.Session).filter(and_(
|
||||
models.Session.session_name == session_name)).first() # , models.Session.ip == ip, models.Session.user_agent == user_agent
|
||||
session_entry = db.query(models.Session).filter(
|
||||
models.Session.session_name == session_name).first() # , models.Session.ip == ip, models.Session.user_agent == user_agent
|
||||
if session_entry:
|
||||
if ip not in session_entry.ips:
|
||||
session_entry.ips.append(ip)
|
||||
session_entry.active = True
|
||||
else:
|
||||
session_entry = models.Session(
|
||||
session_name=session_name, active=True, ips=[ip]) # , ip=ip, user_agent=user_agent
|
||||
session_name=session_name, active=True) # , ip=ip, user_agent=user_agent
|
||||
db.add(session_entry)
|
||||
|
||||
flag_modified(session_entry, "active")
|
||||
flag_modified(session_entry, "ips")
|
||||
db.commit()
|
||||
|
||||
return session_entry
|
||||
|
||||
|
||||
def deactivate_session(db, session_name):
|
||||
ip = context.data[HeaderKeys.forwarded_for]
|
||||
user_agent = context.data[HeaderKeys.user_agent]
|
||||
|
||||
session_entry = db.query(models.Session).filter(and_(
|
||||
models.Session.session_name == session_name)).first() # , models.Session.ip == ip, models.Session.user_agent == user_agent
|
||||
session_entry = db.query(models.Session).filter(
|
||||
models.Session.session_name == session_name).first() # , models.Session.ip == ip, models.Session.user_agent == user_agent
|
||||
if session_entry:
|
||||
session_entry.active = False
|
||||
flag_modified(session_entry, "active")
|
||||
|
||||
Reference in New Issue
Block a user