Feat: Add ability to ban cards and display it
This commit is contained in:
parent
899bdd4714
commit
2d1b64fdd3
7 changed files with 42 additions and 25 deletions
|
@ -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.
|
@ -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 {
|
||||||
|
|
|
@ -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>
|
|
||||||
{:else}
|
|
||||||
<span class="w-full text-center">{numberOfDecks} Decks sur {numberOfPossibleDecks} ({numberOfPossibleDecks != 0 ? Math.round(100 * (numberOfDecks / numberOfPossibleDecks)) : 0}%)</span>
|
|
||||||
{/if}
|
{/if}
|
||||||
{#if synergy != undefined}
|
<img src={card.NormalImage} alt={"Scan de carte pour " + card.Name} class="w-full rounded-md aspect-[488/680]" loading="lazy"/>
|
||||||
<span class="w-full text-center">Synergy {synergy > 0 ? "+" + Math.round(100*synergy).toString() : Math.round(100*synergy).toString()}%</span>
|
</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}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
BIN
frontend/static/assets/banned.png
Normal file
BIN
frontend/static/assets/banned.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
Loading…
Add table
Add a link
Reference in a new issue