66 lines
1.8 KiB
TypeScript
66 lines
1.8 KiB
TypeScript
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'])
|
|
});
|