CREATE TABLE `api_tokens` ( `id` text PRIMARY KEY NOT NULL, `user_id` text NOT NULL, `name` text NOT NULL, `token` text NOT NULL, `scopes` text DEFAULT '*' NOT NULL, `last_used_at` integer, `created_at` integer, FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action ); --> statement-breakpoint CREATE UNIQUE INDEX `api_tokens_token_unique` ON `api_tokens` (`token`);--> statement-breakpoint CREATE TABLE `categories` ( `id` text PRIMARY KEY NOT NULL, `organization_id` text NOT NULL, `name` text NOT NULL, `color` text, `created_at` integer, FOREIGN KEY (`organization_id`) REFERENCES `organizations`(`id`) ON UPDATE no action ON DELETE no action ); --> statement-breakpoint CREATE TABLE `clients` ( `id` text PRIMARY KEY NOT NULL, `organization_id` text NOT NULL, `name` text NOT NULL, `email` text, `created_at` integer, FOREIGN KEY (`organization_id`) REFERENCES `organizations`(`id`) ON UPDATE no action ON DELETE no action ); --> statement-breakpoint CREATE TABLE `invoice_items` ( `id` text PRIMARY KEY NOT NULL, `invoice_id` text NOT NULL, `description` text NOT NULL, `quantity` real DEFAULT 1 NOT NULL, `unit_price` integer DEFAULT 0 NOT NULL, `amount` integer DEFAULT 0 NOT NULL, FOREIGN KEY (`invoice_id`) REFERENCES `invoices`(`id`) ON UPDATE no action ON DELETE no action ); --> statement-breakpoint CREATE TABLE `invoices` ( `id` text PRIMARY KEY NOT NULL, `organization_id` text NOT NULL, `client_id` text NOT NULL, `number` text NOT NULL, `type` text DEFAULT 'invoice' NOT NULL, `status` text DEFAULT 'draft' NOT NULL, `issue_date` integer NOT NULL, `due_date` integer NOT NULL, `notes` text, `currency` text DEFAULT 'USD' NOT NULL, `subtotal` integer DEFAULT 0 NOT NULL, `tax_rate` real DEFAULT 0, `tax_amount` integer DEFAULT 0 NOT NULL, `total` integer DEFAULT 0 NOT NULL, `created_at` integer, FOREIGN KEY (`organization_id`) REFERENCES `organizations`(`id`) ON UPDATE no action ON DELETE no action, FOREIGN KEY (`client_id`) REFERENCES `clients`(`id`) ON UPDATE no action ON DELETE no action ); --> statement-breakpoint CREATE TABLE `members` ( `user_id` text NOT NULL, `organization_id` text NOT NULL, `role` text DEFAULT 'member' NOT NULL, `joined_at` integer, PRIMARY KEY(`user_id`, `organization_id`), FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action, FOREIGN KEY (`organization_id`) REFERENCES `organizations`(`id`) ON UPDATE no action ON DELETE no action ); --> statement-breakpoint CREATE TABLE `organizations` ( `id` text PRIMARY KEY NOT NULL, `name` text NOT NULL, `logo_url` text, `street` text, `city` text, `state` text, `zip` text, `country` text, `created_at` integer ); --> statement-breakpoint CREATE TABLE `sessions` ( `id` text PRIMARY KEY NOT NULL, `user_id` text NOT NULL, `expires_at` integer NOT NULL, FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action ); --> statement-breakpoint CREATE TABLE `site_settings` ( `id` text PRIMARY KEY NOT NULL, `key` text NOT NULL, `value` text NOT NULL, `updated_at` integer ); --> statement-breakpoint CREATE UNIQUE INDEX `site_settings_key_unique` ON `site_settings` (`key`);--> statement-breakpoint CREATE TABLE `tags` ( `id` text PRIMARY KEY NOT NULL, `organization_id` text NOT NULL, `name` text NOT NULL, `color` text, `created_at` integer, FOREIGN KEY (`organization_id`) REFERENCES `organizations`(`id`) ON UPDATE no action ON DELETE no action ); --> statement-breakpoint CREATE TABLE `time_entries` ( `id` text PRIMARY KEY NOT NULL, `user_id` text NOT NULL, `organization_id` text NOT NULL, `client_id` text NOT NULL, `category_id` text NOT NULL, `start_time` integer NOT NULL, `end_time` integer, `description` text, `is_manual` integer DEFAULT false, `created_at` integer, FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action, FOREIGN KEY (`organization_id`) REFERENCES `organizations`(`id`) ON UPDATE no action ON DELETE no action, FOREIGN KEY (`client_id`) REFERENCES `clients`(`id`) ON UPDATE no action ON DELETE no action, FOREIGN KEY (`category_id`) REFERENCES `categories`(`id`) ON UPDATE no action ON DELETE no action ); --> statement-breakpoint CREATE TABLE `time_entry_tags` ( `time_entry_id` text NOT NULL, `tag_id` text NOT NULL, PRIMARY KEY(`time_entry_id`, `tag_id`), FOREIGN KEY (`time_entry_id`) REFERENCES `time_entries`(`id`) ON UPDATE no action ON DELETE no action, FOREIGN KEY (`tag_id`) REFERENCES `tags`(`id`) ON UPDATE no action ON DELETE no action ); --> statement-breakpoint CREATE TABLE `users` ( `id` text PRIMARY KEY NOT NULL, `email` text NOT NULL, `password_hash` text NOT NULL, `name` text NOT NULL, `is_site_admin` integer DEFAULT false, `created_at` integer ); --> statement-breakpoint CREATE UNIQUE INDEX `users_email_unique` ON `users` (`email`);