Remove outdated documentation files for companies and migration guide; implement server session management features including server assignment and session status updates; enhance database schema for servers and server sessions with new fields and validation; add auto-assign functionality for unassigned sessions.

This commit is contained in:
2025-10-06 15:59:55 +05:00
parent 9e4bc7b0f8
commit a49129f643
16 changed files with 2332 additions and 483 deletions
+5 -5
View File
@@ -16,17 +16,17 @@ export const sessionStatusEnum = pgEnum("session_status", [
export const serverSessions = pgTable("server_sessions", {
id: uuid("id").primaryKey().defaultRandom(),
serverId: uuid("server_id")
.notNull()
.references(() => servers.id),
serverId: uuid("server_id").references(() => servers.id), // Nullable - для stream сессий назначается динамически
appId: uuid("app_id")
.notNull()
.references(() => apps.id),
userId: uuid("user_id")
.notNull()
.references(() => users.id),
startAt: timestamp("start_at").defaultNow().notNull(),
endAt: timestamp("end_at"), // Default 30 minutes from start_at
startAt: timestamp("start_at", { withTimezone: true })
.defaultNow()
.notNull(),
endAt: timestamp("end_at", { withTimezone: true }), // Default 30 minutes from start_at
appPid: integer("app_pid"),
cirrusPid: integer("cirrus_pid"),
mode: sessionModeEnum("mode").notNull(), // stream, local
+23 -2
View File
@@ -1,4 +1,11 @@
import { pgTable, uuid, varchar, pgEnum, timestamp } from "drizzle-orm/pg-core";
import {
pgTable,
uuid,
varchar,
pgEnum,
timestamp,
integer,
} from "drizzle-orm/pg-core";
import { relations } from "drizzle-orm";
import { createInsertSchema, createSelectSchema } from "drizzle-zod";
import { serverSessions } from "./serverSessions";
@@ -14,6 +21,7 @@ export const servers = pgTable("servers", {
localIp: varchar("local_ip", { length: 45 }).notNull(), // IPv6 can be up to 45 chars
hostname: varchar("hostname").notNull(), // hostname сервера
type: serverTypeEnum("type").notNull(), // stream, local
gpuFreeMb: integer("gpu_free_mb").notNull(), // свободная память на GPU в мегабайтах
branchId: uuid("branch_id").references(() => branches.id), // филиал, на котором находится сервер (nullable для локальных серверов)
location: serverLocationEnum("location"), // ru1, uae1 (только для stream)
tier: serverTierEnum("tier"), // demo, prod (только для stream)
@@ -26,7 +34,20 @@ export const servers = pgTable("servers", {
});
// Zod schemas for validation
export const insertServerSchema = createInsertSchema(servers);
export const insertServerSchema = createInsertSchema(servers).refine(
(data) => {
// Если тип "stream", то location и tier обязательны
if (data.type === "stream") {
return data.location !== undefined && data.location !== null;
}
return true;
},
{
message: "Location is required for stream servers",
path: ["location"],
}
);
export const selectServerSchema = createSelectSchema(servers);
// Relations