Feat: Add ability to ban cards and display it

This commit is contained in:
zuma 2025-04-24 15:55:07 +02:00
parent 899bdd4714
commit 2d1b64fdd3
7 changed files with 42 additions and 25 deletions

View file

@ -31,6 +31,7 @@ type CacheCarteListItem struct {
NumberOfPossibleDecks int
PercentageOfDecks float64
Synergy float64
Banned bool
}
type CacheCarteListItemWithSynergy struct {
@ -307,5 +308,6 @@ func CreateCardData(c Carte, decksByBset map[string][]Deck, numberOfDecksPerColo
NumberOfDecks: numberOfDecksPerCard[c.ID],
NumberOfPossibleDecks: numberOfPossibleDecks,
PercentageOfDecks: percentageOfDecks,
Banned: c.Banned,
}
}

Binary file not shown.

View file

@ -38,6 +38,7 @@ type Carte struct {
Price string `db:"price" json:"price"`
CardmarketUri string `db:"cardmarket_url" json:"cardmarket_url"`
CanBeCommander bool `db:"can_be_commander" json:"can_be_commander"`
Banned bool `db:"banned" json:"banned"`
}
type DeckCard struct {

View file

@ -1,17 +1,31 @@
<script>
let { name = "", url = "#", sanitizedName = "", smallImage = "", normalImage="", price = 0, cardmarketUri = "", numberOfDecks = 0, numberOfPossibleDecks = undefined, synergy = undefined } = $props()
let { card, showUrl = false, isCommander = false, showSynergy = false } = $props()
</script>
<div class="flex flex-col w-full gap-0">
<a class="w-full" href={url}><img src={normalImage} alt={"Scan de carte pour " + name} class="w-full rounded-md aspect-[488/680]" loading="lazy"/></a>
<a href={cardmarketUri} target="_blank" class="text-xs w-full text-center mt-2">{price}</a>
<span class="w-full text-center text-xs">{name}</span>
{#if numberOfPossibleDecks == undefined}
<span class="w-full text-center">{numberOfDecks} Decks</span>
{:else}
<span class="w-full text-center">{numberOfDecks} Decks sur {numberOfPossibleDecks} ({numberOfPossibleDecks != 0 ? Math.round(100 * (numberOfDecks / numberOfPossibleDecks)) : 0}%)</span>
{#if showUrl}
<a class="w-full relative" href={card.Url}>
{#if card.Banned}
<img class="absolute w-full top-60 md:top-20 rotate-30" src="/assets/banned.png" alt="banned card icon"/>
{/if}
{#if synergy != undefined}
<span class="w-full text-center">Synergy {synergy > 0 ? "+" + Math.round(100*synergy).toString() : Math.round(100*synergy).toString()}%</span>
<img src={card.NormalImage} alt={"Scan de carte pour " + card.Name} class="w-full rounded-md aspect-[488/680]" loading="lazy"/>
</a>
{:else}
<div class="w-full relative">
{#if card.Banned}
<img class="absolute w-full top-60 md:top-20 rotate-30" src="/assets/banned.png" alt="banned card icon"/>
{/if}
<img src={card.NormalImage} alt={"Scan de carte pour " + card.Name} class="w-full rounded-md aspect-[488/680]" loading="lazy"/>
</div>
{/if}
<a href={card.CardmarketUri} target="_blank" class="text-xs w-full text-center mt-2">{card.Price}</a>
<span class="w-full text-center text-xs">{card.Name}</span>
{#if isCommander}
<span class="w-full text-center">{card.NumberOfDecks} Decks</span>
{:else}
<span class="w-full text-center">{card.NumberOfDecks} Decks sur {card.NumberOfPossibleDecks} ({card.NumberOfPossibleDecks != 0 ? Math.round(100 * (card.NumberOfDecks / card.NumberOfPossibleDecks)) : 0}%)</span>
{/if}
{#if showSynergy}
<span class="w-full text-center">Synergy {card.Synergy > 0 ? "+" + Math.round(100*card.Synergy).toString() : Math.round(100*card.Synergy).toString()}%</span>
{/if}
</div>

View file

@ -40,56 +40,56 @@
<h2>Commandants</h2>
<CardGrid>
{#each commander as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks}/>
<Card card={card} isCommander={true} showUrl={true} />
{/each}
</CardGrid>
<h2>Planeswalker</h2>
<CardGrid>
{#each planeswalker as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} />
<Card card={card}/>
{/each}
</CardGrid>
<h2>Creature</h2>
<CardGrid>
{#each creature as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} />
<Card card={card}/>
{/each}
</CardGrid>
<h2>Rituels</h2>
<CardGrid>
{#each sorcery as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} />
<Card card={card}/>
{/each}
</CardGrid>
<h2>Artefacts</h2>
<CardGrid>
{#each artifact as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} />
<Card card={card}/>
{/each}
</CardGrid>
<h2>Éphémères</h2>
<CardGrid>
{#each instant as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} />
<Card card={card}/>
{/each}
</CardGrid>
<h2>Enchantements</h2>
<CardGrid>
{#each enchantment as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} />
<Card card={card}/>
{/each}
</CardGrid>
<h2>Terrains</h2>
<CardGrid>
{#each land as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} />
<Card card={card}/>
{/each}
</CardGrid>
</div>

View file

@ -36,55 +36,55 @@
<div class="flex flex-col w-full items-center">
<div class="w-full max-w-64">
<Card class="" normalImage={mainCardData.NormalImage} name={mainCardData.Name} price={mainCardData.Price} mainCardDatamarketUri={mainCardData.CardmarketUri} numberOfDecks={mainCardData.NumberOfDecks} />
<Card card={mainCardData} isCommander={true}/>
</div>
<h2>Planeswalker</h2>
<CardGrid>
{#each planeswalker as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} synergy={card.Synergy} />
<Card card={card} showSynergy={true} />
{/each}
</CardGrid>
<h2>Creature</h2>
<CardGrid>
{#each creature as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} synergy={card.Synergy} />
<Card card={card} showSynergy={true} />
{/each}
</CardGrid>
<h2>Rituels</h2>
<CardGrid>
{#each sorcery as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} synergy={card.Synergy} />
<Card card={card} showSynergy={true} />
{/each}
</CardGrid>
<h2>Artefacts</h2>
<CardGrid>
{#each artifact as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} synergy={card.Synergy} />
<Card card={card} showSynergy={true} />
{/each}
</CardGrid>
<h2>Éphémères</h2>
<CardGrid>
{#each instant as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} synergy={card.Synergy} />
<Card card={card} showSynergy={true} />
{/each}
</CardGrid>
<h2>Enchantements</h2>
<CardGrid>
{#each enchantment as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} synergy={card.Synergy} />
<Card card={card} showSynergy={true} />
{/each}
</CardGrid>
<h2>Terrains</h2>
<CardGrid>
{#each land as card}
<Card normalImage={card.NormalImage} url={card.Url} name={card.Name} price={card.Price} cardmarketUri={card.CardmarketUri} numberOfDecks={card.NumberOfDecks} numberOfPossibleDecks={card.NumberOfPossibleDecks} synergy={card.Synergy} />
<Card card={card} showSynergy={true} />
{/each}
</CardGrid>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB