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

Binary file not shown.

View file

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

View file

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

View file

@ -40,56 +40,56 @@
<h2>Commandants</h2> <h2>Commandants</h2>
<CardGrid> <CardGrid>
{#each commander as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Planeswalker</h2> <h2>Planeswalker</h2>
<CardGrid> <CardGrid>
{#each planeswalker as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Creature</h2> <h2>Creature</h2>
<CardGrid> <CardGrid>
{#each creature as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Rituels</h2> <h2>Rituels</h2>
<CardGrid> <CardGrid>
{#each sorcery as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Artefacts</h2> <h2>Artefacts</h2>
<CardGrid> <CardGrid>
{#each artifact as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Éphémères</h2> <h2>Éphémères</h2>
<CardGrid> <CardGrid>
{#each instant as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Enchantements</h2> <h2>Enchantements</h2>
<CardGrid> <CardGrid>
{#each enchantment as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Terrains</h2> <h2>Terrains</h2>
<CardGrid> <CardGrid>
{#each land as card} {#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} {/each}
</CardGrid> </CardGrid>
</div> </div>

View file

@ -36,55 +36,55 @@
<div class="flex flex-col w-full items-center"> <div class="flex flex-col w-full items-center">
<div class="w-full max-w-64"> <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> </div>
<h2>Planeswalker</h2> <h2>Planeswalker</h2>
<CardGrid> <CardGrid>
{#each planeswalker as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Creature</h2> <h2>Creature</h2>
<CardGrid> <CardGrid>
{#each creature as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Rituels</h2> <h2>Rituels</h2>
<CardGrid> <CardGrid>
{#each sorcery as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Artefacts</h2> <h2>Artefacts</h2>
<CardGrid> <CardGrid>
{#each artifact as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Éphémères</h2> <h2>Éphémères</h2>
<CardGrid> <CardGrid>
{#each instant as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Enchantements</h2> <h2>Enchantements</h2>
<CardGrid> <CardGrid>
{#each enchantment as card} {#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} {/each}
</CardGrid> </CardGrid>
<h2>Terrains</h2> <h2>Terrains</h2>
<CardGrid> <CardGrid>
{#each land as card} {#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} {/each}
</CardGrid> </CardGrid>
</div> </div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB