import { authTables } from '@convex-dev/auth/server'; import { defineSchema, defineTable } from 'convex/server'; import { v } from 'convex/values'; import { dashboardRangeValidator, editorModeValidator, moodValidator, themePreferenceValidator } from './validators.js'; export default defineSchema({ ...authTables, entries: defineTable({ owner: v.string(), title: v.string(), body: v.string(), plainText: v.string(), searchText: v.string(), mood: moodValidator, entryDate: v.string(), tagNames: v.array(v.string()), tagSlugs: v.array(v.string()), pinned: v.boolean(), archived: v.boolean(), createdAt: v.number(), updatedAt: v.number() }) .index('by_owner_and_entryDate', ['owner', 'entryDate']) .index('by_owner_and_updatedAt', ['owner', 'updatedAt']) .index('by_owner_and_mood_and_entryDate', ['owner', 'mood', 'entryDate']) .searchIndex('search_entries', { searchField: 'searchText', filterFields: ['owner'] }), tags: defineTable({ owner: v.string(), name: v.string(), slug: v.string(), color: v.string(), usageCount: v.number(), createdAt: v.number(), updatedAt: v.number() }) .index('by_owner_and_slug', ['owner', 'slug']) .index('by_owner_and_name', ['owner', 'name']) .index('by_owner_and_usageCount', ['owner', 'usageCount']), entryTags: defineTable({ owner: v.string(), entryId: v.id('entries'), tagId: v.id('tags'), tagSlug: v.string(), createdAt: v.number() }) .index('by_entry', ['entryId']) .index('by_owner_and_tagSlug', ['owner', 'tagSlug']) .index('by_owner_and_entryId_and_tagSlug', ['owner', 'entryId', 'tagSlug']), settings: defineTable({ owner: v.string(), theme: themePreferenceValidator, defaultMood: moodValidator, editorMode: editorModeValidator, dashboardRange: dashboardRangeValidator, updatedAt: v.number() }).index('by_owner', ['owner']), userState: defineTable({ owner: v.string(), markdownGuideSeeded: v.boolean(), markdownGuideEntryId: v.optional(v.id('entries')), updatedAt: v.number() }).index('by_owner', ['owner']) });