All checks were successful
Docker Deploy / build-and-push (push) Successful in 3m33s
140 lines
4.8 KiB
SQL
140 lines
4.8 KiB
SQL
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,
|
|
`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`); |