infoalloggi-monorepo/apps/infoalloggi/src/server/services/storage.service.ts

147 lines
2.9 KiB
TypeScript
Raw Normal View History

2025-08-28 18:27:07 +02:00
import { TRPCError } from "@trpc/server";
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
};