User db queries to sql files

This commit is contained in:
Kalle 2022-08-16 17:43:41 +03:00
parent 294807ce2a
commit b7b8e382de
16 changed files with 221 additions and 195 deletions

View File

@ -1,4 +1,4 @@
import * as users from "./models/users/users.server";
import * as users from "./models/users/queries.server";
import * as plusSuggestions from "./models/plusSuggestions/queries.server";
import * as plusVotes from "./models/plusVotes/queries.server";
import * as badges from "./models/badges/queries.server";

View File

@ -0,0 +1,7 @@
update
"User"
set
"patronTier" = @patronTier,
"patronSince" = @patronSince
where
"discordId" = @discordId

View File

@ -0,0 +1,5 @@
update
"User"
set
"patronTier" = null,
"patronSince" = null

View File

@ -0,0 +1,4 @@
delete from
"User"
where
id = @id returning *

View File

@ -0,0 +1,9 @@
select
"User"."id",
"User"."discordId",
"User"."discordName",
"User"."discordDiscriminator",
"PlusTier"."tier" as "plusTier"
from
"User"
left join "PlusTier" on "PlusTier"."userId" = "User"."id"

View File

@ -0,0 +1,13 @@
select
"id",
"discordId",
"discordName",
"discordDiscriminator",
"patronTier"
from
"User"
where
"patronTier" is not null
order by
"patronTier" desc,
"patronSince" asc

View File

@ -0,0 +1,8 @@
select
"User"."discordId",
"PlusTier"."tier" as "plusTier"
from
"User"
left join "PlusTier" on "PlusTier"."userId" = "User"."id"
where
"PlusTier"."tier" is not null

View File

@ -0,0 +1,9 @@
select
"User".*,
"PlusTier"."tier" as "plusTier"
from
"User"
left join "PlusTier" on "PlusTier"."userId" = "User"."id"
where
"discordId" = @identifier
or "id" = @identifier

View File

@ -0,0 +1,114 @@
import { sql } from "../../sql";
import type { User, UserWithPlusTier } from "../../types";
import upsertSql from "./upsert.sql";
import updateProfileSql from "./updateProfile.sql";
import updateByDiscordIdSql from "./updateByDiscordId.sql";
import deleteAllPatronDataSql from "./deleteAllPatronData.sql";
import addPatronDataSql from "./addPatronData.sql";
import findAllSql from "./findAll.sql";
import deleteByIdSql from "./deleteById.sql";
import updateDiscordIdSql from "./updateDiscordId.sql";
import findByIdentifierSql from "./findByIdentifier.sql";
import findAllPlusMembersSql from "./findAllPlusMembers.sql";
import findAllPatronsSql from "./findAllPatrons.sql";
const upsertStm = sql.prepare(upsertSql);
export function upsert(
input: Pick<
User,
| "discordId"
| "discordName"
| "discordDiscriminator"
| "discordAvatar"
| "twitch"
| "twitter"
| "youtubeId"
>
) {
return upsertStm.get(input) as User;
}
const updateProfileStm = sql.prepare(updateProfileSql);
export function updateProfile(args: Pick<User, "country" | "id" | "bio">) {
updateProfileStm.run(args);
}
const updateByDiscordIdStm = sql.prepare(updateByDiscordIdSql);
export const updateMany = sql.transaction(
(
argsArr: Array<
Pick<
User,
"discordAvatar" | "discordName" | "discordDiscriminator" | "discordId"
>
>
) => {
for (const updateArgs of argsArr) {
updateByDiscordIdStm.run(updateArgs);
}
}
);
const deleteAllPatronDataStm = sql.prepare(deleteAllPatronDataSql);
const addPatronDataStm = sql.prepare(addPatronDataSql);
export type UpdatePatronDataArgs = Array<
Pick<User, "discordId" | "patronTier" | "patronSince">
>;
export const updatePatronData = sql.transaction(
(argsArr: UpdatePatronDataArgs) => {
deleteAllPatronDataStm.run();
for (const args of argsArr) {
addPatronDataStm.run(args);
}
}
);
const deleteByIdStm = sql.prepare(deleteByIdSql);
const updateDiscordIdStm = sql.prepare(updateDiscordIdSql);
export const migrate = sql.transaction(
(args: { newUserId: User["id"]; oldUserId: User["id"] }) => {
const deletedUser = deleteByIdStm.get({ id: args.newUserId }) as User;
updateDiscordIdStm.run({
id: args.oldUserId,
discordId: deletedUser.discordId,
});
}
);
const findByIdentifierStm = sql.prepare(findByIdentifierSql);
export function findByIdentifier(identifier: string | number) {
return findByIdentifierStm.get({ identifier }) as
| UserWithPlusTier
| undefined;
}
const findAllStm = sql.prepare(findAllSql);
export function findAll() {
return findAllStm.all() as Pick<
UserWithPlusTier,
"id" | "discordId" | "discordName" | "discordDiscriminator" | "plusTier"
>[];
}
const findAllPlusMembersStm = sql.prepare(findAllPlusMembersSql);
export function findAllPlusMembers() {
return findAllPlusMembersStm.all() as Array<{
discordId: User["discordId"];
plusTier: NonNullable<UserWithPlusTier["plusTier"]>;
}>;
}
const findAllPatronsStm = sql.prepare(findAllPatronsSql);
export type FindAllPatrons = Array<
Pick<
User,
"id" | "discordId" | "discordName" | "discordDiscriminator" | "patronTier"
>
>;
export function findAllPatrons() {
return findAllPatronsStm.all() as FindAllPatrons;
}

