ocean-brain 0.3.4 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +5 -0
- package/package.json +6 -5
- package/scripts/postinstall-prisma.mjs +3 -2
- package/server/client/dist/assets/Calendar-D4KkvcU8.js +25 -0
- package/server/client/dist/assets/Callout-CaSzc-1y.js +1 -0
- package/server/client/dist/assets/Graph-C8pBdJzV.js +1 -0
- package/server/client/dist/assets/{Image-ZxF459sC.js → Image-DlJ4MDo3.js} +1 -1
- package/server/client/dist/assets/{Image.es-BQfyKc2-.js → Image.es-C8g5NwNt.js} +1 -1
- package/server/client/dist/assets/Note-ODOESft3.js +21 -0
- package/server/client/dist/assets/Note-W4f6H9K0.css +1 -0
- package/server/client/dist/assets/Plus.es-Bkl1ZXE0.js +1 -0
- package/server/client/dist/assets/Reminders-FrTR9ny8.js +1 -0
- package/server/client/dist/assets/Search-BPf2LO1Y.js +1 -0
- package/server/client/dist/assets/{SurfaceCard-nZNf9lyE.js → SurfaceCard-WSk7zWeM.js} +1 -1
- package/server/client/dist/assets/Tag-uArdLjo1.js +1 -0
- package/server/client/dist/assets/TagNotes-DDvXHB9I.js +1 -0
- package/server/client/dist/assets/{Trash.es-BGoN5q9L.js → Trash.es-DumPfiUz.js} +1 -1
- package/server/client/dist/assets/ViewNotes-BVu9lEs-.js +1 -0
- package/server/client/dist/assets/Views-D4LGh30P.js +1 -0
- package/server/client/dist/assets/{image.api-0mMkElZk.js → image.api-D3Ei3fbf.js} +1 -1
- package/server/client/dist/assets/index-46ZUXbW5.js +232 -0
- package/server/client/dist/assets/index-C7YGbIuA.js +1 -0
- package/server/client/dist/assets/{index-DL7pUwq2.css → index-D2gRB1ig.css} +1 -1
- package/server/client/dist/assets/manage-image-DiuREdeE.js +1 -0
- package/server/client/dist/assets/manage-image-detail-D8Eorq3u.js +1 -0
- package/server/client/dist/assets/mcp-CvCGaYSz.js +1 -0
- package/server/client/dist/assets/{note-core-BCgMq5QA.js → note-core-GgFcksAF.js} +1 -1
- package/server/client/dist/assets/{note-vendor-BofYbzmZ.js → note-vendor-B0t5F04o.js} +5 -5
- package/server/client/dist/assets/{placeholder-i-uNe71U.js → placeholder-znZDfNAE.js} +2 -2
- package/server/client/dist/assets/trash-R0sww0ur.js +1 -0
- package/server/client/dist/assets/{useReminderMutate-tNMwwRnx.js → useReminderMutate-Bkj-oIm4.js} +2 -2
- package/server/client/dist/assets/view-dashboard-ClpF_qLM.js +90 -0
- package/server/client/dist/index.html +4 -4
- package/server/dist/app.js +8 -84
- package/server/dist/app.js.map +1 -1
- package/server/dist/features/auth/http/api.js +40 -0
- package/server/dist/features/auth/http/api.js.map +1 -0
- package/server/dist/features/auth/http/login-page.js +28 -0
- package/server/dist/features/auth/http/login-page.js.map +1 -0
- package/server/dist/features/auth/http/pages.js +50 -0
- package/server/dist/features/auth/http/pages.js.map +1 -0
- package/server/dist/features/auth/service.js +63 -0
- package/server/dist/features/auth/service.js.map +1 -0
- package/server/dist/features/cache/graphql/cache.field.resolver.js +5 -0
- package/server/dist/features/cache/graphql/cache.field.resolver.js.map +1 -0
- package/server/dist/features/cache/graphql/cache.mutation.resolver.js +49 -0
- package/server/dist/features/cache/graphql/cache.mutation.resolver.js.map +1 -0
- package/server/dist/features/cache/graphql/cache.query.resolver.js +21 -0
- package/server/dist/features/cache/graphql/cache.query.resolver.js.map +1 -0
- package/server/dist/features/cache/graphql/cache.resolver.js +12 -0
- package/server/dist/features/cache/graphql/cache.resolver.js.map +1 -0
- package/server/dist/features/cache/graphql/cache.type-defs.js +32 -0
- package/server/dist/features/cache/graphql/cache.type-defs.js.map +1 -0
- package/server/dist/features/cache/graphql/index.js +21 -0
- package/server/dist/features/cache/graphql/index.js.map +1 -0
- package/server/dist/features/image/graphql/image.field.resolver.js +14 -0
- package/server/dist/features/image/graphql/image.field.resolver.js.map +1 -0
- package/server/dist/features/image/graphql/image.mutation.resolver.js +21 -0
- package/server/dist/features/image/graphql/image.mutation.resolver.js.map +1 -0
- package/server/dist/features/image/graphql/image.query.resolver.js +40 -0
- package/server/dist/features/image/graphql/image.query.resolver.js.map +1 -0
- package/server/dist/features/image/graphql/image.resolver.js +12 -0
- package/server/dist/features/image/graphql/image.resolver.js.map +1 -0
- package/server/dist/features/image/graphql/image.type-defs.js +31 -0
- package/server/dist/features/image/graphql/image.type-defs.js.map +1 -0
- package/server/dist/features/image/graphql/index.js +16 -0
- package/server/dist/features/image/graphql/index.js.map +1 -0
- package/server/dist/features/image/http/upload.js +48 -0
- package/server/dist/features/image/http/upload.js.map +1 -0
- package/server/dist/features/image/services/delete.js +52 -0
- package/server/dist/features/image/services/delete.js.map +1 -0
- package/server/dist/{modules/remote-image.js → features/image/services/remote-fetch.js} +1 -1
- package/server/dist/features/image/services/remote-fetch.js.map +1 -0
- package/server/dist/{modules/image-upload.js → features/image/services/upload.js} +4 -8
- package/server/dist/features/image/services/upload.js.map +1 -0
- package/server/dist/{views/mcp-admin.js → features/mcp-admin/http/handlers.js} +3 -3
- package/server/dist/features/mcp-admin/http/handlers.js.map +1 -0
- package/server/dist/{modules/mcp-admin.js → features/mcp-admin/service.js} +3 -3
- package/server/dist/features/mcp-admin/service.js.map +1 -0
- package/server/dist/features/note/graphql/index.js +8 -0
- package/server/dist/features/note/graphql/index.js.map +1 -0
- package/server/dist/features/note/graphql/note.field.resolver.js +12 -0
- package/server/dist/features/note/graphql/note.field.resolver.js.map +1 -0
- package/server/dist/features/note/graphql/note.graphql.shared.js +23 -0
- package/server/dist/features/note/graphql/note.graphql.shared.js.map +1 -0
- package/server/dist/features/note/graphql/note.mutation.resolver.js +140 -0
- package/server/dist/features/note/graphql/note.mutation.resolver.js.map +1 -0
- package/server/dist/features/note/graphql/note.query.resolver.js +385 -0
- package/server/dist/features/note/graphql/note.query.resolver.js.map +1 -0
- package/server/dist/features/note/graphql/note.resolver.js +14 -0
- package/server/dist/features/note/graphql/note.resolver.js.map +1 -0
- package/server/dist/features/note/graphql/note.type-defs.js +187 -0
- package/server/dist/features/note/graphql/note.type-defs.js.map +1 -0
- package/server/dist/{views/note.js → features/note/http/mcp.js} +27 -15
- package/server/dist/features/note/http/mcp.js.map +1 -0
- package/server/dist/{modules/note-authoring.js → features/note/services/authoring.js} +25 -7
- package/server/dist/features/note/services/authoring.js.map +1 -0
- package/server/dist/{modules/note-cleanup.js → features/note/services/cleanup.js} +14 -23
- package/server/dist/features/note/services/cleanup.js.map +1 -0
- package/server/dist/features/note/services/search-backfill.js +84 -0
- package/server/dist/features/note/services/search-backfill.js.map +1 -0
- package/server/dist/features/note/services/search.js +197 -0
- package/server/dist/features/note/services/search.js.map +1 -0
- package/server/dist/{modules/note-snapshot.js → features/note/services/snapshot.js} +51 -49
- package/server/dist/features/note/services/snapshot.js.map +1 -0
- package/server/dist/{modules/note-tag-filter.js → features/note/services/tag-filter.js} +2 -6
- package/server/dist/features/note/services/tag-filter.js.map +1 -0
- package/server/dist/{modules/note-trash.js → features/note/services/trash.js} +64 -34
- package/server/dist/features/note/services/trash.js.map +1 -0
- package/server/dist/features/placeholder/graphql/index.js +27 -0
- package/server/dist/features/placeholder/graphql/index.js.map +1 -0
- package/server/dist/features/placeholder/graphql/placeholder.field.resolver.js +5 -0
- package/server/dist/features/placeholder/graphql/placeholder.field.resolver.js.map +1 -0
- package/server/dist/features/placeholder/graphql/placeholder.mutation.resolver.js +72 -0
- package/server/dist/features/placeholder/graphql/placeholder.mutation.resolver.js.map +1 -0
- package/server/dist/features/placeholder/graphql/placeholder.query.resolver.js +36 -0
- package/server/dist/features/placeholder/graphql/placeholder.query.resolver.js.map +1 -0
- package/server/dist/features/placeholder/graphql/placeholder.resolver.js +12 -0
- package/server/dist/features/placeholder/graphql/placeholder.resolver.js.map +1 -0
- package/server/dist/features/placeholder/graphql/placeholder.type-defs.js +50 -0
- package/server/dist/features/placeholder/graphql/placeholder.type-defs.js.map +1 -0
- package/server/dist/features/reminder/graphql/index.js +27 -0
- package/server/dist/features/reminder/graphql/index.js.map +1 -0
- package/server/dist/features/reminder/graphql/reminder.field.resolver.js +10 -0
- package/server/dist/features/reminder/graphql/reminder.field.resolver.js.map +1 -0
- package/server/dist/features/reminder/graphql/reminder.mutation.resolver.js +59 -0
- package/server/dist/features/reminder/graphql/reminder.mutation.resolver.js.map +1 -0
- package/server/dist/features/reminder/graphql/reminder.query.resolver.js +79 -0
- package/server/dist/features/reminder/graphql/reminder.query.resolver.js.map +1 -0
- package/server/dist/features/reminder/graphql/reminder.resolver.js +12 -0
- package/server/dist/features/reminder/graphql/reminder.resolver.js.map +1 -0
- package/server/dist/features/reminder/graphql/reminder.type-defs.js +51 -0
- package/server/dist/features/reminder/graphql/reminder.type-defs.js.map +1 -0
- package/server/dist/features/tag/graphql/index.js +14 -0
- package/server/dist/features/tag/graphql/index.js.map +1 -0
- package/server/dist/features/tag/graphql/tag.field.resolver.js +10 -0
- package/server/dist/features/tag/graphql/tag.field.resolver.js.map +1 -0
- package/server/dist/features/tag/graphql/tag.mutation.resolver.js +15 -0
- package/server/dist/features/tag/graphql/tag.mutation.resolver.js.map +1 -0
- package/server/dist/features/tag/graphql/tag.query.resolver.js +26 -0
- package/server/dist/features/tag/graphql/tag.query.resolver.js.map +1 -0
- package/server/dist/features/tag/graphql/tag.resolver.js +12 -0
- package/server/dist/features/tag/graphql/tag.resolver.js.map +1 -0
- package/server/dist/features/tag/graphql/tag.type-defs.js +46 -0
- package/server/dist/features/tag/graphql/tag.type-defs.js.map +1 -0
- package/server/dist/{views/tag.js → features/tag/http/mcp.js} +3 -3
- package/server/dist/features/tag/http/mcp.js.map +1 -0
- package/server/dist/{modules/tag-organization.js → features/tag/services/organization.js} +38 -8
- package/server/dist/features/tag/services/organization.js.map +1 -0
- package/server/dist/features/view/graphql/index.js +11 -0
- package/server/dist/features/view/graphql/index.js.map +1 -0
- package/server/dist/features/view/graphql/view.mutation.resolver.js +53 -0
- package/server/dist/features/view/graphql/view.mutation.resolver.js.map +1 -0
- package/server/dist/features/view/graphql/view.query.resolver.js +29 -0
- package/server/dist/features/view/graphql/view.query.resolver.js.map +1 -0
- package/server/dist/features/view/graphql/view.resolver.js +10 -0
- package/server/dist/features/view/graphql/view.resolver.js.map +1 -0
- package/server/dist/features/view/graphql/view.type-defs.js +63 -0
- package/server/dist/features/view/graphql/view.type-defs.js.map +1 -0
- package/server/dist/features/view/services/workspace.js +432 -0
- package/server/dist/features/view/services/workspace.js.map +1 -0
- package/server/dist/main.js +14 -0
- package/server/dist/main.js.map +1 -1
- package/server/dist/modules/auth-guard.js +16 -21
- package/server/dist/modules/auth-guard.js.map +1 -1
- package/server/dist/modules/auth-mode.js +16 -41
- package/server/dist/modules/auth-mode.js.map +1 -1
- package/server/dist/modules/blocknote.js +8 -17
- package/server/dist/modules/blocknote.js.map +1 -1
- package/server/dist/modules/data-maintenance.js +75 -0
- package/server/dist/modules/data-maintenance.js.map +1 -0
- package/server/dist/modules/error-handler.js.map +1 -1
- package/server/dist/modules/logger.js +5 -23
- package/server/dist/modules/logger.js.map +1 -1
- package/server/dist/modules/mcp-auth.js +4 -5
- package/server/dist/modules/mcp-auth.js.map +1 -1
- package/server/dist/modules/mcp-token.js.map +1 -1
- package/server/dist/modules/prisma-runtime.js +2 -7
- package/server/dist/modules/prisma-runtime.js.map +1 -1
- package/server/dist/modules/recovery-retention.js +1 -1
- package/server/dist/modules/recovery-retention.js.map +1 -1
- package/server/dist/modules/server-events-handler.js +34 -0
- package/server/dist/modules/server-events-handler.js.map +1 -0
- package/server/dist/modules/server-events.js +32 -0
- package/server/dist/modules/server-events.js.map +1 -0
- package/server/dist/modules/use-async.js.map +1 -1
- package/server/dist/paths.js.map +1 -1
- package/server/dist/routes/api.js +34 -0
- package/server/dist/routes/api.js.map +1 -0
- package/server/dist/routes/auth-pages.js +11 -0
- package/server/dist/routes/auth-pages.js.map +1 -0
- package/server/dist/routes/client.js +27 -0
- package/server/dist/routes/client.js.map +1 -0
- package/server/dist/routes/graphql.js +33 -0
- package/server/dist/routes/graphql.js.map +1 -0
- package/server/dist/routes/index.js +11 -0
- package/server/dist/routes/index.js.map +1 -0
- package/server/dist/routes/mcp.js +30 -0
- package/server/dist/routes/mcp.js.map +1 -0
- package/server/dist/schema/index.js +11 -8
- package/server/dist/schema/index.js.map +1 -1
- package/server/dist/types/index.js.map +1 -1
- package/server/prisma/migrations/20260413143000_0014_tag_name_unique/migration.sql +32 -0
- package/server/prisma/migrations/20260414143000_0015_note_searchable_text/migration.sql +5 -0
- package/server/prisma/migrations/20260416090000_0016_view_workspace/migration.sql +50 -0
- package/server/prisma/schema.prisma +66 -12
- package/server/client/dist/assets/Calendar-Kjy1PX6L.js +0 -25
- package/server/client/dist/assets/Graph-Bl5K2qUw.js +0 -1
- package/server/client/dist/assets/ModalActionRow-DyOb58KJ.js +0 -1
- package/server/client/dist/assets/Note-BfGma2Qc.css +0 -1
- package/server/client/dist/assets/Note-DN_ko2M3.js +0 -1
- package/server/client/dist/assets/Reminders-BK-Uv9Ps.js +0 -1
- package/server/client/dist/assets/Search-ClHeWvmI.js +0 -1
- package/server/client/dist/assets/Tag-Dph4V_kl.js +0 -1
- package/server/client/dist/assets/TagNotes-CxP5qHZj.js +0 -1
- package/server/client/dist/assets/index-6lIw6jYW.js +0 -1
- package/server/client/dist/assets/index-Ba2XPRI8.js +0 -205
- package/server/client/dist/assets/manage-image-Br_kKxbb.js +0 -1
- package/server/client/dist/assets/manage-image-detail-9DzqbiqI.js +0 -1
- package/server/client/dist/assets/mcp-C_So91eX.js +0 -1
- package/server/client/dist/assets/trash-Cg3nJ1m5.js +0 -1
- package/server/dist/modules/auth.js +0 -25
- package/server/dist/modules/auth.js.map +0 -1
- package/server/dist/modules/image-upload.js.map +0 -1
- package/server/dist/modules/mcp-admin.js.map +0 -1
- package/server/dist/modules/note-authoring.js.map +0 -1
- package/server/dist/modules/note-cleanup.js.map +0 -1
- package/server/dist/modules/note-snapshot.js.map +0 -1
- package/server/dist/modules/note-tag-filter.js.map +0 -1
- package/server/dist/modules/note-trash.js.map +0 -1
- package/server/dist/modules/remote-image.js.map +0 -1
- package/server/dist/modules/tag-organization.js.map +0 -1
- package/server/dist/schema/cache/index.js +0 -58
- package/server/dist/schema/cache/index.js.map +0 -1
- package/server/dist/schema/image/index.js +0 -88
- package/server/dist/schema/image/index.js.map +0 -1
- package/server/dist/schema/note/index.js +0 -582
- package/server/dist/schema/note/index.js.map +0 -1
- package/server/dist/schema/placeholder/index.js +0 -105
- package/server/dist/schema/placeholder/index.js.map +0 -1
- package/server/dist/schema/reminder/index.js +0 -161
- package/server/dist/schema/reminder/index.js.map +0 -1
- package/server/dist/schema/tag/index.js +0 -81
- package/server/dist/schema/tag/index.js.map +0 -1
- package/server/dist/urls.js +0 -9
- package/server/dist/urls.js.map +0 -1
- package/server/dist/views/auth.js +0 -305
- package/server/dist/views/auth.js.map +0 -1
- package/server/dist/views/image.js +0 -44
- package/server/dist/views/image.js.map +0 -1
- package/server/dist/views/index.js +0 -6
- package/server/dist/views/index.js.map +0 -1
- package/server/dist/views/mcp-admin.js.map +0 -1
- package/server/dist/views/note.js.map +0 -1
- package/server/dist/views/tag.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/note/services/trash.ts"],"sourcesContent":["import models, { type NoteLayout, type ReminderPriority } from '~/models.js';\nimport {\n createRetentionCutoff,\n RECOVERY_CLEANUP_BATCH_LIMIT,\n TRASH_RETENTION_DAYS,\n} from '~/modules/recovery-retention.js';\nimport { buildNoteSearchProjection, extractVisibleSearchTextFromContent } from './search.js';\n\nconst TRASHED_NOTE_CONTENT_PREVIEW_MAX_LENGTH = 240;\n\ninterface LiveTagRecord {\n id: number;\n name: string;\n}\n\ninterface LiveReminderRecord {\n id: number;\n reminderDate: Date;\n completed: boolean;\n priority: ReminderPriority;\n content: string | null;\n createdAt: Date;\n updatedAt: Date;\n}\n\ninterface LiveNoteRecord {\n id: number;\n title: string;\n content: string;\n createdAt: Date;\n updatedAt: Date;\n pinned: boolean;\n order: number;\n layout: NoteLayout;\n tags: LiveTagRecord[];\n reminders: LiveReminderRecord[];\n}\n\ninterface RestoredNoteRecord {\n id: number;\n title: string;\n content: string;\n createdAt: Date;\n updatedAt: Date;\n pinned: boolean;\n order: number;\n layout: NoteLayout;\n}\n\ninterface DeletedTagRecord {\n name: string;\n}\n\ninterface DeletedReminderRecord {\n originalId: number | null;\n reminderDate: Date;\n completed: boolean;\n priority: ReminderPriority;\n content: string | null;\n createdAt: Date;\n updatedAt: Date;\n}\n\ninterface DeletedNoteRecord {\n id: number;\n title: string;\n content: string;\n createdAt: Date;\n updatedAt: Date;\n deletedAt: Date;\n pinned: boolean;\n order: number;\n layout: NoteLayout;\n tags: DeletedTagRecord[];\n reminders: DeletedReminderRecord[];\n}\n\ninterface BlockNoteNode {\n type: string;\n props?: Record<string, unknown>;\n content?: BlockNoteNode[];\n children?: BlockNoteNode[];\n}\n\nexport interface TrashedNoteSummary {\n id: string;\n title: string;\n createdAt: string;\n updatedAt: string;\n deletedAt: string;\n contentPreview: string;\n pinned: boolean;\n order: number;\n layout: NoteLayout;\n tagNames: string[];\n}\n\nexport interface TrashedNotesResult {\n totalCount: number;\n notes: TrashedNoteSummary[];\n}\n\nexport interface TrashedNoteDetail extends TrashedNoteSummary {\n contentAsMarkdown: string;\n}\n\nexport class NoteRestoreConflictError extends Error {\n constructor(message = 'A live note with the same id already exists.') {\n super(message);\n this.name = 'NoteRestoreConflictError';\n }\n}\n\ninterface NoteTrashServiceDeps {\n countDeletedNotes: () => Promise<number>;\n findDeletedNote: (id: number) => Promise<DeletedNoteRecord | null>;\n findLiveNote: (id: number) => Promise<LiveNoteRecord | null>;\n listDeletedNotes: (skip: number, take: number) => Promise<DeletedNoteRecord[]>;\n liveNoteExists: (id: number) => Promise<boolean>;\n moveNoteToTrash: (note: LiveNoteRecord) => Promise<DeletedNoteRecord>;\n purgeDeletedNote: (note: DeletedNoteRecord) => Promise<void>;\n purgeExpiredDeletedNotes: (before: Date, limit: number) => Promise<number>;\n restoreDeletedNote: (note: DeletedNoteRecord) => Promise<RestoredNoteRecord>;\n}\n\nconst buildTrashedNoteContentPreview = (content: string) => {\n const text = extractVisibleSearchTextFromContent(content);\n\n if (text.length <= TRASHED_NOTE_CONTENT_PREVIEW_MAX_LENGTH) {\n return text;\n }\n\n return `${text.slice(0, TRASHED_NOTE_CONTENT_PREVIEW_MAX_LENGTH).trimEnd()}…`;\n};\n\nconst serializeTrashedNote = (note: DeletedNoteRecord): TrashedNoteSummary => {\n return {\n id: String(note.id),\n title: note.title,\n createdAt: note.createdAt.toISOString(),\n updatedAt: note.updatedAt.toISOString(),\n deletedAt: note.deletedAt.toISOString(),\n contentPreview: buildTrashedNoteContentPreview(note.content),\n pinned: note.pinned,\n order: note.order,\n layout: note.layout,\n tagNames: note.tags.map((tag) => tag.name),\n };\n};\n\nconst restoreTagIdsInContent = (content: string, tagIdByName: Map<string, number>) => {\n const rewriteNodes = (nodes: BlockNoteNode[]): BlockNoteNode[] => {\n return nodes.map((node) => ({\n ...node,\n content: node.content?.map((contentNode) => {\n if (contentNode.type !== 'tag') {\n return contentNode;\n }\n\n const tagName = typeof contentNode.props?.tag === 'string' ? contentNode.props.tag : null;\n const restoredTagId = tagName ? tagIdByName.get(tagName) : null;\n\n if (!restoredTagId) {\n return contentNode;\n }\n\n return {\n ...contentNode,\n props: {\n ...contentNode.props,\n id: String(restoredTagId),\n },\n };\n }),\n children: node.children ? rewriteNodes(node.children) : node.children,\n }));\n };\n\n try {\n const parsed = JSON.parse(content) as BlockNoteNode[];\n return JSON.stringify(rewriteNodes(parsed));\n } catch {\n return content;\n }\n};\n\nexport const createNoteTrashService = (deps: NoteTrashServiceDeps) => ({\n listTrashedNotes: async (input?: { limit?: number; offset?: number }): Promise<TrashedNotesResult> => {\n await deps.purgeExpiredDeletedNotes(createRetentionCutoff(TRASH_RETENTION_DAYS), RECOVERY_CLEANUP_BATCH_LIMIT);\n\n const limit = Math.max(1, Number(input?.limit ?? 25));\n const offset = Math.max(0, Number(input?.offset ?? 0));\n const [totalCount, notes] = await Promise.all([deps.countDeletedNotes(), deps.listDeletedNotes(offset, limit)]);\n\n return {\n totalCount,\n notes: notes.map(serializeTrashedNote),\n };\n },\n\n trashNoteById: async (id: number): Promise<TrashedNoteSummary | null> => {\n await deps.purgeExpiredDeletedNotes(createRetentionCutoff(TRASH_RETENTION_DAYS), RECOVERY_CLEANUP_BATCH_LIMIT);\n\n const note = await deps.findLiveNote(id);\n\n if (!note) {\n return null;\n }\n\n const trashedNote = await deps.moveNoteToTrash(note);\n return serializeTrashedNote(trashedNote);\n },\n\n getNoteById: async (id: number): Promise<TrashedNoteDetail | null> => {\n await deps.purgeExpiredDeletedNotes(createRetentionCutoff(TRASH_RETENTION_DAYS), RECOVERY_CLEANUP_BATCH_LIMIT);\n\n const deletedNote = await deps.findDeletedNote(id);\n\n if (!deletedNote) {\n return null;\n }\n\n const { blocksToMarkdown } = await import('~/modules/blocknote.js');\n\n return {\n ...serializeTrashedNote(deletedNote),\n contentAsMarkdown: await blocksToMarkdown(deletedNote.content),\n };\n },\n\n restoreNoteById: async (id: number) => {\n await deps.purgeExpiredDeletedNotes(createRetentionCutoff(TRASH_RETENTION_DAYS), RECOVERY_CLEANUP_BATCH_LIMIT);\n\n const deletedNote = await deps.findDeletedNote(id);\n\n if (!deletedNote) {\n return null;\n }\n\n if (await deps.liveNoteExists(id)) {\n throw new NoteRestoreConflictError();\n }\n\n return deps.restoreDeletedNote(deletedNote);\n },\n\n purgeNoteById: async (id: number): Promise<TrashedNoteSummary | null> => {\n await deps.purgeExpiredDeletedNotes(createRetentionCutoff(TRASH_RETENTION_DAYS), RECOVERY_CLEANUP_BATCH_LIMIT);\n\n const deletedNote = await deps.findDeletedNote(id);\n\n if (!deletedNote) {\n return null;\n }\n\n const summary = serializeTrashedNote(deletedNote);\n await deps.purgeDeletedNote(deletedNote);\n return summary;\n },\n});\n\nconst includeDeletedNote = {\n reminders: { orderBy: { reminderDate: 'asc' as const } },\n tags: { orderBy: { name: 'asc' as const } },\n};\n\nconst defaultPurgeExpiredDeletedNotes = async (before: Date, limit: number) => {\n const expiredNotes = await models.deletedNote.findMany({\n where: { deletedAt: { lt: before } },\n orderBy: { deletedAt: 'asc' },\n take: limit,\n select: { id: true },\n });\n\n if (expiredNotes.length === 0) {\n return 0;\n }\n\n const deleted = await models.deletedNote.deleteMany({ where: { id: { in: expiredNotes.map((note) => note.id) } } });\n\n return deleted.count;\n};\n\nconst noteTrashService = createNoteTrashService({\n countDeletedNotes: async () => models.deletedNote.count(),\n findDeletedNote: async (id) => {\n return models.deletedNote.findUnique({\n where: { id },\n include: includeDeletedNote,\n });\n },\n findLiveNote: async (id) => {\n return models.note.findUnique({\n where: { id },\n include: {\n reminders: { orderBy: { reminderDate: 'asc' } },\n tags: { orderBy: { name: 'asc' } },\n },\n });\n },\n listDeletedNotes: async (skip, take) => {\n return models.deletedNote.findMany({\n skip,\n take,\n orderBy: { deletedAt: 'desc' },\n include: includeDeletedNote,\n });\n },\n liveNoteExists: async (id) => {\n const note = await models.note.findUnique({\n where: { id },\n select: { id: true },\n });\n return Boolean(note);\n },\n purgeExpiredDeletedNotes: defaultPurgeExpiredDeletedNotes,\n purgeDeletedNote: async (deletedNote) => {\n await models.deletedNote.delete({ where: { id: deletedNote.id } });\n },\n moveNoteToTrash: async (note) => {\n return models.$transaction(async (tx) => {\n await tx.deletedNote.create({\n data: {\n id: note.id,\n title: note.title,\n content: note.content,\n createdAt: note.createdAt,\n updatedAt: note.updatedAt,\n pinned: note.pinned,\n order: note.order,\n layout: note.layout,\n tags: { create: note.tags.map((tag) => ({ name: tag.name })) },\n reminders: {\n create: note.reminders.map((reminder) => ({\n originalId: reminder.id,\n reminderDate: reminder.reminderDate,\n completed: reminder.completed,\n priority: reminder.priority,\n content: reminder.content,\n createdAt: reminder.createdAt,\n updatedAt: reminder.updatedAt,\n })),\n },\n },\n });\n\n await tx.note.delete({ where: { id: note.id } });\n\n if (note.tags.length > 0) {\n await tx.tag.deleteMany({\n where: {\n id: { in: note.tags.map((tag) => tag.id) },\n notes: { none: {} },\n },\n });\n }\n\n return tx.deletedNote.findUniqueOrThrow({\n where: { id: note.id },\n include: includeDeletedNote,\n });\n });\n },\n restoreDeletedNote: async (deletedNote) => {\n return models.$transaction(async (tx) => {\n const tagNames = Array.from(new Set(deletedNote.tags.map((tag) => tag.name).filter(Boolean)));\n\n if (tagNames.length > 0) {\n const existingTags = await tx.tag.findMany({\n where: { name: { in: tagNames } },\n select: { name: true },\n });\n const existingTagNames = new Set(existingTags.map((tag) => tag.name));\n const missingTagNames = tagNames.filter((tagName) => !existingTagNames.has(tagName));\n\n for (const tagName of missingTagNames) {\n await tx.tag.create({ data: { name: tagName } });\n }\n }\n\n const restoreTagIds =\n tagNames.length > 0\n ? await tx.tag.findMany({\n where: { name: { in: tagNames } },\n select: {\n id: true,\n name: true,\n },\n })\n : [];\n\n const restoredContent =\n restoreTagIds.length > 0\n ? restoreTagIdsInContent(\n deletedNote.content,\n new Map(restoreTagIds.map((tag) => [tag.name, tag.id])),\n )\n : deletedNote.content;\n\n const note = await tx.note.create({\n data: {\n id: deletedNote.id,\n title: deletedNote.title,\n content: restoredContent,\n ...buildNoteSearchProjection({\n title: deletedNote.title,\n content: restoredContent,\n }),\n createdAt: deletedNote.createdAt,\n updatedAt: deletedNote.updatedAt,\n pinned: deletedNote.pinned,\n order: deletedNote.order,\n layout: deletedNote.layout,\n ...(restoreTagIds.length > 0\n ? { tags: { connect: restoreTagIds.map((tag) => ({ id: tag.id })) } }\n : {}),\n ...(deletedNote.reminders.length > 0\n ? {\n reminders: {\n create: deletedNote.reminders.map((reminder) => ({\n reminderDate: reminder.reminderDate,\n completed: reminder.completed,\n priority: reminder.priority,\n content: reminder.content,\n createdAt: reminder.createdAt,\n updatedAt: reminder.updatedAt,\n })),\n },\n }\n : {}),\n },\n });\n\n await tx.deletedNote.delete({ where: { id: deletedNote.id } });\n\n return note;\n });\n },\n});\n\nexport const listTrashedNotes = noteTrashService.listTrashedNotes;\nexport const getTrashedNoteById = noteTrashService.getNoteById;\nexport const trashNoteById = noteTrashService.trashNoteById;\nexport const restoreTrashedNoteById = noteTrashService.restoreNoteById;\nexport const purgeTrashedNoteById = noteTrashService.purgeNoteById;\nexport const purgeExpiredTrashedNotes = async () => {\n return defaultPurgeExpiredDeletedNotes(createRetentionCutoff(TRASH_RETENTION_DAYS), RECOVERY_CLEANUP_BATCH_LIMIT);\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { placeholderFieldResolvers } from "./placeholder.field.resolver.js";
|
|
2
|
+
import {
|
|
3
|
+
createCreatePlaceholderMutationResolver,
|
|
4
|
+
createDeletePlaceholderMutationResolver,
|
|
5
|
+
createUpdatePlaceholderMutationResolver,
|
|
6
|
+
placeholderMutationResolvers
|
|
7
|
+
} from "./placeholder.mutation.resolver.js";
|
|
8
|
+
import {
|
|
9
|
+
createAllPlaceholdersQueryResolver,
|
|
10
|
+
createPlaceholderQueryResolver,
|
|
11
|
+
placeholderQueryResolvers
|
|
12
|
+
} from "./placeholder.query.resolver.js";
|
|
13
|
+
import { placeholderResolvers } from "./placeholder.resolver.js";
|
|
14
|
+
import { placeholderTypeDefs } from "./placeholder.type-defs.js";
|
|
15
|
+
export {
|
|
16
|
+
createAllPlaceholdersQueryResolver,
|
|
17
|
+
createCreatePlaceholderMutationResolver,
|
|
18
|
+
createDeletePlaceholderMutationResolver,
|
|
19
|
+
createPlaceholderQueryResolver,
|
|
20
|
+
createUpdatePlaceholderMutationResolver,
|
|
21
|
+
placeholderFieldResolvers,
|
|
22
|
+
placeholderMutationResolvers,
|
|
23
|
+
placeholderQueryResolvers,
|
|
24
|
+
placeholderResolvers,
|
|
25
|
+
placeholderTypeDefs
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/placeholder/graphql/index.ts"],"sourcesContent":["export { placeholderFieldResolvers } from './placeholder.field.resolver.js';\nexport {\n createCreatePlaceholderMutationResolver,\n createDeletePlaceholderMutationResolver,\n createUpdatePlaceholderMutationResolver,\n placeholderMutationResolvers,\n} from './placeholder.mutation.resolver.js';\nexport {\n createAllPlaceholdersQueryResolver,\n createPlaceholderQueryResolver,\n placeholderQueryResolvers,\n} from './placeholder.query.resolver.js';\nexport { placeholderResolvers } from './placeholder.resolver.js';\nexport { placeholderTypeDefs } from './placeholder.type-defs.js';\n"],"mappings":"AAAA,SAAS,iCAAiC;AAC1C;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/placeholder/graphql/placeholder.field.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\n\ntype PlaceholderFieldResolvers = NonNullable<IResolvers['Placeholder']>;\n\nexport const placeholderFieldResolvers: PlaceholderFieldResolvers = {};\n"],"mappings":"AAIO,MAAM,4BAAuD,CAAC;","names":[]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import models from "../../../models.js";
|
|
2
|
+
const createCreatePlaceholderMutationResolver = (deps = {
|
|
3
|
+
createPlaceholder: async (input) => models.placeholder.create({
|
|
4
|
+
data: {
|
|
5
|
+
name: input.name,
|
|
6
|
+
template: input.template,
|
|
7
|
+
replacement: input.replacement
|
|
8
|
+
}
|
|
9
|
+
})
|
|
10
|
+
}) => {
|
|
11
|
+
return async (_, { name, template, replacement }) => {
|
|
12
|
+
return deps.createPlaceholder({
|
|
13
|
+
name,
|
|
14
|
+
template,
|
|
15
|
+
replacement
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
const createUpdatePlaceholderMutationResolver = (deps = {
|
|
20
|
+
findPlaceholderById: async (id) => models.placeholder.findFirst({ where: { id } }),
|
|
21
|
+
updatePlaceholder: async (input) => {
|
|
22
|
+
await models.placeholder.update({
|
|
23
|
+
where: { id: input.id },
|
|
24
|
+
data: {
|
|
25
|
+
name: input.name,
|
|
26
|
+
template: input.template,
|
|
27
|
+
replacement: input.replacement
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}) => {
|
|
32
|
+
return async (_, { id, name, template, replacement }) => {
|
|
33
|
+
const placeholder = await deps.findPlaceholderById(Number(id));
|
|
34
|
+
if (!placeholder) {
|
|
35
|
+
throw new Error("Placeholder not found");
|
|
36
|
+
}
|
|
37
|
+
await deps.updatePlaceholder({
|
|
38
|
+
id: Number(id),
|
|
39
|
+
name,
|
|
40
|
+
template,
|
|
41
|
+
replacement
|
|
42
|
+
});
|
|
43
|
+
return placeholder;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
const createDeletePlaceholderMutationResolver = (deps = {
|
|
47
|
+
findPlaceholderById: async (id) => models.placeholder.findFirst({ where: { id } }),
|
|
48
|
+
deletePlaceholder: async (id) => {
|
|
49
|
+
await models.placeholder.delete({ where: { id } });
|
|
50
|
+
}
|
|
51
|
+
}) => {
|
|
52
|
+
return async (_, { id }) => {
|
|
53
|
+
const placeholder = await deps.findPlaceholderById(Number(id));
|
|
54
|
+
if (!placeholder) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
await deps.deletePlaceholder(Number(id));
|
|
58
|
+
return true;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
const placeholderMutationResolvers = {
|
|
62
|
+
createPlaceholder: createCreatePlaceholderMutationResolver(),
|
|
63
|
+
updatePlaceholder: createUpdatePlaceholderMutationResolver(),
|
|
64
|
+
deletePlaceholder: createDeletePlaceholderMutationResolver()
|
|
65
|
+
};
|
|
66
|
+
export {
|
|
67
|
+
createCreatePlaceholderMutationResolver,
|
|
68
|
+
createDeletePlaceholderMutationResolver,
|
|
69
|
+
createUpdatePlaceholderMutationResolver,
|
|
70
|
+
placeholderMutationResolvers
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=placeholder.mutation.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/placeholder/graphql/placeholder.mutation.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport models from '~/models.js';\n\ntype PlaceholderMutationResolvers = NonNullable<IResolvers['Mutation']>;\ntype PlaceholderRecord = Awaited<ReturnType<typeof models.placeholder.findFirst>>;\n\ninterface CreatePlaceholderArgs {\n name: string;\n template: string;\n replacement?: string;\n}\n\ninterface UpdatePlaceholderArgs {\n id: string | number;\n name?: string;\n template?: string;\n replacement?: string;\n}\n\ninterface PlaceholderMutationDeps {\n createPlaceholder: (input: CreatePlaceholderArgs) => Promise<unknown>;\n deletePlaceholder: (id: number) => Promise<void>;\n findPlaceholderById: (id: number) => Promise<PlaceholderRecord>;\n updatePlaceholder: (input: { id: number; name?: string; template?: string; replacement?: string }) => Promise<void>;\n}\n\nexport const createCreatePlaceholderMutationResolver = (\n deps: Pick<PlaceholderMutationDeps, 'createPlaceholder'> = {\n createPlaceholder: async (input) =>\n models.placeholder.create({\n data: {\n name: input.name,\n template: input.template,\n replacement: input.replacement as string,\n },\n }),\n },\n) => {\n return async (_: unknown, { name, template, replacement }: CreatePlaceholderArgs) => {\n return deps.createPlaceholder({\n name,\n template,\n replacement,\n });\n };\n};\n\nexport const createUpdatePlaceholderMutationResolver = (\n deps: Pick<PlaceholderMutationDeps, 'findPlaceholderById' | 'updatePlaceholder'> = {\n findPlaceholderById: async (id) => models.placeholder.findFirst({ where: { id } }),\n updatePlaceholder: async (input) => {\n await models.placeholder.update({\n where: { id: input.id },\n data: {\n name: input.name,\n template: input.template,\n replacement: input.replacement,\n },\n });\n },\n },\n) => {\n return async (_: unknown, { id, name, template, replacement }: UpdatePlaceholderArgs) => {\n const placeholder = await deps.findPlaceholderById(Number(id));\n\n if (!placeholder) {\n throw new Error('Placeholder not found');\n }\n\n await deps.updatePlaceholder({\n id: Number(id),\n name,\n template,\n replacement,\n });\n\n return placeholder;\n };\n};\n\nexport const createDeletePlaceholderMutationResolver = (\n deps: Pick<PlaceholderMutationDeps, 'findPlaceholderById' | 'deletePlaceholder'> = {\n findPlaceholderById: async (id) => models.placeholder.findFirst({ where: { id } }),\n deletePlaceholder: async (id) => {\n await models.placeholder.delete({ where: { id } });\n },\n },\n) => {\n return async (_: unknown, { id }: { id: string | number }) => {\n const placeholder = await deps.findPlaceholderById(Number(id));\n\n if (!placeholder) {\n return false;\n }\n\n await deps.deletePlaceholder(Number(id));\n return true;\n };\n};\n\nexport const placeholderMutationResolvers: PlaceholderMutationResolvers = {\n createPlaceholder: createCreatePlaceholderMutationResolver(),\n updatePlaceholder: createUpdatePlaceholderMutationResolver(),\n deletePlaceholder: createDeletePlaceholderMutationResolver(),\n};\n"],"mappings":"AACA,OAAO,YAAY;AAyBZ,MAAM,0CAA0C,CACnD,OAA2D;AAAA,EACvD,mBAAmB,OAAO,UACtB,OAAO,YAAY,OAAO;AAAA,IACtB,MAAM;AAAA,MACF,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM;AAAA,MAChB,aAAa,MAAM;AAAA,IACvB;AAAA,EACJ,CAAC;AACT,MACC;AACD,SAAO,OAAO,GAAY,EAAE,MAAM,UAAU,YAAY,MAA6B;AACjF,WAAO,KAAK,kBAAkB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;AAEO,MAAM,0CAA0C,CACnD,OAAmF;AAAA,EAC/E,qBAAqB,OAAO,OAAO,OAAO,YAAY,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAAA,EACjF,mBAAmB,OAAO,UAAU;AAChC,UAAM,OAAO,YAAY,OAAO;AAAA,MAC5B,OAAO,EAAE,IAAI,MAAM,GAAG;AAAA,MACtB,MAAM;AAAA,QACF,MAAM,MAAM;AAAA,QACZ,UAAU,MAAM;AAAA,QAChB,aAAa,MAAM;AAAA,MACvB;AAAA,IACJ,CAAC;AAAA,EACL;AACJ,MACC;AACD,SAAO,OAAO,GAAY,EAAE,IAAI,MAAM,UAAU,YAAY,MAA6B;AACrF,UAAM,cAAc,MAAM,KAAK,oBAAoB,OAAO,EAAE,CAAC;AAE7D,QAAI,CAAC,aAAa;AACd,YAAM,IAAI,MAAM,uBAAuB;AAAA,IAC3C;AAEA,UAAM,KAAK,kBAAkB;AAAA,MACzB,IAAI,OAAO,EAAE;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAED,WAAO;AAAA,EACX;AACJ;AAEO,MAAM,0CAA0C,CACnD,OAAmF;AAAA,EAC/E,qBAAqB,OAAO,OAAO,OAAO,YAAY,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAAA,EACjF,mBAAmB,OAAO,OAAO;AAC7B,UAAM,OAAO,YAAY,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAAA,EACrD;AACJ,MACC;AACD,SAAO,OAAO,GAAY,EAAE,GAAG,MAA+B;AAC1D,UAAM,cAAc,MAAM,KAAK,oBAAoB,OAAO,EAAE,CAAC;AAE7D,QAAI,CAAC,aAAa;AACd,aAAO;AAAA,IACX;AAEA,UAAM,KAAK,kBAAkB,OAAO,EAAE,CAAC;AACvC,WAAO;AAAA,EACX;AACJ;AAEO,MAAM,+BAA6D;AAAA,EACtE,mBAAmB,wCAAwC;AAAA,EAC3D,mBAAmB,wCAAwC;AAAA,EAC3D,mBAAmB,wCAAwC;AAC/D;","names":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import models from "../../../models.js";
|
|
2
|
+
const createAllPlaceholdersQueryResolver = (deps = {
|
|
3
|
+
countPlaceholders: async () => models.placeholder.count(),
|
|
4
|
+
findPlaceholderById: async (id) => models.placeholder.findFirst({ where: { id } }),
|
|
5
|
+
findPlaceholders: async (input) => models.placeholder.findMany(input)
|
|
6
|
+
}) => {
|
|
7
|
+
return async (_, { searchFilter, pagination }) => {
|
|
8
|
+
const placeholders = await deps.findPlaceholders({
|
|
9
|
+
where: searchFilter?.query ? { name: { contains: searchFilter.query } } : void 0,
|
|
10
|
+
take: pagination?.limit,
|
|
11
|
+
skip: pagination?.offset
|
|
12
|
+
});
|
|
13
|
+
const totalCount = await deps.countPlaceholders();
|
|
14
|
+
return {
|
|
15
|
+
totalCount,
|
|
16
|
+
placeholders
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
const createPlaceholderQueryResolver = (deps = {
|
|
21
|
+
findPlaceholderById: async (id) => models.placeholder.findFirst({ where: { id } })
|
|
22
|
+
}) => {
|
|
23
|
+
return async (_, { id }) => {
|
|
24
|
+
return deps.findPlaceholderById(Number(id));
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
const placeholderQueryResolvers = {
|
|
28
|
+
allPlaceholders: createAllPlaceholdersQueryResolver(),
|
|
29
|
+
placeholder: createPlaceholderQueryResolver()
|
|
30
|
+
};
|
|
31
|
+
export {
|
|
32
|
+
createAllPlaceholdersQueryResolver,
|
|
33
|
+
createPlaceholderQueryResolver,
|
|
34
|
+
placeholderQueryResolvers
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=placeholder.query.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/placeholder/graphql/placeholder.query.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport models from '~/models.js';\nimport type { Pagination, SearchFilter } from '~/types/index.js';\n\ntype PlaceholderQueryResolvers = NonNullable<IResolvers['Query']>;\n\ninterface PlaceholderQueryDeps {\n countPlaceholders: () => Promise<number>;\n findPlaceholderById: (id: number) => Promise<unknown>;\n findPlaceholders: (input: {\n where?: { name: { contains: string } };\n take?: number;\n skip?: number;\n }) => Promise<unknown[]>;\n}\n\nexport const createAllPlaceholdersQueryResolver = (\n deps: PlaceholderQueryDeps = {\n countPlaceholders: async () => models.placeholder.count(),\n findPlaceholderById: async (id) => models.placeholder.findFirst({ where: { id } }),\n findPlaceholders: async (input) => models.placeholder.findMany(input),\n },\n) => {\n return async (\n _: unknown,\n { searchFilter, pagination }: { searchFilter?: SearchFilter; pagination?: Pagination },\n ) => {\n const placeholders = await deps.findPlaceholders({\n where: searchFilter?.query ? { name: { contains: searchFilter.query } } : undefined,\n take: pagination?.limit,\n skip: pagination?.offset,\n });\n\n const totalCount = await deps.countPlaceholders();\n\n return {\n totalCount,\n placeholders,\n };\n };\n};\n\nexport const createPlaceholderQueryResolver = (\n deps: Pick<PlaceholderQueryDeps, 'findPlaceholderById'> = {\n findPlaceholderById: async (id) => models.placeholder.findFirst({ where: { id } }),\n },\n) => {\n return async (_: unknown, { id }: { id: string | number }) => {\n return deps.findPlaceholderById(Number(id));\n };\n};\n\nexport const placeholderQueryResolvers: PlaceholderQueryResolvers = {\n allPlaceholders: createAllPlaceholdersQueryResolver(),\n placeholder: createPlaceholderQueryResolver(),\n};\n"],"mappings":"AACA,OAAO,YAAY;AAeZ,MAAM,qCAAqC,CAC9C,OAA6B;AAAA,EACzB,mBAAmB,YAAY,OAAO,YAAY,MAAM;AAAA,EACxD,qBAAqB,OAAO,OAAO,OAAO,YAAY,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAAA,EACjF,kBAAkB,OAAO,UAAU,OAAO,YAAY,SAAS,KAAK;AACxE,MACC;AACD,SAAO,OACH,GACA,EAAE,cAAc,WAAW,MAC1B;AACD,UAAM,eAAe,MAAM,KAAK,iBAAiB;AAAA,MAC7C,OAAO,cAAc,QAAQ,EAAE,MAAM,EAAE,UAAU,aAAa,MAAM,EAAE,IAAI;AAAA,MAC1E,MAAM,YAAY;AAAA,MAClB,MAAM,YAAY;AAAA,IACtB,CAAC;AAED,UAAM,aAAa,MAAM,KAAK,kBAAkB;AAEhD,WAAO;AAAA,MACH;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,MAAM,iCAAiC,CAC1C,OAA0D;AAAA,EACtD,qBAAqB,OAAO,OAAO,OAAO,YAAY,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACrF,MACC;AACD,SAAO,OAAO,GAAY,EAAE,GAAG,MAA+B;AAC1D,WAAO,KAAK,oBAAoB,OAAO,EAAE,CAAC;AAAA,EAC9C;AACJ;AAEO,MAAM,4BAAuD;AAAA,EAChE,iBAAiB,mCAAmC;AAAA,EACpD,aAAa,+BAA+B;AAChD;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { placeholderFieldResolvers } from "./placeholder.field.resolver.js";
|
|
2
|
+
import { placeholderMutationResolvers } from "./placeholder.mutation.resolver.js";
|
|
3
|
+
import { placeholderQueryResolvers } from "./placeholder.query.resolver.js";
|
|
4
|
+
const placeholderResolvers = {
|
|
5
|
+
Query: placeholderQueryResolvers,
|
|
6
|
+
Mutation: placeholderMutationResolvers,
|
|
7
|
+
Placeholder: placeholderFieldResolvers
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
placeholderResolvers
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=placeholder.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/placeholder/graphql/placeholder.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport { placeholderFieldResolvers } from './placeholder.field.resolver.js';\nimport { placeholderMutationResolvers } from './placeholder.mutation.resolver.js';\nimport { placeholderQueryResolvers } from './placeholder.query.resolver.js';\n\nexport const placeholderResolvers: IResolvers = {\n Query: placeholderQueryResolvers,\n Mutation: placeholderMutationResolvers,\n Placeholder: placeholderFieldResolvers,\n};\n"],"mappings":"AACA,SAAS,iCAAiC;AAC1C,SAAS,oCAAoC;AAC7C,SAAS,iCAAiC;AAEnC,MAAM,uBAAmC;AAAA,EAC5C,OAAO;AAAA,EACP,UAAU;AAAA,EACV,aAAa;AACjB;","names":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { gql } from "../../../modules/graphql.js";
|
|
2
|
+
const placeholderType = gql`
|
|
3
|
+
input PaginationInput {
|
|
4
|
+
limit: Int!
|
|
5
|
+
offset: Int!
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
input SearchFilterInput {
|
|
9
|
+
query: String!
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type Placeholder {
|
|
13
|
+
id: ID!
|
|
14
|
+
name: String!
|
|
15
|
+
template: String!
|
|
16
|
+
replacement: String!
|
|
17
|
+
createdAt: String!
|
|
18
|
+
updatedAt: String!
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
type Placeholders {
|
|
22
|
+
totalCount: Int!
|
|
23
|
+
placeholders: [Placeholder!]!
|
|
24
|
+
}
|
|
25
|
+
`;
|
|
26
|
+
const placeholderQuery = gql`
|
|
27
|
+
type Query {
|
|
28
|
+
allPlaceholders(searchFilter: SearchFilterInput, pagination: PaginationInput): Placeholders!
|
|
29
|
+
placeholder(id: ID!): Placeholder
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
const placeholderMutation = gql`
|
|
33
|
+
type Mutation {
|
|
34
|
+
createPlaceholder(name: String!, template: String!, replacement: String): Placeholder!
|
|
35
|
+
updatePlaceholder(id: ID!, name: String, template: String, replacement: String): Placeholder!
|
|
36
|
+
deletePlaceholder(id: ID!): Boolean!
|
|
37
|
+
}
|
|
38
|
+
`;
|
|
39
|
+
const placeholderTypeDefs = `
|
|
40
|
+
${placeholderType}
|
|
41
|
+
${placeholderQuery}
|
|
42
|
+
${placeholderMutation}
|
|
43
|
+
`;
|
|
44
|
+
export {
|
|
45
|
+
placeholderMutation,
|
|
46
|
+
placeholderQuery,
|
|
47
|
+
placeholderType,
|
|
48
|
+
placeholderTypeDefs
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=placeholder.type-defs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/placeholder/graphql/placeholder.type-defs.ts"],"sourcesContent":["import { gql } from '~/modules/graphql.js';\n\nexport const placeholderType = gql`\n input PaginationInput {\n limit: Int!\n offset: Int!\n }\n\n input SearchFilterInput {\n query: String!\n }\n\n type Placeholder {\n id: ID!\n name: String!\n template: String!\n replacement: String!\n createdAt: String!\n updatedAt: String!\n }\n\n type Placeholders {\n totalCount: Int!\n placeholders: [Placeholder!]!\n }\n`;\n\nexport const placeholderQuery = gql`\n type Query {\n allPlaceholders(searchFilter: SearchFilterInput, pagination: PaginationInput): Placeholders!\n placeholder(id: ID!): Placeholder\n }\n`;\n\nexport const placeholderMutation = gql`\n type Mutation {\n createPlaceholder(name: String!, template: String!, replacement: String): Placeholder!\n updatePlaceholder(id: ID!, name: String, template: String, replacement: String): Placeholder!\n deletePlaceholder(id: ID!): Boolean!\n }\n`;\n\nexport const placeholderTypeDefs = `\n ${placeholderType}\n ${placeholderQuery}\n ${placeholderMutation}\n`;\n"],"mappings":"AAAA,SAAS,WAAW;AAEb,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBxB,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ5B,MAAM,sBAAsB;AAAA,MAC7B,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,mBAAmB;AAAA;","names":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { reminderFieldResolvers } from "./reminder.field.resolver.js";
|
|
2
|
+
import {
|
|
3
|
+
createCreateReminderMutationResolver,
|
|
4
|
+
createDeleteReminderMutationResolver,
|
|
5
|
+
createUpdateReminderMutationResolver,
|
|
6
|
+
reminderMutationResolvers
|
|
7
|
+
} from "./reminder.mutation.resolver.js";
|
|
8
|
+
import {
|
|
9
|
+
createNoteRemindersQueryResolver,
|
|
10
|
+
createUpcomingRemindersQueryResolver,
|
|
11
|
+
reminderQueryResolvers
|
|
12
|
+
} from "./reminder.query.resolver.js";
|
|
13
|
+
import { reminderResolvers } from "./reminder.resolver.js";
|
|
14
|
+
import { reminderTypeDefs } from "./reminder.type-defs.js";
|
|
15
|
+
export {
|
|
16
|
+
createCreateReminderMutationResolver,
|
|
17
|
+
createDeleteReminderMutationResolver,
|
|
18
|
+
createNoteRemindersQueryResolver,
|
|
19
|
+
createUpcomingRemindersQueryResolver,
|
|
20
|
+
createUpdateReminderMutationResolver,
|
|
21
|
+
reminderFieldResolvers,
|
|
22
|
+
reminderMutationResolvers,
|
|
23
|
+
reminderQueryResolvers,
|
|
24
|
+
reminderResolvers,
|
|
25
|
+
reminderTypeDefs
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/reminder/graphql/index.ts"],"sourcesContent":["export { reminderFieldResolvers } from './reminder.field.resolver.js';\nexport {\n createCreateReminderMutationResolver,\n createDeleteReminderMutationResolver,\n createUpdateReminderMutationResolver,\n reminderMutationResolvers,\n} from './reminder.mutation.resolver.js';\nexport {\n createNoteRemindersQueryResolver,\n createUpcomingRemindersQueryResolver,\n reminderQueryResolvers,\n} from './reminder.query.resolver.js';\nexport { reminderResolvers } from './reminder.resolver.js';\nexport { reminderTypeDefs } from './reminder.type-defs.js';\n"],"mappings":"AAAA,SAAS,8BAA8B;AACvC;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,yBAAyB;AAClC,SAAS,wBAAwB;","names":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import models from "../../../models.js";
|
|
2
|
+
const reminderFieldResolvers = {
|
|
3
|
+
note: async (reminder) => {
|
|
4
|
+
return models.note.findUnique({ where: { id: reminder.noteId } });
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
export {
|
|
8
|
+
reminderFieldResolvers
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=reminder.field.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/reminder/graphql/reminder.field.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport models from '~/models.js';\n\ntype ReminderFieldResolvers = NonNullable<IResolvers['Reminder']>;\n\nexport const reminderFieldResolvers: ReminderFieldResolvers = {\n note: async (reminder: { noteId: number }) => {\n return models.note.findUnique({ where: { id: reminder.noteId } });\n },\n};\n"],"mappings":"AACA,OAAO,YAAY;AAIZ,MAAM,yBAAiD;AAAA,EAC1D,MAAM,OAAO,aAAiC;AAC1C,WAAO,OAAO,KAAK,WAAW,EAAE,OAAO,EAAE,IAAI,SAAS,OAAO,EAAE,CAAC;AAAA,EACpE;AACJ;","names":[]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import models from "../../../models.js";
|
|
2
|
+
const createCreateReminderMutationResolver = (deps = {
|
|
3
|
+
createReminder: async (data) => models.reminder.create({ data })
|
|
4
|
+
}) => {
|
|
5
|
+
return async (_, input) => {
|
|
6
|
+
return deps.createReminder({
|
|
7
|
+
noteId: Number(input.noteId),
|
|
8
|
+
reminderDate: new Date(input.reminderDate),
|
|
9
|
+
completed: false,
|
|
10
|
+
priority: input.priority || "medium",
|
|
11
|
+
content: input.content
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
const createUpdateReminderMutationResolver = (deps = {
|
|
16
|
+
updateReminder: async (id, data) => models.reminder.update({
|
|
17
|
+
where: { id },
|
|
18
|
+
data
|
|
19
|
+
})
|
|
20
|
+
}) => {
|
|
21
|
+
return async (_, input) => {
|
|
22
|
+
const data = {};
|
|
23
|
+
if (input.reminderDate) {
|
|
24
|
+
data.reminderDate = new Date(input.reminderDate);
|
|
25
|
+
}
|
|
26
|
+
if (input.completed !== void 0) {
|
|
27
|
+
data.completed = input.completed;
|
|
28
|
+
}
|
|
29
|
+
if (input.priority) {
|
|
30
|
+
data.priority = input.priority;
|
|
31
|
+
}
|
|
32
|
+
if (input.content !== void 0) {
|
|
33
|
+
data.content = input.content;
|
|
34
|
+
}
|
|
35
|
+
return deps.updateReminder(Number(input.id), data);
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
const createDeleteReminderMutationResolver = (deps = {
|
|
39
|
+
deleteReminder: async (id) => {
|
|
40
|
+
await models.reminder.delete({ where: { id } });
|
|
41
|
+
}
|
|
42
|
+
}) => {
|
|
43
|
+
return async (_, { id }) => {
|
|
44
|
+
await deps.deleteReminder(Number(id));
|
|
45
|
+
return true;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
const reminderMutationResolvers = {
|
|
49
|
+
createReminder: createCreateReminderMutationResolver(),
|
|
50
|
+
updateReminder: createUpdateReminderMutationResolver(),
|
|
51
|
+
deleteReminder: createDeleteReminderMutationResolver()
|
|
52
|
+
};
|
|
53
|
+
export {
|
|
54
|
+
createCreateReminderMutationResolver,
|
|
55
|
+
createDeleteReminderMutationResolver,
|
|
56
|
+
createUpdateReminderMutationResolver,
|
|
57
|
+
reminderMutationResolvers
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=reminder.mutation.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/reminder/graphql/reminder.mutation.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport type { Reminder } from '~/models.js';\nimport models from '~/models.js';\n\ntype ReminderPriority = 'low' | 'medium' | 'high';\n\ninterface ReminderCreateInput {\n noteId: string;\n reminderDate: string;\n priority?: ReminderPriority;\n content?: string;\n}\n\ninterface ReminderUpdateInput {\n id: string;\n reminderDate?: string;\n completed?: boolean;\n priority?: ReminderPriority;\n content?: string;\n}\n\ninterface ReminderMutationDeps {\n createReminder: (data: {\n noteId: number;\n reminderDate: Date;\n completed: boolean;\n priority: ReminderPriority;\n content?: string;\n }) => Promise<unknown>;\n updateReminder: (id: number, data: Partial<Reminder>) => Promise<unknown>;\n deleteReminder: (id: number) => Promise<void>;\n}\n\nexport const createCreateReminderMutationResolver = (\n deps: Pick<ReminderMutationDeps, 'createReminder'> = {\n createReminder: async (data) => models.reminder.create({ data }),\n },\n) => {\n return async (_: unknown, input: ReminderCreateInput) => {\n return deps.createReminder({\n noteId: Number(input.noteId),\n reminderDate: new Date(input.reminderDate),\n completed: false,\n priority: input.priority || 'medium',\n content: input.content,\n });\n };\n};\n\nexport const createUpdateReminderMutationResolver = (\n deps: Pick<ReminderMutationDeps, 'updateReminder'> = {\n updateReminder: async (id, data) =>\n models.reminder.update({\n where: { id },\n data,\n }),\n },\n) => {\n return async (_: unknown, input: ReminderUpdateInput) => {\n const data: Partial<Reminder> = {};\n\n if (input.reminderDate) {\n data.reminderDate = new Date(input.reminderDate);\n }\n\n if (input.completed !== undefined) {\n data.completed = input.completed;\n }\n\n if (input.priority) {\n data.priority = input.priority;\n }\n\n if (input.content !== undefined) {\n data.content = input.content;\n }\n\n return deps.updateReminder(Number(input.id), data);\n };\n};\n\nexport const createDeleteReminderMutationResolver = (\n deps: Pick<ReminderMutationDeps, 'deleteReminder'> = {\n deleteReminder: async (id) => {\n await models.reminder.delete({ where: { id } });\n },\n },\n) => {\n return async (_: unknown, { id }: { id: string }) => {\n await deps.deleteReminder(Number(id));\n return true;\n };\n};\n\ntype ReminderMutationResolvers = NonNullable<IResolvers['Mutation']>;\n\nexport const reminderMutationResolvers: ReminderMutationResolvers = {\n createReminder: createCreateReminderMutationResolver(),\n updateReminder: createUpdateReminderMutationResolver(),\n deleteReminder: createDeleteReminderMutationResolver(),\n};\n"],"mappings":"AAEA,OAAO,YAAY;AA+BZ,MAAM,uCAAuC,CAChD,OAAqD;AAAA,EACjD,gBAAgB,OAAO,SAAS,OAAO,SAAS,OAAO,EAAE,KAAK,CAAC;AACnE,MACC;AACD,SAAO,OAAO,GAAY,UAA+B;AACrD,WAAO,KAAK,eAAe;AAAA,MACvB,QAAQ,OAAO,MAAM,MAAM;AAAA,MAC3B,cAAc,IAAI,KAAK,MAAM,YAAY;AAAA,MACzC,WAAW;AAAA,MACX,UAAU,MAAM,YAAY;AAAA,MAC5B,SAAS,MAAM;AAAA,IACnB,CAAC;AAAA,EACL;AACJ;AAEO,MAAM,uCAAuC,CAChD,OAAqD;AAAA,EACjD,gBAAgB,OAAO,IAAI,SACvB,OAAO,SAAS,OAAO;AAAA,IACnB,OAAO,EAAE,GAAG;AAAA,IACZ;AAAA,EACJ,CAAC;AACT,MACC;AACD,SAAO,OAAO,GAAY,UAA+B;AACrD,UAAM,OAA0B,CAAC;AAEjC,QAAI,MAAM,cAAc;AACpB,WAAK,eAAe,IAAI,KAAK,MAAM,YAAY;AAAA,IACnD;AAEA,QAAI,MAAM,cAAc,QAAW;AAC/B,WAAK,YAAY,MAAM;AAAA,IAC3B;AAEA,QAAI,MAAM,UAAU;AAChB,WAAK,WAAW,MAAM;AAAA,IAC1B;AAEA,QAAI,MAAM,YAAY,QAAW;AAC7B,WAAK,UAAU,MAAM;AAAA,IACzB;AAEA,WAAO,KAAK,eAAe,OAAO,MAAM,EAAE,GAAG,IAAI;AAAA,EACrD;AACJ;AAEO,MAAM,uCAAuC,CAChD,OAAqD;AAAA,EACjD,gBAAgB,OAAO,OAAO;AAC1B,UAAM,OAAO,SAAS,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAAA,EAClD;AACJ,MACC;AACD,SAAO,OAAO,GAAY,EAAE,GAAG,MAAsB;AACjD,UAAM,KAAK,eAAe,OAAO,EAAE,CAAC;AACpC,WAAO;AAAA,EACX;AACJ;AAIO,MAAM,4BAAuD;AAAA,EAChE,gBAAgB,qCAAqC;AAAA,EACrD,gBAAgB,qCAAqC;AAAA,EACrD,gBAAgB,qCAAqC;AACzD;","names":[]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import models from "../../../models.js";
|
|
2
|
+
const createNoteRemindersQueryResolver = (deps = {
|
|
3
|
+
countReminders: async (where) => models.reminder.count({ where }),
|
|
4
|
+
findReminders: async (args) => models.reminder.findMany(args)
|
|
5
|
+
}) => {
|
|
6
|
+
return async (_, {
|
|
7
|
+
noteId,
|
|
8
|
+
pagination = {
|
|
9
|
+
limit: 10,
|
|
10
|
+
offset: 0
|
|
11
|
+
}
|
|
12
|
+
}) => {
|
|
13
|
+
const where = { noteId: Number(noteId) };
|
|
14
|
+
const [totalCount, reminders] = await Promise.all([
|
|
15
|
+
deps.countReminders(where),
|
|
16
|
+
deps.findReminders({
|
|
17
|
+
where,
|
|
18
|
+
orderBy: { reminderDate: "asc" },
|
|
19
|
+
take: Number(pagination.limit),
|
|
20
|
+
skip: Number(pagination.offset)
|
|
21
|
+
})
|
|
22
|
+
]);
|
|
23
|
+
return {
|
|
24
|
+
totalCount,
|
|
25
|
+
reminders
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
const createUpcomingRemindersQueryResolver = (deps = {
|
|
30
|
+
countReminders: async (where) => models.reminder.count({ where }),
|
|
31
|
+
findReminders: async (args) => models.reminder.findMany(args)
|
|
32
|
+
}) => {
|
|
33
|
+
return async (_, {
|
|
34
|
+
pagination = {
|
|
35
|
+
limit: 10,
|
|
36
|
+
offset: 0
|
|
37
|
+
}
|
|
38
|
+
}) => {
|
|
39
|
+
const where = { completed: false };
|
|
40
|
+
const [totalCount, reminders] = await Promise.all([
|
|
41
|
+
deps.countReminders(where),
|
|
42
|
+
deps.findReminders({
|
|
43
|
+
where,
|
|
44
|
+
orderBy: { reminderDate: "asc" },
|
|
45
|
+
take: Number(pagination.limit),
|
|
46
|
+
skip: Number(pagination.offset),
|
|
47
|
+
include: { note: true }
|
|
48
|
+
})
|
|
49
|
+
]);
|
|
50
|
+
return {
|
|
51
|
+
totalCount,
|
|
52
|
+
reminders
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
const reminderQueryResolvers = {
|
|
57
|
+
noteReminders: createNoteRemindersQueryResolver(),
|
|
58
|
+
upcomingReminders: createUpcomingRemindersQueryResolver(),
|
|
59
|
+
remindersInDateRange: async (_, {
|
|
60
|
+
dateRange
|
|
61
|
+
}) => {
|
|
62
|
+
return models.reminder.findMany({
|
|
63
|
+
where: {
|
|
64
|
+
reminderDate: {
|
|
65
|
+
gte: new Date(dateRange.start),
|
|
66
|
+
lt: new Date(dateRange.end)
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
orderBy: { reminderDate: "asc" },
|
|
70
|
+
include: { note: true }
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
export {
|
|
75
|
+
createNoteRemindersQueryResolver,
|
|
76
|
+
createUpcomingRemindersQueryResolver,
|
|
77
|
+
reminderQueryResolvers
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=reminder.query.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/reminder/graphql/reminder.query.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport models from '~/models.js';\nimport type { Pagination } from '~/types/index.js';\n\ninterface ReminderListDeps {\n countReminders: (where: object) => Promise<number>;\n findReminders: (args: {\n where: object;\n orderBy: { reminderDate: 'asc' };\n take?: number;\n skip?: number;\n include?: { note: true };\n }) => Promise<unknown[]>;\n}\n\ntype NoteRemindersResolverDeps = ReminderListDeps;\ntype UpcomingRemindersResolverDeps = ReminderListDeps;\n\nexport const createNoteRemindersQueryResolver = (\n deps: NoteRemindersResolverDeps = {\n countReminders: async (where) => models.reminder.count({ where }),\n findReminders: async (args) => models.reminder.findMany(args),\n },\n) => {\n return async (\n _: unknown,\n {\n noteId,\n pagination = {\n limit: 10,\n offset: 0,\n },\n }: {\n noteId: string;\n pagination: Pagination;\n },\n ) => {\n const where = { noteId: Number(noteId) };\n const [totalCount, reminders] = await Promise.all([\n deps.countReminders(where),\n deps.findReminders({\n where,\n orderBy: { reminderDate: 'asc' },\n take: Number(pagination.limit),\n skip: Number(pagination.offset),\n }),\n ]);\n\n return {\n totalCount,\n reminders,\n };\n };\n};\n\nexport const createUpcomingRemindersQueryResolver = (\n deps: UpcomingRemindersResolverDeps = {\n countReminders: async (where) => models.reminder.count({ where }),\n findReminders: async (args) => models.reminder.findMany(args),\n },\n) => {\n return async (\n _: unknown,\n {\n pagination = {\n limit: 10,\n offset: 0,\n },\n }: {\n pagination: Pagination;\n },\n ) => {\n const where = { completed: false };\n const [totalCount, reminders] = await Promise.all([\n deps.countReminders(where),\n deps.findReminders({\n where,\n orderBy: { reminderDate: 'asc' },\n take: Number(pagination.limit),\n skip: Number(pagination.offset),\n include: { note: true },\n }),\n ]);\n\n return {\n totalCount,\n reminders,\n };\n };\n};\n\ntype ReminderQueryResolvers = NonNullable<IResolvers['Query']>;\n\nexport const reminderQueryResolvers: ReminderQueryResolvers = {\n noteReminders: createNoteRemindersQueryResolver(),\n upcomingReminders: createUpcomingRemindersQueryResolver(),\n remindersInDateRange: async (\n _,\n {\n dateRange,\n }: {\n dateRange: {\n start: string;\n end: string;\n };\n },\n ) => {\n return models.reminder.findMany({\n where: {\n reminderDate: {\n gte: new Date(dateRange.start),\n lt: new Date(dateRange.end),\n },\n },\n orderBy: { reminderDate: 'asc' },\n include: { note: true },\n });\n },\n};\n"],"mappings":"AACA,OAAO,YAAY;AAiBZ,MAAM,mCAAmC,CAC5C,OAAkC;AAAA,EAC9B,gBAAgB,OAAO,UAAU,OAAO,SAAS,MAAM,EAAE,MAAM,CAAC;AAAA,EAChE,eAAe,OAAO,SAAS,OAAO,SAAS,SAAS,IAAI;AAChE,MACC;AACD,SAAO,OACH,GACA;AAAA,IACI;AAAA,IACA,aAAa;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,IACZ;AAAA,EACJ,MAIC;AACD,UAAM,QAAQ,EAAE,QAAQ,OAAO,MAAM,EAAE;AACvC,UAAM,CAAC,YAAY,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC9C,KAAK,eAAe,KAAK;AAAA,MACzB,KAAK,cAAc;AAAA,QACf;AAAA,QACA,SAAS,EAAE,cAAc,MAAM;AAAA,QAC/B,MAAM,OAAO,WAAW,KAAK;AAAA,QAC7B,MAAM,OAAO,WAAW,MAAM;AAAA,MAClC,CAAC;AAAA,IACL,CAAC;AAED,WAAO;AAAA,MACH;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,MAAM,uCAAuC,CAChD,OAAsC;AAAA,EAClC,gBAAgB,OAAO,UAAU,OAAO,SAAS,MAAM,EAAE,MAAM,CAAC;AAAA,EAChE,eAAe,OAAO,SAAS,OAAO,SAAS,SAAS,IAAI;AAChE,MACC;AACD,SAAO,OACH,GACA;AAAA,IACI,aAAa;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,IACZ;AAAA,EACJ,MAGC;AACD,UAAM,QAAQ,EAAE,WAAW,MAAM;AACjC,UAAM,CAAC,YAAY,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC9C,KAAK,eAAe,KAAK;AAAA,MACzB,KAAK,cAAc;AAAA,QACf;AAAA,QACA,SAAS,EAAE,cAAc,MAAM;AAAA,QAC/B,MAAM,OAAO,WAAW,KAAK;AAAA,QAC7B,MAAM,OAAO,WAAW,MAAM;AAAA,QAC9B,SAAS,EAAE,MAAM,KAAK;AAAA,MAC1B,CAAC;AAAA,IACL,CAAC;AAED,WAAO;AAAA,MACH;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAIO,MAAM,yBAAiD;AAAA,EAC1D,eAAe,iCAAiC;AAAA,EAChD,mBAAmB,qCAAqC;AAAA,EACxD,sBAAsB,OAClB,GACA;AAAA,IACI;AAAA,EACJ,MAMC;AACD,WAAO,OAAO,SAAS,SAAS;AAAA,MAC5B,OAAO;AAAA,QACH,cAAc;AAAA,UACV,KAAK,IAAI,KAAK,UAAU,KAAK;AAAA,UAC7B,IAAI,IAAI,KAAK,UAAU,GAAG;AAAA,QAC9B;AAAA,MACJ;AAAA,MACA,SAAS,EAAE,cAAc,MAAM;AAAA,MAC/B,SAAS,EAAE,MAAM,KAAK;AAAA,IAC1B,CAAC;AAAA,EACL;AACJ;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { reminderFieldResolvers } from "./reminder.field.resolver.js";
|
|
2
|
+
import { reminderMutationResolvers } from "./reminder.mutation.resolver.js";
|
|
3
|
+
import { reminderQueryResolvers } from "./reminder.query.resolver.js";
|
|
4
|
+
const reminderResolvers = {
|
|
5
|
+
Query: reminderQueryResolvers,
|
|
6
|
+
Mutation: reminderMutationResolvers,
|
|
7
|
+
Reminder: reminderFieldResolvers
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
reminderResolvers
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=reminder.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/reminder/graphql/reminder.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport { reminderFieldResolvers } from './reminder.field.resolver.js';\nimport { reminderMutationResolvers } from './reminder.mutation.resolver.js';\nimport { reminderQueryResolvers } from './reminder.query.resolver.js';\n\nexport const reminderResolvers: IResolvers = {\n Query: reminderQueryResolvers,\n Mutation: reminderMutationResolvers,\n Reminder: reminderFieldResolvers,\n};\n"],"mappings":"AACA,SAAS,8BAA8B;AACvC,SAAS,iCAAiC;AAC1C,SAAS,8BAA8B;AAEhC,MAAM,oBAAgC;AAAA,EACzC,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AACd;","names":[]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { gql } from "../../../modules/graphql.js";
|
|
2
|
+
const reminderType = gql`
|
|
3
|
+
enum ReminderPriority {
|
|
4
|
+
low
|
|
5
|
+
medium
|
|
6
|
+
high
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
type Reminder {
|
|
10
|
+
id: ID!
|
|
11
|
+
noteId: Int!
|
|
12
|
+
reminderDate: String!
|
|
13
|
+
completed: Boolean!
|
|
14
|
+
priority: ReminderPriority
|
|
15
|
+
content: String
|
|
16
|
+
createdAt: String!
|
|
17
|
+
updatedAt: String!
|
|
18
|
+
note: Note
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
type Reminders {
|
|
22
|
+
totalCount: Int!
|
|
23
|
+
reminders: [Reminder!]!
|
|
24
|
+
}
|
|
25
|
+
`;
|
|
26
|
+
const reminderQuery = gql`
|
|
27
|
+
extend type Query {
|
|
28
|
+
noteReminders(noteId: ID!, pagination: PaginationInput): Reminders!
|
|
29
|
+
upcomingReminders(pagination: PaginationInput): Reminders!
|
|
30
|
+
remindersInDateRange(dateRange: DateRangeInput): [Reminder!]!
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
const reminderMutation = gql`
|
|
34
|
+
extend type Mutation {
|
|
35
|
+
createReminder(noteId: ID!, reminderDate: String!, priority: ReminderPriority, content: String): Reminder!
|
|
36
|
+
updateReminder(id: ID!, reminderDate: String, completed: Boolean, priority: ReminderPriority, content: String): Reminder!
|
|
37
|
+
deleteReminder(id: ID!): Boolean!
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
const reminderTypeDefs = `
|
|
41
|
+
${reminderType}
|
|
42
|
+
${reminderQuery}
|
|
43
|
+
${reminderMutation}
|
|
44
|
+
`;
|
|
45
|
+
export {
|
|
46
|
+
reminderMutation,
|
|
47
|
+
reminderQuery,
|
|
48
|
+
reminderType,
|
|
49
|
+
reminderTypeDefs
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=reminder.type-defs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/reminder/graphql/reminder.type-defs.ts"],"sourcesContent":["import { gql } from '~/modules/graphql.js';\n\nexport const reminderType = gql`\n enum ReminderPriority {\n low\n medium\n high\n }\n\n type Reminder {\n id: ID!\n noteId: Int!\n reminderDate: String!\n completed: Boolean!\n priority: ReminderPriority\n content: String\n createdAt: String!\n updatedAt: String!\n note: Note\n }\n\n type Reminders {\n totalCount: Int!\n reminders: [Reminder!]!\n }\n`;\n\nexport const reminderQuery = gql`\n extend type Query {\n noteReminders(noteId: ID!, pagination: PaginationInput): Reminders!\n upcomingReminders(pagination: PaginationInput): Reminders!\n remindersInDateRange(dateRange: DateRangeInput): [Reminder!]!\n }\n`;\n\nexport const reminderMutation = gql`\n extend type Mutation {\n createReminder(noteId: ID!, reminderDate: String!, priority: ReminderPriority, content: String): Reminder!\n updateReminder(id: ID!, reminderDate: String, completed: Boolean, priority: ReminderPriority, content: String): Reminder!\n deleteReminder(id: ID!): Boolean!\n }\n`;\n\nexport const reminderTypeDefs = `\n ${reminderType}\n ${reminderQuery}\n ${reminderMutation}\n`;\n"],"mappings":"AAAA,SAAS,WAAW;AAEb,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBrB,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQtB,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQzB,MAAM,mBAAmB;AAAA,MAC1B,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,gBAAgB;AAAA;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { tagFieldResolvers } from "./tag.field.resolver.js";
|
|
2
|
+
import { createTagMutationResolver, tagMutationResolvers } from "./tag.mutation.resolver.js";
|
|
3
|
+
import { tagQueryResolvers } from "./tag.query.resolver.js";
|
|
4
|
+
import { tagResolvers } from "./tag.resolver.js";
|
|
5
|
+
import { tagTypeDefs } from "./tag.type-defs.js";
|
|
6
|
+
export {
|
|
7
|
+
createTagMutationResolver,
|
|
8
|
+
tagFieldResolvers,
|
|
9
|
+
tagMutationResolvers,
|
|
10
|
+
tagQueryResolvers,
|
|
11
|
+
tagResolvers,
|
|
12
|
+
tagTypeDefs
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/tag/graphql/index.ts"],"sourcesContent":["export { tagFieldResolvers } from './tag.field.resolver.js';\nexport { createTagMutationResolver, tagMutationResolvers } from './tag.mutation.resolver.js';\nexport { tagQueryResolvers } from './tag.query.resolver.js';\nexport { tagResolvers } from './tag.resolver.js';\nexport { tagTypeDefs } from './tag.type-defs.js';\n"],"mappings":"AAAA,SAAS,yBAAyB;AAClC,SAAS,2BAA2B,4BAA4B;AAChE,SAAS,yBAAyB;AAClC,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;","names":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import models from "../../../models.js";
|
|
2
|
+
const tagFieldResolvers = {
|
|
3
|
+
referenceCount: async (tag) => {
|
|
4
|
+
return models.note.count({ where: { tags: { some: { id: Number(tag.id) } } } });
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
export {
|
|
8
|
+
tagFieldResolvers
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=tag.field.resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/tag/graphql/tag.field.resolver.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport type { Tag } from '~/models.js';\nimport models from '~/models.js';\n\ntype TagReferenceCountSource =\n | Pick<Tag, 'id'>\n | {\n id: string;\n };\n\ntype TagFieldResolvers = NonNullable<IResolvers['Tag']>;\n\nexport const tagFieldResolvers: TagFieldResolvers = {\n referenceCount: async (tag: TagReferenceCountSource) => {\n return models.note.count({ where: { tags: { some: { id: Number(tag.id) } } } });\n },\n};\n"],"mappings":"AAEA,OAAO,YAAY;AAUZ,MAAM,oBAAuC;AAAA,EAChD,gBAAgB,OAAO,QAAiC;AACpD,WAAO,OAAO,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAA,EAClF;AACJ;","names":[]}
|