CREATE TABLE `account` (
`id` text PRIMARY KEY NOT NULL,
`account_id` text NOT NULL,
`provider_id` text NOT NULL,
`user_id` text NOT NULL,
`access_token` text,
`refresh_token` text,
`id_token` text,
`access_token_expires_at` integer,
`refresh_token_expires_at` integer,
`scope` text,
`password` text,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`updated_at` integer NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `account_userId_idx` ON `account` (`user_id`);--> statement-breakpoint
CREATE TABLE `apikey` (
`id` text PRIMARY KEY NOT NULL,
`name` text,
`start` text,
`prefix` text,
`key` text NOT NULL,
`user_id` text NOT NULL,
`refill_interval` integer,
`refill_amount` integer,
`last_refill_at` integer,
`enabled` integer DEFAULT true,
`rate_limit_enabled` integer DEFAULT true,
`rate_limit_time_window` integer DEFAULT 86400000,
`rate_limit_max` integer DEFAULT 10,
`request_count` integer DEFAULT 0,
`remaining` integer,
`last_request` integer,
`expires_at` integer,
`created_at` integer NOT NULL,
`updated_at` integer NOT NULL,
`permissions` text,
`metadata` text,
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE TABLE `session` (
`id` text PRIMARY KEY NOT NULL,
`expires_at` integer NOT NULL,
`token` text NOT NULL,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`updated_at` integer NOT NULL,
`ip_address` text,
`user_agent` text,
`user_id` text NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE UNIQUE INDEX `session_token_unique` ON `session` (`token`);--> statement-breakpoint
CREATE INDEX `session_userId_idx` ON `session` (`user_id`);--> statement-breakpoint
CREATE TABLE `user` (
`id` text PRIMARY KEY NOT NULL,
`name` text NOT NULL,
`email` text NOT NULL,
`email_verified` integer DEFAULT false NOT NULL,
`image` text,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`username` text,
`display_username` text
);
--> statement-breakpoint
CREATE UNIQUE INDEX `user_email_unique` ON `user` (`email`);--> statement-breakpoint
CREATE UNIQUE INDEX `user_username_unique` ON `user` (`username`);--> statement-breakpoint
CREATE TABLE `verification` (
`id` text PRIMARY KEY NOT NULL,
`identifier` text NOT NULL,
`value` text NOT NULL,
`expires_at` integer NOT NULL,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL
);
--> statement-breakpoint
CREATE INDEX `verification_identifier_idx` ON `verification` (`identifier`);--> statement-breakpoint
CREATE TABLE `comment` (
`id` integer PRIMARY KEY NOT NULL,
`author_id` text NOT NULL,
`author_username` text NOT NULL,
`body` text NOT NULL,
`issue_id` integer,
`pull_request_id` integer,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
FOREIGN KEY (`author_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`issue_id`) REFERENCES `issue`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`pull_request_id`) REFERENCES `pull_request`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `comment_issueId_idx` ON `comment` (`issue_id`);--> statement-breakpoint
CREATE INDEX `comment_pullRequestId_idx` ON `comment` (`pull_request_id`);--> statement-breakpoint
CREATE TABLE `issue` (
`id` integer PRIMARY KEY NOT NULL,
`repository_id` text NOT NULL,
`full_name` text NOT NULL,
`number` integer NOT NULL,
`title` text NOT NULL,
`body` text,
`status` text DEFAULT 'open' NOT NULL,
`creator_id` text NOT NULL,
`creator_username` text NOT NULL,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
FOREIGN KEY (`repository_id`) REFERENCES `repository`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`creator_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `issue_repositoryId_idx` ON `issue` (`repository_id`);--> statement-breakpoint
CREATE INDEX `issue_fullName_idx` ON `issue` (`full_name`);--> statement-breakpoint
CREATE INDEX `issue_number_idx` ON `issue` (`number`);--> statement-breakpoint
CREATE INDEX `issue_status_idx` ON `issue` (`status`);--> statement-breakpoint
CREATE TABLE `pull_request` (
`id` integer PRIMARY KEY NOT NULL,
`repository_id` text NOT NULL,
`full_name` text NOT NULL,
`number` integer NOT NULL,
`title` text NOT NULL,
`body` text,
`status` text DEFAULT 'open' NOT NULL,
`into_branch` text NOT NULL,
`from_branch` text NOT NULL,
`creator_id` text NOT NULL,
`creator_username` text NOT NULL,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
FOREIGN KEY (`repository_id`) REFERENCES `repository`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`creator_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `pullRequest_repositoryId_idx` ON `pull_request` (`repository_id`);--> statement-breakpoint
CREATE INDEX `pullRequest_fullName_idx` ON `pull_request` (`full_name`);--> statement-breakpoint
CREATE INDEX `pullRequest_status_idx` ON `pull_request` (`status`);--> statement-breakpoint
CREATE INDEX `pullRequest_number_idx` ON `pull_request` (`number`);--> statement-breakpoint
CREATE TABLE `repository` (
`id` integer PRIMARY KEY NOT NULL,
`owner_id` text NOT NULL,
`owner` text NOT NULL,
`name` text NOT NULL,
`description` text,
`is_private` integer DEFAULT false NOT NULL,
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
`updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
FOREIGN KEY (`owner_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `repository_ownerId_idx` ON `repository` (`owner_id`);--> statement-breakpoint
CREATE INDEX `repository_owner_idx` ON `repository` (`owner`);--> statement-breakpoint
CREATE INDEX `repository_name_idx` ON `repository` (`name`);