2025-08-04 17:45:44 +02:00
|
|
|
import { TRPCError } from "@trpc/server";
|
2025-08-28 18:27:07 +02:00
|
|
|
import { jsonArrayFrom } from "kysely/helpers/postgres";
|
2025-08-04 17:45:44 +02:00
|
|
|
import type {
|
2025-08-28 18:27:07 +02:00
|
|
|
Storageindex,
|
|
|
|
|
StorageindexId,
|
2025-08-04 17:45:44 +02:00
|
|
|
} from "~/schemas/public/Storageindex";
|
|
|
|
|
import type { UsersId } from "~/schemas/public/Users";
|
2025-08-28 18:27:07 +02:00
|
|
|
import type { Querier } from "~/server/db";
|
2025-08-04 17:45:44 +02:00
|
|
|
import {
|
2025-08-28 18:27:07 +02:00
|
|
|
addUserStorageJunc,
|
|
|
|
|
deleteFile,
|
|
|
|
|
deleteUserStorageJunc,
|
2025-08-04 17:45:44 +02:00
|
|
|
} from "~/server/services/storage.service";
|
|
|
|
|
|
|
|
|
|
export const getAllHandler = async ({ db }: { db: Querier }) => {
|
2025-08-28 18:27:07 +02:00
|
|
|
return await db.selectFrom("storageindex").selectAll().execute();
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const getFromIdHandler = async ({
|
2025-08-28 18:27:07 +02:00
|
|
|
db,
|
|
|
|
|
storage_id,
|
2025-08-04 17:45:44 +02:00
|
|
|
}: {
|
2025-08-28 18:27:07 +02:00
|
|
|
db: Querier;
|
|
|
|
|
storage_id: StorageindexId;
|
2025-08-04 17:45:44 +02:00
|
|
|
}) => {
|
2025-08-28 18:27:07 +02:00
|
|
|
return await db
|
|
|
|
|
.selectFrom("storageindex")
|
|
|
|
|
.selectAll()
|
|
|
|
|
.where("id", "=", storage_id)
|
|
|
|
|
.executeTakeFirst();
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const getUserStorageHandler = async ({
|
2025-08-28 18:27:07 +02:00
|
|
|
db,
|
|
|
|
|
userId,
|
2025-08-04 17:45:44 +02:00
|
|
|
}: {
|
2025-08-28 18:27:07 +02:00
|
|
|
db: Querier;
|
|
|
|
|
userId: UsersId;
|
2025-08-04 17:45:44 +02:00
|
|
|
}): Promise<Storageindex[]> => {
|
2025-08-28 18:27:07 +02:00
|
|
|
try {
|
|
|
|
|
return await db
|
|
|
|
|
.selectFrom("storageindex")
|
|
|
|
|
.selectAll("storageindex")
|
|
|
|
|
.rightJoin("users_storage", "users_storage.storageid", "storageindex.id")
|
|
|
|
|
.where("users_storage.userid", "=", userId)
|
|
|
|
|
.orderBy("created_at", "desc")
|
|
|
|
|
.execute();
|
|
|
|
|
} catch {
|
|
|
|
|
throw new TRPCError({
|
|
|
|
|
code: "INTERNAL_SERVER_ERROR",
|
|
|
|
|
message: "Error while getting user storage",
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const addUserStorageHandler = 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 addUserStorageJunc({
|
|
|
|
|
db,
|
|
|
|
|
storageId,
|
2025-08-29 16:18:32 +02:00
|
|
|
userId,
|
2025-08-28 18:27:07 +02:00
|
|
|
});
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
return "ok";
|
|
|
|
|
} 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 deleteUserStorageHandler = 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 {
|
|
|
|
|
const file = await db
|
|
|
|
|
.selectFrom("users_storage")
|
|
|
|
|
.selectAll()
|
|
|
|
|
.where("userid", "=", userId)
|
|
|
|
|
.where("storageid", "=", storageId)
|
|
|
|
|
.executeTakeFirst();
|
|
|
|
|
if (!file) {
|
|
|
|
|
return "no file";
|
|
|
|
|
}
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
await deleteFile({
|
|
|
|
|
cb: async (fileId) => {
|
|
|
|
|
await db.transaction().execute(async (trx) => {
|
|
|
|
|
await deleteUserStorageJunc({
|
|
|
|
|
db: trx,
|
|
|
|
|
storageId: fileId,
|
2025-08-29 16:18:32 +02:00
|
|
|
userId,
|
2025-08-28 18:27:07 +02:00
|
|
|
});
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
await trx
|
|
|
|
|
.deleteFrom("storageindex")
|
|
|
|
|
.where("id", "=", fileId)
|
|
|
|
|
.execute();
|
|
|
|
|
});
|
|
|
|
|
},
|
2025-08-29 16:18:32 +02:00
|
|
|
db,
|
|
|
|
|
fileId: file.storageid,
|
2025-08-28 18:27:07 +02:00
|
|
|
});
|
|
|
|
|
return "ok";
|
|
|
|
|
} catch {
|
|
|
|
|
throw new TRPCError({
|
|
|
|
|
code: "INTERNAL_SERVER_ERROR",
|
|
|
|
|
message: "Error while deleting user storage",
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// export const deleteAllUserStorageHandler = async ({
|
|
|
|
|
// db,
|
|
|
|
|
// userId,
|
|
|
|
|
// }: {
|
|
|
|
|
// db: Querier;
|
|
|
|
|
// userId: UsersId;
|
|
|
|
|
// }) => {
|
|
|
|
|
// try {
|
|
|
|
|
// const files = await db
|
|
|
|
|
// .selectFrom("users_storage")
|
|
|
|
|
// .select("storageid")
|
|
|
|
|
// .where("userid", "=", userId)
|
|
|
|
|
// .execute();
|
|
|
|
|
|
|
|
|
|
// if (!files || files.length === 0) {
|
|
|
|
|
// return "no files";
|
|
|
|
|
// }
|
|
|
|
|
// await deleteFiles({
|
|
|
|
|
// db,
|
|
|
|
|
// refs: files,
|
|
|
|
|
// cb: async (fileIds) => {
|
|
|
|
|
// const ids = fileIds.map((file) => file.storageid);
|
|
|
|
|
// await db.transaction().execute(async (trx) => {
|
|
|
|
|
// await trx
|
|
|
|
|
// .deleteFrom("users_storage")
|
|
|
|
|
// .where("userid", "=", userId)
|
|
|
|
|
// .where("storageid", "in", ids)
|
|
|
|
|
// .execute();
|
|
|
|
|
// await trx.deleteFrom("storageindex").where("id", "in", ids).execute();
|
|
|
|
|
// });
|
|
|
|
|
// },
|
|
|
|
|
// });
|
|
|
|
|
// return "ok";
|
|
|
|
|
// } catch {
|
|
|
|
|
// throw new TRPCError({
|
|
|
|
|
// code: "INTERNAL_SERVER_ERROR",
|
|
|
|
|
// message: "Error while deleting user storage",
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
export const getMultipleWithRelations = async ({
|
2025-08-28 18:27:07 +02:00
|
|
|
db,
|
|
|
|
|
ids,
|
2025-08-04 17:45:44 +02:00
|
|
|
}: {
|
2025-08-28 18:27:07 +02:00
|
|
|
db: Querier;
|
|
|
|
|
ids: StorageindexId[];
|
2025-08-04 17:45:44 +02:00
|
|
|
}) => {
|
2025-08-28 18:27:07 +02:00
|
|
|
return await db
|
|
|
|
|
.selectFrom("storageindex")
|
|
|
|
|
.selectAll("storageindex")
|
|
|
|
|
.select((eb) => [
|
|
|
|
|
jsonArrayFrom(
|
|
|
|
|
eb
|
|
|
|
|
.selectFrom("users_storage")
|
|
|
|
|
.leftJoin("users", "users.id", "users_storage.userid")
|
|
|
|
|
.select(["users.username"])
|
|
|
|
|
.whereRef("users_storage.storageid", "=", "storageindex.id")
|
|
|
|
|
.selectAll("users_storage"),
|
|
|
|
|
).as("users_storages"),
|
|
|
|
|
])
|
|
|
|
|
.where("id", "in", ids)
|
|
|
|
|
.execute();
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|