View File

@ -0,0 +1,8 @@
update
"User"
set
"discordAvatar" = @discordAvatar,
"discordName" = @discordName,
"discordDiscriminator" = @discordDiscriminator
where
"discordId" = @discordId

View File

@ -0,0 +1,6 @@
update
"User"
set
"discordId" = @discordId
where
"id" = @id

View File

@ -0,0 +1,7 @@
update
"User"
set
"country" = @country,
"bio" = @bio
where
"id" = @id

View File

@ -0,0 +1,28 @@
insert into
"User" (
"discordId",
"discordName",
"discordDiscriminator",
"discordAvatar",
"twitch",
"twitter",
"youtubeId"
)
values
(
@discordId,
@discordName,
@discordDiscriminator,
@discordAvatar,
@twitch,
@twitter,
@youtubeId
) on conflict("discordId") do
update
set
"discordName" = excluded."discordName",
"discordDiscriminator" = excluded."discordDiscriminator",
"discordAvatar" = excluded."discordAvatar",
"twitch" = excluded."twitch",
"twitch" = excluded."twitch",
"youtubeId" = excluded."youtubeId" returning *

View File

@ -1,192 +0,0 @@
import { sql } from "../../sql";
import type { User, UserWithPlusTier } from "../../types";
const upsertStm = sql.prepare(`
INSERT INTO
"User" (
"discordId",
"discordName",
"discordDiscriminator",
"discordAvatar",
"twitch",
"twitter",
"youtubeId"
)
VALUES (
$discordId,
$discordName,
$discordDiscriminator,
$discordAvatar,
$twitch,
$twitter,
$youtubeId
)
ON CONFLICT("discordId") DO UPDATE SET
"discordName" = excluded."discordName",
"discordDiscriminator" = excluded."discordDiscriminator",
"discordAvatar" = excluded."discordAvatar",
"twitch" = excluded."twitch",
"twitch" = excluded."twitch",
"youtubeId" = excluded."youtubeId"
RETURNING *
`);
export function upsert(
input: Pick<
User,
| "discordId"
| "discordName"
| "discordDiscriminator"
| "discordAvatar"
| "twitch"
| "twitter"
| "youtubeId"
>
) {
return upsertStm.get(input) as User;
}
const updateProfileStm = sql.prepare(`
UPDATE "User"
SET "country" = $country,
"bio" = $bio
WHERE "id" = $id
`);
export function updateProfile(args: Pick<User, "country" | "id" | "bio">) {
updateProfileStm.run(args);
}
const updateByDiscordIdStm = sql.prepare(`
update "User"
set "discordAvatar" = $discordAvatar,
"discordName" = $discordName,
"discordDiscriminator" = $discordDiscriminator
where "discordId" = $discordId
`);
export const updateMany = sql.transaction(
(
argsArr: Array<
Pick<
User,
"discordAvatar" | "discordName" | "discordDiscriminator" | "discordId"
>
>
) => {
for (const updateArgs of argsArr) {
updateByDiscordIdStm.run(updateArgs);
}
}
);
const deleteAllPatronDataStm = sql.prepare(`
update "User"
set "patronTier" = null,
"patronSince" = null
`);
const addPatronDataStm = sql.prepare(`
update "User"
set "patronTier" = $patronTier,
"patronSince" = $patronSince
where "discordId" = $discordId
`);
export type UpdatePatronDataArgs = Array<
Pick<User, "discordId" | "patronTier" | "patronSince">
>;
export const updatePatronData = sql.transaction(
(argsArr: UpdatePatronDataArgs) => {
deleteAllPatronDataStm.run();
for (const args of argsArr) {
addPatronDataStm.run(args);
}
}
);
const deleteStm = sql.prepare(`
delete from "User" where id = $id
returning *
`);
const updateDiscordId = sql.prepare(`
update "User"
set "discordId" = $discordId
where "id" = $id
`);
export const migrate = sql.transaction(
(args: { newUserId: User["id"]; oldUserId: User["id"] }) => {
const deletedUser = deleteStm.get({ id: args.newUserId }) as User;
updateDiscordId.run({
id: args.oldUserId,
discordId: deletedUser.discordId,
});
}
);
const findByIdentifierStm = sql.prepare(`
SELECT "User".*, "PlusTier".tier as "plusTier"
FROM "User"
LEFT JOIN "PlusTier" ON "PlusTier"."userId" = "User"."id"
WHERE "discordId" = $identifier
OR "id" = $identifier
`);
export function findByIdentifier(identifier: string | number) {
return findByIdentifierStm.get({ identifier }) as
| UserWithPlusTier
| undefined;
}
const findAllStm = sql.prepare(`
SELECT "User"."id", "User"."discordId", "User"."discordName", "User"."discordDiscriminator", "PlusTier".tier as "plusTier"
FROM "User"
LEFT JOIN "PlusTier" ON "PlusTier"."userId" = "User".id
`);
export function findAll() {
return findAllStm.all() as Pick<
UserWithPlusTier,
"id" | "discordId" | "discordName" | "discordDiscriminator" | "plusTier"
>[];
}
const findAllPlusMembersStm = sql.prepare(`
SELECT "User"."discordId", "PlusTier"."tier" as "plusTier"
FROM "User"
LEFT JOIN "PlusTier" ON "PlusTier"."userId" = "User".id
WHERE "PlusTier"."tier" IS NOT NULL
`);
export function findAllPlusMembers() {
return findAllPlusMembersStm.all() as Array<{
discordId: User["discordId"];
plusTier: NonNullable<UserWithPlusTier["plusTier"]>;
}>;
}
const findAllPatronsStm = sql.prepare(`
select
"id",
"discordId",
"discordName",
"discordDiscriminator",
"patronTier"
from "User"
where "patronTier" is not null
order by "patronTier" desc, "patronSince" asc
`);
export type FindAllPatrons = Array<
Pick<
User,
"id" | "discordId" | "discordName" | "discordDiscriminator" | "patronTier"
>
>;
export function findAllPatrons() {
return findAllPatronsStm.all() as FindAllPatrons;
}

View File

@ -1,6 +1,6 @@
import type { z } from "zod";
import { db } from "~/db";
import type { UpdatePatronDataArgs } from "~/db/models/users/users.server";
import type { UpdatePatronDataArgs } from "~/db/models/users/queries.server";
import { dateToDatabaseTimestamp } from "~/utils/dates";
import { fetchWithTimeout } from "~/utils/fetch";
import type { Unpacked } from "~/utils/types";

View File

@ -23,7 +23,7 @@ import resetStyles from "~/styles/reset.css";
import { Catcher } from "./components/Catcher";
import { Layout } from "./components/layout";
import { db } from "./db";
import type { FindAllPatrons } from "./db/models/users/users.server";
import type { FindAllPatrons } from "./db/models/users/queries.server";
import type { UserWithPlusTier } from "./db/types";
import { getUser } from "./modules/auth";
import { DEFAULT_LANGUAGE, i18next } from "./modules/i18n";