blockmine 1.0.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 +107 -0
- package/backend/cli.js +40 -0
- package/backend/nodemon.json +12 -0
- package/backend/package-lock.json +2539 -0
- package/backend/package.json +34 -0
- package/backend/prisma/migrations/20250614085849_add_bot_note/migration.sql +126 -0
- package/backend/prisma/migrations/20250614153037_add_plugin_installed_date/migration.sql +27 -0
- package/backend/prisma/migrations/migration_lock.toml +3 -0
- package/backend/prisma/schema.prisma +138 -0
- package/backend/prisma/seed.js +60 -0
- package/backend/src/api/routes/bots.js +777 -0
- package/backend/src/api/routes/permissions.js +79 -0
- package/backend/src/api/routes/plugins.js +110 -0
- package/backend/src/api/routes/servers.js +50 -0
- package/backend/src/api/routes/settings.js +40 -0
- package/backend/src/core/BotManager.js +264 -0
- package/backend/src/core/BotProcess.js +233 -0
- package/backend/src/core/DependencyService.js +93 -0
- package/backend/src/core/MessageQueue.js +126 -0
- package/backend/src/core/PermissionManager.js +97 -0
- package/backend/src/core/PluginLoader.js +64 -0
- package/backend/src/core/PluginManager.js +161 -0
- package/backend/src/core/PluginService.js +57 -0
- package/backend/src/core/UserService.js +181 -0
- package/backend/src/core/commands/ping.js +35 -0
- package/backend/src/core/commands/warn.js +40 -0
- package/backend/src/core/ipc/PermissionManager.stub.js +24 -0
- package/backend/src/core/ipc/UserService.stub.js +31 -0
- package/backend/src/core/system/Command.js +53 -0
- package/backend/src/core/system/CommandHandler.js +98 -0
- package/backend/src/core/system/CommandManager.js +59 -0
- package/backend/src/core/system/CommandRegistry.js +21 -0
- package/backend/src/core/system/parseArguments.js +43 -0
- package/backend/src/real-time/socketHandler.js +31 -0
- package/backend/src/server.js +66 -0
- package/frontend/dist/apple-touch-icon.png +0 -0
- package/frontend/dist/assets/index-B83SHIXE.css +1 -0
- package/frontend/dist/assets/index-Dh-PcVh1.js +8179 -0
- package/frontend/dist/favicon-96x96.png +0 -0
- package/frontend/dist/favicon.ico +0 -0
- package/frontend/dist/favicon.svg +3 -0
- package/frontend/dist/index.html +51 -0
- package/frontend/dist/logo.png +0 -0
- package/frontend/dist/logo.svg +178 -0
- package/frontend/dist/monacoeditorwork/css.worker.bundle.js +53462 -0
- package/frontend/dist/monacoeditorwork/editor.worker.bundle.js +13519 -0
- package/frontend/dist/monacoeditorwork/html.worker.bundle.js +29662 -0
- package/frontend/dist/monacoeditorwork/json.worker.bundle.js +21320 -0
- package/frontend/dist/monacoeditorwork/ts.worker.bundle.js +256353 -0
- package/frontend/dist/site.webmanifest +21 -0
- package/frontend/dist/vite.svg +1 -0
- package/frontend/dist/web-app-manifest-192x192.png +0 -0
- package/frontend/dist/web-app-manifest-512x512.png +0 -0
- package/frontend/package.json +65 -0
- package/image/1.png +0 -0
- package/image/2.png +0 -0
- package/image/3.png +0 -0
- package/image/logo.png +0 -0
- package/package.json +27 -0
- package/tailwind.config.js +0 -0
- package/vite.config.js +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "backend",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "src/server.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"start": "node src/server.js",
|
|
8
|
+
"dev": "nodemon src/server.js",
|
|
9
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
10
|
+
},
|
|
11
|
+
"prisma": {
|
|
12
|
+
"seed": "node prisma/seed.js"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [],
|
|
15
|
+
"author": "",
|
|
16
|
+
"license": "ISC",
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@prisma/client": "^5.14.0",
|
|
19
|
+
"adm-zip": "^0.5.16",
|
|
20
|
+
"archiver": "^7.0.1",
|
|
21
|
+
"express": "^4.19.2",
|
|
22
|
+
"mineflayer": "^4.20.1",
|
|
23
|
+
"multer": "^2.0.1",
|
|
24
|
+
"pidusage": "^3.0.2",
|
|
25
|
+
"semver": "^7.6.2",
|
|
26
|
+
"simple-git": "^3.25.0",
|
|
27
|
+
"socket.io": "^4.7.5",
|
|
28
|
+
"socks": "^2.8.5"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"nodemon": "^3.1.2",
|
|
32
|
+
"prisma": "^5.14.0"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "Server" (
|
|
3
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
4
|
+
"name" TEXT NOT NULL,
|
|
5
|
+
"host" TEXT NOT NULL,
|
|
6
|
+
"port" INTEGER NOT NULL DEFAULT 25565,
|
|
7
|
+
"version" TEXT NOT NULL
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
-- CreateTable
|
|
11
|
+
CREATE TABLE "Bot" (
|
|
12
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
13
|
+
"username" TEXT NOT NULL,
|
|
14
|
+
"password" TEXT,
|
|
15
|
+
"prefix" TEXT DEFAULT '@',
|
|
16
|
+
"note" TEXT,
|
|
17
|
+
"serverId" INTEGER NOT NULL,
|
|
18
|
+
"proxyHost" TEXT,
|
|
19
|
+
"proxyPort" INTEGER,
|
|
20
|
+
"proxyUsername" TEXT,
|
|
21
|
+
"proxyPassword" TEXT,
|
|
22
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
23
|
+
"updatedAt" DATETIME NOT NULL,
|
|
24
|
+
CONSTRAINT "Bot_serverId_fkey" FOREIGN KEY ("serverId") REFERENCES "Server" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
-- CreateTable
|
|
28
|
+
CREATE TABLE "InstalledPlugin" (
|
|
29
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
30
|
+
"botId" INTEGER NOT NULL,
|
|
31
|
+
"name" TEXT NOT NULL,
|
|
32
|
+
"version" TEXT NOT NULL,
|
|
33
|
+
"description" TEXT,
|
|
34
|
+
"sourceType" TEXT NOT NULL,
|
|
35
|
+
"sourceUri" TEXT,
|
|
36
|
+
"path" TEXT NOT NULL,
|
|
37
|
+
"isEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
38
|
+
"manifest" TEXT,
|
|
39
|
+
"settings" TEXT DEFAULT '{}',
|
|
40
|
+
CONSTRAINT "InstalledPlugin_botId_fkey" FOREIGN KEY ("botId") REFERENCES "Bot" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
-- CreateTable
|
|
44
|
+
CREATE TABLE "Command" (
|
|
45
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
46
|
+
"botId" INTEGER NOT NULL,
|
|
47
|
+
"name" TEXT NOT NULL,
|
|
48
|
+
"isEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
49
|
+
"cooldown" INTEGER NOT NULL DEFAULT 0,
|
|
50
|
+
"aliases" TEXT NOT NULL DEFAULT '[]',
|
|
51
|
+
"description" TEXT,
|
|
52
|
+
"owner" TEXT,
|
|
53
|
+
"permissionId" INTEGER,
|
|
54
|
+
"allowedChatTypes" TEXT NOT NULL DEFAULT '["chat", "private"]',
|
|
55
|
+
CONSTRAINT "Command_botId_fkey" FOREIGN KEY ("botId") REFERENCES "Bot" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
56
|
+
CONSTRAINT "Command_permissionId_fkey" FOREIGN KEY ("permissionId") REFERENCES "Permission" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
-- CreateTable
|
|
60
|
+
CREATE TABLE "User" (
|
|
61
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
62
|
+
"username" TEXT NOT NULL,
|
|
63
|
+
"isBlacklisted" BOOLEAN NOT NULL DEFAULT false,
|
|
64
|
+
"botId" INTEGER NOT NULL,
|
|
65
|
+
CONSTRAINT "User_botId_fkey" FOREIGN KEY ("botId") REFERENCES "Bot" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
-- CreateTable
|
|
69
|
+
CREATE TABLE "Group" (
|
|
70
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
71
|
+
"name" TEXT NOT NULL,
|
|
72
|
+
"owner" TEXT NOT NULL DEFAULT 'system',
|
|
73
|
+
"botId" INTEGER NOT NULL,
|
|
74
|
+
CONSTRAINT "Group_botId_fkey" FOREIGN KEY ("botId") REFERENCES "Bot" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
-- CreateTable
|
|
78
|
+
CREATE TABLE "Permission" (
|
|
79
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
80
|
+
"name" TEXT NOT NULL,
|
|
81
|
+
"description" TEXT,
|
|
82
|
+
"owner" TEXT NOT NULL DEFAULT 'system',
|
|
83
|
+
"botId" INTEGER NOT NULL,
|
|
84
|
+
CONSTRAINT "Permission_botId_fkey" FOREIGN KEY ("botId") REFERENCES "Bot" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
-- CreateTable
|
|
88
|
+
CREATE TABLE "UserGroup" (
|
|
89
|
+
"userId" INTEGER NOT NULL,
|
|
90
|
+
"groupId" INTEGER NOT NULL,
|
|
91
|
+
|
|
92
|
+
PRIMARY KEY ("userId", "groupId"),
|
|
93
|
+
CONSTRAINT "UserGroup_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
94
|
+
CONSTRAINT "UserGroup_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "Group" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
-- CreateTable
|
|
98
|
+
CREATE TABLE "GroupPermission" (
|
|
99
|
+
"groupId" INTEGER NOT NULL,
|
|
100
|
+
"permissionId" INTEGER NOT NULL,
|
|
101
|
+
|
|
102
|
+
PRIMARY KEY ("groupId", "permissionId"),
|
|
103
|
+
CONSTRAINT "GroupPermission_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "Group" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
104
|
+
CONSTRAINT "GroupPermission_permissionId_fkey" FOREIGN KEY ("permissionId") REFERENCES "Permission" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
-- CreateIndex
|
|
108
|
+
CREATE UNIQUE INDEX "Server_name_key" ON "Server"("name");
|
|
109
|
+
|
|
110
|
+
-- CreateIndex
|
|
111
|
+
CREATE UNIQUE INDEX "Bot_username_key" ON "Bot"("username");
|
|
112
|
+
|
|
113
|
+
-- CreateIndex
|
|
114
|
+
CREATE UNIQUE INDEX "InstalledPlugin_botId_name_key" ON "InstalledPlugin"("botId", "name");
|
|
115
|
+
|
|
116
|
+
-- CreateIndex
|
|
117
|
+
CREATE UNIQUE INDEX "Command_botId_name_key" ON "Command"("botId", "name");
|
|
118
|
+
|
|
119
|
+
-- CreateIndex
|
|
120
|
+
CREATE UNIQUE INDEX "User_botId_username_key" ON "User"("botId", "username");
|
|
121
|
+
|
|
122
|
+
-- CreateIndex
|
|
123
|
+
CREATE UNIQUE INDEX "Group_botId_name_key" ON "Group"("botId", "name");
|
|
124
|
+
|
|
125
|
+
-- CreateIndex
|
|
126
|
+
CREATE UNIQUE INDEX "Permission_botId_name_key" ON "Permission"("botId", "name");
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-- AlterTable
|
|
2
|
+
ALTER TABLE "Bot" ADD COLUMN "owners" TEXT DEFAULT '';
|
|
3
|
+
|
|
4
|
+
-- RedefineTables
|
|
5
|
+
PRAGMA defer_foreign_keys=ON;
|
|
6
|
+
PRAGMA foreign_keys=OFF;
|
|
7
|
+
CREATE TABLE "new_InstalledPlugin" (
|
|
8
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
9
|
+
"botId" INTEGER NOT NULL,
|
|
10
|
+
"name" TEXT NOT NULL,
|
|
11
|
+
"version" TEXT NOT NULL,
|
|
12
|
+
"description" TEXT,
|
|
13
|
+
"sourceType" TEXT NOT NULL,
|
|
14
|
+
"sourceUri" TEXT,
|
|
15
|
+
"path" TEXT NOT NULL,
|
|
16
|
+
"isEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
17
|
+
"manifest" TEXT,
|
|
18
|
+
"settings" TEXT DEFAULT '{}',
|
|
19
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
20
|
+
CONSTRAINT "InstalledPlugin_botId_fkey" FOREIGN KEY ("botId") REFERENCES "Bot" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
21
|
+
);
|
|
22
|
+
INSERT INTO "new_InstalledPlugin" ("botId", "description", "id", "isEnabled", "manifest", "name", "path", "settings", "sourceType", "sourceUri", "version") SELECT "botId", "description", "id", "isEnabled", "manifest", "name", "path", "settings", "sourceType", "sourceUri", "version" FROM "InstalledPlugin";
|
|
23
|
+
DROP TABLE "InstalledPlugin";
|
|
24
|
+
ALTER TABLE "new_InstalledPlugin" RENAME TO "InstalledPlugin";
|
|
25
|
+
CREATE UNIQUE INDEX "InstalledPlugin_botId_name_key" ON "InstalledPlugin"("botId", "name");
|
|
26
|
+
PRAGMA foreign_keys=ON;
|
|
27
|
+
PRAGMA defer_foreign_keys=OFF;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// backend/prisma/schema.prisma
|
|
2
|
+
|
|
3
|
+
generator client {
|
|
4
|
+
provider = "prisma-client-js"
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
datasource db {
|
|
8
|
+
provider = "sqlite"
|
|
9
|
+
url = "file:./dev.db"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
model Server {
|
|
13
|
+
id Int @id @default(autoincrement())
|
|
14
|
+
name String @unique
|
|
15
|
+
host String
|
|
16
|
+
port Int @default(25565)
|
|
17
|
+
version String
|
|
18
|
+
bots Bot[]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
model Bot {
|
|
22
|
+
id Int @id @default(autoincrement())
|
|
23
|
+
username String @unique
|
|
24
|
+
password String?
|
|
25
|
+
prefix String? @default("@")
|
|
26
|
+
note String?
|
|
27
|
+
owners String? @default("")
|
|
28
|
+
|
|
29
|
+
server Server @relation(fields: [serverId], references: [id])
|
|
30
|
+
serverId Int
|
|
31
|
+
|
|
32
|
+
proxyHost String?
|
|
33
|
+
proxyPort Int?
|
|
34
|
+
proxyUsername String?
|
|
35
|
+
proxyPassword String?
|
|
36
|
+
|
|
37
|
+
installedPlugins InstalledPlugin[]
|
|
38
|
+
users User[]
|
|
39
|
+
groups Group[]
|
|
40
|
+
permissions Permission[]
|
|
41
|
+
commands Command[]
|
|
42
|
+
|
|
43
|
+
createdAt DateTime @default(now())
|
|
44
|
+
updatedAt DateTime @updatedAt
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
model InstalledPlugin {
|
|
49
|
+
id Int @id @default(autoincrement())
|
|
50
|
+
botId Int
|
|
51
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
52
|
+
name String
|
|
53
|
+
version String
|
|
54
|
+
description String?
|
|
55
|
+
sourceType String
|
|
56
|
+
sourceUri String?
|
|
57
|
+
path String
|
|
58
|
+
isEnabled Boolean @default(true)
|
|
59
|
+
|
|
60
|
+
manifest String?
|
|
61
|
+
settings String? @default("{}")
|
|
62
|
+
|
|
63
|
+
createdAt DateTime @default(now())
|
|
64
|
+
|
|
65
|
+
@@unique([botId, name])
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
model Command {
|
|
69
|
+
id Int @id @default(autoincrement())
|
|
70
|
+
botId Int
|
|
71
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
72
|
+
name String
|
|
73
|
+
isEnabled Boolean @default(true)
|
|
74
|
+
cooldown Int @default(0)
|
|
75
|
+
aliases String @default("[]") // Храним как джсон строку
|
|
76
|
+
description String?
|
|
77
|
+
owner String?
|
|
78
|
+
permissionId Int?
|
|
79
|
+
permission Permission? @relation(fields: [permissionId], references: [id], onDelete: SetNull)
|
|
80
|
+
allowedChatTypes String @default("[\"chat\", \"private\"]")
|
|
81
|
+
|
|
82
|
+
@@unique([botId, name])
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
model User {
|
|
86
|
+
id Int @id @default(autoincrement())
|
|
87
|
+
username String
|
|
88
|
+
isBlacklisted Boolean @default(false)
|
|
89
|
+
botId Int
|
|
90
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
91
|
+
groups UserGroup[]
|
|
92
|
+
|
|
93
|
+
@@unique([botId, username])
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
model Group {
|
|
97
|
+
id Int @id @default(autoincrement())
|
|
98
|
+
name String
|
|
99
|
+
owner String @default("system")
|
|
100
|
+
botId Int
|
|
101
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
102
|
+
permissions GroupPermission[]
|
|
103
|
+
users UserGroup[]
|
|
104
|
+
|
|
105
|
+
@@unique([botId, name])
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
model Permission {
|
|
109
|
+
id Int @id @default(autoincrement())
|
|
110
|
+
name String
|
|
111
|
+
description String?
|
|
112
|
+
owner String @default("system")
|
|
113
|
+
botId Int
|
|
114
|
+
bot Bot @relation(fields: [botId], references: [id], onDelete: Cascade)
|
|
115
|
+
groups GroupPermission[]
|
|
116
|
+
commands Command[]
|
|
117
|
+
|
|
118
|
+
@@unique([botId, name])
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
model UserGroup {
|
|
123
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
124
|
+
userId Int
|
|
125
|
+
group Group @relation(fields: [groupId], references: [id], onDelete: Cascade)
|
|
126
|
+
groupId Int
|
|
127
|
+
|
|
128
|
+
@@id([userId, groupId])
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
model GroupPermission {
|
|
132
|
+
group Group @relation(fields: [groupId], references: [id], onDelete: Cascade)
|
|
133
|
+
groupId Int
|
|
134
|
+
permission Permission @relation(fields: [permissionId], references: [id], onDelete: Cascade)
|
|
135
|
+
permissionId Int
|
|
136
|
+
|
|
137
|
+
@@id([groupId, permissionId])
|
|
138
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
const { PrismaClient } = require('@prisma/client');
|
|
2
|
+
const prisma = new PrismaClient();
|
|
3
|
+
|
|
4
|
+
const initialServers = [
|
|
5
|
+
{
|
|
6
|
+
name: 'Local Test Server',
|
|
7
|
+
host: '127.0.0.1',
|
|
8
|
+
port: 25565,
|
|
9
|
+
version: '1.20.4'
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: 'MineBlaze',
|
|
13
|
+
host: 'mc.mineblaze.net',
|
|
14
|
+
port: 25565,
|
|
15
|
+
version: '1.20.1'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: 'MasedWorld',
|
|
19
|
+
host: 'mc.masedworld.net',
|
|
20
|
+
port: 25565,
|
|
21
|
+
version: '1.20.1'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'DexLand',
|
|
25
|
+
host: 'mc.dexland.org',
|
|
26
|
+
port: 25565,
|
|
27
|
+
version: '1.20.1'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'CheatMine',
|
|
31
|
+
host: 'mc.cheatmine.net',
|
|
32
|
+
port: 25565,
|
|
33
|
+
version: '1.20.1'
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
async function main() {
|
|
38
|
+
console.log('Start seeding initial servers...');
|
|
39
|
+
|
|
40
|
+
await Promise.all(
|
|
41
|
+
initialServers.map(server =>
|
|
42
|
+
prisma.server.upsert({
|
|
43
|
+
where: { name: server.name },
|
|
44
|
+
update: {},
|
|
45
|
+
create: server,
|
|
46
|
+
})
|
|
47
|
+
)
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
console.log(`${initialServers.length} серверов были успешно созданы или уже существовали.`);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
main()
|
|
54
|
+
.catch((e) => {
|
|
55
|
+
console.error('Error during seeding:', e);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
})
|
|
58
|
+
.finally(async () => {
|
|
59
|
+
await prisma.$disconnect();
|
|
60
|
+
});
|