Show supporter badges logic

This commit is contained in:
Kalle 2022-07-11 01:02:50 +03:00
parent fb1d423bf0
commit 08df13eba0
7 changed files with 63 additions and 2 deletions

View File

@ -44,14 +44,14 @@ export const upsertManyManagers = sql.transaction(
const deleteManyOwnersStm = sql.prepare(`
DELETE FROM
"BadgeOwner"
"TournamentBadgeOwner"
WHERE
"badgeId" = $badgeId
`);
const createOwnerStm = sql.prepare(`
INSERT INTO
"BadgeOwner" (
"TournamentBadgeOwner" (
"badgeId",
"userId"
)

View File

@ -9,6 +9,8 @@ export interface User {
youtubeId: string | null;
bio: string | null;
country: string | null;
patronTier: number | null;
patronSince: number | null;
}
/** User table after joined with PlusTier table */
@ -59,11 +61,17 @@ export interface Badge {
hue?: number;
}
/** View that is union of TournamentBadgeOwner and Patreon badges */
export interface BadgeOwner {
badgeId: number;
userId: number;
}
export interface TournamentBadgeOwner {
badgeId: number;
userId: number;
}
export interface BadgeManager {
badgeId: number;
userId: number;

View File

@ -92,6 +92,11 @@ export default function BadgeDetailsPage() {
export function badgeExplanationText(
badge: Pick<BadgeDBType, "displayName" | "code"> & { count?: number }
) {
if (badge.code === "patreon") return "Supporter of sendou.ink on Patreon";
if (badge.code === "patreon_plus") {
return "Supporter+ of sendou.ink on Patreon";
}
const countString =
badge.count && badge.count > 1 ? ` (x${badge.count})` : "";
return `Awarded for winning ${badge.displayName}${countString}`;

48
migrations/005-patrons.js Normal file
View File

@ -0,0 +1,48 @@
module.exports.up = function (db) {
db.prepare(`alter table "User" add column "patronTier" integer`).run();
db.prepare(`alter table "User" add column "patronSince" integer`).run();
db.prepare(
`insert into "Badge" ("code", "displayName") values ('patreon', 'Supporter')`
).run();
db.prepare(
`insert into "Badge" ("code", "displayName") values ('patreon_plus', 'Supporter+')`
).run();
db.prepare(`alter table "BadgeOwner" rename to "TournamentBadgeOwner"`).run();
const patreonBadgeId = db
.prepare(`select "id" from "Badge" where "code" = 'patreon'`)
.get().id;
const patreonPlusBadgeId = db
.prepare(`select "id" from "Badge" where "code" = 'patreon_plus'`)
.get().id;
db.prepare(
`
create view "BadgeOwner" as
select "userId", "badgeId" from "TournamentBadgeOwner"
union all
select
"id" as "userId",
case
when "patronTier" = 2 then ${patreonBadgeId}
else ${patreonPlusBadgeId}
end "badgeId"
from "User"
where "patronTier" > 1
`
).run();
};
module.exports.down = function (db) {
db.prepare(`drop view "BadgeOwner"`).run();
db.prepare(`alter table "User" drop column "patronTier"`).run();
db.prepare(`alter table "User" drop column "patronSince"`).run();
db.prepare(
`delete from "Badge" where "code" in ('patreon_plus', 'patreon')`
).run();
db.prepare(`alter table "TournamentBadgeOwner" rename to "BadgeOwner"`).run();
};

View File

Before

Width:  |  Height:  |  Size: 194 KiB

After

Width:  |  Height:  |  Size: 194 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB