diff --git a/backend/card.py b/backend/card.py index c1bbc2c..93af87d 100644 --- a/backend/card.py +++ b/backend/card.py @@ -243,6 +243,7 @@ WIKIDATA_INSTANCE_TYPE_MAP = { "Q24034552": CardType.science_thing, # mathematical concept "Q12089225": CardType.science_thing, # mineral species "Q55640599": CardType.science_thing, # group of chemical entities + "Q17339814": CardType.science_thing, # group or class of chemical substances "Q119459661": CardType.science_thing, # scientific activity "Q113145171": CardType.science_thing, # type of chemical entity diff --git a/backend/main.py b/backend/main.py index 6b0da49..36f8a1a 100644 --- a/backend/main.py +++ b/backend/main.py @@ -163,6 +163,14 @@ def get_cards(user: UserModel = Depends(get_current_user), db: Session = Depends for card in cards ] +@app.get("/cards/in-decks") +def get_cards_in_decks(user: UserModel = Depends(get_current_user), db: Session = Depends(get_db)): + deck_ids = [d.id for d in db.query(DeckModel).filter(DeckModel.user_id == user.id, DeckModel.deleted == False).all()] + if not deck_ids: + return [] + card_ids = db.query(DeckCardModel.card_id).filter(DeckCardModel.deck_id.in_(deck_ids)).distinct().all() + return [str(row.card_id) for row in card_ids] + @app.post("/open_pack") @limiter.limit("10/minute") async def open_pack(request: Request, user: UserModel = Depends(get_current_user), db: Session = Depends(get_db)): diff --git a/frontend/src/lib/CardSelector.svelte b/frontend/src/lib/CardSelector.svelte index e5cce3c..9dabd14 100644 --- a/frontend/src/lib/CardSelector.svelte +++ b/frontend/src/lib/CardSelector.svelte @@ -8,6 +8,7 @@ let { allCards = [], selectedIds = $bindable(new Set()), + inDeckIds = new Set(), onclose = null, costLimit = null, // if set, prevents selecting cards that would exceed it showFooter = true, // set false to hide the Done button (e.g. inline deck builder) @@ -185,6 +186,9 @@ {#if selectedIds.has(card.id)}