refactor: migration

This commit is contained in:
Mauricio Siu
2025-02-09 18:56:17 -06:00
parent c04bf3c7e0
commit fafc238e70
22 changed files with 138 additions and 101 deletions

View File

@@ -1,9 +1,9 @@
import {
boolean,
integer,
pgTable,
text,
integer,
timestamp,
boolean,
} from "drizzle-orm/pg-core";
export const user = pgTable("user", {

View File

@@ -1,5 +1,5 @@
import { boolean, pgTable, text, timestamp } from "drizzle-orm/pg-core";
import { users } from "./user";
import { user } from "./user";
export const account = pgTable("account", {
id: text("id").primaryKey(),
@@ -7,7 +7,7 @@ export const account = pgTable("account", {
providerId: text("provider_id").notNull(),
userId: text("user_id")
.notNull()
.references(() => users.id),
.references(() => user.id),
accessToken: text("access_token"),
refreshToken: text("refresh_token"),
idToken: text("id_token"),

View File

@@ -5,7 +5,7 @@ import { createInsertSchema } from "drizzle-zod";
import { nanoid } from "nanoid";
import { z } from "zod";
// import { admins } from "./admin";
import { users } from "./user";
import { user } from "./user";
const randomImages = [
"/avatars/avatar-1.png",
@@ -56,7 +56,7 @@ export const auth = pgTable("auth", {
export const authRelations = relations(auth, ({ many }) => ({
// admins: many(admins),
users: many(users),
users: many(user),
}));
const createSchema = createInsertSchema(auth, {
email: z.string().email(),

View File

@@ -4,8 +4,8 @@ import { createInsertSchema } from "drizzle-zod";
import { nanoid } from "nanoid";
import { z } from "zod";
import { server } from "./server";
import { user } from "./user";
import { generateAppName } from "./utils";
import { users } from "./user";
export const certificates = pgTable("certificate", {
certificateId: text("certificateId")
@@ -20,7 +20,7 @@ export const certificates = pgTable("certificate", {
.$defaultFn(() => generateAppName("certificate"))
.unique(),
autoRenew: boolean("autoRenew"),
userId: text("userId").references(() => users.id, {
userId: text("userId").references(() => user.id, {
onDelete: "cascade",
}),
serverId: text("serverId").references(() => server.serverId, {
@@ -35,9 +35,9 @@ export const certificatesRelations = relations(
fields: [certificates.serverId],
references: [server.serverId],
}),
user: one(users, {
user: one(user, {
fields: [certificates.userId],
references: [users.id],
references: [user.id],
}),
}),
);

View File

@@ -5,7 +5,7 @@ import { nanoid } from "nanoid";
import { z } from "zod";
import { admins } from "./admin";
import { backups } from "./backups";
import { users } from "./user";
import { user } from "./user";
export const destinations = pgTable("destination", {
destinationId: text("destinationId")
@@ -22,16 +22,16 @@ export const destinations = pgTable("destination", {
endpoint: text("endpoint").notNull(),
userId: text("userId")
.notNull()
.references(() => users.id, { onDelete: "cascade" }),
.references(() => user.id, { onDelete: "cascade" }),
});
export const destinationsRelations = relations(
destinations,
({ many, one }) => ({
backups: many(backups),
user: one(users, {
user: one(user, {
fields: [destinations.userId],
references: [users.id],
references: [user.id],
}),
}),
);

View File

@@ -7,7 +7,7 @@ import { admins } from "./admin";
import { bitbucket } from "./bitbucket";
import { github } from "./github";
import { gitlab } from "./gitlab";
import { users } from "./user";
import { user } from "./user";
export const gitProviderType = pgEnum("gitProviderType", [
"github",
@@ -25,7 +25,7 @@ export const gitProvider = pgTable("git_provider", {
createdAt: text("createdAt")
.notNull()
.$defaultFn(() => new Date().toISOString()),
userId: text("userId").references(() => users.id, {
userId: text("userId").references(() => user.id, {
onDelete: "cascade",
}),
});
@@ -43,9 +43,9 @@ export const gitProviderRelations = relations(gitProvider, ({ one, many }) => ({
fields: [gitProvider.gitProviderId],
references: [bitbucket.gitProviderId],
}),
user: one(users, {
user: one(user, {
fields: [gitProvider.userId],
references: [users.id],
references: [user.id],
}),
}));

View File

@@ -4,7 +4,7 @@ import { createInsertSchema } from "drizzle-zod";
import { nanoid } from "nanoid";
import { z } from "zod";
import { admins } from "./admin";
import { users } from "./user";
import { user } from "./user";
export const notificationType = pgEnum("notificationType", [
"slack",
@@ -45,7 +45,7 @@ export const notifications = pgTable("notification", {
gotifyId: text("gotifyId").references(() => gotify.gotifyId, {
onDelete: "cascade",
}),
userId: text("userId").references(() => users.id, {
userId: text("userId").references(() => user.id, {
onDelete: "cascade",
}),
});
@@ -122,9 +122,9 @@ export const notificationsRelations = relations(notifications, ({ one }) => ({
fields: [notifications.gotifyId],
references: [gotify.gotifyId],
}),
user: one(users, {
user: one(user, {
fields: [notifications.userId],
references: [users.id],
references: [user.id],
}),
}));

View File

@@ -12,7 +12,7 @@ import { mongo } from "./mongo";
import { mysql } from "./mysql";
import { postgres } from "./postgres";
import { redis } from "./redis";
import { users } from "./user";
import { user } from "./user";
export const projects = pgTable("project", {
projectId: text("projectId")
@@ -26,7 +26,7 @@ export const projects = pgTable("project", {
.$defaultFn(() => new Date().toISOString()),
userId: text("userId")
.notNull()
.references(() => users.id, { onDelete: "cascade" }),
.references(() => user.id, { onDelete: "cascade" }),
env: text("env").notNull().default(""),
});
@@ -38,9 +38,9 @@ export const projectRelations = relations(projects, ({ many, one }) => ({
mongo: many(mongo),
redis: many(redis),
compose: many(compose),
user: one(users, {
user: one(user, {
fields: [projects.userId],
references: [users.id],
references: [user.id],
}),
}));

View File

@@ -5,7 +5,7 @@ import { nanoid } from "nanoid";
import { z } from "zod";
import { admins } from "./admin";
import { applications } from "./application";
import { users } from "./user";
import { user } from "./user";
/**
* This is an example of how to use the multi-project schema feature of Drizzle ORM. Use the same
* database instance for multiple projects.
@@ -30,13 +30,13 @@ export const registry = pgTable("registry", {
registryType: registryType("selfHosted").notNull().default("cloud"),
userId: text("userId")
.notNull()
.references(() => users.id, { onDelete: "cascade" }),
.references(() => user.id, { onDelete: "cascade" }),
});
export const registryRelations = relations(registry, ({ one, many }) => ({
user: one(users, {
user: one(user, {
fields: [registry.userId],
references: [users.id],
references: [user.id],
}),
applications: many(applications),
}));

View File

@@ -22,8 +22,8 @@ import { mysql } from "./mysql";
import { postgres } from "./postgres";
import { redis } from "./redis";
import { sshKeys } from "./ssh-key";
import { user } from "./user";
import { generateAppName } from "./utils";
import { users } from "./user";
export const serverStatus = pgEnum("serverStatus", ["active", "inactive"]);
@@ -46,7 +46,7 @@ export const server = pgTable("server", {
.$defaultFn(() => new Date().toISOString()),
userId: text("userId")
.notNull()
.references(() => users.id, { onDelete: "cascade" }),
.references(() => user.id, { onDelete: "cascade" }),
serverStatus: serverStatus("serverStatus").notNull().default("active"),
command: text("command").notNull().default(""),
sshKeyId: text("sshKeyId").references(() => sshKeys.sshKeyId, {
@@ -101,9 +101,9 @@ export const server = pgTable("server", {
});
export const serverRelations = relations(server, ({ one, many }) => ({
user: one(users, {
user: one(user, {
fields: [server.userId],
references: [users.id],
references: [user.id],
}),
deployments: many(deployments),
sshKey: one(sshKeys, {

View File

@@ -1,5 +1,5 @@
import { pgTable, text, timestamp } from "drizzle-orm/pg-core";
import { users } from "./user";
import { user } from "./user";
// OLD TABLE
export const sessionTable = pgTable("session", {
@@ -12,6 +12,6 @@ export const sessionTable = pgTable("session", {
userAgent: text("user_agent"),
userId: text("user_id")
.notNull()
.references(() => users.id),
.references(() => user.id),
impersonatedBy: text("impersonated_by"),
});

View File

@@ -7,7 +7,7 @@ import { admins } from "./admin";
import { applications } from "./application";
import { compose } from "./compose";
import { server } from "./server";
import { users } from "./user";
import { user } from "./user";
export const sshKeys = pgTable("ssh-key", {
sshKeyId: text("sshKeyId")
@@ -22,7 +22,7 @@ export const sshKeys = pgTable("ssh-key", {
.notNull()
.$defaultFn(() => new Date().toISOString()),
lastUsedAt: text("lastUsedAt"),
userId: text("userId").references(() => users.id, {
userId: text("userId").references(() => user.id, {
onDelete: "cascade",
}),
});
@@ -31,9 +31,9 @@ export const sshKeysRelations = relations(sshKeys, ({ many, one }) => ({
applications: many(applications),
compose: many(compose),
servers: many(server),
user: one(users, {
user: one(user, {
fields: [sshKeys.userId],
references: [users.id],
references: [user.id],
}),
}));

View File

@@ -14,7 +14,7 @@ import { certificateType } from "./shared";
*/
// OLD TABLE
export const users = pgTable("user", {
export const user = pgTable("user", {
id: text("id")
.notNull()
.primaryKey()
@@ -129,7 +129,7 @@ export const users = pgTable("user", {
.default(false),
});
export const usersRelations = relations(users, ({ one }) => ({
export const usersRelations = relations(user, ({ one }) => ({
// auth: one(auth, {
// fields: [users.authId],
// references: [auth.id],
@@ -140,7 +140,7 @@ export const usersRelations = relations(users, ({ one }) => ({
// }),
}));
const createSchema = createInsertSchema(users, {
const createSchema = createInsertSchema(user, {
id: z.string().min(1),
// authId: z.string().min(1),
token: z.string().min(1),

View File

@@ -2,10 +2,11 @@ import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { admin } from "better-auth/plugins";
import { db } from "../db";
import * as schema from "../db/schema";
export const auth = betterAuth({
database: drizzleAdapter(db, {
provider: "pg",
schema: schema,
}),
emailAndPassword: {
enabled: true,

View File

@@ -4,7 +4,7 @@ import {
admins,
type apiCreateUserInvitation,
auth,
users,
user,
} from "@dokploy/server/db/schema";
import { TRPCError } from "@trpc/server";
import * as bcrypt from "bcrypt";

View File

@@ -5,7 +5,7 @@ import {
type apiCreateAdmin,
type apiCreateUser,
auth,
users,
user,
} from "@dokploy/server/db/schema";
import { getPublicIpWithFallback } from "@dokploy/server/wss/utils";
import { TRPCError } from "@trpc/server";

View File

@@ -1,15 +1,15 @@
import { db } from "@dokploy/server/db";
import { users } from "@dokploy/server/db/schema";
import { user } from "@dokploy/server/db/schema";
import { TRPCError } from "@trpc/server";
import { eq } from "drizzle-orm";
export type User = typeof users.$inferSelect;
export type User = typeof user.$inferSelect;
export const findUserById = async (userId: string) => {
const user = await db.query.users.findFirst({
where: eq(users.userId, userId),
const userR = await db.query.user.findFirst({
where: eq(user.userId, userId),
});
if (!user) {
if (!userR) {
throw new TRPCError({
code: "NOT_FOUND",
message: "User not found",
@@ -19,8 +19,8 @@ export const findUserById = async (userId: string) => {
};
export const findUserByAuthId = async (authId: string) => {
const user = await db.query.users.findFirst({
where: eq(users.authId, authId),
const userR = await db.query.user.findFirst({
where: eq(user.authId, authId),
with: {
auth: true,
},
@@ -35,8 +35,8 @@ export const findUserByAuthId = async (authId: string) => {
};
export const findUsers = async (adminId: string) => {
const currentUsers = await db.query.users.findMany({
where: eq(users.adminId, adminId),
const currentUsers = await db.query.user.findMany({
where: eq(user.adminId, adminId),
with: {
auth: {
columns: {
@@ -49,24 +49,24 @@ export const findUsers = async (adminId: string) => {
};
export const addNewProject = async (authId: string, projectId: string) => {
const user = await findUserByAuthId(authId);
const userR = await findUserByAuthId(authId);
await db
.update(users)
.update(user)
.set({
accessedProjects: [...user.accessedProjects, projectId],
accessedProjects: [...userR.accessedProjects, projectId],
})
.where(eq(users.authId, authId));
.where(eq(user.authId, authId));
};
export const addNewService = async (authId: string, serviceId: string) => {
const user = await findUserByAuthId(authId);
const userR = await findUserByAuthId(authId);
await db
.update(users)
.update(user)
.set({
accessedServices: [...user.accessedServices, serviceId],
accessedServices: [...userR.accessedServices, serviceId],
})
.where(eq(users.authId, authId));
.where(eq(user.authId, authId));
};
export const canPerformCreationService = async (