feat: add shared_notes schema and NoteShare types

Add sharedNotes table with noteId primary key, unique token, and
cascade delete. Add NoteShare and SharedNoteData interfaces.
Extend Note type with optional shareToken field.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Frederic Cabassut
2026-03-20 22:06:41 +01:00
committed by Fred Cabassut
co-authored by Claude Opus 4.6
parent f6dee3e2a9
commit 8da2de7703
6 changed files with 1229 additions and 0 deletions
+5
View File
@@ -236,6 +236,11 @@ export async function deleteUser(userId: number): Promise<void> {
.run(userId, userId);
sqlite.prepare('DELETE FROM sync_log WHERE user_id = ?').run(userId);
sqlite.prepare('DELETE FROM attachments WHERE user_id = ?').run(userId);
sqlite
.prepare(
'DELETE FROM shared_notes WHERE note_id IN (SELECT id FROM notes WHERE user_id = ?)'
)
.run(userId);
sqlite
.prepare(
'DELETE FROM note_tags WHERE note_id IN (SELECT id FROM notes WHERE user_id = ?)'
+9
View File
@@ -190,6 +190,15 @@ export const userPreferences = sqliteTable(
(table) => [uniqueIndex('user_preferences_user_key_unique').on(table.userId, table.key)]
);
export const sharedNotes = sqliteTable('shared_notes', {
noteId: text('note_id')
.primaryKey()
.references(() => notes.id, { onDelete: 'cascade' }),
token: text('token').notNull().unique(),
createdAt: integer('created_at', { mode: 'timestamp' }).notNull(),
expiresAt: integer('expires_at', { mode: 'timestamp' })
});
export const noteVersions = sqliteTable(
'note_versions',
{
+18
View File
@@ -17,6 +17,7 @@ export interface Note {
collaborators?: Collaborator[];
isOwner?: boolean;
isShared?: boolean;
shareToken?: string;
}
export interface Collaborator {
@@ -118,5 +119,22 @@ export interface NoteVersion {
createdAt: Date;
}
export interface NoteShare {
noteId: string;
token: string;
createdAt: Date;
expiresAt: Date | null;
}
export interface SharedNoteData {
title: string;
content: string;
checklistMode: boolean;
color: NoteColor;
attachments: Attachment[];
createdAt: Date;
updatedAt: Date;
}
export type { UserPreferences } from './preferences.js';
export { DEFAULT_PREFERENCES, BOOLEAN_PREF_KEYS } from './preferences.js';