fix: refactor prisma relations (#1581)

This commit is contained in:
David Nguyen
2025-01-13 13:41:53 +11:00
committed by GitHub
parent 48b55758e3
commit 7d0a9c6439
143 changed files with 687 additions and 790 deletions

View File

@@ -46,9 +46,9 @@ model User {
accounts Account[]
sessions Session[]
Document Document[]
Subscription Subscription[]
PasswordResetToken PasswordResetToken[]
documents Document[]
subscriptions Subscription[]
passwordResetTokens PasswordResetToken[]
ownedTeams Team[]
ownedPendingTeams TeamPending[]
teamMembers TeamMember[]
@@ -57,15 +57,15 @@ model User {
twoFactorBackupCodes String?
url String? @unique
profile UserProfile?
VerificationToken VerificationToken[]
ApiToken ApiToken[]
Template Template[]
securityAuditLogs UserSecurityAuditLog[]
Webhooks Webhook[]
siteSettings SiteSettings[]
passkeys Passkey[]
avatarImage AvatarImage? @relation(fields: [avatarImageId], references: [id], onDelete: SetNull)
profile UserProfile?
verificationTokens VerificationToken[]
apiTokens ApiToken[]
templates Template[]
securityAuditLogs UserSecurityAuditLog[]
webhooks Webhook[]
siteSettings SiteSettings[]
passkeys Passkey[]
avatarImage AvatarImage? @relation(fields: [avatarImageId], references: [id], onDelete: SetNull)
@@index([email])
}
@@ -113,7 +113,7 @@ model UserSecurityAuditLog {
userAgent String?
ipAddress String?
User User @relation(fields: [userId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model PasswordResetToken {
@@ -122,7 +122,7 @@ model PasswordResetToken {
createdAt DateTime @default(now())
expiry DateTime
userId Int
User User @relation(fields: [userId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model Passkey {
@@ -139,7 +139,7 @@ model Passkey {
credentialBackedUp Boolean
transports String[]
User User @relation(fields: [userId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model AnonymousVerificationToken {
@@ -179,10 +179,10 @@ model Webhook {
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
userId Int
User User @relation(fields: [userId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
teamId Int?
team Team? @relation(fields: [teamId], references: [id], onDelete: Cascade)
WebhookCall WebhookCall[]
webhookCalls WebhookCall[]
}
enum WebhookCallStatus {
@@ -240,7 +240,7 @@ model Subscription {
cancelAtPeriodEnd Boolean @default(false)
team Team? @relation(fields: [teamId], references: [id], onDelete: Cascade)
User User? @relation(fields: [userId], references: [id], onDelete: Cascade)
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId])
}
@@ -298,15 +298,15 @@ model Document {
id Int @id @default(autoincrement())
externalId String?
userId Int
User User @relation(fields: [userId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
authOptions Json?
formValues Json?
visibility DocumentVisibility @default(EVERYONE)
title String
status DocumentStatus @default(DRAFT)
Recipient Recipient[]
Field Field[]
ShareLink DocumentShareLink[]
recipients Recipient[]
fields Field[]
shareLinks DocumentShareLink[]
documentDataId String
documentData DocumentData @relation(fields: [documentDataId], references: [id], onDelete: Cascade)
documentMeta DocumentMeta?
@@ -360,8 +360,8 @@ model DocumentData {
type DocumentDataType
data String
initialData String
Document Document?
Template Template?
document Document?
template Template?
}
enum DocumentDistributionMethod {
@@ -426,10 +426,10 @@ model Recipient {
readStatus ReadStatus @default(NOT_OPENED)
signingStatus SigningStatus @default(NOT_SIGNED)
sendStatus SendStatus @default(NOT_SENT)
Document Document? @relation(fields: [documentId], references: [id], onDelete: Cascade)
Template Template? @relation(fields: [templateId], references: [id], onDelete: Cascade)
Field Field[]
Signature Signature[]
document Document? @relation(fields: [documentId], references: [id], onDelete: Cascade)
template Template? @relation(fields: [templateId], references: [id], onDelete: Cascade)
fields Field[]
signatures Signature[]
@@unique([documentId, email])
@@unique([templateId, email])
@@ -466,10 +466,10 @@ model Field {
height Decimal @default(-1)
customText String
inserted Boolean
Document Document? @relation(fields: [documentId], references: [id], onDelete: Cascade)
Template Template? @relation(fields: [templateId], references: [id], onDelete: Cascade)
Recipient Recipient @relation(fields: [recipientId], references: [id], onDelete: Cascade)
Signature Signature?
document Document? @relation(fields: [documentId], references: [id], onDelete: Cascade)
template Template? @relation(fields: [templateId], references: [id], onDelete: Cascade)
recipient Recipient @relation(fields: [recipientId], references: [id], onDelete: Cascade)
signature Signature?
fieldMeta Json?
@@index([documentId])
@@ -485,8 +485,8 @@ model Signature {
signatureImageAsBase64 String?
typedSignature String?
Recipient Recipient @relation(fields: [recipientId], references: [id], onDelete: Cascade)
Field Field @relation(fields: [fieldId], references: [id], onDelete: Cascade)
recipient Recipient @relation(fields: [recipientId], references: [id], onDelete: Cascade)
field Field @relation(fields: [fieldId], references: [id], onDelete: Cascade)
@@index([recipientId])
}
@@ -554,10 +554,10 @@ model Team {
owner User @relation(fields: [ownerUserId], references: [id], onDelete: Cascade)
subscription Subscription?
document Document[]
documents Document[]
templates Template[]
ApiToken ApiToken[]
Webhook Webhook[]
apiTokens ApiToken[]
webhooks Webhook[]
}
model TeamPending {
@@ -671,9 +671,9 @@ model Template {
team Team? @relation(fields: [teamId], references: [id], onDelete: Cascade)
templateDocumentData DocumentData @relation(fields: [templateDocumentDataId], references: [id], onDelete: Cascade)
User User @relation(fields: [userId], references: [id], onDelete: Cascade)
Recipient Recipient[]
Field Field[]
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
recipients Recipient[]
fields Field[]
directLink TemplateDirectLink?
documents Document[]

View File

@@ -115,7 +115,7 @@ export const seedDraftDocument = async (
for (const recipient of recipients) {
const email = typeof recipient === 'string' ? recipient : recipient.email;
const name = typeof recipient === 'string' ? recipient : recipient.name ?? '';
const name = typeof recipient === 'string' ? recipient : (recipient.name ?? '');
await prisma.recipient.create({
data: {
@@ -126,12 +126,12 @@ export const seedDraftDocument = async (
sendStatus: SendStatus.NOT_SENT,
signingStatus: SigningStatus.NOT_SIGNED,
signedAt: new Date(),
Document: {
document: {
connect: {
id: document.id,
},
},
Field: {
fields: {
create: {
page: 1,
type: FieldType.NAME,
@@ -184,7 +184,7 @@ export const seedPendingDocument = async (
for (const recipient of recipients) {
const email = typeof recipient === 'string' ? recipient : recipient.email;
const name = typeof recipient === 'string' ? recipient : recipient.name ?? '';
const name = typeof recipient === 'string' ? recipient : (recipient.name ?? '');
await prisma.recipient.create({
data: {
@@ -195,12 +195,12 @@ export const seedPendingDocument = async (
sendStatus: SendStatus.SENT,
signingStatus: SigningStatus.NOT_SIGNED,
signedAt: new Date(),
Document: {
document: {
connect: {
id: document.id,
},
},
Field: {
fields: {
create: {
page: 1,
type: FieldType.NAME,
@@ -222,7 +222,7 @@ export const seedPendingDocument = async (
id: document.id,
},
include: {
Recipient: true,
recipients: true,
},
});
};
@@ -240,7 +240,7 @@ export const seedPendingDocumentNoFields = async ({
for (const recipient of recipients) {
const email = typeof recipient === 'string' ? recipient : recipient.email;
const name = typeof recipient === 'string' ? recipient : recipient.name ?? '';
const name = typeof recipient === 'string' ? recipient : (recipient.name ?? '');
await prisma.recipient.create({
data: {
@@ -251,7 +251,7 @@ export const seedPendingDocumentNoFields = async ({
sendStatus: SendStatus.SENT,
signingStatus: SigningStatus.NOT_SIGNED,
signedAt: new Date(),
Document: {
document: {
connect: {
id: document.id,
},
@@ -265,7 +265,7 @@ export const seedPendingDocumentNoFields = async ({
documentId: document.id,
},
include: {
Field: true,
fields: true,
},
});
@@ -301,7 +301,7 @@ export const seedPendingDocumentWithFullFields = async ({
for (const [recipientIndex, recipient] of recipients.entries()) {
const email = typeof recipient === 'string' ? recipient : recipient.email;
const name = typeof recipient === 'string' ? recipient : recipient.name ?? '';
const name = typeof recipient === 'string' ? recipient : (recipient.name ?? '');
await prisma.recipient.create({
data: {
@@ -312,12 +312,12 @@ export const seedPendingDocumentWithFullFields = async ({
sendStatus: SendStatus.SENT,
signingStatus: SigningStatus.NOT_SIGNED,
signedAt: new Date(),
Document: {
document: {
connect: {
id: document.id,
},
},
Field: {
fields: {
createMany: {
data: fields.map((fieldType, fieldIndex) => ({
page: 1,
@@ -342,7 +342,7 @@ export const seedPendingDocumentWithFullFields = async ({
documentId: document.id,
},
include: {
Field: true,
fields: true,
},
});
@@ -393,7 +393,7 @@ export const seedCompletedDocument = async (
for (const recipient of recipients) {
const email = typeof recipient === 'string' ? recipient : recipient.email;
const name = typeof recipient === 'string' ? recipient : recipient.name ?? '';
const name = typeof recipient === 'string' ? recipient : (recipient.name ?? '');
await prisma.recipient.create({
data: {
@@ -404,12 +404,12 @@ export const seedCompletedDocument = async (
sendStatus: SendStatus.SENT,
signingStatus: SigningStatus.SIGNED,
signedAt: new Date(),
Document: {
document: {
connect: {
id: document.id,
},
},
Field: {
fields: {
create: {
page: 1,
type: FieldType.NAME,

View File

@@ -58,7 +58,7 @@ export const seedDatabase = async () => {
title: 'Example Document',
documentDataId: examplePdfData.id,
userId: exampleUser.id,
Recipient: {
recipients: {
create: {
name: String(adminUser.name),
email: adminUser.email,

View File

@@ -66,12 +66,12 @@ export const seedTemplate = async (options: SeedTemplateOptions) => {
id: documentData.id,
},
},
User: {
user: {
connect: {
id: userId,
},
},
Recipient: {
recipients: {
create: {
email: 'recipient.1@documenso.com',
name: 'Recipient 1',
@@ -114,12 +114,12 @@ export const seedDirectTemplate = async (options: SeedTemplateOptions) => {
id: documentData.id,
},
},
User: {
user: {
connect: {
id: userId,
},
},
Recipient: {
recipients: {
create: {
email: DIRECT_TEMPLATE_RECIPIENT_EMAIL,
name: DIRECT_TEMPLATE_RECIPIENT_NAME,
@@ -138,12 +138,12 @@ export const seedDirectTemplate = async (options: SeedTemplateOptions) => {
...options.createTemplateOptions,
},
include: {
Recipient: true,
User: true,
recipients: true,
user: true,
},
});
const directTemplateRecpient = template.Recipient.find(
const directTemplateRecpient = template.recipients.find(
(recipient) => recipient.email === DIRECT_TEMPLATE_RECIPIENT_EMAIL,
);
@@ -166,8 +166,8 @@ export const seedDirectTemplate = async (options: SeedTemplateOptions) => {
},
include: {
directLink: true,
Field: true,
Recipient: true,
fields: true,
recipients: true,
team: true,
},
});

View File

@@ -1,10 +1,10 @@
import type { Document, DocumentData, Recipient } from '@documenso/prisma/client';
export type DocumentWithRecipients = Document & {
Recipient: Recipient[];
recipients: Recipient[];
};
export type DocumentWithRecipient = Document & {
Recipient: Recipient[];
recipients: Recipient[];
documentData: DocumentData;
};

View File

@@ -1,25 +0,0 @@
import type {
Document,
DocumentData,
DocumentMeta,
Field,
Recipient,
} from '@documenso/prisma/client';
export type DocumentWithRecipientAndSender = Omit<Document, 'document'> & {
recipient: Recipient;
sender: {
id: number;
name: string | null;
email: string;
};
subject: string;
description: string;
};
export type DocumentWithDetails = Document & {
documentData: DocumentData;
documentMeta: DocumentMeta | null;
Recipient: Recipient[];
Field: Field[];
};

View File

@@ -2,6 +2,6 @@ import { type TFieldMetaSchema as FieldMeta } from '@documenso/lib/types/field-m
import type { Field, Signature } from '@documenso/prisma/client';
export type FieldWithSignatureAndFieldMeta = Field & {
Signature?: Signature | null;
signature?: Signature | null;
fieldMeta: FieldMeta | null;
};

View File

@@ -1,5 +1,5 @@
import type { Field, Signature } from '@documenso/prisma/client';
export type FieldWithSignature = Field & {
Signature?: Signature | null;
signature?: Signature | null;
};