membership.create() checks for joinable and player limit; factory creates joinable lexicons by default

This commit is contained in:
Nikolai 2021-06-07 16:29:16 -07:00
parent 8ebb288d1c
commit c2103d8861
2 changed files with 24 additions and 1 deletions

View File

@ -2,6 +2,10 @@
Membership query interface Membership query interface
""" """
from sqlalchemy.sql.elements import Null
from sqlalchemy.sql.functions import current_date
from sqlalchemy.util.langhelpers import NoneType
from amanuensis.db.models import Lexicon
from sqlalchemy import select, func from sqlalchemy import select, func
from amanuensis.db import DbContext, Membership from amanuensis.db import DbContext, Membership
@ -36,6 +40,23 @@ def create(
): ):
raise ArgumentError("User is already a member of lexicon") raise ArgumentError("User is already a member of lexicon")
# get reference to lexicon for next few checks
lex: Lexicon = db(
select(Lexicon).where(Lexicon.id == lexicon_id)
).scalar_one_or_none()
# Verify lexicon is joinable; current no Lexicons are joinable so this is commented out
if not lex.joinable:
raise ArgumentError("Can't join: Lexicon is not joinable")
# Verify lexicon is not full
if lex.player_limit:
if (
db(select(func.count()).where(Membership.lexicon_id == lexicon_id)).scalar()
>= lex.player_limit
):
raise ArgumentError("Can't join: Lexicon is full")
new_membership = Membership( new_membership = Membership(
user_id=user_id, user_id=user_id,
lexicon_id=lexicon_id, lexicon_id=lexicon_id,

View File

@ -49,7 +49,9 @@ def make_lexicon(db: DbContext):
} }
state["nonce"] += 1 state["nonce"] += 1
updated_kwargs = {**default_kwargs, **kwargs} updated_kwargs = {**default_kwargs, **kwargs}
return lexiq.create(db, **updated_kwargs) lex = lexiq.create(db, **updated_kwargs)
lex.joinable = True
return lex
return lexicon_factory return lexicon_factory