@triskcraft/db 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -0
- package/dist/generated/browser.d.ts +110 -0
- package/dist/generated/browser.d.ts.map +1 -0
- package/dist/generated/browser.js +18 -0
- package/dist/generated/browser.js.map +1 -0
- package/dist/generated/client.d.ts +129 -0
- package/dist/generated/client.d.ts.map +1 -0
- package/dist/generated/client.js +35 -0
- package/dist/generated/client.js.map +1 -0
- package/dist/generated/commonInputTypes.d.ts +501 -0
- package/dist/generated/commonInputTypes.d.ts.map +1 -0
- package/dist/generated/commonInputTypes.js +11 -0
- package/dist/generated/commonInputTypes.js.map +1 -0
- package/dist/generated/enums.d.ts +19 -0
- package/dist/generated/enums.d.ts.map +1 -0
- package/dist/generated/enums.js +25 -0
- package/dist/generated/enums.js.map +1 -0
- package/dist/generated/internal/class.d.ts +363 -0
- package/dist/generated/internal/class.d.ts.map +1 -0
- package/dist/generated/internal/class.js +52 -0
- package/dist/generated/internal/class.js.map +1 -0
- package/dist/generated/internal/prismaNamespace.d.ts +2282 -0
- package/dist/generated/internal/prismaNamespace.d.ts.map +1 -0
- package/dist/generated/internal/prismaNamespace.js +262 -0
- package/dist/generated/internal/prismaNamespace.js.map +1 -0
- package/dist/generated/internal/prismaNamespaceBrowser.d.ts +243 -0
- package/dist/generated/internal/prismaNamespaceBrowser.d.ts.map +1 -0
- package/dist/generated/internal/prismaNamespaceBrowser.js +233 -0
- package/dist/generated/internal/prismaNamespaceBrowser.js.map +1 -0
- package/dist/generated/models/AuthorizationCode.d.ts +1445 -0
- package/dist/generated/models/AuthorizationCode.d.ts.map +1 -0
- package/dist/generated/models/AuthorizationCode.js +2 -0
- package/dist/generated/models/AuthorizationCode.js.map +1 -0
- package/dist/generated/models/Client.d.ts +1301 -0
- package/dist/generated/models/Client.d.ts.map +1 -0
- package/dist/generated/models/Client.js +2 -0
- package/dist/generated/models/Client.js.map +1 -0
- package/dist/generated/models/DiscordUser.d.ts +1335 -0
- package/dist/generated/models/DiscordUser.d.ts.map +1 -0
- package/dist/generated/models/DiscordUser.js +2 -0
- package/dist/generated/models/DiscordUser.js.map +1 -0
- package/dist/generated/models/InactivityPeriod.d.ts +1255 -0
- package/dist/generated/models/InactivityPeriod.d.ts.map +1 -0
- package/dist/generated/models/InactivityPeriod.js +2 -0
- package/dist/generated/models/InactivityPeriod.js.map +1 -0
- package/dist/generated/models/LinkCode.d.ts +1100 -0
- package/dist/generated/models/LinkCode.d.ts.map +1 -0
- package/dist/generated/models/LinkCode.js +2 -0
- package/dist/generated/models/LinkCode.js.map +1 -0
- package/dist/generated/models/LinkedMinecraftRole.d.ts +1162 -0
- package/dist/generated/models/LinkedMinecraftRole.d.ts.map +1 -0
- package/dist/generated/models/LinkedMinecraftRole.js +2 -0
- package/dist/generated/models/LinkedMinecraftRole.js.map +1 -0
- package/dist/generated/models/LinkedRole.d.ts +1162 -0
- package/dist/generated/models/LinkedRole.d.ts.map +1 -0
- package/dist/generated/models/LinkedRole.js +2 -0
- package/dist/generated/models/LinkedRole.js.map +1 -0
- package/dist/generated/models/Media.d.ts +1146 -0
- package/dist/generated/models/Media.d.ts.map +1 -0
- package/dist/generated/models/Media.js +2 -0
- package/dist/generated/models/Media.js.map +1 -0
- package/dist/generated/models/MinecraftRole.d.ts +1064 -0
- package/dist/generated/models/MinecraftRole.d.ts.map +1 -0
- package/dist/generated/models/MinecraftRole.js +2 -0
- package/dist/generated/models/MinecraftRole.js.map +1 -0
- package/dist/generated/models/Player.d.ts +1458 -0
- package/dist/generated/models/Player.d.ts.map +1 -0
- package/dist/generated/models/Player.js +2 -0
- package/dist/generated/models/Player.js.map +1 -0
- package/dist/generated/models/Post.d.ts +1534 -0
- package/dist/generated/models/Post.d.ts.map +1 -0
- package/dist/generated/models/Post.js +2 -0
- package/dist/generated/models/Post.js.map +1 -0
- package/dist/generated/models/PostBlockMedia.d.ts +1243 -0
- package/dist/generated/models/PostBlockMedia.d.ts.map +1 -0
- package/dist/generated/models/PostBlockMedia.js +2 -0
- package/dist/generated/models/PostBlockMedia.js.map +1 -0
- package/dist/generated/models/PostBlocks.d.ts +1506 -0
- package/dist/generated/models/PostBlocks.d.ts.map +1 -0
- package/dist/generated/models/PostBlocks.js +2 -0
- package/dist/generated/models/PostBlocks.js.map +1 -0
- package/dist/generated/models/PostMedia.d.ts +1497 -0
- package/dist/generated/models/PostMedia.d.ts.map +1 -0
- package/dist/generated/models/PostMedia.js +2 -0
- package/dist/generated/models/PostMedia.js.map +1 -0
- package/dist/generated/models/Role.d.ts +1144 -0
- package/dist/generated/models/Role.d.ts.map +1 -0
- package/dist/generated/models/Role.js +2 -0
- package/dist/generated/models/Role.js.map +1 -0
- package/dist/generated/models/RoleStatistic.d.ts +1077 -0
- package/dist/generated/models/RoleStatistic.d.ts.map +1 -0
- package/dist/generated/models/RoleStatistic.js +2 -0
- package/dist/generated/models/RoleStatistic.js.map +1 -0
- package/dist/generated/models/Session.d.ts +1366 -0
- package/dist/generated/models/Session.d.ts.map +1 -0
- package/dist/generated/models/Session.js +2 -0
- package/dist/generated/models/Session.js.map +1 -0
- package/dist/generated/models/State.d.ts +970 -0
- package/dist/generated/models/State.d.ts.map +1 -0
- package/dist/generated/models/State.js +2 -0
- package/dist/generated/models/State.js.map +1 -0
- package/dist/generated/models/TrackedRole.d.ts +947 -0
- package/dist/generated/models/TrackedRole.d.ts.map +1 -0
- package/dist/generated/models/TrackedRole.js +2 -0
- package/dist/generated/models/TrackedRole.js.map +1 -0
- package/dist/generated/models/User.d.ts +1842 -0
- package/dist/generated/models/User.d.ts.map +1 -0
- package/dist/generated/models/User.js +2 -0
- package/dist/generated/models/User.js.map +1 -0
- package/dist/generated/models/WebhookToken.d.ts +1219 -0
- package/dist/generated/models/WebhookToken.d.ts.map +1 -0
- package/dist/generated/models/WebhookToken.js +2 -0
- package/dist/generated/models/WebhookToken.js.map +1 -0
- package/dist/generated/models.d.ts +23 -0
- package/dist/generated/models.d.ts.map +1 -0
- package/dist/generated/models.js +2 -0
- package/dist/generated/models.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/package.json +50 -0
- package/prisma/migrations/20251231000230_init/migration.sql +156 -0
- package/prisma/migrations/20251231011118_add_rank/migration.sql +2 -0
- package/prisma/migrations/20251231014040_discord_code/migration.sql +2 -0
- package/prisma/migrations/20260107232913_webhook_tokens/migration.sql +13 -0
- package/prisma/migrations/20260108014222_token_name/migration.sql +8 -0
- package/prisma/migrations/20260120042444_states/migration.sql +13 -0
- package/prisma/migrations/20260120052250_at/migration.sql +10 -0
- package/prisma/migrations/20260120061112_uq_token/migration.sql +8 -0
- package/prisma/migrations/20260121013517_uq_nick/migration.sql +8 -0
- package/prisma/migrations/20260125034645_mc_rank/migration.sql +2 -0
- package/prisma/migrations/20260202222436_remove_rank_from_discord/migration.sql +8 -0
- package/prisma/migrations/20260202234919_discord_user_username/migration.sql +2 -0
- package/prisma/migrations/20260202235832_uq_discord_username/migration.sql +12 -0
- package/prisma/migrations/20260301230127_blog/migration.sql +45 -0
- package/prisma/migrations/20260308062159_player_status/migration.sql +5 -0
- package/prisma/migrations/20260314152500_last_seen/migration.sql +2 -0
- package/prisma/migrations/20260430073735_oauth_prepare/migration.sql +102 -0
- package/prisma/migrations/20260603052836_scopes/migration.sql +11 -0
- package/prisma/migrations/20260603055719_scopes_sesion/migration.sql +2 -0
- package/prisma/migrations/20260603201228_user_roles/migration.sql +38 -0
- package/prisma/migrations/20260608060633_blog_media/migration.sql +61 -0
- package/prisma/migrations/20260612000040_prepare_post_users/migration.sql +5 -0
- package/prisma/migrations/20260612165923_prepare_webhook_user/migration.sql +53 -0
- package/prisma/migrations/20260612210328_remove_webhook_discord_user/migration.sql +19 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +325 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Warnings:
|
|
3
|
+
|
|
4
|
+
- Added the required column `scope` to the `authorization_codes` table without a default value. This is not possible if the table is not empty.
|
|
5
|
+
|
|
6
|
+
*/
|
|
7
|
+
-- AlterTable
|
|
8
|
+
ALTER TABLE "authorization_codes" ADD COLUMN "scope" TEXT NOT NULL;
|
|
9
|
+
|
|
10
|
+
-- AlterTable
|
|
11
|
+
ALTER TABLE "clients" ADD COLUMN "scopes" TEXT[];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Warnings:
|
|
3
|
+
|
|
4
|
+
- You are about to drop the column `rank` on the `minecraft_users` table. All the data in the column will be lost.
|
|
5
|
+
- You are about to drop the column `rank` on the `users` table. All the data in the column will be lost.
|
|
6
|
+
|
|
7
|
+
*/
|
|
8
|
+
-- AlterTable
|
|
9
|
+
ALTER TABLE "minecraft_users" DROP COLUMN "rank";
|
|
10
|
+
|
|
11
|
+
-- AlterTable
|
|
12
|
+
ALTER TABLE "users" DROP COLUMN "rank";
|
|
13
|
+
|
|
14
|
+
-- CreateTable
|
|
15
|
+
CREATE TABLE "user_roles" (
|
|
16
|
+
"id" TEXT NOT NULL DEFAULT snowflake(),
|
|
17
|
+
"name" TEXT NOT NULL,
|
|
18
|
+
"permissions" BIGINT NOT NULL DEFAULT 0,
|
|
19
|
+
|
|
20
|
+
CONSTRAINT "user_roles_pkey" PRIMARY KEY ("id")
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
-- CreateTable
|
|
24
|
+
CREATE TABLE "linked_user_roles" (
|
|
25
|
+
"user_id" TEXT NOT NULL,
|
|
26
|
+
"role_id" TEXT NOT NULL,
|
|
27
|
+
|
|
28
|
+
CONSTRAINT "linked_user_roles_pkey" PRIMARY KEY ("user_id","role_id")
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
-- CreateIndex
|
|
32
|
+
CREATE UNIQUE INDEX "user_roles_name_key" ON "user_roles"("name");
|
|
33
|
+
|
|
34
|
+
-- AddForeignKey
|
|
35
|
+
ALTER TABLE "linked_user_roles" ADD CONSTRAINT "linked_user_roles_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
36
|
+
|
|
37
|
+
-- AddForeignKey
|
|
38
|
+
ALTER TABLE "linked_user_roles" ADD CONSTRAINT "linked_user_roles_role_id_fkey" FOREIGN KEY ("role_id") REFERENCES "user_roles"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Warnings:
|
|
3
|
+
|
|
4
|
+
- You are about to drop the column `attachments` on the `post_blocks` table. All the data in the column will be lost.
|
|
5
|
+
- A unique constraint covering the columns `[cover_media_id]` on the table `posts` will be added. If there are existing duplicate values, this will fail.
|
|
6
|
+
|
|
7
|
+
*/
|
|
8
|
+
-- CreateEnum
|
|
9
|
+
CREATE TYPE "POST_BLOCK_MEDIA_TYPE" AS ENUM ('IMAGE', 'VIDEO', 'AUDIO', 'FILE');
|
|
10
|
+
|
|
11
|
+
-- AlterTable
|
|
12
|
+
ALTER TABLE "post_blocks" DROP COLUMN "attachments";
|
|
13
|
+
|
|
14
|
+
-- AlterTable
|
|
15
|
+
ALTER TABLE "posts" ADD COLUMN "cover_media_id" TEXT;
|
|
16
|
+
|
|
17
|
+
-- CreateTable
|
|
18
|
+
CREATE TABLE "post_media" (
|
|
19
|
+
"id" TEXT NOT NULL DEFAULT snowflake(),
|
|
20
|
+
"filename" TEXT NOT NULL,
|
|
21
|
+
"url" TEXT NOT NULL,
|
|
22
|
+
"content_type" TEXT,
|
|
23
|
+
"media_type" "POST_BLOCK_MEDIA_TYPE" NOT NULL,
|
|
24
|
+
"size" INTEGER NOT NULL,
|
|
25
|
+
"width" INTEGER,
|
|
26
|
+
"height" INTEGER,
|
|
27
|
+
"description" TEXT,
|
|
28
|
+
"hash" TEXT,
|
|
29
|
+
|
|
30
|
+
CONSTRAINT "post_media_pkey" PRIMARY KEY ("id")
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
-- CreateTable
|
|
34
|
+
CREATE TABLE "post_block_media" (
|
|
35
|
+
"post_block_message_id" TEXT NOT NULL,
|
|
36
|
+
"media_id" TEXT NOT NULL,
|
|
37
|
+
"position" INTEGER NOT NULL DEFAULT 0,
|
|
38
|
+
|
|
39
|
+
CONSTRAINT "post_block_media_pkey" PRIMARY KEY ("post_block_message_id","media_id","position")
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
-- CreateIndex
|
|
43
|
+
CREATE INDEX "post_media_hash_idx" ON "post_media"("hash");
|
|
44
|
+
|
|
45
|
+
-- CreateIndex
|
|
46
|
+
CREATE INDEX "post_media_media_type_idx" ON "post_media"("media_type");
|
|
47
|
+
|
|
48
|
+
-- CreateIndex
|
|
49
|
+
CREATE INDEX "post_block_media_media_id_idx" ON "post_block_media"("media_id");
|
|
50
|
+
|
|
51
|
+
-- CreateIndex
|
|
52
|
+
CREATE UNIQUE INDEX "posts_cover_media_id_key" ON "posts"("cover_media_id");
|
|
53
|
+
|
|
54
|
+
-- AddForeignKey
|
|
55
|
+
ALTER TABLE "posts" ADD CONSTRAINT "posts_cover_media_id_fkey" FOREIGN KEY ("cover_media_id") REFERENCES "post_media"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
56
|
+
|
|
57
|
+
-- AddForeignKey
|
|
58
|
+
ALTER TABLE "post_block_media" ADD CONSTRAINT "post_block_media_post_block_message_id_fkey" FOREIGN KEY ("post_block_message_id") REFERENCES "post_blocks"("message_id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
59
|
+
|
|
60
|
+
-- AddForeignKey
|
|
61
|
+
ALTER TABLE "post_block_media" ADD CONSTRAINT "post_block_media_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "post_media"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
-- AlterTable
|
|
2
|
+
ALTER TABLE "webhook_tokens" ADD COLUMN "user_id" TEXT;
|
|
3
|
+
|
|
4
|
+
-- Create missing application users before moving existing relations.
|
|
5
|
+
INSERT INTO "users" ("discord_user_id", "created_at", "updated_at")
|
|
6
|
+
SELECT "id", CURRENT_TIMESTAMP, CURRENT_TIMESTAMP
|
|
7
|
+
FROM "discord_users"
|
|
8
|
+
ON CONFLICT ("discord_user_id") DO NOTHING;
|
|
9
|
+
|
|
10
|
+
-- Link application users to their existing Minecraft players.
|
|
11
|
+
UPDATE "users" AS "user"
|
|
12
|
+
SET
|
|
13
|
+
"mc_player_uuid" = "player"."uuid",
|
|
14
|
+
"updated_at" = CURRENT_TIMESTAMP
|
|
15
|
+
FROM "minecraft_users" AS "player"
|
|
16
|
+
WHERE
|
|
17
|
+
"user"."discord_user_id" = "player"."discord_user_id"
|
|
18
|
+
AND "user"."mc_player_uuid" IS DISTINCT FROM "player"."uuid";
|
|
19
|
+
|
|
20
|
+
-- Move post ownership to application users.
|
|
21
|
+
UPDATE "posts" AS "post"
|
|
22
|
+
SET "user_id" = "user"."id"
|
|
23
|
+
FROM "users" AS "user"
|
|
24
|
+
WHERE "user"."discord_user_id" = "post"."discord_user_id";
|
|
25
|
+
|
|
26
|
+
-- Associate existing webhook tokens with their application users.
|
|
27
|
+
UPDATE "webhook_tokens" AS "token"
|
|
28
|
+
SET "user_id" = "user"."id"
|
|
29
|
+
FROM "users" AS "user"
|
|
30
|
+
WHERE "user"."discord_user_id" = "token"."discord_user_id";
|
|
31
|
+
|
|
32
|
+
-- DropForeignKey
|
|
33
|
+
ALTER TABLE "minecraft_users" DROP CONSTRAINT "minecraft_users_discord_user_id_fkey";
|
|
34
|
+
|
|
35
|
+
-- DropForeignKey
|
|
36
|
+
ALTER TABLE "posts" DROP CONSTRAINT "posts_discord_user_id_fkey";
|
|
37
|
+
|
|
38
|
+
-- DropForeignKey
|
|
39
|
+
ALTER TABLE "posts" DROP CONSTRAINT "posts_minecraft_player_uuid_fkey";
|
|
40
|
+
|
|
41
|
+
-- DropIndex
|
|
42
|
+
DROP INDEX "minecraft_users_discord_user_id_key";
|
|
43
|
+
|
|
44
|
+
-- AlterTable
|
|
45
|
+
ALTER TABLE "minecraft_users" DROP COLUMN "discord_user_id";
|
|
46
|
+
|
|
47
|
+
-- AlterTable
|
|
48
|
+
ALTER TABLE "posts" DROP COLUMN "discord_user_id",
|
|
49
|
+
DROP COLUMN "minecraft_player_uuid",
|
|
50
|
+
ALTER COLUMN "user_id" SET NOT NULL;
|
|
51
|
+
|
|
52
|
+
-- AddForeignKey
|
|
53
|
+
ALTER TABLE "webhook_tokens" ADD CONSTRAINT "webhook_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Warnings:
|
|
3
|
+
|
|
4
|
+
- You are about to drop the column `discord_user_id` on the `webhook_tokens` table. All the data in the column will be lost.
|
|
5
|
+
- Made the column `user_id` on table `webhook_tokens` required. This step will fail if there are existing NULL values in that column.
|
|
6
|
+
|
|
7
|
+
*/
|
|
8
|
+
-- DropForeignKey
|
|
9
|
+
ALTER TABLE "webhook_tokens" DROP CONSTRAINT "webhook_tokens_discord_user_id_fkey";
|
|
10
|
+
|
|
11
|
+
-- DropForeignKey
|
|
12
|
+
ALTER TABLE "webhook_tokens" DROP CONSTRAINT "webhook_tokens_user_id_fkey";
|
|
13
|
+
|
|
14
|
+
-- AlterTable
|
|
15
|
+
ALTER TABLE "webhook_tokens" DROP COLUMN "discord_user_id",
|
|
16
|
+
ALTER COLUMN "user_id" SET NOT NULL;
|
|
17
|
+
|
|
18
|
+
-- AddForeignKey
|
|
19
|
+
ALTER TABLE "webhook_tokens" ADD CONSTRAINT "webhook_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
datasource db {
|
|
2
|
+
provider = "postgresql"
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
/// Configuración del cliente de Prisma orientado a TypeScript con soporte
|
|
6
|
+
/// para ESM y rutas generadas bajo `src/prisma/generated`.
|
|
7
|
+
generator client {
|
|
8
|
+
provider = "prisma-client"
|
|
9
|
+
engineType = "client"
|
|
10
|
+
output = "../src/generated"
|
|
11
|
+
runtime = "nodejs"
|
|
12
|
+
moduleFormat = "esm"
|
|
13
|
+
generatedFileExtension = "ts"
|
|
14
|
+
importFileExtension = "ts"
|
|
15
|
+
previewFeatures = ["typedSql"]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/// Periodo de inactividad declarado por un usuario de Discord.
|
|
19
|
+
model InactivityPeriod {
|
|
20
|
+
user_id String @id
|
|
21
|
+
guild_id String
|
|
22
|
+
role_snapshot String
|
|
23
|
+
started_at DateTime @default(now())
|
|
24
|
+
ends_at DateTime
|
|
25
|
+
source String
|
|
26
|
+
notified Boolean @default(false)
|
|
27
|
+
|
|
28
|
+
discord_user DiscordUser @relation(fields: [user_id], references: [id])
|
|
29
|
+
|
|
30
|
+
@@map("inactivity_periods")
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// Rol monitoreado dentro de un servidor de Discord.
|
|
34
|
+
model TrackedRole {
|
|
35
|
+
guild_id String
|
|
36
|
+
role_id String
|
|
37
|
+
created_at DateTime @default(now())
|
|
38
|
+
|
|
39
|
+
@@id([guild_id, role_id])
|
|
40
|
+
@@map("tracked_roles")
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/// Instantáneas de actividad/inactividad por rol para graficar tendencias.
|
|
44
|
+
model RoleStatistic {
|
|
45
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
46
|
+
guild_id String
|
|
47
|
+
role_id String
|
|
48
|
+
inactive_count Int @default(0)
|
|
49
|
+
active_count Int @default(0)
|
|
50
|
+
captured_at DateTime @default(now())
|
|
51
|
+
|
|
52
|
+
@@map("role_statistics")
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/// Código temporal utilizado para vincular cuentas externas con Discord.
|
|
56
|
+
model LinkCode {
|
|
57
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
58
|
+
discord_id String @unique
|
|
59
|
+
discord_nickname String
|
|
60
|
+
code String @unique
|
|
61
|
+
|
|
62
|
+
discord_user DiscordUser @relation(fields: [discord_id], references: [id])
|
|
63
|
+
|
|
64
|
+
@@map("link_codes")
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/// Catálogo de roles disponibles para usuarios de Minecraft.
|
|
68
|
+
model MinecraftRole {
|
|
69
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
70
|
+
name String @unique
|
|
71
|
+
|
|
72
|
+
linked_roles LinkedMinecraftRole[]
|
|
73
|
+
|
|
74
|
+
@@map("roles")
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/// Relación N:M entre usuarios de Minecraft y los roles asignados.
|
|
78
|
+
model LinkedMinecraftRole {
|
|
79
|
+
mc_user_uuid String
|
|
80
|
+
role_id String
|
|
81
|
+
|
|
82
|
+
role MinecraftRole @relation(fields: [role_id], references: [id])
|
|
83
|
+
player Player @relation(fields: [mc_user_uuid], references: [uuid])
|
|
84
|
+
|
|
85
|
+
@@id([mc_user_uuid, role_id])
|
|
86
|
+
@@map("linked_roles")
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/// Medios o enlaces externos asociados a cada jugador de Minecraft.
|
|
90
|
+
model Media {
|
|
91
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
92
|
+
mc_user_uuid String
|
|
93
|
+
type String
|
|
94
|
+
url String
|
|
95
|
+
|
|
96
|
+
player Player @relation(fields: [mc_user_uuid], references: [uuid])
|
|
97
|
+
|
|
98
|
+
@@unique([mc_user_uuid, type])
|
|
99
|
+
@@map("medias")
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
enum PLAYER_STATUS {
|
|
103
|
+
ACTIVE
|
|
104
|
+
DELETED
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// Información de jugador de Minecraft enlazada con su usuario de Discord.
|
|
108
|
+
model Player {
|
|
109
|
+
/// El uuid del jugador en formato UUID
|
|
110
|
+
uuid String @id
|
|
111
|
+
nickname String @unique
|
|
112
|
+
digs Int @default(0)
|
|
113
|
+
description String @default("")
|
|
114
|
+
status PLAYER_STATUS @default(ACTIVE)
|
|
115
|
+
/// La ultima vez que entró
|
|
116
|
+
last_seen DateTime?
|
|
117
|
+
|
|
118
|
+
linked_roles LinkedMinecraftRole[]
|
|
119
|
+
medias Media[]
|
|
120
|
+
user User?
|
|
121
|
+
|
|
122
|
+
@@map("minecraft_users")
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/// Representa a un usuario de Discord, incluyendo su rango y relaciones.
|
|
126
|
+
model DiscordUser {
|
|
127
|
+
id String @id
|
|
128
|
+
username String @unique
|
|
129
|
+
|
|
130
|
+
inactivity_periods InactivityPeriod[]
|
|
131
|
+
link_code LinkCode?
|
|
132
|
+
post_blocks PostBlocks[]
|
|
133
|
+
user User?
|
|
134
|
+
|
|
135
|
+
@@map("discord_users")
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
model WebhookToken {
|
|
139
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
140
|
+
name String @unique
|
|
141
|
+
user_id String
|
|
142
|
+
secret String
|
|
143
|
+
permissions String[]
|
|
144
|
+
created_at DateTime @default(now())
|
|
145
|
+
|
|
146
|
+
user User @relation(fields: [user_id], references: [id])
|
|
147
|
+
|
|
148
|
+
@@map("webhook_tokens")
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
model State {
|
|
152
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
153
|
+
key String @unique
|
|
154
|
+
value String
|
|
155
|
+
updated_at DateTime @updatedAt
|
|
156
|
+
|
|
157
|
+
@@map("states")
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
enum POST_STATUS {
|
|
161
|
+
DRAFT
|
|
162
|
+
PUBLISHED
|
|
163
|
+
OUTDATED
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
model Post {
|
|
167
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
168
|
+
title String @unique
|
|
169
|
+
user_id String
|
|
170
|
+
thread_id String
|
|
171
|
+
status POST_STATUS @default(DRAFT)
|
|
172
|
+
cover_media_id String? @unique
|
|
173
|
+
created_at DateTime @default(now())
|
|
174
|
+
updated_at DateTime @updatedAt
|
|
175
|
+
|
|
176
|
+
user User @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
177
|
+
post_blocks PostBlocks[]
|
|
178
|
+
cover_media PostMedia? @relation("PostCoverMedia", fields: [cover_media_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
|
|
179
|
+
|
|
180
|
+
@@map("posts")
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
model PostBlocks {
|
|
184
|
+
message_id String @id
|
|
185
|
+
post_id String
|
|
186
|
+
timestamp DateTime
|
|
187
|
+
content String?
|
|
188
|
+
components Json[] @default([])
|
|
189
|
+
embeds Json[] @default([])
|
|
190
|
+
author_id String
|
|
191
|
+
|
|
192
|
+
author DiscordUser @relation(fields: [author_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
193
|
+
post Post @relation(fields: [post_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
194
|
+
media PostBlockMedia[]
|
|
195
|
+
|
|
196
|
+
@@map("post_blocks")
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
enum POST_BLOCK_MEDIA_TYPE {
|
|
200
|
+
IMAGE
|
|
201
|
+
VIDEO
|
|
202
|
+
AUDIO
|
|
203
|
+
FILE
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
model PostMedia {
|
|
207
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
208
|
+
filename String
|
|
209
|
+
url String
|
|
210
|
+
content_type String?
|
|
211
|
+
media_type POST_BLOCK_MEDIA_TYPE
|
|
212
|
+
size Int
|
|
213
|
+
width Int?
|
|
214
|
+
height Int?
|
|
215
|
+
description String?
|
|
216
|
+
hash String?
|
|
217
|
+
|
|
218
|
+
post_blocks PostBlockMedia[]
|
|
219
|
+
cover_for_post Post? @relation("PostCoverMedia")
|
|
220
|
+
|
|
221
|
+
@@index([hash])
|
|
222
|
+
@@index([media_type])
|
|
223
|
+
@@map("post_media")
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
model PostBlockMedia {
|
|
227
|
+
post_block_message_id String
|
|
228
|
+
media_id String
|
|
229
|
+
position Int @default(0)
|
|
230
|
+
|
|
231
|
+
post_block PostBlocks @relation(fields: [post_block_message_id], references: [message_id], onDelete: Cascade, onUpdate: Cascade)
|
|
232
|
+
media PostMedia @relation(fields: [media_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
233
|
+
|
|
234
|
+
@@id([post_block_message_id, media_id, position])
|
|
235
|
+
@@index([media_id])
|
|
236
|
+
@@map("post_block_media")
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
model User {
|
|
240
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
241
|
+
mc_player_uuid String? @unique
|
|
242
|
+
discord_user_id String @unique
|
|
243
|
+
created_at DateTime @default(now())
|
|
244
|
+
updated_at DateTime @updatedAt
|
|
245
|
+
|
|
246
|
+
mc_player Player? @relation(fields: [mc_player_uuid], references: [uuid], onDelete: SetNull, onUpdate: Cascade)
|
|
247
|
+
discord_user DiscordUser @relation(fields: [discord_user_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
248
|
+
|
|
249
|
+
authorization_codes AuthorizationCode[]
|
|
250
|
+
sessions Session[]
|
|
251
|
+
linked_roles LinkedRole[]
|
|
252
|
+
posts Post[]
|
|
253
|
+
webhook_tokens WebhookToken[]
|
|
254
|
+
|
|
255
|
+
@@map("users")
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
model Client {
|
|
259
|
+
id String @id
|
|
260
|
+
client_secret String?
|
|
261
|
+
redirect_uris String[]
|
|
262
|
+
created_at DateTime @default(now())
|
|
263
|
+
updated_at DateTime @updatedAt
|
|
264
|
+
scopes String[]
|
|
265
|
+
|
|
266
|
+
authorization_codes AuthorizationCode[]
|
|
267
|
+
sessions Session[]
|
|
268
|
+
|
|
269
|
+
@@map("clients")
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
model AuthorizationCode {
|
|
273
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
274
|
+
code String @unique
|
|
275
|
+
user_id String
|
|
276
|
+
client_id String
|
|
277
|
+
redirect_uri String
|
|
278
|
+
code_challenge String
|
|
279
|
+
expires_at DateTime
|
|
280
|
+
created_at DateTime @default(now())
|
|
281
|
+
scope String
|
|
282
|
+
|
|
283
|
+
user User @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
284
|
+
client Client @relation(fields: [client_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
285
|
+
|
|
286
|
+
@@map("authorization_codes")
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
model Session {
|
|
290
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
291
|
+
user_id String
|
|
292
|
+
/// Hashed
|
|
293
|
+
refresh_token String @unique
|
|
294
|
+
client_id String
|
|
295
|
+
scope String @default("")
|
|
296
|
+
expires_at DateTime
|
|
297
|
+
created_at DateTime @default(now())
|
|
298
|
+
|
|
299
|
+
user User @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
300
|
+
client Client @relation(fields: [client_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
301
|
+
|
|
302
|
+
@@map("sessions")
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
model Role {
|
|
306
|
+
id String @id @default(dbgenerated("snowflake()"))
|
|
307
|
+
name String @unique
|
|
308
|
+
/// permisos como Bit Flags
|
|
309
|
+
permissions BigInt @default(0)
|
|
310
|
+
|
|
311
|
+
linked_roles LinkedRole[]
|
|
312
|
+
|
|
313
|
+
@@map("user_roles")
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
model LinkedRole {
|
|
317
|
+
user_id String
|
|
318
|
+
role_id String
|
|
319
|
+
|
|
320
|
+
user User @relation(fields: [user_id], references: [id])
|
|
321
|
+
role Role @relation(fields: [role_id], references: [id])
|
|
322
|
+
|
|
323
|
+
@@id([user_id, role_id])
|
|
324
|
+
@@map("linked_user_roles")
|
|
325
|
+
}
|