2025-08-28 18:27:07 +02:00
|
|
|
import { TRPCError } from "@trpc/server";
|
2025-10-20 16:22:20 +02:00
|
|
|
import { env } from "~/env";
|
2025-08-04 17:45:44 +02:00
|
|
|
import type {
|
2025-08-28 18:27:07 +02:00
|
|
|
StorageindexId,
|
|
|
|
|
StorageindexUpdate,
|
2025-08-04 17:45:44 +02:00
|
|
|
} from "~/schemas/public/Storageindex";
|
|
|
|
|
import type { TempTokensToken } from "~/schemas/public/TempTokens";
|
|
|
|
|
import type { UsersId } from "~/schemas/public/Users";
|
2025-08-28 18:27:07 +02:00
|
|
|
import type { Querier } from "~/server/db";
|
2025-10-23 15:16:42 +02:00
|
|
|
import { deleteFile } from "../storage";
|
2025-08-04 17:45:44 +02:00
|
|
|
|
|
|
|
|
export const getNewTokenHandler = async ({
|
2025-08-28 18:27:07 +02:00
|
|
|
db,
|
|
|
|
|
num,
|
2025-08-04 17:45:44 +02:00
|
|
|
}: {
|
2025-08-28 18:27:07 +02:00
|
|
|
db: Querier;
|
|
|
|
|
num?: number;
|
2025-08-04 17:45:44 +02:00
|
|
|
}): Promise<TempTokensToken[]> => {
|
2025-08-28 18:27:07 +02:00
|
|
|
const tokens: TempTokensToken[] = [];
|
|
|
|
|
if (num && num > 1) {
|
|
|
|
|
for (let i = 0; i < num; i++) {
|
|
|
|
|
const tok = await newToken({ db });
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
tokens.push(tok.token);
|
|
|
|
|
}
|
|
|
|
|
return tokens;
|
|
|
|
|
}
|
|
|
|
|
const tok = await newToken({ db });
|
|
|
|
|
return [tok.token];
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const newToken = async ({ db }: { db: Querier }) => {
|
2025-08-28 18:27:07 +02:00
|
|
|
try {
|
|
|
|
|
return await db
|
|
|
|
|
.insertInto("temp_tokens")
|
|
|
|
|
.defaultValues()
|
|
|
|
|
.returning("token")
|
|
|
|
|
.executeTakeFirstOrThrow();
|
|
|
|
|
} catch {
|
|
|
|
|
throw new TRPCError({
|
|
|
|
|
code: "INTERNAL_SERVER_ERROR",
|
|
|
|
|
message: "Error while creating token",
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|
|
|
|
|
|
2025-10-23 15:16:42 +02:00
|
|
|
export const deleteHandler = async ({
|
2025-08-28 18:27:07 +02:00
|
|
|
db,
|
|
|
|
|
fileId,
|
|
|
|
|
cb,
|
2025-08-04 17:45:44 +02:00
|
|
|
}: {
|
2025-08-28 18:27:07 +02:00
|
|
|
db: Querier;
|
|
|
|
|
fileId: StorageindexId;
|
|
|
|
|
cb?: (fileId: StorageindexId) => Promise<void>;
|
2025-08-04 17:45:44 +02:00
|
|
|
}) => {
|
2025-08-28 18:27:07 +02:00
|
|
|
try {
|
|
|
|
|
const storage = await db
|
|
|
|
|
.selectFrom("storageindex")
|
|
|
|
|
.select(["id", "ext"])
|
|
|
|
|
.where("id", "=", fileId)
|
|
|
|
|
.executeTakeFirstOrThrow();
|
2025-10-23 15:16:42 +02:00
|
|
|
await deleteFile(storage.id);
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
if (cb) {
|
|
|
|
|
await cb(fileId);
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("Error:", error);
|
|
|
|
|
throw new TRPCError({
|
|
|
|
|
code: "INTERNAL_SERVER_ERROR",
|
|
|
|
|
message: "Error while deleting file",
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|
|
|
|
|
|
2025-10-23 15:16:42 +02:00
|
|
|
export const updateHandler = async ({
|
2025-08-28 18:27:07 +02:00
|
|
|
db,
|
|
|
|
|
fileId,
|
|
|
|
|
data,
|
2025-08-04 17:45:44 +02:00
|
|
|
}: {
|
2025-08-28 18:27:07 +02:00
|
|
|
db: Querier;
|
|
|
|
|
fileId: StorageindexId;
|
|
|
|
|
data: StorageindexUpdate;
|
2025-08-04 17:45:44 +02:00
|
|
|
}) => {
|
2025-08-28 18:27:07 +02:00
|
|
|
try {
|
|
|
|
|
await db
|
|
|
|
|
.updateTable("storageindex")
|
|
|
|
|
.set(data)
|
|
|
|
|
.where("id", "=", fileId)
|
|
|
|
|
.execute();
|
|
|
|
|
return "ok";
|
|
|
|
|
} catch (e) {
|
|
|
|
|
throw new TRPCError({
|
|
|
|
|
code: "INTERNAL_SERVER_ERROR",
|
|
|
|
|
message: `Error while updating file: ${(e as Error).message}`,
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const addUserStorageJunc = async ({
|
2025-08-28 18:27:07 +02:00
|
|
|
db,
|
|
|
|
|
userId,
|
|
|
|
|
storageId,
|
2025-08-04 17:45:44 +02:00
|
|
|
}: {
|
2025-08-28 18:27:07 +02:00
|
|
|
db: Querier;
|
|
|
|
|
userId: UsersId;
|
|
|
|
|
storageId: StorageindexId;
|
2025-08-04 17:45:44 +02:00
|
|
|
}) => {
|
2025-08-28 18:27:07 +02:00
|
|
|
try {
|
|
|
|
|
return await db
|
|
|
|
|
.insertInto("users_storage")
|
2025-08-29 16:18:32 +02:00
|
|
|
.values({ storageid: storageId, userid: userId })
|
2025-08-28 18:27:07 +02:00
|
|
|
.onConflict((oc) => oc.columns(["userid", "storageid"]).doNothing())
|
|
|
|
|
.returningAll()
|
|
|
|
|
.execute();
|
|
|
|
|
} catch (e) {
|
|
|
|
|
throw new TRPCError({
|
|
|
|
|
code: "INTERNAL_SERVER_ERROR",
|
|
|
|
|
message: `Error while adding user storage: ${(e as Error).message}`,
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const deleteUserStorageJunc = async ({
|
2025-08-28 18:27:07 +02:00
|
|
|
db,
|
|
|
|
|
userId,
|
|
|
|
|
storageId,
|
2025-08-04 17:45:44 +02:00
|
|
|
}: {
|
2025-08-28 18:27:07 +02:00
|
|
|
db: Querier;
|
|
|
|
|
userId: UsersId;
|
|
|
|
|
storageId: StorageindexId;
|
2025-08-04 17:45:44 +02:00
|
|
|
}) => {
|
2025-08-28 18:27:07 +02:00
|
|
|
try {
|
|
|
|
|
await db
|
|
|
|
|
.deleteFrom("users_storage")
|
|
|
|
|
.where("userid", "=", userId)
|
|
|
|
|
.where("storageid", "=", storageId)
|
|
|
|
|
.execute();
|
|
|
|
|
return "ok";
|
|
|
|
|
} catch (e) {
|
|
|
|
|
throw new TRPCError({
|
|
|
|
|
code: "INTERNAL_SERVER_ERROR",
|
|
|
|
|
message: `Error while deleting user storage: ${(e as Error).message}`,
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|