diff --git a/server/database-storage.ts b/server/database-storage.ts index 486b3d3..4fb6438 100644 --- a/server/database-storage.ts +++ b/server/database-storage.ts @@ -29,7 +29,7 @@ export class DatabaseStorage implements IStorage { } // User management - async getUser(id: number): Promise { + async getUser(id: string): Promise { const [user] = await db.select().from(users).where(eq(users.id, id)); return user; } @@ -49,7 +49,7 @@ export class DatabaseStorage implements IStorage { return newUser; } - async updateUser(id: number, userData: Partial): Promise { + async updateUser(id: string, userData: Partial): Promise { const [updatedUser] = await db.update(users) .set(userData) .where(eq(users.id, id)) @@ -57,13 +57,13 @@ export class DatabaseStorage implements IStorage { return updatedUser; } - async deleteUser(id: number): Promise { + async deleteUser(id: string): Promise { const result = await db.delete(users).where(eq(users.id, id)).returning(); return result.length > 0; } // Organization management - async getOrganization(id: number): Promise { + async getOrganization(id: string): Promise { const [org] = await db.select().from(organizations).where(eq(organizations.id, id)); return org; } @@ -77,7 +77,7 @@ export class DatabaseStorage implements IStorage { return newOrg; } - async updateOrganization(id: number, orgData: Partial): Promise { + async updateOrganization(id: string, orgData: Partial): Promise { const [updatedOrg] = await db.update(organizations) .set(orgData) .where(eq(organizations.id, id)) @@ -85,18 +85,18 @@ export class DatabaseStorage implements IStorage { return updatedOrg; } - async deleteOrganization(id: number): Promise { + async deleteOrganization(id: string): Promise { const result = await db.delete(organizations).where(eq(organizations.id, id)).returning(); return result.length > 0; } // Domain management - async getDomain(id: number): Promise { + async getDomain(id: string): Promise { const [domain] = await db.select().from(domains).where(eq(domains.id, id)); return domain; } - async getDomainsByOrganization(organizationId: number): Promise { + async getDomainsByOrganization(organizationId: string): Promise { return await db.select() .from(domains) .where(eq(domains.organizationId, organizationId)); diff --git a/server/storage.ts b/server/storage.ts index 2257598..6f240ac 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -12,54 +12,54 @@ import { DatabaseStorage } from "./database-storage"; export interface IStorage { // User management - getUser(id: number): Promise; + getUser(id: string): Promise; getUserByUsername(username: string): Promise; getUserByEmail(email: string): Promise; createUser(user: InsertUser): Promise; - updateUser(id: number, user: Partial): Promise; - deleteUser(id: number): Promise; + updateUser(id: string, user: Partial): Promise; + deleteUser(id: string): Promise; // Organization management - getOrganization(id: number): Promise; + getOrganization(id: string): Promise; getOrganizations(): Promise; createOrganization(org: InsertOrganization): Promise; - updateOrganization(id: number, org: Partial): Promise; - deleteOrganization(id: number): Promise; + updateOrganization(id: string, org: Partial): Promise; + deleteOrganization(id: string): Promise; // Domain management - getDomain(id: number): Promise; - getDomainsByOrganization(organizationId: number): Promise; + getDomain(id: string): Promise; + getDomainsByOrganization(organizationId: string): Promise; getAllDomains(): Promise; createDomain(domain: InsertDomain): Promise; - updateDomain(id: number, domain: Partial): Promise; - deleteDomain(id: number): Promise; + updateDomain(id: string, domain: Partial): Promise; + deleteDomain(id: string): Promise; // DNS Record management - getDnsRecord(id: number): Promise; - getDnsRecordsByDomain(domainId: number): Promise; + getDnsRecord(id: string): Promise; + getDnsRecordsByDomain(domainId: string): Promise; createDnsRecord(record: InsertDnsRecord): Promise; - updateDnsRecord(id: number, record: Partial): Promise; - deleteDnsRecord(id: number): Promise; + updateDnsRecord(id: string, record: Partial): Promise; + deleteDnsRecord(id: string): Promise; // Provider management - getProvider(id: number): Promise; + getProvider(id: string): Promise; getProviders(): Promise; createProvider(provider: InsertProvider): Promise; - updateProvider(id: number, provider: Partial): Promise; - deleteProvider(id: number): Promise; + updateProvider(id: string, provider: Partial): Promise; + deleteProvider(id: string): Promise; // API Token management - getApiToken(id: number): Promise; + getApiToken(id: string): Promise; getApiTokenByToken(token: string): Promise; - getApiTokensByOrganization(organizationId: number): Promise; + getApiTokensByOrganization(organizationId: string): Promise; createApiToken(token: InsertApiToken): Promise; - updateApiToken(id: number, token: Partial): Promise; - deleteApiToken(id: number): Promise; + updateApiToken(id: string, token: Partial): Promise; + deleteApiToken(id: string): Promise; // DNS History - addDnsHistory(recordId: number, action: string, previousValue?: string, newValue?: string, userId?: number): Promise; - getDnsHistoryByRecord(recordId: number): Promise; - getDnsHistoryByDomain(domainId: number): Promise; + addDnsHistory(recordId: string, action: string, previousValue?: string, newValue?: string, userId?: string): Promise; + getDnsHistoryByRecord(recordId: string): Promise; + getDnsHistoryByDomain(domainId: string): Promise; // Session store sessionStore: any; diff --git a/shared/schema.ts b/shared/schema.ts index 19da11a..36619db 100644 --- a/shared/schema.ts +++ b/shared/schema.ts @@ -1,24 +1,24 @@ -import { pgTable, text, serial, integer, boolean, timestamp, jsonb, foreignKey, unique } from "drizzle-orm/pg-core"; +import { pgTable, text, uuid, integer, serial, boolean, timestamp, jsonb, foreignKey, unique } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { z } from "zod"; import { relations } from "drizzle-orm"; // Users & Authentication export const organizations = pgTable("organizations", { - id: serial("id").primaryKey(), + id: uuid("id").defaultRandom().primaryKey(), name: text("name").notNull(), isActive: boolean("is_active").default(true).notNull(), createdAt: timestamp("created_at").defaultNow().notNull(), }); export const users = pgTable("users", { - id: serial("id").primaryKey(), + id: uuid("id").defaultRandom().primaryKey(), username: text("username").notNull().unique(), password: text("password").notNull(), email: text("email").notNull().unique(), fullName: text("full_name"), role: text("role").default("user").notNull(), - organizationId: integer("organization_id").references(() => organizations.id, { onDelete: "set null" }), + organizationId: uuid("organization_id").references(() => organizations.id, { onDelete: "set null" }), createdAt: timestamp("created_at").defaultNow().notNull(), }); @@ -33,7 +33,7 @@ export const usersRelations = relations(users, ({ one }) => ({ // DNS Management export const providers = pgTable("providers", { - id: serial("id").primaryKey(), + id: uuid("id").defaultRandom().primaryKey(), name: text("name").notNull(), type: text("type").notNull(), credentials: jsonb("credentials"), @@ -42,18 +42,18 @@ export const providers = pgTable("providers", { }); export const domains = pgTable("domains", { - id: serial("id").primaryKey(), + id: uuid("id").defaultRandom().primaryKey(), name: text("name").notNull(), - organizationId: integer("organization_id").notNull().references(() => organizations.id, { onDelete: "cascade" }), - providerId: integer("provider_id").notNull().references(() => providers.id, { onDelete: "cascade" }), + organizationId: uuid("organization_id").notNull().references(() => organizations.id, { onDelete: "cascade" }), + providerId: uuid("provider_id").notNull().references(() => providers.id, { onDelete: "cascade" }), isActive: boolean("is_active").default(true).notNull(), lastUpdated: timestamp("last_updated"), createdAt: timestamp("created_at").defaultNow().notNull(), }); export const dnsRecords = pgTable("dns_records", { - id: serial("id").primaryKey(), - domainId: integer("domain_id").notNull().references(() => domains.id, { onDelete: "cascade" }), + id: uuid("id").defaultRandom().primaryKey(), + domainId: uuid("domain_id").notNull().references(() => domains.id, { onDelete: "cascade" }), name: text("name").notNull(), type: text("type").notNull(), content: text("content").notNull(), @@ -67,23 +67,23 @@ export const dnsRecords = pgTable("dns_records", { }); export const dnsHistory = pgTable("dns_history", { - id: serial("id").primaryKey(), - recordId: integer("record_id").notNull().references(() => dnsRecords.id, { onDelete: "cascade" }), + id: uuid("id").defaultRandom().primaryKey(), + recordId: uuid("record_id").notNull().references(() => dnsRecords.id, { onDelete: "cascade" }), action: text("action").notNull(), previousValue: text("previous_value"), newValue: text("new_value"), - userId: integer("user_id").references(() => users.id, { onDelete: "set null" }), + userId: uuid("user_id").references(() => users.id, { onDelete: "set null" }), timestamp: timestamp("timestamp").defaultNow().notNull(), }); // API Tokens export const apiTokens = pgTable("api_tokens", { - id: serial("id").primaryKey(), + id: uuid("id").defaultRandom().primaryKey(), name: text("name").notNull(), token: text("token").notNull().unique(), - organizationId: integer("organization_id").notNull().references(() => organizations.id, { onDelete: "cascade" }), + organizationId: uuid("organization_id").notNull().references(() => organizations.id, { onDelete: "cascade" }), permissions: text("permissions").array(), - createdBy: integer("created_by").notNull().references(() => users.id, { onDelete: "cascade" }), + createdBy: uuid("created_by").notNull().references(() => users.id, { onDelete: "cascade" }), isActive: boolean("is_active").default(true).notNull(), createdAt: timestamp("created_at").defaultNow().notNull(), expiresAt: timestamp("expires_at"),