membership.create() checks for joinable and player limit; factory creates joinable lexicons by default
This commit is contained in:
parent
8ebb288d1c
commit
6bda9b4b0a
|
@ -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,27 @@ 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,
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
pytest test fixtures
|
pytest test fixtures
|
||||||
"""
|
"""
|
||||||
import pytest
|
import pytest
|
||||||
|
from sqlalchemy.orm import session
|
||||||
|
|
||||||
from amanuensis.db import DbContext
|
from amanuensis.db import DbContext
|
||||||
import amanuensis.backend.character as charq
|
import amanuensis.backend.character as charq
|
||||||
|
@ -49,7 +50,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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue