events: add get helper

pull/22/head
justcool393 2022-11-29 13:20:00 -06:00
parent 580e245b8f
commit af76be8e91
5 changed files with 22 additions and 23 deletions

View File

@ -1,22 +1,16 @@
from os import path
import subprocess
from importlib import import_module
from flask import g
from sqlalchemy import inspect
from files.helpers.const import AWARDS2, AWARDS_DISABLED
from files.__main__ import engine
from .table import Event
from events.classes import *
from events.helpers import *
from events.routes import *
def _build_table():
if not inspect(engine).has_table(Event.__table__.name, schema="public"):
if not inspect(engine).has_table(EventUser.__table__.name, schema="public"):
print("[EVENT] Building event table...")
Event.__table__.create(bind=engine, checkfirst=True)
EventUser.__table__.create(bind=engine, checkfirst=True)
def _populate_awards():
temp = {x: AWARDS2[x] for x in AWARDS2 if x not in EVENT_AWARDS}

View File

@ -0,0 +1 @@
from .eventuser import EventUser

View File

@ -3,10 +3,10 @@ from sqlalchemy.orm import relationship
from files.classes import Base
class Event(Base):
class EventUser(Base):
__tablename__ = "event"
id = Column(Integer, ForeignKey("users.id"), primary_key=True)
user = relationship("User", primaryjoin="users", lazy="joined")
#event specific columns
hw_zombie = Column(Integer, default=0, nullable=False)

View File

@ -0,0 +1,14 @@
from typing import Union
from sqlalchemy.orm import scoped_session
from events.classes.eventuser import EventUser
from files.classes.user import User
def get_or_create_event_user(target:Union[int, User], db:scoped_session) -> EventUser:
if isinstance(target, User): target = target.id # type: ignore
user = db.get(EventUser, target)
if not user:
user = EventUser(id=target)
db.add(target)
db.flush()
return user

View File

@ -3,21 +3,11 @@ from files.classes.award import AwardRelationship
from files.helpers.alerts import send_repeatable_notification
from files.helpers.useractions import badge_grant
from events import Event
from events.helpers.get import get_or_create_event_user
def award_thing_event(v, kind, author):
event_author = g.db.get(Event, author.id)
event_v = g.db.get(Event, v.id)
if not event_author:
event_author = Event(id=author.id)
g.db.add(event_author)
if not event_v:
event_v = Event(id=v.id)
g.db.add(event_v)
g.db.flush()
event_author = get_or_create_event_user(author, g.db)
event_v = get_or_create_event_user(v, g.db)
if kind == "hw-bite":
if event_author.hw_zombie < 0: