diff --git a/new-client/src/widgets/chat/api/qChatMessages.ts b/new-client/src/widgets/chat/api/qChatMessages.ts
index b4738d1..cdf2625 100644
--- a/new-client/src/widgets/chat/api/qChatMessages.ts
+++ b/new-client/src/widgets/chat/api/qChatMessages.ts
@@ -16,15 +16,7 @@ export function qChatMessages() {
const response = await api.chad.chatMessages({ cursor: pageParam, limit: 25 })
return response.data
- // return {
- // messages: response.data.messages.reverse(),
- // nextCursor: response.data.nextCursor,
- // }
},
- // select: data => ({
- // pages: [...data.pages].reverse(),
- // pageParams: [...data.pageParams].reverse(),
- // }),
select: (data) => {
return data.pages.flatMap(page => page.messages).toReversed()
},
diff --git a/new-client/src/widgets/chat/ui/ChatAttachment.vue b/new-client/src/widgets/chat/ui/ChatAttachment.vue
new file mode 100644
index 0000000..0333b48
--- /dev/null
+++ b/new-client/src/widgets/chat/ui/ChatAttachment.vue
@@ -0,0 +1,62 @@
+
+
+ {{ name }}
+
+
+
+
+
+
diff --git a/new-client/src/widgets/chat/ui/ChatInput.vue b/new-client/src/widgets/chat/ui/ChatInput.vue
index f266429..72a5a96 100644
--- a/new-client/src/widgets/chat/ui/ChatInput.vue
+++ b/new-client/src/widgets/chat/ui/ChatInput.vue
@@ -17,39 +17,50 @@
Send
-
+ :name="file.name"
+ @click="removeFile(file)"
+ />
+
@@ -125,14 +171,11 @@ function reset() {
margin-top: var(--space-2);
outline: var(--border-w) dashed var(--ink);
outline-offset: calc(var(--border-w) * -1);
- }
+ overflow: hidden;
- &__attachment {
- padding: var(--space-1) var(--space-2);
- background-color: var(--grey-1);
- outline: 1px solid var(--ink);
- outline-offset: -1px;
- cursor: pointer;
+ > * {
+ max-width: 300px;
+ }
}
}
diff --git a/new-client/src/widgets/chat/ui/ChatMessageAttachment.vue b/new-client/src/widgets/chat/ui/ChatMessageAttachment.vue
index 6c0143c..49ef3e6 100644
--- a/new-client/src/widgets/chat/ui/ChatMessageAttachment.vue
+++ b/new-client/src/widgets/chat/ui/ChatMessageAttachment.vue
@@ -1,5 +1,5 @@
-
+
{{ extension }}
@@ -8,7 +8,7 @@
{{ attachment.name }}
- {{ attachment.size }} KB
+ {{ size }}
@@ -18,18 +18,23 @@
import type { Attachment } from '@shared/api/generated-chad-api.ts'
import api from '@shared/api/client.ts'
import { downloadFile } from '@zag-js/file-utils'
+import { formatBytes } from '@zag-js/i18n-utils'
import { computed } from 'vue'
const props = defineProps<{
attachment: Attachment
}>()
-const extension = computed(() => props.attachment.name.split('.')[1])
+const extension = computed(() => props.attachment.name.split('.').at(-1))
const url = computed(() => {
return `${__API_BASE_URL__}/attachment/${props.attachment.id}`
})
+const size = computed(() => {
+ return formatBytes(props.attachment.size, 'en-US', { unitSystem: 'binary' })
+})
+
async function download() {
const response = await api.chad.attachmentGet(props.attachment.id, { format: 'blob' })
@@ -46,7 +51,7 @@ async function download() {
background-color: var(--grey-1);
width: 300px;
height: 52px;
- //overflow: hidden;
+
cursor: pointer;
&:hover {
@@ -68,6 +73,7 @@ async function download() {
flex: 1;
padding: var(--space-3);
align-self: center;
+ overflow: hidden;
}
&__name {
diff --git a/new-client/src/widgets/chat/ui/ChatMessageImageAttachment.vue b/new-client/src/widgets/chat/ui/ChatMessageImageAttachment.vue
index 2ec915d..978aef2 100644
--- a/new-client/src/widgets/chat/ui/ChatMessageImageAttachment.vue
+++ b/new-client/src/widgets/chat/ui/ChatMessageImageAttachment.vue
@@ -26,6 +26,8 @@ const src = computed(() => {
height: 160px;
> img {
+ object-fit: contain;
+ object-position: center;
max-width: 260px;
height: 100%;
}
diff --git a/server/plugins/schemas/chat.ts b/server/plugins/schemas/chat.ts
index eb7b003..3e09616 100644
--- a/server/plugins/schemas/chat.ts
+++ b/server/plugins/schemas/chat.ts
@@ -18,7 +18,7 @@ export const ChatMessageSchema = Type.Object({
}, { $id: 'ChatMessage' })
export const NewChatMessagePayloadSchema = Type.Object({
- text: Type.String({ minLength: 1 }),
+ text: Type.String(),
attachments: Type.Optional(Type.Array(Type.String({ format: 'uuid' }))),
// replyTo: Type.Object({
// messageId: Type.String({ format: 'uuid' }),
diff --git a/server/prisma/generated-client/internal/class.ts b/server/prisma/generated-client/internal/class.ts
index d1c5b4a..9953fc1 100644
--- a/server/prisma/generated-client/internal/class.ts
+++ b/server/prisma/generated-client/internal/class.ts
@@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = {
"clientVersion": "7.7.0",
"engineVersion": "75cbdc1eb7150937890ad5465d861175c6624711",
"activeProvider": "sqlite",
- "inlineSchema": "datasource db {\n provider = \"sqlite\"\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./generated-client\"\n}\n\nmodel User {\n username String @id @unique\n password String\n displayName String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n Session Session[]\n UserPreferences UserPreferences?\n Messages Message[]\n Channels Channel[]\n}\n\nmodel Session {\n id String @id\n userId String\n expiresAt DateTime\n\n user User @relation(references: [username], fields: [userId], onDelete: Cascade)\n}\n\nmodel UserPreferences {\n username String @id @unique\n toggleInputHotkey String? @default(\"\")\n toggleOutputHotkey String? @default(\"\")\n\n user User @relation(references: [username], fields: [username], onDelete: Cascade)\n}\n\nmodel Attachment {\n id String @id @default(uuid())\n name String\n mimetype String\n size Int\n createdAt DateTime @default(now())\n\n message MessageAttachment[]\n}\n\nmodel Message {\n id String @id @default(uuid())\n text String\n senderUsername String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n sender User? @relation(references: [username], fields: [senderUsername], onDelete: SetNull)\n attachments MessageAttachment[]\n}\n\nmodel MessageAttachment {\n messageId String\n attachmentId String\n\n message Message @relation(fields: [messageId], references: [id])\n attachment Attachment @relation(fields: [attachmentId], references: [id])\n\n @@id([messageId, attachmentId])\n}\n\nmodel Channel {\n id String @id @default(uuid())\n ownerUsername String?\n name String\n persistent Boolean\n\n owner User? @relation(references: [username], fields: [ownerUsername], onDelete: Cascade)\n}\n",
+ "inlineSchema": "datasource db {\n provider = \"sqlite\"\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./generated-client\"\n}\n\nmodel User {\n username String @id @unique\n password String\n displayName String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n Attachments Attachment[]\n Session Session[]\n UserPreferences UserPreferences?\n Messages Message[]\n Channels Channel[]\n}\n\nmodel Session {\n id String @id\n userId String\n expiresAt DateTime\n\n user User @relation(references: [username], fields: [userId], onDelete: Cascade)\n}\n\nmodel UserPreferences {\n username String @id @unique\n toggleInputHotkey String? @default(\"\")\n toggleOutputHotkey String? @default(\"\")\n\n user User @relation(references: [username], fields: [username], onDelete: Cascade)\n}\n\nmodel Attachment {\n id String @id @default(uuid())\n username String?\n name String\n mimetype String\n size Int\n createdAt DateTime @default(now())\n\n user User? @relation(references: [username], fields: [username], onDelete: Cascade)\n message MessageAttachment[]\n}\n\nmodel Message {\n id String @id @default(uuid())\n text String\n senderUsername String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n sender User? @relation(references: [username], fields: [senderUsername], onDelete: SetNull)\n attachments MessageAttachment[]\n}\n\nmodel MessageAttachment {\n messageId String\n attachmentId String\n\n message Message @relation(fields: [messageId], references: [id])\n attachment Attachment @relation(fields: [attachmentId], references: [id])\n\n @@id([messageId, attachmentId])\n}\n\nmodel Channel {\n id String @id @default(uuid())\n ownerUsername String?\n name String\n persistent Boolean\n\n owner User? @relation(references: [username], fields: [ownerUsername], onDelete: Cascade)\n}\n",
"runtimeDataModel": {
"models": {},
"enums": {},
@@ -32,10 +32,10 @@ const config: runtime.GetPrismaClientConfig = {
}
}
-config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"Session\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"UserPreferences\",\"kind\":\"object\",\"type\":\"UserPreferences\",\"relationName\":\"UserToUserPreferences\"},{\"name\":\"Messages\",\"kind\":\"object\",\"type\":\"Message\",\"relationName\":\"MessageToUser\"},{\"name\":\"Channels\",\"kind\":\"object\",\"type\":\"Channel\",\"relationName\":\"ChannelToUser\"}],\"dbName\":null},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"}],\"dbName\":null},\"UserPreferences\":{\"fields\":[{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"toggleInputHotkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"toggleOutputHotkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserPreferences\"}],\"dbName\":null},\"Attachment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mimetype\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"size\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"message\",\"kind\":\"object\",\"type\":\"MessageAttachment\",\"relationName\":\"AttachmentToMessageAttachment\"}],\"dbName\":null},\"Message\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"text\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"senderUsername\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"sender\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"MessageToUser\"},{\"name\":\"attachments\",\"kind\":\"object\",\"type\":\"MessageAttachment\",\"relationName\":\"MessageToMessageAttachment\"}],\"dbName\":null},\"MessageAttachment\":{\"fields\":[{\"name\":\"messageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attachmentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"message\",\"kind\":\"object\",\"type\":\"Message\",\"relationName\":\"MessageToMessageAttachment\"},{\"name\":\"attachment\",\"kind\":\"object\",\"type\":\"Attachment\",\"relationName\":\"AttachmentToMessageAttachment\"}],\"dbName\":null},\"Channel\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ownerUsername\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"persistent\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"owner\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ChannelToUser\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
+config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"Attachments\",\"kind\":\"object\",\"type\":\"Attachment\",\"relationName\":\"AttachmentToUser\"},{\"name\":\"Session\",\"kind\":\"object\",\"type\":\"Session\",\"relationName\":\"SessionToUser\"},{\"name\":\"UserPreferences\",\"kind\":\"object\",\"type\":\"UserPreferences\",\"relationName\":\"UserToUserPreferences\"},{\"name\":\"Messages\",\"kind\":\"object\",\"type\":\"Message\",\"relationName\":\"MessageToUser\"},{\"name\":\"Channels\",\"kind\":\"object\",\"type\":\"Channel\",\"relationName\":\"ChannelToUser\"}],\"dbName\":null},\"Session\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SessionToUser\"}],\"dbName\":null},\"UserPreferences\":{\"fields\":[{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"toggleInputHotkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"toggleOutputHotkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserPreferences\"}],\"dbName\":null},\"Attachment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mimetype\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"size\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"AttachmentToUser\"},{\"name\":\"message\",\"kind\":\"object\",\"type\":\"MessageAttachment\",\"relationName\":\"AttachmentToMessageAttachment\"}],\"dbName\":null},\"Message\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"text\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"senderUsername\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"sender\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"MessageToUser\"},{\"name\":\"attachments\",\"kind\":\"object\",\"type\":\"MessageAttachment\",\"relationName\":\"MessageToMessageAttachment\"}],\"dbName\":null},\"MessageAttachment\":{\"fields\":[{\"name\":\"messageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"attachmentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"message\",\"kind\":\"object\",\"type\":\"Message\",\"relationName\":\"MessageToMessageAttachment\"},{\"name\":\"attachment\",\"kind\":\"object\",\"type\":\"Attachment\",\"relationName\":\"AttachmentToMessageAttachment\"}],\"dbName\":null},\"Channel\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ownerUsername\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"persistent\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"owner\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ChannelToUser\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
config.parameterizationSchema = {
- strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"Session\",\"UserPreferences\",\"sender\",\"message\",\"_count\",\"attachment\",\"attachments\",\"Messages\",\"owner\",\"Channels\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"Session.findUnique\",\"Session.findUniqueOrThrow\",\"Session.findFirst\",\"Session.findFirstOrThrow\",\"Session.findMany\",\"Session.createOne\",\"Session.createMany\",\"Session.createManyAndReturn\",\"Session.updateOne\",\"Session.updateMany\",\"Session.updateManyAndReturn\",\"Session.upsertOne\",\"Session.deleteOne\",\"Session.deleteMany\",\"Session.groupBy\",\"Session.aggregate\",\"UserPreferences.findUnique\",\"UserPreferences.findUniqueOrThrow\",\"UserPreferences.findFirst\",\"UserPreferences.findFirstOrThrow\",\"UserPreferences.findMany\",\"UserPreferences.createOne\",\"UserPreferences.createMany\",\"UserPreferences.createManyAndReturn\",\"UserPreferences.updateOne\",\"UserPreferences.updateMany\",\"UserPreferences.updateManyAndReturn\",\"UserPreferences.upsertOne\",\"UserPreferences.deleteOne\",\"UserPreferences.deleteMany\",\"UserPreferences.groupBy\",\"UserPreferences.aggregate\",\"Attachment.findUnique\",\"Attachment.findUniqueOrThrow\",\"Attachment.findFirst\",\"Attachment.findFirstOrThrow\",\"Attachment.findMany\",\"Attachment.createOne\",\"Attachment.createMany\",\"Attachment.createManyAndReturn\",\"Attachment.updateOne\",\"Attachment.updateMany\",\"Attachment.updateManyAndReturn\",\"Attachment.upsertOne\",\"Attachment.deleteOne\",\"Attachment.deleteMany\",\"_avg\",\"_sum\",\"Attachment.groupBy\",\"Attachment.aggregate\",\"Message.findUnique\",\"Message.findUniqueOrThrow\",\"Message.findFirst\",\"Message.findFirstOrThrow\",\"Message.findMany\",\"Message.createOne\",\"Message.createMany\",\"Message.createManyAndReturn\",\"Message.updateOne\",\"Message.updateMany\",\"Message.updateManyAndReturn\",\"Message.upsertOne\",\"Message.deleteOne\",\"Message.deleteMany\",\"Message.groupBy\",\"Message.aggregate\",\"MessageAttachment.findUnique\",\"MessageAttachment.findUniqueOrThrow\",\"MessageAttachment.findFirst\",\"MessageAttachment.findFirstOrThrow\",\"MessageAttachment.findMany\",\"MessageAttachment.createOne\",\"MessageAttachment.createMany\",\"MessageAttachment.createManyAndReturn\",\"MessageAttachment.updateOne\",\"MessageAttachment.updateMany\",\"MessageAttachment.updateManyAndReturn\",\"MessageAttachment.upsertOne\",\"MessageAttachment.deleteOne\",\"MessageAttachment.deleteMany\",\"MessageAttachment.groupBy\",\"MessageAttachment.aggregate\",\"Channel.findUnique\",\"Channel.findUniqueOrThrow\",\"Channel.findFirst\",\"Channel.findFirstOrThrow\",\"Channel.findMany\",\"Channel.createOne\",\"Channel.createMany\",\"Channel.createManyAndReturn\",\"Channel.updateOne\",\"Channel.updateMany\",\"Channel.updateManyAndReturn\",\"Channel.upsertOne\",\"Channel.deleteOne\",\"Channel.deleteMany\",\"Channel.groupBy\",\"Channel.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"ownerUsername\",\"name\",\"persistent\",\"equals\",\"not\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"contains\",\"startsWith\",\"endsWith\",\"messageId\",\"attachmentId\",\"text\",\"senderUsername\",\"createdAt\",\"updatedAt\",\"mimetype\",\"size\",\"every\",\"some\",\"none\",\"username\",\"toggleInputHotkey\",\"toggleOutputHotkey\",\"userId\",\"expiresAt\",\"password\",\"displayName\",\"messageId_attachmentId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
- graph: "jAM-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_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_gIAIBsAAIMDACCtAQAA_wIAIK4BAACCAwAgswEAAGIAIAMaAACAAwAgrQEAAIEDACCzAQAACwAgAxoAAP4CACCtAQAA_wIAILMBAABiACAAAAABsAFAAAAAAQcaAAD4AgAgGwAA_AIAIK0BAAD5AgAgrgEAAPsCACCxAQAADQAgsgEAAA0AILMBAAABACALGgAAhQIAMBsAAIoCADCtAQAAhgIAMK4BAACHAgAwrwEAAIgCACCwAQAAiQIAMLEBAACJAgAwsgEAAIkCADCzAQAAiQIAMLQBAACLAgAwtQEAAIwCADACCQAA_gEAIJkBAQAAAAECAAAAEQAgGgAAkAIAIAMAAAARACAaAACQAgAgGwAAjwIAIAETAAD6AgAwCAcAAOYBACAJAADnAQAghgEAAOUBADCHAQAADwAQiAEAAOUBADCYAQEA1wEAIZkBAQDXAQAhqgEAAOQBACACAAAAEQAgEwAAjwIAIAIAAACNAgAgEwAAjgIAIAWGAQAAjAIAMIcBAACNAgAQiAEAAIwCADCYAQEA1wEAIZkBAQDXAQAhBYYBAACMAgAwhwEAAI0CABCIAQAAjAIAMJgBAQDXAQAhmQEBANcBACEBmQEBAPMBACECCQAA_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_QIAIAoAAAANACAEAACzAgAgBQAAtAIAIA0AALYCACATAAD9AgAgnAFAAIICACGdAUAAggIAIaMBAQDzAQAhqAEBAPMBACGpAQEA8wEAIQgEAACzAgAgBQAAtAIAIA0AALYCACCcAUAAggIAIZ0BQACCAgAhowEBAPMBACGoAQEA8wEAIakBAQDzAQAhBYkBAQAAAAGLAQEAAAABnAFAAAAAAZ4BAQAAAAGfAQIAAAABAgAAAGIAIBoAAP4CACAGBgAAkQIAIIkBAQAAAAGaAQEAAAABmwEBAAAAAZwBQAAAAAGdAUAAAAABAgAAAAsAIBoAAIADACADAAAAZQAgGgAA_gIAIBsAAIQDACAHAAAAZQAgEwAAhAMAIIkBAQDzAQAhiwEBAPMBACGcAUAAggIAIZ4BAQDzAQAhnwECAJgCACEFiQEBAPMBACGLAQEA8wEAIZwBQACCAgAhngEBAPMBACGfAQIAmAIAIQMAAAAJACAaAACAAwAgGwAAhwMAIAgAAAAJACAGAACDAgAgEwAAhwMAIIkBAQDzAQAhmgEBAPMBACGbAQEA9QEAIZwBQACCAgAhnQFAAIICACEGBgAAgwIAIIkBAQDzAQAhmgEBAPMBACGbAQEA9QEAIZwBQACCAgAhnQFAAIICACEIBAAA4AIAIAUAAOECACALAADiAgAgnAFAAAAAAZ0BQAAAAAGjAQEAAAABqAEBAAAAAakBAQAAAAECAAAAAQAgGgAAiAMAIAMAAAANACAaAACIAwAgGwAAjAMAIAoAAAANACAEAACzAgAgBQAAtAIAIAsAALUCACATAACMAwAgnAFAAIICACGdAUAAggIAIaMBAQDzAQAhqAEBAPMBACGpAQEA8wEAIQgEAACzAgAgBQAAtAIAIAsAALUCACCcAUAAggIAIZ0BQACCAgAhowEBAPMBACGoAQEA8wEAIakBAQDzAQAhBQQGAgUIAwgACgsMBA0ZCQEDAAEBAwABAwYOAQgACAoSBQIHAAQJAAYCBxMFCAAHAQcUAAEKFQABDBoBAwQbAAscAA0dAAAAAAMIAA8gABAhABEAAAADCAAPIAAQIQARAQMAAQEDAAEDCAAWIAAXIQAYAAAAAwgAFiAAFyEAGAEDAAEBAwABAwgAHSAAHiEAHwAAAAMIAB0gAB4hAB8AAAUIACQgACchAChSACVTACYAAAAAAAUIACQgACchAChSACVTACYBBoUBAQEGiwEBAwgALSAALiEALwAAAAMIAC0gAC4hAC8CBwAECQAGAgcABAkABgMIADQgADUhADYAAAADCAA0IAA1IQA2AQyzAQEBDLkBAQMIADsgADwhAD0AAAADCAA7IAA8IQA9DgIBDx4BECABESEBEiIBFCQBFSYLFicMFykBGCsLGSwNHC0BHS4BHi8LIjIOIzMSJDQCJTUCJjYCJzcCKDgCKToCKjwLKz0TLD8CLUELLkIUL0MCMEQCMUULMkgVM0kZNEsDNUwDNk4DN08DOFADOVIDOlQLO1UaPFcDPVkLPlobP1sDQFwDQV0LQmAcQ2EgRGMGRWQGRmcGR2gGSGkGSWsGSm0LS24hTHAGTXILTnMiT3QGUHUGUXYLVHkjVXopVnsEV3wEWH0EWX4EWn8EW4EBBFyDAQtdhAEqXocBBF-JAQtgigErYYwBBGKNAQRjjgELZJEBLGWSATBmkwEFZ5QBBWiVAQVplgEFapcBBWuZAQVsmwELbZwBMW6eAQVvoAELcKEBMnGiAQVyowEFc6QBC3SnATN1qAE3dqkBCXeqAQl4qwEJeawBCXqtAQl7rwEJfLEBC32yATh-tQEJf7cBC4ABuAE5gQG6AQmCAbsBCYMBvAELhAG_ATqFAcABPg"
+ strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"user\",\"sender\",\"attachments\",\"_count\",\"message\",\"attachment\",\"Attachments\",\"Session\",\"UserPreferences\",\"Messages\",\"owner\",\"Channels\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"Session.findUnique\",\"Session.findUniqueOrThrow\",\"Session.findFirst\",\"Session.findFirstOrThrow\",\"Session.findMany\",\"Session.createOne\",\"Session.createMany\",\"Session.createManyAndReturn\",\"Session.updateOne\",\"Session.updateMany\",\"Session.updateManyAndReturn\",\"Session.upsertOne\",\"Session.deleteOne\",\"Session.deleteMany\",\"Session.groupBy\",\"Session.aggregate\",\"UserPreferences.findUnique\",\"UserPreferences.findUniqueOrThrow\",\"UserPreferences.findFirst\",\"UserPreferences.findFirstOrThrow\",\"UserPreferences.findMany\",\"UserPreferences.createOne\",\"UserPreferences.createMany\",\"UserPreferences.createManyAndReturn\",\"UserPreferences.updateOne\",\"UserPreferences.updateMany\",\"UserPreferences.updateManyAndReturn\",\"UserPreferences.upsertOne\",\"UserPreferences.deleteOne\",\"UserPreferences.deleteMany\",\"UserPreferences.groupBy\",\"UserPreferences.aggregate\",\"Attachment.findUnique\",\"Attachment.findUniqueOrThrow\",\"Attachment.findFirst\",\"Attachment.findFirstOrThrow\",\"Attachment.findMany\",\"Attachment.createOne\",\"Attachment.createMany\",\"Attachment.createManyAndReturn\",\"Attachment.updateOne\",\"Attachment.updateMany\",\"Attachment.updateManyAndReturn\",\"Attachment.upsertOne\",\"Attachment.deleteOne\",\"Attachment.deleteMany\",\"_avg\",\"_sum\",\"Attachment.groupBy\",\"Attachment.aggregate\",\"Message.findUnique\",\"Message.findUniqueOrThrow\",\"Message.findFirst\",\"Message.findFirstOrThrow\",\"Message.findMany\",\"Message.createOne\",\"Message.createMany\",\"Message.createManyAndReturn\",\"Message.updateOne\",\"Message.updateMany\",\"Message.updateManyAndReturn\",\"Message.upsertOne\",\"Message.deleteOne\",\"Message.deleteMany\",\"Message.groupBy\",\"Message.aggregate\",\"MessageAttachment.findUnique\",\"MessageAttachment.findUniqueOrThrow\",\"MessageAttachment.findFirst\",\"MessageAttachment.findFirstOrThrow\",\"MessageAttachment.findMany\",\"MessageAttachment.createOne\",\"MessageAttachment.createMany\",\"MessageAttachment.createManyAndReturn\",\"MessageAttachment.updateOne\",\"MessageAttachment.updateMany\",\"MessageAttachment.updateManyAndReturn\",\"MessageAttachment.upsertOne\",\"MessageAttachment.deleteOne\",\"MessageAttachment.deleteMany\",\"MessageAttachment.groupBy\",\"MessageAttachment.aggregate\",\"Channel.findUnique\",\"Channel.findUniqueOrThrow\",\"Channel.findFirst\",\"Channel.findFirstOrThrow\",\"Channel.findMany\",\"Channel.createOne\",\"Channel.createMany\",\"Channel.createManyAndReturn\",\"Channel.updateOne\",\"Channel.updateMany\",\"Channel.updateManyAndReturn\",\"Channel.upsertOne\",\"Channel.deleteOne\",\"Channel.deleteMany\",\"Channel.groupBy\",\"Channel.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"ownerUsername\",\"name\",\"persistent\",\"equals\",\"not\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"contains\",\"startsWith\",\"endsWith\",\"messageId\",\"attachmentId\",\"text\",\"senderUsername\",\"createdAt\",\"updatedAt\",\"username\",\"mimetype\",\"size\",\"toggleInputHotkey\",\"toggleOutputHotkey\",\"userId\",\"expiresAt\",\"password\",\"displayName\",\"every\",\"some\",\"none\",\"messageId_attachmentId\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
+ graph: "qQM-cA0JAADuAQAgCgAA7wEAIAsAAPABACAMAADxAQAgDgAA8gEAIIcBAADtAQAwiAEAAAcAEIkBAADtAQAwnQFAAOYBACGeAUAA5gEAIZ8BAQAAAAGmAQEA4gEAIacBAQDiAQAhAQAAAAEAIAsDAADkAQAgBwAA5wEAIIcBAADzAQAwiAEAAAMAEIkBAADzAQAwigEBAOIBACGMAQEA4gEAIZ0BQADmAQAhnwEBAN0BACGgAQEA4gEAIaEBAgD0AQAhAwMAALECACAHAAD-AgAgnwEAAPUBACALAwAA5AEAIAcAAOcBACCHAQAA8wEAMIgBAAADABCJAQAA8wEAMIoBAQAAAAGMAQEA4gEAIZ0BQADmAQAhnwEBAN0BACGgAQEA4gEAIaEBAgD0AQAhAwAAAAMAIAEAAAQAMAIAAAUAIA0JAADuAQAgCgAA7wEAIAsAAPABACAMAADxAQAgDgAA8gEAIIcBAADtAQAwiAEAAAcAEIkBAADtAQAwnQFAAOYBACGeAUAA5gEAIZ8BAQDiAQAhpgEBAOIBACGnAQEA4gEAIQEAAAAHACAHBwAA6wEAIAgAAOwBACCHAQAA6gEAMIgBAAAJABCJAQAA6gEAMJkBAQDiAQAhmgEBAOIBACECBwAA_wIAIAgAAIADACAIBwAA6wEAIAgAAOwBACCHAQAA6gEAMIgBAAAJABCJAQAA6gEAMJkBAQDiAQAhmgEBAOIBACGrAQAA6QEAIAMAAAAJACABAAAKADACAAALACABAAAABwAgAwAAAAkAIAEAAAoAMAIAAAsAIAEAAAAJACABAAAACQAgBwMAAN4BACCHAQAA6AEAMIgBAAARABCJAQAA6AEAMIoBAQDiAQAhpAEBAOIBACGlAUAA5gEAIQEDAACxAgAgBwMAAN4BACCHAQAA6AEAMIgBAAARABCJAQAA6AEAMIoBAQAAAAGkAQEA4gEAIaUBQADmAQAhAwAAABEAIAEAABIAMAIAABMAIAcDAADeAQAghwEAANwBADCIAQAAFQAQiQEAANwBADCfAQEA4gEAIaIBAQDdAQAhowEBAN0BACEBAAAAFQAgCgQAAOQBACAFAADnAQAghwEAAOUBADCIAQAAFwAQiQEAAOUBADCKAQEA4gEAIZsBAQDiAQAhnAEBAN0BACGdAUAA5gEAIZ4BQADmAQAhAwQAALECACAFAAD-AgAgnAEAAPUBACAKBAAA5AEAIAUAAOcBACCHAQAA5QEAMIgBAAAXABCJAQAA5QEAMIoBAQAAAAGbAQEA4gEAIZwBAQDdAQAhnQFAAOYBACGeAUAA5gEAIQMAAAAXACABAAAYADACAAAZACAIDQAA5AEAIIcBAADhAQAwiAEAABsAEIkBAADhAQAwigEBAOIBACGLAQEA3QEAIYwBAQDiAQAhjQEgAOMBACECDQAAsQIAIIsBAAD1AQAgCA0AAOQBACCHAQAA4QEAMIgBAAAbABCJAQAA4QEAMIoBAQAAAAGLAQEA3QEAIYwBAQDiAQAhjQEgAOMBACEDAAAAGwAgAQAAHAAwAgAAHQAgAQAAAAcAIAEAAAADACABAAAAEQAgAQAAABcAIAEAAAAbACABAAAAAQAgBQkAAPkCACAKAAD6AgAgCwAA-wIAIAwAAPwCACAOAAD9AgAgAwAAAAcAIAEAACUAMAIAAAEAIAMAAAAHACABAAAlADACAAABACADAAAABwAgAQAAJQAwAgAAAQAgCgkAAPQCACAKAAD1AgAgCwAA9gIAIAwAAPcCACAOAAD4AgAgnQFAAAAAAZ4BQAAAAAGfAQEAAAABpgEBAAAAAacBAQAAAAEBFAAAKQAgBZ0BQAAAAAGeAUAAAAABnwEBAAAAAaYBAQAAAAGnAQEAAAABARQAACsAMAEUAAArADAKCQAAugIAIAoAALsCACALAAC8AgAgDAAAvQIAIA4AAL4CACCdAUAAiAIAIZ4BQACIAgAhnwEBAPkBACGmAQEA-QEAIacBAQD5AQAhAgAAAAEAIBQAAC4AIAWdAUAAiAIAIZ4BQACIAgAhnwEBAPkBACGmAQEA-QEAIacBAQD5AQAhAgAAAAcAIBQAADAAIAIAAAAHACAUAAAwACADAAAAAQAgGwAAKQAgHAAALgAgAQAAAAEAIAEAAAAHACADBgAAtwIAICEAALkCACAiAAC4AgAgCIcBAADgAQAwiAEAADcAEIkBAADgAQAwnQFAANQBACGeAUAA1AEAIZ8BAQDHAQAhpgEBAMcBACGnAQEAxwEAIQMAAAAHACABAAA2ADAgAAA3ACADAAAABwAgAQAAJQAwAgAAAQAgAQAAABMAIAEAAAATACADAAAAEQAgAQAAEgAwAgAAEwAgAwAAABEAIAEAABIAMAIAABMAIAMAAAARACABAAASADACAAATACAEAwAAtgIAIIoBAQAAAAGkAQEAAAABpQFAAAAAAQEUAAA_ACADigEBAAAAAaQBAQAAAAGlAUAAAAABARQAAEEAMAEUAABBADAEAwAAtQIAIIoBAQD5AQAhpAEBAPkBACGlAUAAiAIAIQIAAAATACAUAABEACADigEBAPkBACGkAQEA-QEAIaUBQACIAgAhAgAAABEAIBQAAEYAIAIAAAARACAUAABGACADAAAAEwAgGwAAPwAgHAAARAAgAQAAABMAIAEAAAARACADBgAAsgIAICEAALQCACAiAACzAgAgBocBAADfAQAwiAEAAE0AEIkBAADfAQAwigEBAMcBACGkAQEAxwEAIaUBQADUAQAhAwAAABEAIAEAAEwAMCAAAE0AIAMAAAARACABAAASADACAAATACAHAwAA3gEAIIcBAADcAQAwiAEAABUAEIkBAADcAQAwnwEBAAAAAaIBAQDdAQAhowEBAN0BACEBAAAAUAAgAQAAAFAAIAMDAACxAgAgogEAAPUBACCjAQAA9QEAIAMAAAAVACABAABTADACAABQACADAAAAFQAgAQAAUwAwAgAAUAAgAwAAABUAIAEAAFMAMAIAAFAAIAQDAACwAgAgnwEBAAAAAaIBAQAAAAGjAQEAAAABARQAAFcAIAOfAQEAAAABogEBAAAAAaMBAQAAAAEBFAAAWQAwARQAAFkAMAQDAACvAgAgnwEBAPkBACGiAQEA-wEAIaMBAQD7AQAhAgAAAFAAIBQAAFwAIAOfAQEA-QEAIaIBAQD7AQAhowEBAPsBACECAAAAFQAgFAAAXgAgAgAAABUAIBQAAF4AIAMAAABQACAbAABXACAcAABcACABAAAAUAAgAQAAABUAIAUGAACsAgAgIQAArgIAICIAAK0CACCiAQAA9QEAIKMBAAD1AQAgBocBAADbAQAwiAEAAGUAEIkBAADbAQAwnwEBAMcBACGiAQEAyAEAIaMBAQDIAQAhAwAAABUAIAEAAGQAMCAAAGUAIAMAAAAVACABAABTADACAABQACABAAAABQAgAQAAAAUAIAMAAAADACABAAAEADACAAAFACADAAAAAwAgAQAABAAwAgAABQAgAwAAAAMAIAEAAAQAMAIAAAUAIAgDAACqAgAgBwAAqwIAIIoBAQAAAAGMAQEAAAABnQFAAAAAAZ8BAQAAAAGgAQEAAAABoQECAAAAAQEUAABtACAGigEBAAAAAYwBAQAAAAGdAUAAAAABnwEBAAAAAaABAQAAAAGhAQIAAAABARQAAG8AMAEUAABvADABAAAABwAgCAMAAJ8CACAHAACgAgAgigEBAPkBACGMAQEA-QEAIZ0BQACIAgAhnwEBAPsBACGgAQEA-QEAIaEBAgCeAgAhAgAAAAUAIBQAAHMAIAaKAQEA-QEAIYwBAQD5AQAhnQFAAIgCACGfAQEA-wEAIaABAQD5AQAhoQECAJ4CACECAAAAAwAgFAAAdQAgAgAAAAMAIBQAAHUAIAEAAAAHACADAAAABQAgGwAAbQAgHAAAcwAgAQAAAAUAIAEAAAADACAGBgAAmQIAICEAAJwCACAiAACbAgAgUwAAmgIAIFQAAJ0CACCfAQAA9QEAIAmHAQAA1wEAMIgBAAB9ABCJAQAA1wEAMIoBAQDHAQAhjAEBAMcBACGdAUAA1AEAIZ8BAQDIAQAhoAEBAMcBACGhAQIA2AEAIQMAAAADACABAAB8ADAgAAB9ACADAAAAAwAgAQAABAAwAgAABQAgAQAAABkAIAEAAAAZACADAAAAFwAgAQAAGAAwAgAAGQAgAwAAABcAIAEAABgAMAIAABkAIAMAAAAXACABAAAYADACAAAZACAHBAAAlwIAIAUAAJgCACCKAQEAAAABmwEBAAAAAZwBAQAAAAGdAUAAAAABngFAAAAAAQEUAACFAQAgBYoBAQAAAAGbAQEAAAABnAEBAAAAAZ0BQAAAAAGeAUAAAAABARQAAIcBADABFAAAhwEAMAEAAAAHACAHBAAAiQIAIAUAAIoCACCKAQEA-QEAIZsBAQD5AQAhnAEBAPsBACGdAUAAiAIAIZ4BQACIAgAhAgAAABkAIBQAAIsBACAFigEBAPkBACGbAQEA-QEAIZwBAQD7AQAhnQFAAIgCACGeAUAAiAIAIQIAAAAXACAUAACNAQAgAgAAABcAIBQAAI0BACABAAAABwAgAwAAABkAIBsAAIUBACAcAACLAQAgAQAAABkAIAEAAAAXACAEBgAAhQIAICEAAIcCACAiAACGAgAgnAEAAPUBACAIhwEAANMBADCIAQAAlQEAEIkBAADTAQAwigEBAMcBACGbAQEAxwEAIZwBAQDIAQAhnQFAANQBACGeAUAA1AEAIQMAAAAXACABAACUAQAwIAAAlQEAIAMAAAAXACABAAAYADACAAAZACABAAAACwAgAQAAAAsAIAMAAAAJACABAAAKADACAAALACADAAAACQAgAQAACgAwAgAACwAgAwAAAAkAIAEAAAoAMAIAAAsAIAQHAACDAgAgCAAAhAIAIJkBAQAAAAGaAQEAAAABARQAAJ0BACACmQEBAAAAAZoBAQAAAAEBFAAAnwEAMAEUAACfAQAwBAcAAIECACAIAACCAgAgmQEBAPkBACGaAQEA-QEAIQIAAAALACAUAACiAQAgApkBAQD5AQAhmgEBAPkBACECAAAACQAgFAAApAEAIAIAAAAJACAUAACkAQAgAwAAAAsAIBsAAJ0BACAcAACiAQAgAQAAAAsAIAEAAAAJACADBgAA_gEAICEAAIACACAiAAD_AQAgBYcBAADSAQAwiAEAAKsBABCJAQAA0gEAMJkBAQDHAQAhmgEBAMcBACEDAAAACQAgAQAAqgEAMCAAAKsBACADAAAACQAgAQAACgAwAgAACwAgAQAAAB0AIAEAAAAdACADAAAAGwAgAQAAHAAwAgAAHQAgAwAAABsAIAEAABwAMAIAAB0AIAMAAAAbACABAAAcADACAAAdACAFDQAA_QEAIIoBAQAAAAGLAQEAAAABjAEBAAAAAY0BIAAAAAEBFAAAswEAIASKAQEAAAABiwEBAAAAAYwBAQAAAAGNASAAAAABARQAALUBADABFAAAtQEAMAEAAAAHACAFDQAA_AEAIIoBAQD5AQAhiwEBAPsBACGMAQEA-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-QIAIAoAAPoCACALAAD7AgAgDAAA_AIAIA4AAP0CACAAAAAFGwAAhQMAIBwAAIgDACCuAQAAhgMAIK8BAACHAwAgtAEAAAEAIAMbAACFAwAgrgEAAIYDACC0AQAAAQAgAAAACxsAAOgCADAcAADtAgAwrgEAAOkCADCvAQAA6gIAMLABAADrAgAgsQEAAOwCADCyAQAA7AIAMLMBAADsAgAwtAEAAOwCADC1AQAA7gIAMLYBAADvAgAwCxsAANwCADAcAADhAgAwrgEAAN0CADCvAQAA3gIAMLABAADfAgAgsQEAAOACADCyAQAA4AIAMLMBAADgAgAwtAEAAOACADC1AQAA4gIAMLYBAADjAgAwBxsAANcCACAcAADaAgAgrgEAANgCACCvAQAA2QIAILIBAAAVACCzAQAAFQAgtAEAAFAAIAsbAADLAgAwHAAA0AIAMK4BAADMAgAwrwEAAM0CADCwAQAAzgIAILEBAADPAgAwsgEAAM8CADCzAQAAzwIAMLQBAADPAgAwtQEAANECADC2AQAA0gIAMAsbAAC_AgAwHAAAxAIAMK4BAADAAgAwrwEAAMECADCwAQAAwgIAILEBAADDAgAwsgEAAMMCADCzAQAAwwIAMLQBAADDAgAwtQEAAMUCADC2AQAAxgIAMAOKAQEAAAABjAEBAAAAAY0BIAAAAAECAAAAHQAgGwAAygIAIAMAAAAdACAbAADKAgAgHAAAyQIAIAEUAACEAwAwCA0AAOQBACCHAQAA4QEAMIgBAAAbABCJAQAA4QEAMIoBAQAAAAGLAQEA3QEAIYwBAQDiAQAhjQEgAOMBACECAAAAHQAgFAAAyQIAIAIAAADHAgAgFAAAyAIAIAeHAQAAxgIAMIgBAADHAgAQiQEAAMYCADCKAQEA4gEAIYsBAQDdAQAhjAEBAOIBACGNASAA4wEAIQeHAQAAxgIAMIgBAADHAgAQiQEAAMYCADCKAQEA4gEAIYsBAQDdAQAhjAEBAOIBACGNASAA4wEAIQOKAQEA-QEAIYwBAQD5AQAhjQEgAPoBACEDigEBAPkBACGMAQEA-QEAIY0BIAD6AQAhA4oBAQAAAAGMAQEAAAABjQEgAAAAAQUFAACYAgAgigEBAAAAAZsBAQAAAAGdAUAAAAABngFAAAAAAQIAAAAZACAbAADWAgAgAwAAABkAIBsAANYCACAcAADVAgAgARQAAIMDADAKBAAA5AEAIAUAAOcBACCHAQAA5QEAMIgBAAAXABCJAQAA5QEAMIoBAQAAAAGbAQEA4gEAIZwBAQDdAQAhnQFAAOYBACGeAUAA5gEAIQIAAAAZACAUAADVAgAgAgAAANMCACAUAADUAgAgCIcBAADSAgAwiAEAANMCABCJAQAA0gIAMIoBAQDiAQAhmwEBAOIBACGcAQEA3QEAIZ0BQADmAQAhngFAAOYBACEIhwEAANICADCIAQAA0wIAEIkBAADSAgAwigEBAOIBACGbAQEA4gEAIZwBAQDdAQAhnQFAAOYBACGeAUAA5gEAIQSKAQEA-QEAIZsBAQD5AQAhnQFAAIgCACGeAUAAiAIAIQUFAACKAgAgigEBAPkBACGbAQEA-QEAIZ0BQACIAgAhngFAAIgCACEFBQAAmAIAIIoBAQAAAAGbAQEAAAABnQFAAAAAAZ4BQAAAAAECogEBAAAAAaMBAQAAAAECAAAAUAAgGwAA1wIAIAMAAAAVACAbAADXAgAgHAAA2wIAIAQAAAAVACAUAADbAgAgogEBAPsBACGjAQEA-wEAIQKiAQEA-wEAIaMBAQD7AQAhAooBAQAAAAGlAUAAAAABAgAAABMAIBsAAOcCACADAAAAEwAgGwAA5wIAIBwAAOYCACABFAAAggMAMAcDAADeAQAghwEAAOgBADCIAQAAEQAQiQEAAOgBADCKAQEAAAABpAEBAOIBACGlAUAA5gEAIQIAAAATACAUAADmAgAgAgAAAOQCACAUAADlAgAgBocBAADjAgAwiAEAAOQCABCJAQAA4wIAMIoBAQDiAQAhpAEBAOIBACGlAUAA5gEAIQaHAQAA4wIAMIgBAADkAgAQiQEAAOMCADCKAQEA4gEAIaQBAQDiAQAhpQFAAOYBACECigEBAPkBACGlAUAAiAIAIQKKAQEA-QEAIaUBQACIAgAhAooBAQAAAAGlAUAAAAABBgcAAKsCACCKAQEAAAABjAEBAAAAAZ0BQAAAAAGgAQEAAAABoQECAAAAAQIAAAAFACAbAADzAgAgAwAAAAUAIBsAAPMCACAcAADyAgAgARQAAIEDADALAwAA5AEAIAcAAOcBACCHAQAA8wEAMIgBAAADABCJAQAA8wEAMIoBAQAAAAGMAQEA4gEAIZ0BQADmAQAhnwEBAN0BACGgAQEA4gEAIaEBAgD0AQAhAgAAAAUAIBQAAPICACACAAAA8AIAIBQAAPECACAJhwEAAO8CADCIAQAA8AIAEIkBAADvAgAwigEBAOIBACGMAQEA4gEAIZ0BQADmAQAhnwEBAN0BACGgAQEA4gEAIaEBAgD0AQAhCYcBAADvAgAwiAEAAPACABCJAQAA7wIAMIoBAQDiAQAhjAEBAOIBACGdAUAA5gEAIZ8BAQDdAQAhoAEBAOIBACGhAQIA9AEAIQWKAQEA-QEAIYwBAQD5AQAhnQFAAIgCACGgAQEA-QEAIaEBAgCeAgAhBgcAAKACACCKAQEA-QEAIYwBAQD5AQAhnQFAAIgCACGgAQEA-QEAIaEBAgCeAgAhBgcAAKsCACCKAQEAAAABjAEBAAAAAZ0BQAAAAAGgAQEAAAABoQECAAAAAQQbAADoAgAwrgEAAOkCADCwAQAA6wIAILQBAADsAgAwBBsAANwCADCuAQAA3QIAMLABAADfAgAgtAEAAOACADADGwAA1wIAIK4BAADYAgAgtAEAAFAAIAQbAADLAgAwrgEAAMwCADCwAQAAzgIAILQBAADPAgAwBBsAAL8CADCuAQAAwAIAMLABAADCAgAgtAEAAMMCADAAAAMDAACxAgAgogEAAPUBACCjAQAA9QEAIAAAAAMEAACxAgAgBQAA_gIAIJwBAAD1AQAgAwMAALECACAHAAD-AgAgnwEAAPUBACAFigEBAAAAAYwBAQAAAAGdAUAAAAABoAEBAAAAAaEBAgAAAAECigEBAAAAAaUBQAAAAAEEigEBAAAAAZsBAQAAAAGdAUAAAAABngFAAAAAAQOKAQEAAAABjAEBAAAAAY0BIAAAAAEJCQAA9AIAIAsAAPYCACAMAAD3AgAgDgAA-AIAIJ0BQAAAAAGeAUAAAAABnwEBAAAAAaYBAQAAAAGnAQEAAAABAgAAAAEAIBsAAIUDACADAAAABwAgGwAAhQMAIBwAAIkDACALAAAABwAgCQAAugIAIAsAALwCACAMAAC9AgAgDgAAvgIAIBQAAIkDACCdAUAAiAIAIZ4BQACIAgAhnwEBAPkBACGmAQEA-QEAIacBAQD5AQAhCQkAALoCACALAAC8AgAgDAAAvQIAIA4AAL4CACCdAUAAiAIAIZ4BQACIAgAhnwEBAPkBACGmAQEA-QEAIacBAQD5AQAhCQkAAPQCACAKAAD1AgAgDAAA9wIAIA4AAPgCACCdAUAAAAABngFAAAAAAZ8BAQAAAAGmAQEAAAABpwEBAAAAAQIAAAABACAbAACKAwAgAwAAAAcAIBsAAIoDACAcAACOAwAgCwAAAAcAIAkAALoCACAKAAC7AgAgDAAAvQIAIA4AAL4CACAUAACOAwAgnQFAAIgCACGeAUAAiAIAIZ8BAQD5AQAhpgEBAPkBACGnAQEA-QEAIQkJAAC6AgAgCgAAuwIAIAwAAL0CACAOAAC-AgAgnQFAAIgCACGeAUAAiAIAIZ8BAQD5AQAhpgEBAPkBACGnAQEA-QEAIQkKAAD1AgAgCwAA9gIAIAwAAPcCACAOAAD4AgAgnQFAAAAAAZ4BQAAAAAGfAQEAAAABpgEBAAAAAacBAQAAAAECAAAAAQAgGwAAjwMAIAGZAQEAAAABAwAAAAcAIBsAAI8DACAcAACUAwAgCwAAAAcAIAoAALsCACALAAC8AgAgDAAAvQIAIA4AAL4CACAUAACUAwAgnQFAAIgCACGeAUAAiAIAIZ8BAQD5AQAhpgEBAPkBACGnAQEA-QEAIQkKAAC7AgAgCwAAvAIAIAwAAL0CACAOAAC-AgAgnQFAAIgCACGeAUAAiAIAIZ8BAQD5AQAhpgEBAPkBACGnAQEA-QEAIQkJAAD0AgAgCgAA9QIAIAsAAPYCACAOAAD4AgAgnQFAAAAAAZ4BQAAAAAGfAQEAAAABpgEBAAAAAacBAQAAAAECAAAAAQAgGwAAlQMAIAGaAQEAAAABAwAAAAcAIBsAAJUDACAcAACaAwAgCwAAAAcAIAkAALoCACAKAAC7AgAgCwAAvAIAIA4AAL4CACAUAACaAwAgnQFAAIgCACGeAUAAiAIAIZ8BAQD5AQAhpgEBAPkBACGnAQEA-QEAIQkJAAC6AgAgCgAAuwIAIAsAALwCACAOAAC-AgAgnQFAAIgCACGeAUAAiAIAIZ8BAQD5AQAhpgEBAPkBACGnAQEA-QEAIQcDAACqAgAgigEBAAAAAYwBAQAAAAGdAUAAAAABnwEBAAAAAaABAQAAAAGhAQIAAAABAgAAAAUAIBsAAJsDACAGBAAAlwIAIIoBAQAAAAGbAQEAAAABnAEBAAAAAZ0BQAAAAAGeAUAAAAABAgAAABkAIBsAAJ0DACADAAAAAwAgGwAAmwMAIBwAAKEDACAJAAAAAwAgAwAAnwIAIBQAAKEDACCKAQEA-QEAIYwBAQD5AQAhnQFAAIgCACGfAQEA-wEAIaABAQD5AQAhoQECAJ4CACEHAwAAnwIAIIoBAQD5AQAhjAEBAPkBACGdAUAAiAIAIZ8BAQD7AQAhoAEBAPkBACGhAQIAngIAIQMAAAAXACAbAACdAwAgHAAApAMAIAgAAAAXACAEAACJAgAgFAAApAMAIIoBAQD5AQAhmwEBAPkBACGcAQEA-wEAIZ0BQACIAgAhngFAAIgCACEGBAAAiQIAIIoBAQD5AQAhmwEBAPkBACGcAQEA-wEAIZ0BQACIAgAhngFAAIgCACEJCQAA9AIAIAoAAPUCACALAAD2AgAgDAAA9wIAIJ0BQAAAAAGeAUAAAAABnwEBAAAAAaYBAQAAAAGnAQEAAAABAgAAAAEAIBsAAKUDACADAAAABwAgGwAApQMAIBwAAKkDACALAAAABwAgCQAAugIAIAoAALsCACALAAC8AgAgDAAAvQIAIBQAAKkDACCdAUAAiAIAIZ4BQACIAgAhnwEBAPkBACGmAQEA-QEAIacBAQD5AQAhCQkAALoCACAKAAC7AgAgCwAAvAIAIAwAAL0CACCdAUAAiAIAIZ4BQACIAgAhnwEBAPkBACGmAQEA-QEAIacBAQD5AQAhBgYACgkGAgoUBwsWCAwaBA4eCQMDCAEGAAYHDAMCBwAECAACAwQNAQUOAwYABQEFDwABBxAAAQMAAQEDAAEBDR8BBAkgAAohAAwiAA4jAAAAAAMGAA8hABAiABEAAAADBgAPIQAQIgARAQMAAQEDAAEDBgAWIQAXIgAYAAAAAwYAFiEAFyIAGAEDAAEBAwABAwYAHSEAHiIAHwAAAAMGAB0hAB4iAB8BA3IBAQN4AQUGACQhACciAChTACVUACYAAAAAAAUGACQhACciAChTACVUACYBBIoBAQEEkAEBAwYALSEALiIALwAAAAMGAC0hAC4iAC8CBwAECAACAgcABAgAAgMGADQhADUiADYAAAADBgA0IQA1IgA2AQ24AQEBDb4BAQMGADshADwiAD0AAAADBgA7IQA8IgA9DwIBECQBESYBEicBEygBFSoBFiwLFy0MGC8BGTELGjINHTMBHjQBHzULIzgOJDkSJToHJjsHJzwHKD0HKT4HKkAHK0ILLEMTLUUHLkcLL0gUMEkHMUoHMksLM04VNE8ZNVEINlIIN1QIOFUIOVYIOlgIO1oLPFsaPV0IPl8LP2AbQGEIQWIIQmMLQ2YcRGcgRWgCRmkCR2oCSGsCSWwCSm4CS3ALTHEhTXQCTnYLT3ciUHkCUXoCUnsLVX4jVn8pV4ABBFiBAQRZggEEWoMBBFuEAQRchgEEXYgBC16JASpfjAEEYI4BC2GPAStikQEEY5IBBGSTAQtllgEsZpcBMGeYAQNomQEDaZoBA2qbAQNrnAEDbJ4BA22gAQtuoQExb6MBA3ClAQtxpgEycqcBA3OoAQN0qQELdawBM3atATd3rgEJeK8BCXmwAQl6sQEJe7IBCXy0AQl9tgELfrcBOH-6AQmAAbwBC4EBvQE5ggG_AQmDAcABCYQBwQELhQHEATqGAcUBPg"
}
async function decodeBase64AsWasm(wasmBase64: string): Promise {
diff --git a/server/prisma/generated-client/internal/prismaNamespace.ts b/server/prisma/generated-client/internal/prismaNamespace.ts
index 65ed5c9..7819631 100644
--- a/server/prisma/generated-client/internal/prismaNamespace.ts
+++ b/server/prisma/generated-client/internal/prismaNamespace.ts
@@ -995,6 +995,7 @@ export type UserPreferencesScalarFieldEnum = (typeof UserPreferencesScalarFieldE
export const AttachmentScalarFieldEnum = {
id: 'id',
+ username: 'username',
name: 'name',
mimetype: 'mimetype',
size: 'size',
diff --git a/server/prisma/generated-client/internal/prismaNamespaceBrowser.ts b/server/prisma/generated-client/internal/prismaNamespaceBrowser.ts
index 2723b11..24f8d26 100644
--- a/server/prisma/generated-client/internal/prismaNamespaceBrowser.ts
+++ b/server/prisma/generated-client/internal/prismaNamespaceBrowser.ts
@@ -104,6 +104,7 @@ export type UserPreferencesScalarFieldEnum = (typeof UserPreferencesScalarFieldE
export const AttachmentScalarFieldEnum = {
id: 'id',
+ username: 'username',
name: 'name',
mimetype: 'mimetype',
size: 'size',
diff --git a/server/prisma/generated-client/models/Attachment.ts b/server/prisma/generated-client/models/Attachment.ts
index a52be7c..d52a162 100644
--- a/server/prisma/generated-client/models/Attachment.ts
+++ b/server/prisma/generated-client/models/Attachment.ts
@@ -36,6 +36,7 @@ export type AttachmentSumAggregateOutputType = {
export type AttachmentMinAggregateOutputType = {
id: string | null
+ username: string | null
name: string | null
mimetype: string | null
size: number | null
@@ -44,6 +45,7 @@ export type AttachmentMinAggregateOutputType = {
export type AttachmentMaxAggregateOutputType = {
id: string | null
+ username: string | null
name: string | null
mimetype: string | null
size: number | null
@@ -52,6 +54,7 @@ export type AttachmentMaxAggregateOutputType = {
export type AttachmentCountAggregateOutputType = {
id: number
+ username: number
name: number
mimetype: number
size: number
@@ -70,6 +73,7 @@ export type AttachmentSumAggregateInputType = {
export type AttachmentMinAggregateInputType = {
id?: true
+ username?: true
name?: true
mimetype?: true
size?: true
@@ -78,6 +82,7 @@ export type AttachmentMinAggregateInputType = {
export type AttachmentMaxAggregateInputType = {
id?: true
+ username?: true
name?: true
mimetype?: true
size?: true
@@ -86,6 +91,7 @@ export type AttachmentMaxAggregateInputType = {
export type AttachmentCountAggregateInputType = {
id?: true
+ username?: true
name?: true
mimetype?: true
size?: true
@@ -181,6 +187,7 @@ export type AttachmentGroupByArgs | string
+ username?: Prisma.StringNullableFilter<"Attachment"> | string | null
name?: Prisma.StringFilter<"Attachment"> | string
mimetype?: Prisma.StringFilter<"Attachment"> | string
size?: Prisma.IntFilter<"Attachment"> | number
createdAt?: Prisma.DateTimeFilter<"Attachment"> | Date | string
+ user?: Prisma.XOR | null
message?: Prisma.MessageAttachmentListRelationFilter
}
export type AttachmentOrderByWithRelationInput = {
id?: Prisma.SortOrder
+ username?: Prisma.SortOrderInput | Prisma.SortOrder
name?: Prisma.SortOrder
mimetype?: Prisma.SortOrder
size?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
+ user?: Prisma.UserOrderByWithRelationInput
message?: Prisma.MessageAttachmentOrderByRelationAggregateInput
}
@@ -233,15 +244,18 @@ export type AttachmentWhereUniqueInput = Prisma.AtLeast<{
AND?: Prisma.AttachmentWhereInput | Prisma.AttachmentWhereInput[]
OR?: Prisma.AttachmentWhereInput[]
NOT?: Prisma.AttachmentWhereInput | Prisma.AttachmentWhereInput[]
+ username?: Prisma.StringNullableFilter<"Attachment"> | string | null
name?: Prisma.StringFilter<"Attachment"> | string
mimetype?: Prisma.StringFilter<"Attachment"> | string
size?: Prisma.IntFilter<"Attachment"> | number
createdAt?: Prisma.DateTimeFilter<"Attachment"> | Date | string
+ user?: Prisma.XOR | null
message?: Prisma.MessageAttachmentListRelationFilter
}, "id">
export type AttachmentOrderByWithAggregationInput = {
id?: Prisma.SortOrder
+ username?: Prisma.SortOrderInput | Prisma.SortOrder
name?: Prisma.SortOrder
mimetype?: Prisma.SortOrder
size?: Prisma.SortOrder
@@ -258,6 +272,7 @@ export type AttachmentScalarWhereWithAggregatesInput = {
OR?: Prisma.AttachmentScalarWhereWithAggregatesInput[]
NOT?: Prisma.AttachmentScalarWhereWithAggregatesInput | Prisma.AttachmentScalarWhereWithAggregatesInput[]
id?: Prisma.StringWithAggregatesFilter<"Attachment"> | string
+ username?: Prisma.StringNullableWithAggregatesFilter<"Attachment"> | string | null
name?: Prisma.StringWithAggregatesFilter<"Attachment"> | string
mimetype?: Prisma.StringWithAggregatesFilter<"Attachment"> | string
size?: Prisma.IntWithAggregatesFilter<"Attachment"> | number
@@ -270,11 +285,13 @@ export type AttachmentCreateInput = {
mimetype: string
size: number
createdAt?: Date | string
+ user?: Prisma.UserCreateNestedOneWithoutAttachmentsInput
message?: Prisma.MessageAttachmentCreateNestedManyWithoutAttachmentInput
}
export type AttachmentUncheckedCreateInput = {
id?: string
+ username?: string | null
name: string
mimetype: string
size: number
@@ -288,11 +305,13 @@ export type AttachmentUpdateInput = {
mimetype?: Prisma.StringFieldUpdateOperationsInput | string
size?: Prisma.IntFieldUpdateOperationsInput | number
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ user?: Prisma.UserUpdateOneWithoutAttachmentsNestedInput
message?: Prisma.MessageAttachmentUpdateManyWithoutAttachmentNestedInput
}
export type AttachmentUncheckedUpdateInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
+ username?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
mimetype?: Prisma.StringFieldUpdateOperationsInput | string
size?: Prisma.IntFieldUpdateOperationsInput | number
@@ -302,6 +321,7 @@ export type AttachmentUncheckedUpdateInput = {
export type AttachmentCreateManyInput = {
id?: string
+ username?: string | null
name: string
mimetype: string
size: number
@@ -318,14 +338,26 @@ export type AttachmentUpdateManyMutationInput = {
export type AttachmentUncheckedUpdateManyInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
+ username?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
mimetype?: Prisma.StringFieldUpdateOperationsInput | string
size?: Prisma.IntFieldUpdateOperationsInput | number
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
+export type AttachmentListRelationFilter = {
+ every?: Prisma.AttachmentWhereInput
+ some?: Prisma.AttachmentWhereInput
+ none?: Prisma.AttachmentWhereInput
+}
+
+export type AttachmentOrderByRelationAggregateInput = {
+ _count?: Prisma.SortOrder
+}
+
export type AttachmentCountOrderByAggregateInput = {
id?: Prisma.SortOrder
+ username?: Prisma.SortOrder
name?: Prisma.SortOrder
mimetype?: Prisma.SortOrder
size?: Prisma.SortOrder
@@ -338,6 +370,7 @@ export type AttachmentAvgOrderByAggregateInput = {
export type AttachmentMaxOrderByAggregateInput = {
id?: Prisma.SortOrder
+ username?: Prisma.SortOrder
name?: Prisma.SortOrder
mimetype?: Prisma.SortOrder
size?: Prisma.SortOrder
@@ -346,6 +379,7 @@ export type AttachmentMaxOrderByAggregateInput = {
export type AttachmentMinOrderByAggregateInput = {
id?: Prisma.SortOrder
+ username?: Prisma.SortOrder
name?: Prisma.SortOrder
mimetype?: Prisma.SortOrder
size?: Prisma.SortOrder
@@ -361,6 +395,48 @@ export type AttachmentScalarRelationFilter = {
isNot?: Prisma.AttachmentWhereInput
}
+export type AttachmentCreateNestedManyWithoutUserInput = {
+ create?: Prisma.XOR | Prisma.AttachmentCreateWithoutUserInput[] | Prisma.AttachmentUncheckedCreateWithoutUserInput[]
+ connectOrCreate?: Prisma.AttachmentCreateOrConnectWithoutUserInput | Prisma.AttachmentCreateOrConnectWithoutUserInput[]
+ createMany?: Prisma.AttachmentCreateManyUserInputEnvelope
+ connect?: Prisma.AttachmentWhereUniqueInput | Prisma.AttachmentWhereUniqueInput[]
+}
+
+export type AttachmentUncheckedCreateNestedManyWithoutUserInput = {
+ create?: Prisma.XOR | Prisma.AttachmentCreateWithoutUserInput[] | Prisma.AttachmentUncheckedCreateWithoutUserInput[]
+ connectOrCreate?: Prisma.AttachmentCreateOrConnectWithoutUserInput | Prisma.AttachmentCreateOrConnectWithoutUserInput[]
+ createMany?: Prisma.AttachmentCreateManyUserInputEnvelope
+ connect?: Prisma.AttachmentWhereUniqueInput | Prisma.AttachmentWhereUniqueInput[]
+}
+
+export type AttachmentUpdateManyWithoutUserNestedInput = {
+ create?: Prisma.XOR | Prisma.AttachmentCreateWithoutUserInput[] | Prisma.AttachmentUncheckedCreateWithoutUserInput[]
+ connectOrCreate?: Prisma.AttachmentCreateOrConnectWithoutUserInput | Prisma.AttachmentCreateOrConnectWithoutUserInput[]
+ upsert?: Prisma.AttachmentUpsertWithWhereUniqueWithoutUserInput | Prisma.AttachmentUpsertWithWhereUniqueWithoutUserInput[]
+ createMany?: Prisma.AttachmentCreateManyUserInputEnvelope
+ set?: Prisma.AttachmentWhereUniqueInput | Prisma.AttachmentWhereUniqueInput[]
+ disconnect?: Prisma.AttachmentWhereUniqueInput | Prisma.AttachmentWhereUniqueInput[]
+ delete?: Prisma.AttachmentWhereUniqueInput | Prisma.AttachmentWhereUniqueInput[]
+ connect?: Prisma.AttachmentWhereUniqueInput | Prisma.AttachmentWhereUniqueInput[]
+ update?: Prisma.AttachmentUpdateWithWhereUniqueWithoutUserInput | Prisma.AttachmentUpdateWithWhereUniqueWithoutUserInput[]
+ updateMany?: Prisma.AttachmentUpdateManyWithWhereWithoutUserInput | Prisma.AttachmentUpdateManyWithWhereWithoutUserInput[]
+ deleteMany?: Prisma.AttachmentScalarWhereInput | Prisma.AttachmentScalarWhereInput[]
+}
+
+export type AttachmentUncheckedUpdateManyWithoutUserNestedInput = {
+ create?: Prisma.XOR | Prisma.AttachmentCreateWithoutUserInput[] | Prisma.AttachmentUncheckedCreateWithoutUserInput[]
+ connectOrCreate?: Prisma.AttachmentCreateOrConnectWithoutUserInput | Prisma.AttachmentCreateOrConnectWithoutUserInput[]
+ upsert?: Prisma.AttachmentUpsertWithWhereUniqueWithoutUserInput | Prisma.AttachmentUpsertWithWhereUniqueWithoutUserInput[]
+ createMany?: Prisma.AttachmentCreateManyUserInputEnvelope
+ set?: Prisma.AttachmentWhereUniqueInput | Prisma.AttachmentWhereUniqueInput[]
+ disconnect?: Prisma.AttachmentWhereUniqueInput | Prisma.AttachmentWhereUniqueInput[]
+ delete?: Prisma.AttachmentWhereUniqueInput | Prisma.AttachmentWhereUniqueInput[]
+ connect?: Prisma.AttachmentWhereUniqueInput | Prisma.AttachmentWhereUniqueInput[]
+ update?: Prisma.AttachmentUpdateWithWhereUniqueWithoutUserInput | Prisma.AttachmentUpdateWithWhereUniqueWithoutUserInput[]
+ updateMany?: Prisma.AttachmentUpdateManyWithWhereWithoutUserInput | Prisma.AttachmentUpdateManyWithWhereWithoutUserInput[]
+ deleteMany?: Prisma.AttachmentScalarWhereInput | Prisma.AttachmentScalarWhereInput[]
+}
+
export type IntFieldUpdateOperationsInput = {
set?: number
increment?: number
@@ -383,16 +459,73 @@ export type AttachmentUpdateOneRequiredWithoutMessageNestedInput = {
update?: Prisma.XOR, Prisma.AttachmentUncheckedUpdateWithoutMessageInput>
}
+export type AttachmentCreateWithoutUserInput = {
+ id?: string
+ name: string
+ mimetype: string
+ size: number
+ createdAt?: Date | string
+ message?: Prisma.MessageAttachmentCreateNestedManyWithoutAttachmentInput
+}
+
+export type AttachmentUncheckedCreateWithoutUserInput = {
+ id?: string
+ name: string
+ mimetype: string
+ size: number
+ createdAt?: Date | string
+ message?: Prisma.MessageAttachmentUncheckedCreateNestedManyWithoutAttachmentInput
+}
+
+export type AttachmentCreateOrConnectWithoutUserInput = {
+ where: Prisma.AttachmentWhereUniqueInput
+ create: Prisma.XOR
+}
+
+export type AttachmentCreateManyUserInputEnvelope = {
+ data: Prisma.AttachmentCreateManyUserInput | Prisma.AttachmentCreateManyUserInput[]
+}
+
+export type AttachmentUpsertWithWhereUniqueWithoutUserInput = {
+ where: Prisma.AttachmentWhereUniqueInput
+ update: Prisma.XOR
+ create: Prisma.XOR
+}
+
+export type AttachmentUpdateWithWhereUniqueWithoutUserInput = {
+ where: Prisma.AttachmentWhereUniqueInput
+ data: Prisma.XOR
+}
+
+export type AttachmentUpdateManyWithWhereWithoutUserInput = {
+ where: Prisma.AttachmentScalarWhereInput
+ data: Prisma.XOR
+}
+
+export type AttachmentScalarWhereInput = {
+ AND?: Prisma.AttachmentScalarWhereInput | Prisma.AttachmentScalarWhereInput[]
+ OR?: Prisma.AttachmentScalarWhereInput[]
+ NOT?: Prisma.AttachmentScalarWhereInput | Prisma.AttachmentScalarWhereInput[]
+ id?: Prisma.StringFilter<"Attachment"> | string
+ username?: Prisma.StringNullableFilter<"Attachment"> | string | null
+ name?: Prisma.StringFilter<"Attachment"> | string
+ mimetype?: Prisma.StringFilter<"Attachment"> | string
+ size?: Prisma.IntFilter<"Attachment"> | number
+ createdAt?: Prisma.DateTimeFilter<"Attachment"> | Date | string
+}
+
export type AttachmentCreateWithoutMessageInput = {
id?: string
name: string
mimetype: string
size: number
createdAt?: Date | string
+ user?: Prisma.UserCreateNestedOneWithoutAttachmentsInput
}
export type AttachmentUncheckedCreateWithoutMessageInput = {
id?: string
+ username?: string | null
name: string
mimetype: string
size: number
@@ -421,9 +554,45 @@ export type AttachmentUpdateWithoutMessageInput = {
mimetype?: Prisma.StringFieldUpdateOperationsInput | string
size?: Prisma.IntFieldUpdateOperationsInput | number
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ user?: Prisma.UserUpdateOneWithoutAttachmentsNestedInput
}
export type AttachmentUncheckedUpdateWithoutMessageInput = {
+ id?: Prisma.StringFieldUpdateOperationsInput | string
+ username?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
+ name?: Prisma.StringFieldUpdateOperationsInput | string
+ mimetype?: Prisma.StringFieldUpdateOperationsInput | string
+ size?: Prisma.IntFieldUpdateOperationsInput | number
+ createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+}
+
+export type AttachmentCreateManyUserInput = {
+ id?: string
+ name: string
+ mimetype: string
+ size: number
+ createdAt?: Date | string
+}
+
+export type AttachmentUpdateWithoutUserInput = {
+ id?: Prisma.StringFieldUpdateOperationsInput | string
+ name?: Prisma.StringFieldUpdateOperationsInput | string
+ mimetype?: Prisma.StringFieldUpdateOperationsInput | string
+ size?: Prisma.IntFieldUpdateOperationsInput | number
+ createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ message?: Prisma.MessageAttachmentUpdateManyWithoutAttachmentNestedInput
+}
+
+export type AttachmentUncheckedUpdateWithoutUserInput = {
+ id?: Prisma.StringFieldUpdateOperationsInput | string
+ name?: Prisma.StringFieldUpdateOperationsInput | string
+ mimetype?: Prisma.StringFieldUpdateOperationsInput | string
+ size?: Prisma.IntFieldUpdateOperationsInput | number
+ createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ message?: Prisma.MessageAttachmentUncheckedUpdateManyWithoutAttachmentNestedInput
+}
+
+export type AttachmentUncheckedUpdateManyWithoutUserInput = {
id?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
mimetype?: Prisma.StringFieldUpdateOperationsInput | string
@@ -464,53 +633,67 @@ export type AttachmentCountOutputTypeCountMessageArgs = runtime.Types.Extensions.GetSelect<{
id?: boolean
+ username?: boolean
name?: boolean
mimetype?: boolean
size?: boolean
createdAt?: boolean
+ user?: boolean | Prisma.Attachment$userArgs
message?: boolean | Prisma.Attachment$messageArgs
_count?: boolean | Prisma.AttachmentCountOutputTypeDefaultArgs
}, ExtArgs["result"]["attachment"]>
export type AttachmentSelectCreateManyAndReturn = runtime.Types.Extensions.GetSelect<{
id?: boolean
+ username?: boolean
name?: boolean
mimetype?: boolean
size?: boolean
createdAt?: boolean
+ user?: boolean | Prisma.Attachment$userArgs
}, ExtArgs["result"]["attachment"]>
export type AttachmentSelectUpdateManyAndReturn = runtime.Types.Extensions.GetSelect<{
id?: boolean
+ username?: boolean
name?: boolean
mimetype?: boolean
size?: boolean
createdAt?: boolean
+ user?: boolean | Prisma.Attachment$userArgs
}, ExtArgs["result"]["attachment"]>
export type AttachmentSelectScalar = {
id?: boolean
+ username?: boolean
name?: boolean
mimetype?: boolean
size?: boolean
createdAt?: boolean
}
-export type AttachmentOmit = runtime.Types.Extensions.GetOmit<"id" | "name" | "mimetype" | "size" | "createdAt", ExtArgs["result"]["attachment"]>
+export type AttachmentOmit = runtime.Types.Extensions.GetOmit<"id" | "username" | "name" | "mimetype" | "size" | "createdAt", ExtArgs["result"]["attachment"]>
export type AttachmentInclude = {
+ user?: boolean | Prisma.Attachment$userArgs
message?: boolean | Prisma.Attachment$messageArgs
_count?: boolean | Prisma.AttachmentCountOutputTypeDefaultArgs
}
-export type AttachmentIncludeCreateManyAndReturn = {}
-export type AttachmentIncludeUpdateManyAndReturn = {}
+export type AttachmentIncludeCreateManyAndReturn = {
+ user?: boolean | Prisma.Attachment$userArgs
+}
+export type AttachmentIncludeUpdateManyAndReturn = {
+ user?: boolean | Prisma.Attachment$userArgs
+}
export type $AttachmentPayload = {
name: "Attachment"
objects: {
+ user: Prisma.$UserPayload | null
message: Prisma.$MessageAttachmentPayload[]
}
scalars: runtime.Types.Extensions.GetPayloadResult<{
id: string
+ username: string | null
name: string
mimetype: string
size: number
@@ -909,6 +1092,7 @@ readonly fields: AttachmentFieldRefs;
*/
export interface Prisma__AttachmentClient extends Prisma.PrismaPromise {
readonly [Symbol.toStringTag]: "PrismaPromise"
+ user = {}>(args?: Prisma.Subset>): Prisma.Prisma__UserClient, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
message = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null>
/**
* Attaches callbacks for the resolution and/or rejection of the Promise.
@@ -940,6 +1124,7 @@ export interface Prisma__AttachmentClient
+ readonly username: Prisma.FieldRef<"Attachment", 'String'>
readonly name: Prisma.FieldRef<"Attachment", 'String'>
readonly mimetype: Prisma.FieldRef<"Attachment", 'String'>
readonly size: Prisma.FieldRef<"Attachment", 'Int'>
@@ -1196,6 +1381,10 @@ export type AttachmentCreateManyAndReturnArgs | null
}
/**
@@ -1266,6 +1455,10 @@ export type AttachmentUpdateManyAndReturnArgs | null
}
/**
@@ -1334,6 +1527,25 @@ export type AttachmentDeleteManyArgs = {
+ /**
+ * Select specific fields to fetch from the User
+ */
+ select?: Prisma.UserSelect | null
+ /**
+ * Omit specific fields from the User
+ */
+ omit?: Prisma.UserOmit | null
+ /**
+ * Choose, which related nodes to fetch as well
+ */
+ include?: Prisma.UserInclude | null
+ where?: Prisma.UserWhereInput
+}
+
/**
* Attachment.message
*/
diff --git a/server/prisma/generated-client/models/User.ts b/server/prisma/generated-client/models/User.ts
index fa6bc89..d0a2ff2 100644
--- a/server/prisma/generated-client/models/User.ts
+++ b/server/prisma/generated-client/models/User.ts
@@ -182,6 +182,7 @@ export type UserWhereInput = {
displayName?: Prisma.StringFilter<"User"> | string
createdAt?: Prisma.DateTimeFilter<"User"> | Date | string
updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string
+ Attachments?: Prisma.AttachmentListRelationFilter
Session?: Prisma.SessionListRelationFilter
UserPreferences?: Prisma.XOR | null
Messages?: Prisma.MessageListRelationFilter
@@ -194,6 +195,7 @@ export type UserOrderByWithRelationInput = {
displayName?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
+ Attachments?: Prisma.AttachmentOrderByRelationAggregateInput
Session?: Prisma.SessionOrderByRelationAggregateInput
UserPreferences?: Prisma.UserPreferencesOrderByWithRelationInput
Messages?: Prisma.MessageOrderByRelationAggregateInput
@@ -209,6 +211,7 @@ export type UserWhereUniqueInput = Prisma.AtLeast<{
displayName?: Prisma.StringFilter<"User"> | string
createdAt?: Prisma.DateTimeFilter<"User"> | Date | string
updatedAt?: Prisma.DateTimeFilter<"User"> | Date | string
+ Attachments?: Prisma.AttachmentListRelationFilter
Session?: Prisma.SessionListRelationFilter
UserPreferences?: Prisma.XOR | null
Messages?: Prisma.MessageListRelationFilter
@@ -243,6 +246,7 @@ export type UserCreateInput = {
displayName: string
createdAt?: Date | string
updatedAt?: Date | string
+ Attachments?: Prisma.AttachmentCreateNestedManyWithoutUserInput
Session?: Prisma.SessionCreateNestedManyWithoutUserInput
UserPreferences?: Prisma.UserPreferencesCreateNestedOneWithoutUserInput
Messages?: Prisma.MessageCreateNestedManyWithoutSenderInput
@@ -255,6 +259,7 @@ export type UserUncheckedCreateInput = {
displayName: string
createdAt?: Date | string
updatedAt?: Date | string
+ Attachments?: Prisma.AttachmentUncheckedCreateNestedManyWithoutUserInput
Session?: Prisma.SessionUncheckedCreateNestedManyWithoutUserInput
UserPreferences?: Prisma.UserPreferencesUncheckedCreateNestedOneWithoutUserInput
Messages?: Prisma.MessageUncheckedCreateNestedManyWithoutSenderInput
@@ -267,6 +272,7 @@ export type UserUpdateInput = {
displayName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Attachments?: Prisma.AttachmentUpdateManyWithoutUserNestedInput
Session?: Prisma.SessionUpdateManyWithoutUserNestedInput
UserPreferences?: Prisma.UserPreferencesUpdateOneWithoutUserNestedInput
Messages?: Prisma.MessageUpdateManyWithoutSenderNestedInput
@@ -279,6 +285,7 @@ export type UserUncheckedUpdateInput = {
displayName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Attachments?: Prisma.AttachmentUncheckedUpdateManyWithoutUserNestedInput
Session?: Prisma.SessionUncheckedUpdateManyWithoutUserNestedInput
UserPreferences?: Prisma.UserPreferencesUncheckedUpdateOneWithoutUserNestedInput
Messages?: Prisma.MessageUncheckedUpdateManyWithoutSenderNestedInput
@@ -379,6 +386,22 @@ export type UserUpdateOneRequiredWithoutUserPreferencesNestedInput = {
update?: Prisma.XOR, Prisma.UserUncheckedUpdateWithoutUserPreferencesInput>
}
+export type UserCreateNestedOneWithoutAttachmentsInput = {
+ create?: Prisma.XOR
+ connectOrCreate?: Prisma.UserCreateOrConnectWithoutAttachmentsInput
+ connect?: Prisma.UserWhereUniqueInput
+}
+
+export type UserUpdateOneWithoutAttachmentsNestedInput = {
+ create?: Prisma.XOR
+ connectOrCreate?: Prisma.UserCreateOrConnectWithoutAttachmentsInput
+ upsert?: Prisma.UserUpsertWithoutAttachmentsInput
+ disconnect?: Prisma.UserWhereInput | boolean
+ delete?: Prisma.UserWhereInput | boolean
+ connect?: Prisma.UserWhereUniqueInput
+ update?: Prisma.XOR, Prisma.UserUncheckedUpdateWithoutAttachmentsInput>
+}
+
export type UserCreateNestedOneWithoutMessagesInput = {
create?: Prisma.XOR
connectOrCreate?: Prisma.UserCreateOrConnectWithoutMessagesInput
@@ -417,6 +440,7 @@ export type UserCreateWithoutSessionInput = {
displayName: string
createdAt?: Date | string
updatedAt?: Date | string
+ Attachments?: Prisma.AttachmentCreateNestedManyWithoutUserInput
UserPreferences?: Prisma.UserPreferencesCreateNestedOneWithoutUserInput
Messages?: Prisma.MessageCreateNestedManyWithoutSenderInput
Channels?: Prisma.ChannelCreateNestedManyWithoutOwnerInput
@@ -428,6 +452,7 @@ export type UserUncheckedCreateWithoutSessionInput = {
displayName: string
createdAt?: Date | string
updatedAt?: Date | string
+ Attachments?: Prisma.AttachmentUncheckedCreateNestedManyWithoutUserInput
UserPreferences?: Prisma.UserPreferencesUncheckedCreateNestedOneWithoutUserInput
Messages?: Prisma.MessageUncheckedCreateNestedManyWithoutSenderInput
Channels?: Prisma.ChannelUncheckedCreateNestedManyWithoutOwnerInput
@@ -455,6 +480,7 @@ export type UserUpdateWithoutSessionInput = {
displayName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Attachments?: Prisma.AttachmentUpdateManyWithoutUserNestedInput
UserPreferences?: Prisma.UserPreferencesUpdateOneWithoutUserNestedInput
Messages?: Prisma.MessageUpdateManyWithoutSenderNestedInput
Channels?: Prisma.ChannelUpdateManyWithoutOwnerNestedInput
@@ -466,6 +492,7 @@ export type UserUncheckedUpdateWithoutSessionInput = {
displayName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Attachments?: Prisma.AttachmentUncheckedUpdateManyWithoutUserNestedInput
UserPreferences?: Prisma.UserPreferencesUncheckedUpdateOneWithoutUserNestedInput
Messages?: Prisma.MessageUncheckedUpdateManyWithoutSenderNestedInput
Channels?: Prisma.ChannelUncheckedUpdateManyWithoutOwnerNestedInput
@@ -477,6 +504,7 @@ export type UserCreateWithoutUserPreferencesInput = {
displayName: string
createdAt?: Date | string
updatedAt?: Date | string
+ Attachments?: Prisma.AttachmentCreateNestedManyWithoutUserInput
Session?: Prisma.SessionCreateNestedManyWithoutUserInput
Messages?: Prisma.MessageCreateNestedManyWithoutSenderInput
Channels?: Prisma.ChannelCreateNestedManyWithoutOwnerInput
@@ -488,6 +516,7 @@ export type UserUncheckedCreateWithoutUserPreferencesInput = {
displayName: string
createdAt?: Date | string
updatedAt?: Date | string
+ Attachments?: Prisma.AttachmentUncheckedCreateNestedManyWithoutUserInput
Session?: Prisma.SessionUncheckedCreateNestedManyWithoutUserInput
Messages?: Prisma.MessageUncheckedCreateNestedManyWithoutSenderInput
Channels?: Prisma.ChannelUncheckedCreateNestedManyWithoutOwnerInput
@@ -515,6 +544,7 @@ export type UserUpdateWithoutUserPreferencesInput = {
displayName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Attachments?: Prisma.AttachmentUpdateManyWithoutUserNestedInput
Session?: Prisma.SessionUpdateManyWithoutUserNestedInput
Messages?: Prisma.MessageUpdateManyWithoutSenderNestedInput
Channels?: Prisma.ChannelUpdateManyWithoutOwnerNestedInput
@@ -526,17 +556,83 @@ export type UserUncheckedUpdateWithoutUserPreferencesInput = {
displayName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Attachments?: Prisma.AttachmentUncheckedUpdateManyWithoutUserNestedInput
Session?: Prisma.SessionUncheckedUpdateManyWithoutUserNestedInput
Messages?: Prisma.MessageUncheckedUpdateManyWithoutSenderNestedInput
Channels?: Prisma.ChannelUncheckedUpdateManyWithoutOwnerNestedInput
}
+export type UserCreateWithoutAttachmentsInput = {
+ username: string
+ password: string
+ displayName: string
+ createdAt?: Date | string
+ updatedAt?: Date | string
+ Session?: Prisma.SessionCreateNestedManyWithoutUserInput
+ UserPreferences?: Prisma.UserPreferencesCreateNestedOneWithoutUserInput
+ Messages?: Prisma.MessageCreateNestedManyWithoutSenderInput
+ Channels?: Prisma.ChannelCreateNestedManyWithoutOwnerInput
+}
+
+export type UserUncheckedCreateWithoutAttachmentsInput = {
+ username: string
+ password: string
+ displayName: string
+ createdAt?: Date | string
+ updatedAt?: Date | string
+ Session?: Prisma.SessionUncheckedCreateNestedManyWithoutUserInput
+ UserPreferences?: Prisma.UserPreferencesUncheckedCreateNestedOneWithoutUserInput
+ Messages?: Prisma.MessageUncheckedCreateNestedManyWithoutSenderInput
+ Channels?: Prisma.ChannelUncheckedCreateNestedManyWithoutOwnerInput
+}
+
+export type UserCreateOrConnectWithoutAttachmentsInput = {
+ where: Prisma.UserWhereUniqueInput
+ create: Prisma.XOR
+}
+
+export type UserUpsertWithoutAttachmentsInput = {
+ update: Prisma.XOR
+ create: Prisma.XOR
+ where?: Prisma.UserWhereInput
+}
+
+export type UserUpdateToOneWithWhereWithoutAttachmentsInput = {
+ where?: Prisma.UserWhereInput
+ data: Prisma.XOR
+}
+
+export type UserUpdateWithoutAttachmentsInput = {
+ username?: Prisma.StringFieldUpdateOperationsInput | string
+ password?: Prisma.StringFieldUpdateOperationsInput | string
+ displayName?: Prisma.StringFieldUpdateOperationsInput | string
+ createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Session?: Prisma.SessionUpdateManyWithoutUserNestedInput
+ UserPreferences?: Prisma.UserPreferencesUpdateOneWithoutUserNestedInput
+ Messages?: Prisma.MessageUpdateManyWithoutSenderNestedInput
+ Channels?: Prisma.ChannelUpdateManyWithoutOwnerNestedInput
+}
+
+export type UserUncheckedUpdateWithoutAttachmentsInput = {
+ username?: Prisma.StringFieldUpdateOperationsInput | string
+ password?: Prisma.StringFieldUpdateOperationsInput | string
+ displayName?: Prisma.StringFieldUpdateOperationsInput | string
+ createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Session?: Prisma.SessionUncheckedUpdateManyWithoutUserNestedInput
+ UserPreferences?: Prisma.UserPreferencesUncheckedUpdateOneWithoutUserNestedInput
+ Messages?: Prisma.MessageUncheckedUpdateManyWithoutSenderNestedInput
+ Channels?: Prisma.ChannelUncheckedUpdateManyWithoutOwnerNestedInput
+}
+
export type UserCreateWithoutMessagesInput = {
username: string
password: string
displayName: string
createdAt?: Date | string
updatedAt?: Date | string
+ Attachments?: Prisma.AttachmentCreateNestedManyWithoutUserInput
Session?: Prisma.SessionCreateNestedManyWithoutUserInput
UserPreferences?: Prisma.UserPreferencesCreateNestedOneWithoutUserInput
Channels?: Prisma.ChannelCreateNestedManyWithoutOwnerInput
@@ -548,6 +644,7 @@ export type UserUncheckedCreateWithoutMessagesInput = {
displayName: string
createdAt?: Date | string
updatedAt?: Date | string
+ Attachments?: Prisma.AttachmentUncheckedCreateNestedManyWithoutUserInput
Session?: Prisma.SessionUncheckedCreateNestedManyWithoutUserInput
UserPreferences?: Prisma.UserPreferencesUncheckedCreateNestedOneWithoutUserInput
Channels?: Prisma.ChannelUncheckedCreateNestedManyWithoutOwnerInput
@@ -575,6 +672,7 @@ export type UserUpdateWithoutMessagesInput = {
displayName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Attachments?: Prisma.AttachmentUpdateManyWithoutUserNestedInput
Session?: Prisma.SessionUpdateManyWithoutUserNestedInput
UserPreferences?: Prisma.UserPreferencesUpdateOneWithoutUserNestedInput
Channels?: Prisma.ChannelUpdateManyWithoutOwnerNestedInput
@@ -586,6 +684,7 @@ export type UserUncheckedUpdateWithoutMessagesInput = {
displayName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Attachments?: Prisma.AttachmentUncheckedUpdateManyWithoutUserNestedInput
Session?: Prisma.SessionUncheckedUpdateManyWithoutUserNestedInput
UserPreferences?: Prisma.UserPreferencesUncheckedUpdateOneWithoutUserNestedInput
Channels?: Prisma.ChannelUncheckedUpdateManyWithoutOwnerNestedInput
@@ -597,6 +696,7 @@ export type UserCreateWithoutChannelsInput = {
displayName: string
createdAt?: Date | string
updatedAt?: Date | string
+ Attachments?: Prisma.AttachmentCreateNestedManyWithoutUserInput
Session?: Prisma.SessionCreateNestedManyWithoutUserInput
UserPreferences?: Prisma.UserPreferencesCreateNestedOneWithoutUserInput
Messages?: Prisma.MessageCreateNestedManyWithoutSenderInput
@@ -608,6 +708,7 @@ export type UserUncheckedCreateWithoutChannelsInput = {
displayName: string
createdAt?: Date | string
updatedAt?: Date | string
+ Attachments?: Prisma.AttachmentUncheckedCreateNestedManyWithoutUserInput
Session?: Prisma.SessionUncheckedCreateNestedManyWithoutUserInput
UserPreferences?: Prisma.UserPreferencesUncheckedCreateNestedOneWithoutUserInput
Messages?: Prisma.MessageUncheckedCreateNestedManyWithoutSenderInput
@@ -635,6 +736,7 @@ export type UserUpdateWithoutChannelsInput = {
displayName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Attachments?: Prisma.AttachmentUpdateManyWithoutUserNestedInput
Session?: Prisma.SessionUpdateManyWithoutUserNestedInput
UserPreferences?: Prisma.UserPreferencesUpdateOneWithoutUserNestedInput
Messages?: Prisma.MessageUpdateManyWithoutSenderNestedInput
@@ -646,6 +748,7 @@ export type UserUncheckedUpdateWithoutChannelsInput = {
displayName?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+ Attachments?: Prisma.AttachmentUncheckedUpdateManyWithoutUserNestedInput
Session?: Prisma.SessionUncheckedUpdateManyWithoutUserNestedInput
UserPreferences?: Prisma.UserPreferencesUncheckedUpdateOneWithoutUserNestedInput
Messages?: Prisma.MessageUncheckedUpdateManyWithoutSenderNestedInput
@@ -657,12 +760,14 @@ export type UserUncheckedUpdateWithoutChannelsInput = {
*/
export type UserCountOutputType = {
+ Attachments: number
Session: number
Messages: number
Channels: number
}
export type UserCountOutputTypeSelect = {
+ Attachments?: boolean | UserCountOutputTypeCountAttachmentsArgs
Session?: boolean | UserCountOutputTypeCountSessionArgs
Messages?: boolean | UserCountOutputTypeCountMessagesArgs
Channels?: boolean | UserCountOutputTypeCountChannelsArgs
@@ -678,6 +783,13 @@ export type UserCountOutputTypeDefaultArgs | null
}
+/**
+ * UserCountOutputType without action
+ */
+export type UserCountOutputTypeCountAttachmentsArgs = {
+ where?: Prisma.AttachmentWhereInput
+}
+
/**
* UserCountOutputType without action
*/
@@ -706,6 +818,7 @@ export type UserSelect
Session?: boolean | Prisma.User$SessionArgs
UserPreferences?: boolean | Prisma.User$UserPreferencesArgs
Messages?: boolean | Prisma.User$MessagesArgs
@@ -739,6 +852,7 @@ export type UserSelectScalar = {
export type UserOmit = runtime.Types.Extensions.GetOmit<"username" | "password" | "displayName" | "createdAt" | "updatedAt", ExtArgs["result"]["user"]>
export type UserInclude = {
+ Attachments?: boolean | Prisma.User$AttachmentsArgs
Session?: boolean | Prisma.User$SessionArgs
UserPreferences?: boolean | Prisma.User$UserPreferencesArgs
Messages?: boolean | Prisma.User$MessagesArgs
@@ -751,6 +865,7 @@ export type UserIncludeUpdateManyAndReturn = {
name: "User"
objects: {
+ Attachments: Prisma.$AttachmentPayload[]
Session: Prisma.$SessionPayload[]
UserPreferences: Prisma.$UserPreferencesPayload | null
Messages: Prisma.$MessagePayload[]
@@ -1156,6 +1271,7 @@ readonly fields: UserFieldRefs;
*/
export interface Prisma__UserClient extends Prisma.PrismaPromise {
readonly [Symbol.toStringTag]: "PrismaPromise"
+ Attachments = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null>
Session = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null>
UserPreferences = {}>(args?: Prisma.Subset>): Prisma.Prisma__UserPreferencesClient, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
Messages = {}>(args?: Prisma.Subset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions> | Null>
@@ -1584,6 +1700,30 @@ export type UserDeleteManyArgs = {
+ /**
+ * Select specific fields to fetch from the Attachment
+ */
+ select?: Prisma.AttachmentSelect | null
+ /**
+ * Omit specific fields from the Attachment
+ */
+ omit?: Prisma.AttachmentOmit | null
+ /**
+ * Choose, which related nodes to fetch as well
+ */
+ include?: Prisma.AttachmentInclude | null
+ where?: Prisma.AttachmentWhereInput
+ orderBy?: Prisma.AttachmentOrderByWithRelationInput | Prisma.AttachmentOrderByWithRelationInput[]
+ cursor?: Prisma.AttachmentWhereUniqueInput
+ take?: number
+ skip?: number
+ distinct?: Prisma.AttachmentScalarFieldEnum | Prisma.AttachmentScalarFieldEnum[]
+}
+
/**
* User.Session
*/
diff --git a/server/prisma/migrations/20260524122149_attachment_owner/migration.sql b/server/prisma/migrations/20260524122149_attachment_owner/migration.sql
new file mode 100644
index 0000000..60ec00a
--- /dev/null
+++ b/server/prisma/migrations/20260524122149_attachment_owner/migration.sql
@@ -0,0 +1,17 @@
+-- RedefineTables
+PRAGMA defer_foreign_keys=ON;
+PRAGMA foreign_keys=OFF;
+CREATE TABLE "new_Attachment" (
+ "id" TEXT NOT NULL PRIMARY KEY,
+ "username" TEXT,
+ "name" TEXT NOT NULL,
+ "mimetype" TEXT NOT NULL,
+ "size" INTEGER NOT NULL,
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ CONSTRAINT "Attachment_username_fkey" FOREIGN KEY ("username") REFERENCES "User" ("username") ON DELETE CASCADE ON UPDATE CASCADE
+);
+INSERT INTO "new_Attachment" ("createdAt", "id", "mimetype", "name", "size") SELECT "createdAt", "id", "mimetype", "name", "size" FROM "Attachment";
+DROP TABLE "Attachment";
+ALTER TABLE "new_Attachment" RENAME TO "Attachment";
+PRAGMA foreign_keys=ON;
+PRAGMA defer_foreign_keys=OFF;
diff --git a/server/prisma/schema.prisma b/server/prisma/schema.prisma
index 5f95127..3b2037b 100644
--- a/server/prisma/schema.prisma
+++ b/server/prisma/schema.prisma
@@ -14,6 +14,7 @@ model User {
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
+ Attachments Attachment[]
Session Session[]
UserPreferences UserPreferences?
Messages Message[]
@@ -38,11 +39,13 @@ model UserPreferences {
model Attachment {
id String @id @default(uuid())
+ username String?
name String
mimetype String
size Int
createdAt DateTime @default(now())
+ user User? @relation(references: [username], fields: [username], onDelete: Cascade)
message MessageAttachment[]
}
diff --git a/server/routes/attachment.ts b/server/routes/attachment.ts
index b87d782..883a0ca 100644
--- a/server/routes/attachment.ts
+++ b/server/routes/attachment.ts
@@ -27,6 +27,7 @@ const plugin: FastifyPluginAsyncTypebox = async (fastify) => {
},
},
async (req, reply) => {
+ const user = req.user!
const data = await req.file()
if (!data) {
@@ -36,6 +37,7 @@ const plugin: FastifyPluginAsyncTypebox = async (fastify) => {
const meta = await fastify.prisma.attachment.create({
data: {
name: data.filename,
+ username: user.username,
mimetype: data.mimetype,
size: 0,
},
@@ -47,13 +49,25 @@ const plugin: FastifyPluginAsyncTypebox = async (fastify) => {
const filePath = path.join(process.cwd(), 'uploads', meta.id)
+ let fileSize = 0
+
await new Promise((resolve, reject) => {
const writeStream = fs.createWriteStream(filePath)
data.file.pipe(writeStream)
+ data.file.on('data', (chunk) => {
+ fileSize += chunk.length
+ })
data.file.on('end', resolve)
data.file.on('error', reject)
})
+ await fastify.prisma.attachment.update({
+ where: { id: meta.id },
+ data: { size: fileSize },
+ })
+
+ // await new Promise(resolve => setTimeout(resolve, Math.random() * 10000))
+
return meta.id
},
)
diff --git a/server/server.ts b/server/server.ts
index ef95bcb..1bfbde0 100644
--- a/server/server.ts
+++ b/server/server.ts
@@ -105,7 +105,12 @@ fastify.register(FastifyCors, {
})
fastify.register(FastifyCookie)
-fastify.register(FastifyMultipart)
+fastify.register(FastifyMultipart, {
+ limits: {
+ files: 10,
+ fileSize: 500 * 1024 * 1024,
+ },
+})
fastify.register(FastifyAutoLoad, {
dir: join(__dirname, 'plugins'),