mirror of
https://github.com/bretzel-app/crumbs.git
synced 2026-10-12 12:06:57 +02:00
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:
committed by
Fred Cabassut
co-authored by
Claude Opus 4.6
parent
f6dee3e2a9
commit
8da2de7703
@@ -0,0 +1,23 @@
|
|||||||
|
CREATE TABLE `note_versions` (
|
||||||
|
`id` text PRIMARY KEY NOT NULL,
|
||||||
|
`note_id` text NOT NULL,
|
||||||
|
`version` integer NOT NULL,
|
||||||
|
`title` text DEFAULT '' NOT NULL,
|
||||||
|
`content` text DEFAULT '' NOT NULL,
|
||||||
|
`checklist_mode` integer DEFAULT false NOT NULL,
|
||||||
|
`color` text DEFAULT 'default' NOT NULL,
|
||||||
|
`created_at` integer NOT NULL,
|
||||||
|
FOREIGN KEY (`note_id`) REFERENCES `notes`(`id`) ON UPDATE no action ON DELETE cascade
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE INDEX `note_versions_note_id_idx` ON `note_versions` (`note_id`);--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `note_versions_note_id_version_unique` ON `note_versions` (`note_id`,`version`);--> statement-breakpoint
|
||||||
|
CREATE TABLE `shared_notes` (
|
||||||
|
`note_id` text PRIMARY KEY NOT NULL,
|
||||||
|
`token` text NOT NULL,
|
||||||
|
`created_at` integer NOT NULL,
|
||||||
|
`expires_at` integer,
|
||||||
|
FOREIGN KEY (`note_id`) REFERENCES `notes`(`id`) ON UPDATE no action ON DELETE cascade
|
||||||
|
);
|
||||||
|
--> statement-breakpoint
|
||||||
|
CREATE UNIQUE INDEX `shared_notes_token_unique` ON `shared_notes` (`token`);
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -22,6 +22,13 @@
|
|||||||
"when": 1773150888301,
|
"when": 1773150888301,
|
||||||
"tag": "0002_deep_black_widow",
|
"tag": "0002_deep_black_widow",
|
||||||
"breakpoints": true
|
"breakpoints": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idx": 3,
|
||||||
|
"version": "6",
|
||||||
|
"when": 1774037379518,
|
||||||
|
"tag": "0003_uneven_tomorrow_man",
|
||||||
|
"breakpoints": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -236,6 +236,11 @@ export async function deleteUser(userId: number): Promise<void> {
|
|||||||
.run(userId, userId);
|
.run(userId, userId);
|
||||||
sqlite.prepare('DELETE FROM sync_log WHERE user_id = ?').run(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 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
|
sqlite
|
||||||
.prepare(
|
.prepare(
|
||||||
'DELETE FROM note_tags WHERE note_id IN (SELECT id FROM notes WHERE user_id = ?)'
|
'DELETE FROM note_tags WHERE note_id IN (SELECT id FROM notes WHERE user_id = ?)'
|
||||||
|
|||||||
@@ -190,6 +190,15 @@ export const userPreferences = sqliteTable(
|
|||||||
(table) => [uniqueIndex('user_preferences_user_key_unique').on(table.userId, table.key)]
|
(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(
|
export const noteVersions = sqliteTable(
|
||||||
'note_versions',
|
'note_versions',
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ export interface Note {
|
|||||||
collaborators?: Collaborator[];
|
collaborators?: Collaborator[];
|
||||||
isOwner?: boolean;
|
isOwner?: boolean;
|
||||||
isShared?: boolean;
|
isShared?: boolean;
|
||||||
|
shareToken?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Collaborator {
|
export interface Collaborator {
|
||||||
@@ -118,5 +119,22 @@ export interface NoteVersion {
|
|||||||
createdAt: Date;
|
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 type { UserPreferences } from './preferences.js';
|
||||||
export { DEFAULT_PREFERENCES, BOOLEAN_PREF_KEYS } from './preferences.js';
|
export { DEFAULT_PREFERENCES, BOOLEAN_PREF_KEYS } from './preferences.js';
|
||||||
|
|||||||
Reference in New Issue
Block a user