fix some sql querys

This commit is contained in:
creations 2025-03-18 23:32:38 -04:00
parent 7ddd7fa7a1
commit 17d7e4f238
Signed by: creations
GPG key ID: 8F553AA4320FC711
6 changed files with 171 additions and 24 deletions

View file

@ -91,8 +91,7 @@ async function handler(
roles.push("user");
if (firstUser) roles.push("admin");
const result: { usernameExists: boolean; emailExists: boolean }[] =
await reservation`
const [result] = await reservation`
SELECT
EXISTS(SELECT 1 FROM users WHERE LOWER(username) = LOWER(${normalizedUsername})) AS "usernameExists",
EXISTS(SELECT 1 FROM users WHERE LOWER(email) = LOWER(${email})) AS "emailExists";
@ -105,14 +104,12 @@ async function handler(
}
if (invite && !firstUser) {
const result: Invite[] =
[inviteData] =
await reservation`SELECT * FROM invites WHERE id = ${invite};`;
if (!result || result.length === 0) {
if (!inviteData) {
errors.push("Invalid invite");
}
inviteData = result[0];
}
} catch (error) {
errors.push("An error occurred while checking for existing users");
@ -140,13 +137,13 @@ async function handler(
: (await getSetting("default_timezone", reservation)) || "UTC";
try {
const result: User[] = await reservation`
[user] = await reservation`
INSERT INTO users (username, email, password, invited_by, roles, timezone)
VALUES (${normalizedUsername}, ${email}, ${hashedPassword}, ${inviteData?.created_by}, ARRAY[${roles.join(",")}]::TEXT[], ${setTimezone})
RETURNING *;
`;
if (result.length === 0) {
if (!user) {
logger.error("User was not created");
return Response.json(
{
@ -158,8 +155,6 @@ async function handler(
);
}
user = result[0];
if (!user) {
logger.error("User was not created");
return Response.json(

View file

@ -296,7 +296,7 @@ async function processFile(
}
try {
const result: FileUpload[] = await sql`
const [result] = await sql`
INSERT INTO files ( id, owner, folder, name, original_name, mime_type, extension, size, max_views, password, favorite, tags, expires_at )
VALUES (
${uploadEntry.id}, ${uploadEntry.owner}, ${folder_identifier}, ${uploadEntry.name},
@ -308,7 +308,7 @@ async function processFile(
RETURNING id;
`;
if (result.length === 0) {
if (!result) {
failedFiles.push({
reason: "Failed to create file entry",
file: key,

View file

@ -75,13 +75,13 @@ async function handler(
let invite: Invite | null = null;
try {
const result: Invite[] = await sql`
[invite] = await sql`
INSERT INTO invites (created_by, expiration, max_uses, role, id)
VALUES (${request.session.id}, ${expirationDate}, ${maxUses}, ${inviteRole}, ${generateRandomString(15)})
RETURNING *;
`;
if (result.length === 0) {
if (!invite) {
logger.error("Invite failed to create");
return Response.json(
@ -93,8 +93,6 @@ async function handler(
{ status: 500 },
);
}
invite = result[0];
} catch (error) {
logger.error(["Error creating invite:", error as Error]);

View file

@ -52,10 +52,10 @@ async function handler(request: ExtendedRequest): Promise<Response> {
let inviteData: Invite | null = null;
try {
const result: Invite[] =
[inviteData] =
await reservation`SELECT * FROM invites WHERE id = ${invite};`;
if (result.length === 0) {
if (!inviteData) {
return Response.json(
{
success: false,
@ -66,8 +66,6 @@ async function handler(request: ExtendedRequest): Promise<Response> {
);
}
inviteData = result[0];
if (!isAdmin && inviteData.created_by !== request.session.id) {
return Response.json(
{

View file

@ -0,0 +1,158 @@
// import { type ReservedSQL, sql } from "bun";
//
// import { isUUID } from "@/helpers/char";
// import { logger } from "@/helpers/logger";
//
// function isValidSort(sortBy: string): boolean {
// const validSorts: string[] = [
// "size",
// "created_at",
// "expires_at",
// "views",
// "name",
// "original_name",
// "mime_type",
// "extension",
// ];
// return validSorts.includes(sortBy);
// }
//
// function validSortOrder(sortOrder: string): string {
// const validSortOrder: { [key: string]: string } = {
// asc: "ASC",
// desc: "DESC",
// ascending: "ASC",
// descending: "DESC",
// };
//
// return validSortOrder[sortOrder.toLowerCase()] || "DESC";
// }
//
// const escapeLike: (value: string) => string = (value: string): string =>
// value.replace(/[%_\\]/g, "\\$&");
//
// const routeDef: RouteDef = {
// method: "GET",
// accepts: "*/*",
// returns: "application/json",
// };
//
// async function handler(request: ExtendedRequest): Promise<Response> {
// const {
// user: user_id,
// count = "25",
// page = "0",
// sort_by = "created_at",
// sort_order = "DESC",
// search_value,
// } = request.query as {
// user: string;
// count: string;
// page: string;
// sort_by: string;
// sort_order: string;
// search_value: string;
// };
//
// if (!isValidSort(sort_by)) {
// return Response.json(
// {
// success: false,
// code: 400,
// error: "Invalid sort_by value",
// },
// { status: 400 },
// );
// }
//
// const userLookup: string | undefined = user_id || request.session?.id;
//
// if (!userLookup) {
// return Response.json(
// {
// success: false,
// code: 400,
// error: "Please provide a user ID or log in",
// },
// { status: 400 },
// );
// }
//
// const isId: boolean = isUUID(userLookup);
//
// if (!isId) {
// return Response.json(
// {
// success: false,
// code: 400,
// error: "Invalid user ID",
// },
// { status: 400 },
// );
// }
//
// const isSelf: boolean = request.session?.id === userLookup;
// const isAdmin: boolean = request.session
// ? request.session.roles.includes("admin")
// : false;
//
// if (!isSelf && !isAdmin) {
// return Response.json(
// {
// success: false,
// code: 403,
// error: "Unauthorized",
// },
// { status: 403 },
// );
// }
//
// const safeCount: number = Math.min(parseInt(count) || 25, 100);
// const safePage: number = Math.max(parseInt(page) || 0, 0);
// const offset: number = safePage * safeCount;
// let files: FileEntry[];
//
// const reservation: ReservedSQL = await sql.reserve();
//
// // ! figure out why it wont accept DESC or ASC unless it's hardcoded
// try {
// if (sort_by === "created_at" || sort_by === "expires_at") {
// }
//
// if (!files.length) {
// return Response.json(
// {
// success: true,
// code: 200,
// count: 0,
// files: [],
// },
// { status: 200 },
// );
// }
// } catch (error) {
// logger.error(["Error fetching files", error as Error]);
// return Response.json(
// {
// success: false,
// code: 500,
// error: "Internal server error",
// },
// { status: 500 },
// );
// } finally {
// reservation.release();
// }
//
// return Response.json(
// {
// success: true,
// code: 200,
// count: files.length,
// files,
// },
// { status: 200 },
// );
// }
//
// export { handler, routeDef };

View file

@ -49,11 +49,11 @@ async function handler(request: ExtendedRequest): Promise<Response> {
const reservation: ReservedSQL = await sql.reserve();
try {
const result: GetUser[] = isId
[user] = isId
? await reservation`SELECT * FROM users WHERE id = ${normalized}`
: await reservation`SELECT * FROM users WHERE username = ${normalized}`;
if (result.length === 0) {
if (!user) {
return Response.json(
{
success: false,
@ -64,8 +64,6 @@ async function handler(request: ExtendedRequest): Promise<Response> {
);
}
user = result[0];
isSelf = request.session ? user.id === request.session.id : false;
const files: { count: bigint }[] =