feat: add prisma migrate
This commit is contained in:
parent
3cf3cfa427
commit
37757f6563
@ -1,8 +1,11 @@
|
|||||||
import { AuthConfig } from '@auth/core';
|
import { AuthConfig } from '@auth/core';
|
||||||
import Nodemailer from '@auth/core/providers/nodemailer';
|
import Nodemailer from '@auth/core/providers/nodemailer';
|
||||||
import { env } from '../utils/env';
|
import { env } from '../utils/env';
|
||||||
|
import { PrismaAdapter } from '@auth/prisma-adapter';
|
||||||
|
import { prisma } from './_client';
|
||||||
|
|
||||||
export const authConfig: Omit<AuthConfig, 'raw'> = {
|
export const authConfig: Omit<AuthConfig, 'raw'> = {
|
||||||
providers: [Nodemailer],
|
providers: [Nodemailer(env.auth.email)],
|
||||||
|
adapter: PrismaAdapter(prisma),
|
||||||
secret: env.auth.secret,
|
secret: env.auth.secret,
|
||||||
};
|
};
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "User" ADD COLUMN "email" TEXT,
|
||||||
|
ADD COLUMN "emailVerified" TIMESTAMP(3),
|
||||||
|
ADD COLUMN "image" TEXT,
|
||||||
|
ADD COLUMN "name" TEXT;
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Account" (
|
||||||
|
"userId" TEXT NOT NULL,
|
||||||
|
"type" TEXT NOT NULL,
|
||||||
|
"provider" TEXT NOT NULL,
|
||||||
|
"providerAccountId" TEXT NOT NULL,
|
||||||
|
"refresh_token" TEXT,
|
||||||
|
"access_token" TEXT,
|
||||||
|
"expires_at" INTEGER,
|
||||||
|
"token_type" TEXT,
|
||||||
|
"scope" TEXT,
|
||||||
|
"id_token" TEXT,
|
||||||
|
"session_state" TEXT,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Account_pkey" PRIMARY KEY ("provider","providerAccountId")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Session" (
|
||||||
|
"sessionToken" TEXT NOT NULL,
|
||||||
|
"userId" TEXT NOT NULL,
|
||||||
|
"expires" TIMESTAMP(3) NOT NULL,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "VerificationToken" (
|
||||||
|
"identifier" TEXT NOT NULL,
|
||||||
|
"token" TEXT NOT NULL,
|
||||||
|
"expires" TIMESTAMP(3) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "VerificationToken_pkey" PRIMARY KEY ("identifier","token")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Session_sessionToken_key" ON "Session"("sessionToken");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
@ -19,6 +19,10 @@ generator zod {
|
|||||||
|
|
||||||
model User {
|
model User {
|
||||||
id String @id @unique @default(cuid()) @db.VarChar(30)
|
id String @id @unique @default(cuid()) @db.VarChar(30)
|
||||||
|
name String?
|
||||||
|
email String?
|
||||||
|
emailVerified DateTime?
|
||||||
|
image String?
|
||||||
username String @unique @db.VarChar(255)
|
username String @unique @db.VarChar(255)
|
||||||
password String @db.VarChar(60)
|
password String @db.VarChar(60)
|
||||||
role String @db.VarChar(50)
|
role String @db.VarChar(50)
|
||||||
@ -29,9 +33,50 @@ model User {
|
|||||||
|
|
||||||
currentWorkspace Workspace @relation(fields: [currentWorkspaceId], references: [id])
|
currentWorkspace Workspace @relation(fields: [currentWorkspaceId], references: [id])
|
||||||
|
|
||||||
|
accounts Account[]
|
||||||
|
sessions Session[]
|
||||||
workspaces WorkspacesOnUsers[]
|
workspaces WorkspacesOnUsers[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model Account {
|
||||||
|
userId String
|
||||||
|
type String
|
||||||
|
provider String
|
||||||
|
providerAccountId String
|
||||||
|
refresh_token String?
|
||||||
|
access_token String?
|
||||||
|
expires_at Int?
|
||||||
|
token_type String?
|
||||||
|
scope String?
|
||||||
|
id_token String?
|
||||||
|
session_state String?
|
||||||
|
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
|
@@id([provider, providerAccountId])
|
||||||
|
}
|
||||||
|
|
||||||
|
model Session {
|
||||||
|
sessionToken String @unique
|
||||||
|
userId String
|
||||||
|
expires DateTime
|
||||||
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
}
|
||||||
|
|
||||||
|
model VerificationToken {
|
||||||
|
identifier String
|
||||||
|
token String
|
||||||
|
expires DateTime
|
||||||
|
|
||||||
|
@@id([identifier, token])
|
||||||
|
}
|
||||||
|
|
||||||
model Workspace {
|
model Workspace {
|
||||||
id String @id @unique @default(cuid()) @db.VarChar(30)
|
id String @id @unique @default(cuid()) @db.VarChar(30)
|
||||||
name String @db.VarChar(100)
|
name String @db.VarChar(100)
|
||||||
|
32
src/server/prisma/zod/account.ts
Normal file
32
src/server/prisma/zod/account.ts
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import * as z from "zod"
|
||||||
|
import * as imports from "./schemas"
|
||||||
|
import { CompleteUser, RelatedUserModelSchema } from "./index"
|
||||||
|
|
||||||
|
export const AccountModelSchema = z.object({
|
||||||
|
userId: z.string(),
|
||||||
|
type: z.string(),
|
||||||
|
provider: z.string(),
|
||||||
|
providerAccountId: z.string(),
|
||||||
|
refresh_token: z.string().nullish(),
|
||||||
|
access_token: z.string().nullish(),
|
||||||
|
expires_at: z.number().int().nullish(),
|
||||||
|
token_type: z.string().nullish(),
|
||||||
|
scope: z.string().nullish(),
|
||||||
|
id_token: z.string().nullish(),
|
||||||
|
session_state: z.string().nullish(),
|
||||||
|
createdAt: z.date(),
|
||||||
|
updatedAt: z.date(),
|
||||||
|
})
|
||||||
|
|
||||||
|
export interface CompleteAccount extends z.infer<typeof AccountModelSchema> {
|
||||||
|
user: CompleteUser
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RelatedAccountModelSchema contains all relations on your model in addition to the scalars
|
||||||
|
*
|
||||||
|
* NOTE: Lazy required in case of potential circular dependencies within schema
|
||||||
|
*/
|
||||||
|
export const RelatedAccountModelSchema: z.ZodSchema<CompleteAccount> = z.lazy(() => AccountModelSchema.extend({
|
||||||
|
user: RelatedUserModelSchema,
|
||||||
|
}))
|
@ -1,4 +1,7 @@
|
|||||||
export * from "./user"
|
export * from "./user"
|
||||||
|
export * from "./account"
|
||||||
|
export * from "./session"
|
||||||
|
export * from "./verificationtoken"
|
||||||
export * from "./workspace"
|
export * from "./workspace"
|
||||||
export * from "./workspacesonusers"
|
export * from "./workspacesonusers"
|
||||||
export * from "./website"
|
export * from "./website"
|
||||||
|
24
src/server/prisma/zod/session.ts
Normal file
24
src/server/prisma/zod/session.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import * as z from "zod"
|
||||||
|
import * as imports from "./schemas"
|
||||||
|
import { CompleteUser, RelatedUserModelSchema } from "./index"
|
||||||
|
|
||||||
|
export const SessionModelSchema = z.object({
|
||||||
|
sessionToken: z.string(),
|
||||||
|
userId: z.string(),
|
||||||
|
expires: z.date(),
|
||||||
|
createdAt: z.date(),
|
||||||
|
updatedAt: z.date(),
|
||||||
|
})
|
||||||
|
|
||||||
|
export interface CompleteSession extends z.infer<typeof SessionModelSchema> {
|
||||||
|
user: CompleteUser
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RelatedSessionModelSchema contains all relations on your model in addition to the scalars
|
||||||
|
*
|
||||||
|
* NOTE: Lazy required in case of potential circular dependencies within schema
|
||||||
|
*/
|
||||||
|
export const RelatedSessionModelSchema: z.ZodSchema<CompleteSession> = z.lazy(() => SessionModelSchema.extend({
|
||||||
|
user: RelatedUserModelSchema,
|
||||||
|
}))
|
@ -1,9 +1,13 @@
|
|||||||
import * as z from "zod"
|
import * as z from "zod"
|
||||||
import * as imports from "./schemas"
|
import * as imports from "./schemas"
|
||||||
import { CompleteWorkspace, RelatedWorkspaceModelSchema, CompleteWorkspacesOnUsers, RelatedWorkspacesOnUsersModelSchema } from "./index"
|
import { CompleteWorkspace, RelatedWorkspaceModelSchema, CompleteAccount, RelatedAccountModelSchema, CompleteSession, RelatedSessionModelSchema, CompleteWorkspacesOnUsers, RelatedWorkspacesOnUsersModelSchema } from "./index"
|
||||||
|
|
||||||
export const UserModelSchema = z.object({
|
export const UserModelSchema = z.object({
|
||||||
id: z.string(),
|
id: z.string(),
|
||||||
|
name: z.string().nullish(),
|
||||||
|
email: z.string().nullish(),
|
||||||
|
emailVerified: z.date().nullish(),
|
||||||
|
image: z.string().nullish(),
|
||||||
username: z.string(),
|
username: z.string(),
|
||||||
password: z.string(),
|
password: z.string(),
|
||||||
role: z.string(),
|
role: z.string(),
|
||||||
@ -15,6 +19,8 @@ export const UserModelSchema = z.object({
|
|||||||
|
|
||||||
export interface CompleteUser extends z.infer<typeof UserModelSchema> {
|
export interface CompleteUser extends z.infer<typeof UserModelSchema> {
|
||||||
currentWorkspace: CompleteWorkspace
|
currentWorkspace: CompleteWorkspace
|
||||||
|
accounts: CompleteAccount[]
|
||||||
|
sessions: CompleteSession[]
|
||||||
workspaces: CompleteWorkspacesOnUsers[]
|
workspaces: CompleteWorkspacesOnUsers[]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,5 +31,7 @@ export interface CompleteUser extends z.infer<typeof UserModelSchema> {
|
|||||||
*/
|
*/
|
||||||
export const RelatedUserModelSchema: z.ZodSchema<CompleteUser> = z.lazy(() => UserModelSchema.extend({
|
export const RelatedUserModelSchema: z.ZodSchema<CompleteUser> = z.lazy(() => UserModelSchema.extend({
|
||||||
currentWorkspace: RelatedWorkspaceModelSchema,
|
currentWorkspace: RelatedWorkspaceModelSchema,
|
||||||
|
accounts: RelatedAccountModelSchema.array(),
|
||||||
|
sessions: RelatedSessionModelSchema.array(),
|
||||||
workspaces: RelatedWorkspacesOnUsersModelSchema.array(),
|
workspaces: RelatedWorkspacesOnUsersModelSchema.array(),
|
||||||
}))
|
}))
|
||||||
|
8
src/server/prisma/zod/verificationtoken.ts
Normal file
8
src/server/prisma/zod/verificationtoken.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import * as z from "zod"
|
||||||
|
import * as imports from "./schemas"
|
||||||
|
|
||||||
|
export const VerificationTokenModelSchema = z.object({
|
||||||
|
identifier: z.string(),
|
||||||
|
token: z.string(),
|
||||||
|
expires: z.date(),
|
||||||
|
})
|
@ -14,6 +14,10 @@ export const env = {
|
|||||||
port: Number(process.env.PORT || 12345),
|
port: Number(process.env.PORT || 12345),
|
||||||
auth: {
|
auth: {
|
||||||
secret: process.env.AUTH_SECRET || md5(jwtSecret),
|
secret: process.env.AUTH_SECRET || md5(jwtSecret),
|
||||||
|
email: {
|
||||||
|
server: process.env.EMAIL_SERVER,
|
||||||
|
from: process.env.EMAIL_FROM,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
allowRegister: checkEnvTrusty(process.env.ALLOW_REGISTER),
|
allowRegister: checkEnvTrusty(process.env.ALLOW_REGISTER),
|
||||||
allowOpenapi: checkEnvTrusty(process.env.ALLOW_OPENAPI ?? 'true'),
|
allowOpenapi: checkEnvTrusty(process.env.ALLOW_OPENAPI ?? 'true'),
|
||||||
|
Loading…
Reference in New Issue
Block a user