PlusSuggestions db queries to sql files

This commit is contained in:
Kalle 2022-08-14 13:41:05 +03:00
parent 01722dd26d
commit 78578d93bf
11 changed files with 95 additions and 90 deletions

View File

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

View File

@ -0,0 +1,18 @@
insert into
"PlusSuggestion" (
"text",
"authorId",
"suggestedId",
"month",
"year",
"tier"
)
values
(
@text,
@authorId,
@suggestedId,
@month,
@year,
@tier
)

View File

@ -0,0 +1,4 @@
delete from
"PlusSuggestion"
where
"id" = @id

View File

@ -0,0 +1,7 @@
delete from
"PlusSuggestion"
where
"suggestedId" = @suggestedId
and "tier" = @tier
and "month" = @month
and "year" = @year

View File

@ -0,0 +1,7 @@
delete from
"PlusSuggestion"
where
"month" = @month
and "year" = @year
and "suggestedId" = @suggestedId
and "tier" = @tier

View File

@ -0,0 +1,25 @@
select
suggestion."id",
suggestion."createdAt",
suggestion."text",
suggestion."tier",
author."id" as "authorId",
author."discordId" as "authorDiscordId",
author."discordName" as "authorDiscordName",
author."discordDiscriminator" as "authorDiscordDiscriminator",
suggested."id" as "suggestedId",
suggested."discordId" as "suggestedDiscordId",
suggested."discordName" as "suggestedDiscordName",
suggested."discordDiscriminator" as "suggestedDiscordDiscriminator",
suggested."discordAvatar" as "suggestedDiscordAvatar",
suggested."bio" as "suggestedBio"
from
"PlusSuggestion" as suggestion
join "User" as author on suggestion."authorId" = author."id"
join "User" as suggested on suggestion."suggestedId" = suggested."id"
where
"month" = @month
and "year" = @year
and "tier" >= @plusTier
order by
suggestion."id" asc

View File

@ -6,27 +6,14 @@ import { databaseTimestampToDate } from "~/utils/dates";
import { sql } from "../../sql";
import type { PlusSuggestion, User, UserWithPlusTier } from "../../types";
const createStm = sql.prepare(`
INSERT INTO
"PlusSuggestion" (
"text",
"authorId",
"suggestedId",
"month",
"year",
"tier"
)
VALUES
(
$text,
$authorId,
$suggestedId,
$month,
$year,
$tier
)
`);
import createSql from "./create.sql";
import findVisibleForUserSql from "./findVisibleForUser.sql";
import tiersSuggestedForSql from "./tiersSuggestedFor.sql";
import deleteSql from "./delete.sql";
import deleteAllSql from "./deleteAll.sql";
import deleteSuggestionWithCommentsSql from "./deleteSuggestionWithComments.sql";
const createStm = sql.prepare(createSql);
export function create(
args: Pick<
PlusSuggestion,
@ -36,32 +23,7 @@ export function create(
createStm.run(args);
}
const findVisibleForUserStm = sql.prepare(`
SELECT
suggestion."id",
suggestion."createdAt",
suggestion."text",
suggestion."tier",
author."id" as "authorId",
author."discordId" as "authorDiscordId",
author."discordName" as "authorDiscordName",
author."discordDiscriminator" as "authorDiscordDiscriminator",
suggested."id" as "suggestedId",
suggested."discordId" as "suggestedDiscordId",
suggested."discordName" as "suggestedDiscordName",
suggested."discordDiscriminator" as "suggestedDiscordDiscriminator",
suggested."discordAvatar" as "suggestedDiscordAvatar",
suggested."bio" as "suggestedBio"
FROM "PlusSuggestion" as suggestion
JOIN "User" AS author ON suggestion."authorId" = author."id"
JOIN "User" AS suggested ON suggestion."suggestedId" = suggested."id"
WHERE
"month" = $month
AND "year" = $year
AND "tier" >= $plusTier
ORDER BY
suggestion."id" ASC
`);
const findVisibleForUserStm = sql.prepare(findVisibleForUserSql);
export interface FindVisibleForUserSuggestedUserInfo {
suggestedUser: Pick<
@ -162,58 +124,25 @@ function sortNewestPlayersToBeSuggestedFirst(
);
}
const tiersSuggestedForStm = sql.prepare(`
SELECT
json_group_array(tier)
FROM
(
SELECT
DISTINCT tier
FROM
"PlusSuggestion"
WHERE
"month" = $month
AND "year" = $year
AND "suggestedId" = $userId
ORDER BY tier ASC
)
`);
const tiersSuggestedForStm = sql.prepare(tiersSuggestedForSql);
export function tiersSuggestedFor(args: MonthYear & { userId: User["id"] }) {
return JSON.parse(tiersSuggestedForStm.pluck().get(args)) as User["id"][];
}
const delStm = sql.prepare(`
DELETE FROM "PlusSuggestion"
WHERE
"id" = $id
`);
const deleteStm = sql.prepare(deleteSql);
export function del(id: PlusSuggestion["id"]) {
delStm.run({ id });
deleteStm.run({ id });
}
const deleteAllStm = sql.prepare(`
DELETE FROM "PlusSuggestion"
WHERE
"suggestedId" = $suggestedId
AND tier = $tier
AND month = $month
AND year = $year
`);
const deleteAllStm = sql.prepare(deleteAllSql);
export function deleteAll(args: Pick<PlusSuggestion, "suggestedId" | "tier">) {
deleteAllStm.run({ ...args, ...nextNonCompletedVoting(new Date()) });
}
const deleteSuggestionWithCommentsStm = sql.prepare(`
delete from "PlusSuggestion"
where "month" = $month
and "year" = $year
and "suggestedId" = $suggestedId
and "tier" = $tier
`);
const deleteSuggestionWithCommentsStm = sql.prepare(
deleteSuggestionWithCommentsSql
);
export function deleteSuggestionWithComments(
args: Pick<PlusSuggestion, "suggestedId" | "tier" | "month" | "year">
) {

View File

@ -0,0 +1,15 @@
select
json_group_array("tier")
from
(
select
distinct "tier"
from
"PlusSuggestion"
where
"month" = @month
and "year" = @year
and "suggestedId" = @userId
order by
"tier" asc
)

View File

@ -13,7 +13,7 @@ import type {
User,
UserWithPlusTier,
} from "../../types";
import type { FindVisibleForUserSuggestedUserInfo } from "../plusSuggestions/plusSuggestions.server";
import type { FindVisibleForUserSuggestedUserInfo } from "../plusSuggestions/queries.server";
const createStm = sql.prepare(`
INSERT INTO

View File

@ -1,4 +1,4 @@
import type * as plusSuggestions from "~/db/models/plusSuggestions/plusSuggestions.server";
import type * as plusSuggestions from "~/db/models/plusSuggestions/queries.server";
import { monthsVotingRange } from "./modules/plus-server";
import type {
CalendarEvent,

View File

@ -16,7 +16,7 @@ import { FormWithConfirm } from "~/components/FormWithConfirm";
import { TrashIcon } from "~/components/icons/Trash";
import { nextNonCompletedVoting } from "~/modules/plus-server";
import { db } from "~/db";
import type * as plusSuggestions from "~/db/models/plusSuggestions/plusSuggestions.server";
import type * as plusSuggestions from "~/db/models/plusSuggestions/queries.server";
import type { PlusSuggestion, User } from "~/db/types";
import { getUser, requireUser, useUser } from "~/modules/auth";
import {