chore: create Prisma migration baseline

This commit is contained in:
BOHA
2026-03-23 11:09:12 +01:00
parent e0fbae1530
commit 2b42e636ae

View File

@@ -0,0 +1,677 @@
-- CreateTable
CREATE TABLE `attendance` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`user_id` INTEGER NOT NULL,
`shift_date` DATE NOT NULL,
`arrival_time` DATETIME(0) NULL,
`arrival_lat` DECIMAL(10, 8) NULL,
`arrival_lng` DECIMAL(11, 8) NULL,
`arrival_accuracy` DECIMAL(10, 2) NULL,
`arrival_address` VARCHAR(500) NULL,
`break_start` DATETIME(0) NULL,
`break_end` DATETIME(0) NULL,
`departure_time` DATETIME(0) NULL,
`departure_lat` DECIMAL(10, 8) NULL,
`departure_lng` DECIMAL(11, 8) NULL,
`departure_accuracy` DECIMAL(10, 2) NULL,
`departure_address` VARCHAR(500) NULL,
`notes` TEXT NULL,
`project_id` INTEGER NULL,
`leave_type` ENUM('work', 'vacation', 'sick', 'holiday', 'unpaid') NULL DEFAULT 'work',
`leave_hours` DECIMAL(4, 2) NULL,
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`updated_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
INDEX `idx_attendance_user_date`(`user_id`, `shift_date`),
INDEX `idx_attendance_user_departure`(`user_id`, `departure_time`),
INDEX `idx_project_id`(`project_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `attendance_project_logs` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`attendance_id` INTEGER NOT NULL,
`project_id` INTEGER NOT NULL,
`started_at` DATETIME(0) NULL,
`ended_at` DATETIME(0) NULL,
`hours` INTEGER UNSIGNED NULL,
`minutes` INTEGER UNSIGNED NULL,
INDEX `idx_attendance_project_logs_aid`(`attendance_id`),
INDEX `idx_project_id`(`project_id`),
INDEX `idx_started_at`(`started_at`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `audit_logs` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`user_id` INTEGER NULL,
`username` VARCHAR(100) NULL,
`user_ip` VARCHAR(45) NULL,
`action` VARCHAR(100) NOT NULL,
`entity_type` VARCHAR(50) NULL,
`entity_id` INTEGER NULL,
`description` TEXT NULL,
`old_values` LONGTEXT NULL,
`new_values` LONGTEXT NULL,
`user_agent` TEXT NULL,
`session_id` VARCHAR(128) NULL,
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
INDEX `idx_audit_log_created`(`created_at`),
INDEX `idx_audit_logs_action`(`action`),
INDEX `idx_audit_logs_created`(`created_at`),
INDEX `idx_audit_logs_entity`(`entity_type`, `entity_id`, `created_at`),
INDEX `idx_audit_logs_user_created`(`user_id`, `created_at`),
FULLTEXT INDEX `idx_audit_search`(`description`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `bank_accounts` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`account_name` VARCHAR(255) NULL,
`bank_name` VARCHAR(255) NULL,
`account_number` VARCHAR(50) NULL,
`iban` VARCHAR(50) NULL,
`bic` VARCHAR(20) NULL,
`currency` VARCHAR(10) NULL DEFAULT 'CZK',
`is_default` BOOLEAN NULL DEFAULT false,
`position` INTEGER NULL DEFAULT 0,
`created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`modified_at` DATETIME(0) NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `company_settings` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`company_name` VARCHAR(255) NULL,
`street` VARCHAR(255) NULL,
`city` VARCHAR(255) NULL,
`postal_code` VARCHAR(20) NULL,
`country` VARCHAR(100) NULL,
`company_id` VARCHAR(50) NULL,
`vat_id` VARCHAR(50) NULL,
`custom_fields` LONGTEXT NULL,
`logo_data` LONGBLOB NULL,
`quotation_prefix` VARCHAR(20) NULL,
`default_currency` VARCHAR(10) NULL DEFAULT 'CZK',
`default_vat_rate` DECIMAL(5, 2) NULL DEFAULT 21.00,
`uuid` VARCHAR(36) NULL,
`modified_at` DATETIME(0) NULL,
`is_deleted` BOOLEAN NULL DEFAULT false,
`sync_version` INTEGER NULL DEFAULT 0,
`order_type_code` VARCHAR(10) NULL,
`invoice_type_code` VARCHAR(10) NULL,
`require_2fa` BOOLEAN NOT NULL DEFAULT false,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `customers` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`street` VARCHAR(255) NULL,
`city` VARCHAR(255) NULL,
`postal_code` VARCHAR(20) NULL,
`country` VARCHAR(100) NULL,
`company_id` VARCHAR(50) NULL,
`vat_id` VARCHAR(50) NULL,
`custom_fields` LONGTEXT NULL,
`created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`uuid` VARCHAR(36) NULL,
`modified_at` DATETIME(0) NULL,
`sync_version` INTEGER NULL DEFAULT 0,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `invoice_items` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`invoice_id` INTEGER NOT NULL,
`description` VARCHAR(500) NULL,
`quantity` DECIMAL(12, 3) NULL DEFAULT 1.000,
`unit` VARCHAR(20) NULL,
`unit_price` DECIMAL(12, 2) NULL DEFAULT 0.00,
`vat_rate` DECIMAL(5, 2) NULL DEFAULT 21.00,
`position` INTEGER NULL DEFAULT 0,
INDEX `invoice_id`(`invoice_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `invoices` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`invoice_number` VARCHAR(50) NULL,
`order_id` INTEGER NULL,
`customer_id` INTEGER NULL,
`status` VARCHAR(30) NULL DEFAULT 'issued',
`currency` VARCHAR(10) NULL DEFAULT 'CZK',
`vat_rate` DECIMAL(5, 2) NULL DEFAULT 21.00,
`apply_vat` BOOLEAN NULL DEFAULT true,
`payment_method` VARCHAR(50) NULL,
`constant_symbol` VARCHAR(20) NULL,
`bank_name` VARCHAR(255) NULL,
`bank_swift` VARCHAR(20) NULL,
`bank_iban` VARCHAR(50) NULL,
`bank_account` VARCHAR(50) NULL,
`issue_date` DATE NULL,
`due_date` DATE NULL,
`tax_date` DATE NULL,
`paid_date` DATE NULL,
`issued_by` VARCHAR(255) NULL,
`notes` TEXT NULL,
`internal_notes` TEXT NULL,
`created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`modified_at` DATETIME(0) NULL,
INDEX `customer_id`(`customer_id`),
INDEX `idx_invoices_due_date`(`due_date`),
INDEX `idx_invoices_status_issue`(`status`, `issue_date`),
INDEX `order_id`(`order_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `item_templates` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL,
`description` TEXT NULL,
`default_price` DECIMAL(12, 2) NULL DEFAULT 0.00,
`category` VARCHAR(100) NULL,
`uuid` VARCHAR(36) NULL,
`modified_at` DATETIME(0) NULL,
`is_deleted` BOOLEAN NULL DEFAULT false,
`sync_version` INTEGER NULL DEFAULT 0,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `leave_balances` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`user_id` INTEGER NOT NULL,
`year` INTEGER NOT NULL,
`vacation_total` DECIMAL(5, 2) NULL DEFAULT 160.00,
`vacation_used` DECIMAL(5, 2) NULL DEFAULT 0.00,
`sick_used` DECIMAL(5, 2) NULL DEFAULT 0.00,
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`updated_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
UNIQUE INDEX `idx_leave_balances_user_year`(`user_id`, `year`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `leave_requests` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`user_id` INTEGER NOT NULL,
`leave_type` ENUM('vacation', 'sick', 'unpaid') NOT NULL,
`date_from` DATE NOT NULL,
`date_to` DATE NOT NULL,
`total_hours` DECIMAL(5, 2) NOT NULL,
`total_days` INTEGER NOT NULL,
`notes` TEXT NULL,
`status` ENUM('pending', 'approved', 'rejected', 'cancelled') NULL DEFAULT 'pending',
`reviewer_id` INTEGER NULL,
`reviewer_note` TEXT NULL,
`reviewed_at` DATETIME(0) NULL,
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`updated_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
INDEX `idx_leave_requests_user_status`(`user_id`, `status`),
INDEX `idx_status`(`status`),
INDEX `reviewer_id`(`reviewer_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `number_sequences` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`type` VARCHAR(50) NULL,
`year` INTEGER NULL,
`last_number` INTEGER NULL DEFAULT 0,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `order_items` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`order_id` INTEGER NOT NULL,
`description` VARCHAR(500) NULL,
`item_description` TEXT NULL,
`quantity` DECIMAL(12, 3) NULL DEFAULT 1.000,
`unit` VARCHAR(20) NULL,
`unit_price` DECIMAL(12, 2) NULL DEFAULT 0.00,
`is_included_in_total` BOOLEAN NULL DEFAULT true,
`position` INTEGER NULL DEFAULT 0,
`modified_at` DATETIME(0) NULL,
INDEX `order_id`(`order_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `order_sections` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`order_id` INTEGER NOT NULL,
`title` VARCHAR(500) NULL,
`title_cz` VARCHAR(500) NULL,
`content` TEXT NULL,
`position` INTEGER NULL DEFAULT 0,
`modified_at` DATETIME(0) NULL,
INDEX `order_id`(`order_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `orders` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`order_number` VARCHAR(50) NULL,
`customer_order_number` VARCHAR(100) NULL,
`attachment_data` LONGBLOB NULL,
`attachment_name` VARCHAR(255) NULL,
`quotation_id` INTEGER NULL,
`customer_id` INTEGER NULL,
`status` VARCHAR(30) NULL DEFAULT 'prijata',
`currency` VARCHAR(10) NULL DEFAULT 'CZK',
`language` VARCHAR(5) NULL DEFAULT 'cs',
`vat_rate` DECIMAL(5, 2) NULL DEFAULT 21.00,
`apply_vat` BOOLEAN NULL DEFAULT true,
`exchange_rate` DECIMAL(10, 4) NULL DEFAULT 1.0000,
`scope_title` VARCHAR(500) NULL,
`scope_description` TEXT NULL,
`notes` TEXT NULL,
`created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`modified_at` DATETIME(0) NULL,
INDEX `customer_id`(`customer_id`),
INDEX `quotation_id`(`quotation_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `permissions` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`display_name` VARCHAR(100) NOT NULL,
`description` TEXT NULL,
`module` VARCHAR(50) NOT NULL,
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
UNIQUE INDEX `name`(`name`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `project_notes` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`project_id` INTEGER NOT NULL,
`user_id` INTEGER NULL,
`user_name` VARCHAR(100) NULL,
`content` TEXT NULL,
`created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
INDEX `project_id`(`project_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `projects` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`project_number` VARCHAR(50) NULL,
`name` VARCHAR(255) NULL,
`customer_id` INTEGER NULL,
`responsible_user_id` INTEGER NULL,
`quotation_id` INTEGER NULL,
`order_id` INTEGER NULL,
`status` VARCHAR(30) NULL DEFAULT 'aktivni',
`start_date` DATE NULL,
`end_date` DATE NULL,
`notes` TEXT NULL,
`created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`modified_at` DATETIME(0) NULL,
INDEX `customer_id`(`customer_id`),
INDEX `fk_projects_responsible_user`(`responsible_user_id`),
INDEX `order_id`(`order_id`),
INDEX `quotation_id`(`quotation_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `quotation_items` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`quotation_id` INTEGER NOT NULL,
`position` INTEGER NULL DEFAULT 0,
`description` VARCHAR(500) NULL,
`item_description` TEXT NULL,
`quantity` DECIMAL(12, 3) NULL DEFAULT 1.000,
`unit` VARCHAR(20) NULL,
`unit_price` DECIMAL(12, 2) NULL DEFAULT 0.00,
`is_included_in_total` BOOLEAN NULL DEFAULT true,
`uuid` VARCHAR(36) NULL,
`modified_at` DATETIME(0) NULL,
`is_deleted` BOOLEAN NULL DEFAULT false,
`sync_version` INTEGER NULL DEFAULT 0,
INDEX `quotation_id`(`quotation_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `quotations` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`quotation_number` VARCHAR(50) NULL,
`project_code` VARCHAR(50) NULL,
`customer_id` INTEGER NULL,
`created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`valid_until` DATE NULL,
`currency` VARCHAR(10) NULL DEFAULT 'CZK',
`language` VARCHAR(5) NULL DEFAULT 'cs',
`vat_rate` DECIMAL(5, 2) NULL DEFAULT 21.00,
`apply_vat` BOOLEAN NULL DEFAULT true,
`exchange_rate` DECIMAL(10, 4) NULL DEFAULT 1.0000,
`exchange_rate_date` DATE NULL,
`order_id` INTEGER NULL,
`status` VARCHAR(20) NOT NULL DEFAULT 'active',
`scope_title` VARCHAR(500) NULL,
`scope_description` TEXT NULL,
`uuid` VARCHAR(36) NULL,
`modified_at` DATETIME(0) NULL,
`sync_version` INTEGER NULL DEFAULT 0,
INDEX `customer_id`(`customer_id`),
INDEX `idx_quotations_number`(`quotation_number`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `received_invoices` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`month` TINYINT UNSIGNED NOT NULL,
`year` SMALLINT UNSIGNED NOT NULL,
`supplier_name` VARCHAR(255) NOT NULL,
`invoice_number` VARCHAR(100) NULL,
`description` VARCHAR(500) NULL,
`amount` DECIMAL(12, 2) NOT NULL DEFAULT 0.00,
`currency` VARCHAR(3) NOT NULL DEFAULT 'CZK',
`vat_rate` DECIMAL(5, 2) NOT NULL DEFAULT 21.00,
`vat_amount` DECIMAL(12, 2) NOT NULL DEFAULT 0.00,
`issue_date` DATE NULL,
`due_date` DATE NULL,
`paid_date` DATE NULL,
`status` ENUM('unpaid', 'paid') NOT NULL DEFAULT 'unpaid',
`file_data` MEDIUMBLOB NULL,
`file_name` VARCHAR(255) NULL,
`file_mime` VARCHAR(100) NULL,
`file_size` INTEGER UNSIGNED NULL,
`notes` TEXT NULL,
`uploaded_by` INTEGER UNSIGNED NULL,
`created_at` DATETIME(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
`modified_at` DATETIME(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
INDEX `idx_month_year`(`year`, `month`),
INDEX `idx_status`(`status`),
INDEX `idx_supplier`(`supplier_name`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `refresh_tokens` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INTEGER UNSIGNED NOT NULL,
`token_hash` VARCHAR(64) NOT NULL,
`expires_at` DATETIME(0) NOT NULL,
`replaced_at` DATETIME(0) NULL,
`replaced_by_hash` VARCHAR(64) NULL,
`remember_me` BOOLEAN NOT NULL DEFAULT false,
`ip_address` VARCHAR(45) NULL,
`user_agent` VARCHAR(255) NULL,
`created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
UNIQUE INDEX `token_hash`(`token_hash`),
INDEX `idx_refresh_tokens_expires_at`(`expires_at`),
INDEX `idx_refresh_tokens_user_exp`(`user_id`, `expires_at`),
INDEX `idx_refresh_tokens_user_id`(`user_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `role_permissions` (
`role_id` INTEGER NOT NULL,
`permission_id` INTEGER NOT NULL,
INDEX `permission_id`(`permission_id`),
PRIMARY KEY (`role_id`, `permission_id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `roles` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`display_name` VARCHAR(100) NOT NULL,
`description` TEXT NULL,
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`updated_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
UNIQUE INDEX `name`(`name`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `scope_sections` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`quotation_id` INTEGER NOT NULL,
`position` INTEGER NULL DEFAULT 0,
`title` VARCHAR(500) NULL,
`title_cz` VARCHAR(500) NULL,
`content` TEXT NULL,
`content_editor_height` INTEGER NULL,
`uuid` VARCHAR(36) NULL,
`modified_at` DATETIME(0) NULL,
`is_deleted` BOOLEAN NULL DEFAULT false,
`sync_version` INTEGER NULL DEFAULT 0,
INDEX `quotation_id`(`quotation_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `scope_template_sections` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`scope_template_id` INTEGER NOT NULL,
`position` INTEGER NULL DEFAULT 0,
`title` VARCHAR(500) NULL,
`title_cz` VARCHAR(500) NULL,
`content` TEXT NULL,
`uuid` VARCHAR(36) NULL,
`modified_at` DATETIME(0) NULL,
`is_deleted` BOOLEAN NULL DEFAULT false,
`sync_version` INTEGER NULL DEFAULT 0,
INDEX `scope_template_id`(`scope_template_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `scope_templates` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL,
`title` VARCHAR(500) NULL,
`description` TEXT NULL,
`uuid` VARCHAR(36) NULL,
`modified_at` DATETIME(0) NULL,
`is_deleted` BOOLEAN NULL DEFAULT false,
`sync_version` INTEGER NULL DEFAULT 0,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `totp_login_tokens` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`user_id` INTEGER NOT NULL,
`token_hash` VARCHAR(64) NOT NULL,
`expires_at` DATETIME(0) NOT NULL,
`created_at` DATETIME(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
INDEX `idx_expires`(`expires_at`),
INDEX `idx_totp_login_tokens_hash`(`token_hash`),
INDEX `idx_user_id`(`user_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `trips` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`vehicle_id` INTEGER NOT NULL,
`user_id` INTEGER NOT NULL,
`trip_date` DATE NOT NULL,
`start_km` INTEGER NOT NULL,
`end_km` INTEGER NOT NULL,
`distance` INTEGER NULL,
`route_from` VARCHAR(100) NOT NULL,
`route_to` VARCHAR(100) NOT NULL,
`is_business` BOOLEAN NOT NULL DEFAULT true,
`notes` TEXT NULL,
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`updated_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
INDEX `trip_date`(`trip_date`),
INDEX `user_id`(`user_id`),
INDEX `vehicle_id`(`vehicle_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `users` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`password_hash` VARCHAR(255) NOT NULL,
`first_name` VARCHAR(50) NOT NULL,
`last_name` VARCHAR(50) NOT NULL,
`role_id` INTEGER NULL,
`is_active` BOOLEAN NULL DEFAULT true,
`last_login` TIMESTAMP(0) NULL,
`failed_login_attempts` INTEGER NULL DEFAULT 0,
`locked_until` TIMESTAMP(0) NULL,
`password_changed_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`updated_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`totp_secret` VARCHAR(255) NULL,
`totp_enabled` BOOLEAN NOT NULL DEFAULT false,
`totp_backup_codes` TEXT NULL,
UNIQUE INDEX `username`(`username`),
UNIQUE INDEX `email`(`email`),
INDEX `idx_users_is_active`(`is_active`),
INDEX `idx_users_role_id`(`role_id`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `vehicles` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`spz` VARCHAR(20) NOT NULL,
`name` VARCHAR(100) NOT NULL,
`brand` VARCHAR(50) NULL,
`model` VARCHAR(50) NULL,
`initial_km` INTEGER NOT NULL DEFAULT 0,
`actual_km` INTEGER NOT NULL DEFAULT 0,
`is_active` BOOLEAN NOT NULL DEFAULT true,
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
`updated_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
UNIQUE INDEX `spz`(`spz`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AddForeignKey
ALTER TABLE `attendance` ADD CONSTRAINT `attendance_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `attendance_project_logs` ADD CONSTRAINT `attendance_project_logs_attendance_id_fkey` FOREIGN KEY (`attendance_id`) REFERENCES `attendance`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `invoice_items` ADD CONSTRAINT `invoice_items_ibfk_1` FOREIGN KEY (`invoice_id`) REFERENCES `invoices`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `invoices` ADD CONSTRAINT `invoices_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `invoices` ADD CONSTRAINT `invoices_ibfk_2` FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `leave_balances` ADD CONSTRAINT `leave_balances_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `leave_requests` ADD CONSTRAINT `leave_requests_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `leave_requests` ADD CONSTRAINT `leave_requests_ibfk_2` FOREIGN KEY (`reviewer_id`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `order_items` ADD CONSTRAINT `order_items_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `order_sections` ADD CONSTRAINT `order_sections_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `orders` ADD CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`quotation_id`) REFERENCES `quotations`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `orders` ADD CONSTRAINT `orders_ibfk_2` FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `project_notes` ADD CONSTRAINT `project_notes_ibfk_1` FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `projects` ADD CONSTRAINT `fk_projects_responsible_user` FOREIGN KEY (`responsible_user_id`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `projects` ADD CONSTRAINT `projects_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `projects` ADD CONSTRAINT `projects_ibfk_2` FOREIGN KEY (`quotation_id`) REFERENCES `quotations`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `projects` ADD CONSTRAINT `projects_ibfk_3` FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `quotation_items` ADD CONSTRAINT `quotation_items_ibfk_1` FOREIGN KEY (`quotation_id`) REFERENCES `quotations`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `quotations` ADD CONSTRAINT `quotations_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `role_permissions` ADD CONSTRAINT `role_permissions_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `role_permissions` ADD CONSTRAINT `role_permissions_ibfk_2` FOREIGN KEY (`permission_id`) REFERENCES `permissions`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `scope_sections` ADD CONSTRAINT `scope_sections_ibfk_1` FOREIGN KEY (`quotation_id`) REFERENCES `quotations`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `scope_template_sections` ADD CONSTRAINT `scope_template_sections_ibfk_1` FOREIGN KEY (`scope_template_id`) REFERENCES `scope_templates`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `trips` ADD CONSTRAINT `trips_user_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `trips` ADD CONSTRAINT `trips_vehicle_fk` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE `users` ADD CONSTRAINT `users_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON DELETE SET NULL ON UPDATE NO ACTION;