From f6aff013f15acd9c87adc94fe3f8535404654e9c Mon Sep 17 00:00:00 2001
From: Ricardo Amorim <102877738+risixdzn@users.noreply.github.com>
Date: Wed, 27 May 2026 10:07:45 -0300
Subject: [PATCH 1/9] feat(DB): Setup makers + models + images schemas
---
.../db/drizzle/0006_curved_doctor_octopus.sql | 93 ++
packages/db/drizzle/meta/0006_snapshot.json | 1077 +++++++++++++++++
packages/db/drizzle/meta/_journal.json | 7 +
packages/db/package.json | 8 +-
packages/db/src/schema/categories.ts | 15 +
packages/db/src/schema/index.ts | 1 +
packages/db/src/schema/makers.ts | 22 +
packages/db/src/schema/model-images.ts | 32 +
packages/db/src/schema/models.ts | 96 ++
9 files changed, 1347 insertions(+), 4 deletions(-)
create mode 100644 packages/db/drizzle/0006_curved_doctor_octopus.sql
create mode 100644 packages/db/drizzle/meta/0006_snapshot.json
create mode 100644 packages/db/src/schema/categories.ts
create mode 100644 packages/db/src/schema/makers.ts
create mode 100644 packages/db/src/schema/model-images.ts
create mode 100644 packages/db/src/schema/models.ts
diff --git a/packages/db/drizzle/0006_curved_doctor_octopus.sql b/packages/db/drizzle/0006_curved_doctor_octopus.sql
new file mode 100644
index 0000000..6333cb5
--- /dev/null
+++ b/packages/db/drizzle/0006_curved_doctor_octopus.sql
@@ -0,0 +1,93 @@
+CREATE TABLE `categories` (
+ `id` varchar(25) NOT NULL,
+ `name` varchar(100) NOT NULL,
+ `slug` varchar(100) NOT NULL,
+ CONSTRAINT `categories_id` PRIMARY KEY(`id`),
+ CONSTRAINT `categories_slug_unique` UNIQUE(`slug`)
+);
+--> statement-breakpoint
+CREATE TABLE `makers` (
+ `id` varchar(25) NOT NULL,
+ `name` varchar(100) NOT NULL,
+ `slug` varchar(100) NOT NULL,
+ `url` varchar(255) NOT NULL,
+ `device_count` int NOT NULL DEFAULT 0,
+ `page_count` int,
+ `created_at` timestamp NOT NULL DEFAULT (now()),
+ CONSTRAINT `makers_id` PRIMARY KEY(`id`),
+ CONSTRAINT `makers_slug_unique` UNIQUE(`slug`)
+);
+--> statement-breakpoint
+CREATE TABLE `model_images` (
+ `id` varchar(25) NOT NULL,
+ `model_id` varchar(25) NOT NULL,
+ `original_url` varchar(255),
+ `r2_key` varchar(255),
+ `is_primary` boolean NOT NULL DEFAULT false,
+ `variant` varchar(50),
+ `position` int NOT NULL DEFAULT 0,
+ `created_at` timestamp NOT NULL DEFAULT (now()),
+ CONSTRAINT `model_images_id` PRIMARY KEY(`id`)
+);
+--> statement-breakpoint
+CREATE TABLE `models` (
+ `id` varchar(25) NOT NULL,
+ `maker_id` varchar(25) NOT NULL,
+ `name` varchar(255) NOT NULL,
+ `slug` varchar(100) NOT NULL,
+ `url` varchar(255) NOT NULL,
+ `image_url` varchar(255),
+ `image_local_path` varchar(255),
+ `category_id` varchar(25),
+ `announced` varchar(100),
+ `status` varchar(100),
+ `dimensions` varchar(255),
+ `weight` varchar(100),
+ `build` varchar(255),
+ `sim` varchar(100),
+ `display_type` varchar(255),
+ `display_size` varchar(100),
+ `display_resolution` varchar(100),
+ `display_protection` varchar(100),
+ `os` varchar(255),
+ `chipset` varchar(255),
+ `cpu` varchar(255),
+ `gpu` varchar(255),
+ `card_slot` varchar(255),
+ `internal_memory` varchar(255),
+ `main_camera` varchar(255),
+ `main_camera_features` text,
+ `main_camera_video` varchar(255),
+ `selfie_camera` varchar(255),
+ `selfie_features` text,
+ `selfie_video` varchar(255),
+ `battery` varchar(255),
+ `battery_charging` varchar(255),
+ `network_tech` varchar(255),
+ `sensors` varchar(255),
+ `colors` varchar(255),
+ `colors_hex` text,
+ `models_text` varchar(255),
+ `price` varchar(100),
+ `dimensions_width` float,
+ `dimensions_height` float,
+ `dimensions_thickness` float,
+ `weight_grams` float,
+ `display_size_inches` float,
+ `display_size_ratio` varchar(100),
+ `display_res_width` int,
+ `display_res_height` int,
+ `display_res_ppi` int,
+ `released` varchar(100),
+ `meta` text,
+ `company_id` varchar(25),
+ `created_at` timestamp NOT NULL DEFAULT (now()),
+ CONSTRAINT `models_id` PRIMARY KEY(`id`),
+ CONSTRAINT `slug_company_unique` UNIQUE(`slug`,`company_id`)
+);
+--> statement-breakpoint
+ALTER TABLE `employees` MODIFY COLUMN `roles` enum('guest','technician','warehouse','financial','manager','admin') NOT NULL;--> statement-breakpoint
+ALTER TABLE `model_images` ADD CONSTRAINT `model_images_model_id_models_id_fk` FOREIGN KEY (`model_id`) REFERENCES `models`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `models` ADD CONSTRAINT `models_maker_id_makers_id_fk` FOREIGN KEY (`maker_id`) REFERENCES `makers`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `models` ADD CONSTRAINT `models_category_id_categories_id_fk` FOREIGN KEY (`category_id`) REFERENCES `categories`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `models` ADD CONSTRAINT `models_company_id_companies_id_fk` FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE no action ON UPDATE no action;
\ No newline at end of file
diff --git a/packages/db/drizzle/meta/0006_snapshot.json b/packages/db/drizzle/meta/0006_snapshot.json
new file mode 100644
index 0000000..22338db
--- /dev/null
+++ b/packages/db/drizzle/meta/0006_snapshot.json
@@ -0,0 +1,1077 @@
+{
+ "version": "5",
+ "dialect": "mysql",
+ "id": "469411a6-c473-42e2-89d1-da5d3e144652",
+ "prevId": "96fef0d8-3c1e-4d2f-990d-625797fa1861",
+ "tables": {
+ "categories": {
+ "name": "categories",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "categories_id": {
+ "name": "categories_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "categories_slug_unique": {
+ "name": "categories_slug_unique",
+ "columns": ["slug"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "clients": {
+ "name": "clients",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cpf": {
+ "name": "cpf",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "phone": {
+ "name": "phone",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "clients_user_id_users_id_fk": {
+ "name": "clients_user_id_users_id_fk",
+ "tableFrom": "clients",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "clients_id": {
+ "name": "clients_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "clients_cpf_unique": {
+ "name": "clients_cpf_unique",
+ "columns": ["cpf"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "companies": {
+ "name": "companies",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cnpj": {
+ "name": "cnpj",
+ "type": "varchar(14)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "address": {
+ "name": "address",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "subdomain": {
+ "name": "subdomain",
+ "type": "varchar(32)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "companies_id": {
+ "name": "companies_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "companies_cnpj_unique": {
+ "name": "companies_cnpj_unique",
+ "columns": ["cnpj"]
+ },
+ "companies_subdomain_unique": {
+ "name": "companies_subdomain_unique",
+ "columns": ["subdomain"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "employees": {
+ "name": "employees",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cpf": {
+ "name": "cpf",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "phone": {
+ "name": "phone",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "roles": {
+ "name": "roles",
+ "type": "enum('guest','technician','warehouse','financial','manager','admin')",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "employees_user_id_users_id_fk": {
+ "name": "employees_user_id_users_id_fk",
+ "tableFrom": "employees",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "employees_company_id_companies_id_fk": {
+ "name": "employees_company_id_companies_id_fk",
+ "tableFrom": "employees",
+ "tableTo": "companies",
+ "columnsFrom": ["company_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "employees_id": {
+ "name": "employees_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "employees_cpf_unique": {
+ "name": "employees_cpf_unique",
+ "columns": ["cpf"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "makers": {
+ "name": "makers",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "device_count": {
+ "name": "device_count",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "page_count": {
+ "name": "page_count",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "makers_id": {
+ "name": "makers_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "makers_slug_unique": {
+ "name": "makers_slug_unique",
+ "columns": ["slug"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "model_images": {
+ "name": "model_images",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "model_id": {
+ "name": "model_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "original_url": {
+ "name": "original_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "r2_key": {
+ "name": "r2_key",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "is_primary": {
+ "name": "is_primary",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ },
+ "variant": {
+ "name": "variant",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "position": {
+ "name": "position",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "model_images_model_id_models_id_fk": {
+ "name": "model_images_model_id_models_id_fk",
+ "tableFrom": "model_images",
+ "tableTo": "models",
+ "columnsFrom": ["model_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "model_images_id": {
+ "name": "model_images_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "models": {
+ "name": "models",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "maker_id": {
+ "name": "maker_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "image_url": {
+ "name": "image_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "image_local_path": {
+ "name": "image_local_path",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "category_id": {
+ "name": "category_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "announced": {
+ "name": "announced",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions": {
+ "name": "dimensions",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "weight": {
+ "name": "weight",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "build": {
+ "name": "build",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "sim": {
+ "name": "sim",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_type": {
+ "name": "display_type",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_size": {
+ "name": "display_size",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_resolution": {
+ "name": "display_resolution",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_protection": {
+ "name": "display_protection",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "os": {
+ "name": "os",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "chipset": {
+ "name": "chipset",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "cpu": {
+ "name": "cpu",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "gpu": {
+ "name": "gpu",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "card_slot": {
+ "name": "card_slot",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "internal_memory": {
+ "name": "internal_memory",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "main_camera": {
+ "name": "main_camera",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "main_camera_features": {
+ "name": "main_camera_features",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "main_camera_video": {
+ "name": "main_camera_video",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "selfie_camera": {
+ "name": "selfie_camera",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "selfie_features": {
+ "name": "selfie_features",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "selfie_video": {
+ "name": "selfie_video",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "battery": {
+ "name": "battery",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "battery_charging": {
+ "name": "battery_charging",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "network_tech": {
+ "name": "network_tech",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "sensors": {
+ "name": "sensors",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "colors": {
+ "name": "colors",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "colors_hex": {
+ "name": "colors_hex",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "models_text": {
+ "name": "models_text",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "price": {
+ "name": "price",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions_width": {
+ "name": "dimensions_width",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions_height": {
+ "name": "dimensions_height",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions_thickness": {
+ "name": "dimensions_thickness",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "weight_grams": {
+ "name": "weight_grams",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_size_inches": {
+ "name": "display_size_inches",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_size_ratio": {
+ "name": "display_size_ratio",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_res_width": {
+ "name": "display_res_width",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_res_height": {
+ "name": "display_res_height",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_res_ppi": {
+ "name": "display_res_ppi",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "released": {
+ "name": "released",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "meta": {
+ "name": "meta",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "models_maker_id_makers_id_fk": {
+ "name": "models_maker_id_makers_id_fk",
+ "tableFrom": "models",
+ "tableTo": "makers",
+ "columnsFrom": ["maker_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "models_category_id_categories_id_fk": {
+ "name": "models_category_id_categories_id_fk",
+ "tableFrom": "models",
+ "tableTo": "categories",
+ "columnsFrom": ["category_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "models_company_id_companies_id_fk": {
+ "name": "models_company_id_companies_id_fk",
+ "tableFrom": "models",
+ "tableTo": "companies",
+ "columnsFrom": ["company_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "models_id": {
+ "name": "models_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "slug_company_unique": {
+ "name": "slug_company_unique",
+ "columns": ["slug", "company_id"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "one_time_tokens": {
+ "name": "one_time_tokens",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "ott_type": {
+ "name": "ott_type",
+ "type": "enum('confirmation','password_reset','account_deletion')",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "relates_to": {
+ "name": "relates_to",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "one_time_tokens_user_id_users_id_fk": {
+ "name": "one_time_tokens_user_id_users_id_fk",
+ "tableFrom": "one_time_tokens",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "one_time_tokens_id": {
+ "name": "one_time_tokens_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "one_time_tokens_token_unique": {
+ "name": "one_time_tokens_token_unique",
+ "columns": ["token"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "refresh_tokens": {
+ "name": "refresh_tokens",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "refresh_tokens_user_id_users_id_fk": {
+ "name": "refresh_tokens_user_id_users_id_fk",
+ "tableFrom": "refresh_tokens",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "refresh_tokens_id": {
+ "name": "refresh_tokens_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "refresh_tokens_token_unique": {
+ "name": "refresh_tokens_token_unique",
+ "columns": ["token"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "users": {
+ "name": "users",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "email": {
+ "name": "email",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "password_hash": {
+ "name": "password_hash",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "google_id": {
+ "name": "google_id",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "avatar_url": {
+ "name": "avatar_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "verified": {
+ "name": "verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "users_id": {
+ "name": "users_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "users_email_unique": {
+ "name": "users_email_unique",
+ "columns": ["email"]
+ },
+ "users_google_id_unique": {
+ "name": "users_google_id_unique",
+ "columns": ["google_id"]
+ }
+ },
+ "checkConstraint": {}
+ }
+ },
+ "views": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "tables": {},
+ "indexes": {}
+ }
+}
diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json
index 6e81e16..bee8bc9 100644
--- a/packages/db/drizzle/meta/_journal.json
+++ b/packages/db/drizzle/meta/_journal.json
@@ -43,6 +43,13 @@
"when": 1760755210443,
"tag": "0005_faulty_mandarin",
"breakpoints": true
+ },
+ {
+ "idx": 6,
+ "version": "5",
+ "when": 1779887155497,
+ "tag": "0006_curved_doctor_octopus",
+ "breakpoints": true
}
]
}
diff --git a/packages/db/package.json b/packages/db/package.json
index abdebb7..1bf2c94 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -4,10 +4,10 @@
"type": "module",
"private": true,
"scripts": {
- "db:push": "dotenv -- drizzle-kit push",
- "db:generate": "dotenv -- drizzle-kit generate",
- "db:studio": "dotenv -- drizzle-kit studio",
- "db:migrate": "dotenv -- tsx src/migrate.ts",
+ "db:push": "bunx --bun drizzle-kit push",
+ "db:generate": "bunx --bun drizzle-kit generate",
+ "db:studio": "bunx --bun drizzle-kit studio",
+ "db:migrate": "bunx --bun tsx src/migrate.ts",
"db:start": "docker compose up -d",
"db:watch": "docker compose up",
"db:stop": "docker compose stop",
diff --git a/packages/db/src/schema/categories.ts b/packages/db/src/schema/categories.ts
new file mode 100644
index 0000000..49480d0
--- /dev/null
+++ b/packages/db/src/schema/categories.ts
@@ -0,0 +1,15 @@
+import { createId } from "@paralleldrive/cuid2";
+import { mysqlTable, varchar } from "drizzle-orm/mysql-core";
+import { createSelectSchema } from "drizzle-zod";
+
+export const categories = mysqlTable("categories", {
+ id: varchar("id", { length: 25 })
+ .$defaultFn(() => createId())
+ .primaryKey(),
+ name: varchar("name", { length: 100 }).notNull(),
+ slug: varchar("slug", { length: 100 }).unique().notNull(),
+});
+
+export const categorySelectSchema = createSelectSchema(categories);
+export type CategoryInsert = typeof categories.$inferInsert;
+export type CategorySelect = typeof categories.$inferSelect;
diff --git a/packages/db/src/schema/index.ts b/packages/db/src/schema/index.ts
index 4cbaa08..a3877c5 100644
--- a/packages/db/src/schema/index.ts
+++ b/packages/db/src/schema/index.ts
@@ -1,3 +1,4 @@
+export * from "./categories";
export * from "./clients";
export * from "./companies";
export * from "./employees";
diff --git a/packages/db/src/schema/makers.ts b/packages/db/src/schema/makers.ts
new file mode 100644
index 0000000..d9178a6
--- /dev/null
+++ b/packages/db/src/schema/makers.ts
@@ -0,0 +1,22 @@
+import { createId } from "@paralleldrive/cuid2";
+import { int, mysqlTable, timestamp, varchar } from "drizzle-orm/mysql-core";
+import { createSelectSchema } from "drizzle-zod";
+import { z } from "zod";
+
+export const makers = mysqlTable("makers", {
+ id: varchar("id", { length: 25 })
+ .$defaultFn(() => createId())
+ .primaryKey(),
+ name: varchar("name", { length: 100 }).notNull(),
+ slug: varchar("slug", { length: 100 }).unique().notNull(),
+ url: varchar("url", { length: 255 }).notNull(),
+ deviceCount: int("device_count").notNull().default(0),
+ pageCount: int("page_count"),
+ createdAt: timestamp("created_at").defaultNow().notNull(),
+});
+
+export const makerSelectSchema = createSelectSchema(makers, {
+ createdAt: z.coerce.date(),
+});
+export type MakerInsert = typeof makers.$inferInsert;
+export type MakerSelect = typeof makers.$inferSelect;
diff --git a/packages/db/src/schema/model-images.ts b/packages/db/src/schema/model-images.ts
new file mode 100644
index 0000000..6636c66
--- /dev/null
+++ b/packages/db/src/schema/model-images.ts
@@ -0,0 +1,32 @@
+import { createId } from "@paralleldrive/cuid2";
+import {
+ boolean,
+ int,
+ mysqlTable,
+ timestamp,
+ varchar,
+} from "drizzle-orm/mysql-core";
+import { createSelectSchema } from "drizzle-zod";
+import { z } from "zod";
+import { models } from "./models";
+
+export const modelImages = mysqlTable("model_images", {
+ id: varchar("id", { length: 25 })
+ .$defaultFn(() => createId())
+ .primaryKey(),
+ modelId: varchar("model_id", { length: 25 })
+ .notNull()
+ .references(() => models.id),
+ originalUrl: varchar("original_url", { length: 255 }),
+ r2Key: varchar("r2_key", { length: 255 }),
+ isPrimary: boolean("is_primary").notNull().default(false),
+ variant: varchar("variant", { length: 50 }),
+ position: int("position").notNull().default(0),
+ createdAt: timestamp("created_at").defaultNow().notNull(),
+});
+
+export const modelImageSelectSchema = createSelectSchema(modelImages, {
+ createdAt: z.coerce.date(),
+});
+export type ModelImageInsert = typeof modelImages.$inferInsert;
+export type ModelImageSelect = typeof modelImages.$inferSelect;
diff --git a/packages/db/src/schema/models.ts b/packages/db/src/schema/models.ts
new file mode 100644
index 0000000..6cca532
--- /dev/null
+++ b/packages/db/src/schema/models.ts
@@ -0,0 +1,96 @@
+import { createId } from "@paralleldrive/cuid2";
+import {
+ float,
+ int,
+ mysqlTable,
+ text,
+ timestamp,
+ unique,
+ varchar,
+} from "drizzle-orm/mysql-core";
+import { createSelectSchema } from "drizzle-zod";
+import { z } from "zod";
+import { categories } from "./categories";
+import { companies } from "./companies";
+import { makers } from "./makers";
+
+export const models = mysqlTable(
+ "models",
+ {
+ id: varchar("id", { length: 25 })
+ .$defaultFn(() => createId())
+ .primaryKey(),
+ makerId: varchar("maker_id", { length: 25 })
+ .notNull()
+ .references(() => makers.id),
+ name: varchar("name", { length: 255 }).notNull(),
+ slug: varchar("slug", { length: 100 }).notNull(),
+ url: varchar("url", { length: 255 }).notNull(),
+ imageUrl: varchar("image_url", { length: 255 }),
+ imageLocalPath: varchar("image_local_path", { length: 255 }),
+
+ categoryId: varchar("category_id", { length: 25 }).references(
+ () => categories.id
+ ),
+
+ announced: varchar("announced", { length: 100 }),
+ status: varchar("status", { length: 100 }),
+ dimensions: varchar("dimensions", { length: 255 }),
+ weight: varchar("weight", { length: 100 }),
+ build: varchar("build", { length: 255 }),
+ sim: varchar("sim", { length: 100 }),
+ displayType: varchar("display_type", { length: 255 }),
+ displaySize: varchar("display_size", { length: 100 }),
+ displayResolution: varchar("display_resolution", { length: 100 }),
+ displayProtection: varchar("display_protection", { length: 100 }),
+ os: varchar("os", { length: 255 }),
+ chipset: varchar("chipset", { length: 255 }),
+ cpu: varchar("cpu", { length: 255 }),
+ gpu: varchar("gpu", { length: 255 }),
+ cardSlot: varchar("card_slot", { length: 255 }),
+ internalMemory: varchar("internal_memory", { length: 255 }),
+ mainCamera: varchar("main_camera", { length: 255 }),
+ mainCameraFeatures: text("main_camera_features"),
+ mainCameraVideo: varchar("main_camera_video", { length: 255 }),
+ selfieCamera: varchar("selfie_camera", { length: 255 }),
+ selfieFeatures: text("selfie_features"),
+ selfieVideo: varchar("selfie_video", { length: 255 }),
+ battery: varchar("battery", { length: 255 }),
+ batteryCharging: varchar("battery_charging", { length: 255 }),
+ networkTech: varchar("network_tech", { length: 255 }),
+ sensors: varchar("sensors", { length: 255 }),
+ colors: varchar("colors", { length: 255 }),
+ colorsHex: text("colors_hex"),
+ modelsText: varchar("models_text", { length: 255 }),
+ price: varchar("price", { length: 100 }),
+ dimensionsWidth: float("dimensions_width"),
+ dimensionsHeight: float("dimensions_height"),
+ dimensionsThickness: float("dimensions_thickness"),
+ weightGrams: float("weight_grams"),
+ displaySizeInches: float("display_size_inches"),
+ displaySizeRatio: varchar("display_size_ratio", { length: 100 }),
+ displayResWidth: int("display_res_width"),
+ displayResHeight: int("display_res_height"),
+ displayResPpi: int("display_res_ppi"),
+ released: varchar("released", { length: 100 }),
+
+ meta: text("meta"),
+
+ companyId: varchar("company_id", { length: 25 }).references(
+ () => companies.id
+ ),
+ createdAt: timestamp("created_at").defaultNow().notNull(),
+ },
+ (table) => ({
+ slugCompanyUnique: unique("slug_company_unique").on(
+ table.slug,
+ table.companyId
+ ),
+ })
+);
+
+export const modelSelectSchema = createSelectSchema(models, {
+ createdAt: z.coerce.date(),
+});
+export type ModelInsert = typeof models.$inferInsert;
+export type ModelSelect = typeof models.$inferSelect;
From d72d887c5a1e1dc3a716e3317334761a33b085e4 Mon Sep 17 00:00:00 2001
From: Ricardo Amorim <102877738+risixdzn@users.noreply.github.com>
Date: Wed, 27 May 2026 10:34:46 -0300
Subject: [PATCH 2/9] refactor(DB): Compat column types to hold scraped data
---
package.json | 1 +
.../0007_powerful_mulholland_black.sql | 10 +
packages/db/drizzle/0008_dear_karnak.sql | 29 +
packages/db/drizzle/meta/0007_snapshot.json | 1077 +++++++++++++++++
packages/db/drizzle/meta/0008_snapshot.json | 1077 +++++++++++++++++
packages/db/drizzle/meta/_journal.json | 14 +
packages/db/package.json | 3 +-
packages/db/src/schema/models.ts | 58 +-
packages/db/tsconfig.json | 2 +-
9 files changed, 2240 insertions(+), 31 deletions(-)
create mode 100644 packages/db/drizzle/0007_powerful_mulholland_black.sql
create mode 100644 packages/db/drizzle/0008_dear_karnak.sql
create mode 100644 packages/db/drizzle/meta/0007_snapshot.json
create mode 100644 packages/db/drizzle/meta/0008_snapshot.json
diff --git a/package.json b/package.json
index 017ae81..e9bbae4 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"db:studio": "bun run --elide-lines 0 --filter @fixr/db db:studio",
"db:generate": "bun run --elide-lines 0 --filter @fixr/db db:generate",
"db:migrate": "bun run --elide-lines 0 --filter @fixr/db db:migrate",
+ "db:seed": "bun run --elide-lines 0 --filter @fixr/db db:seed",
"db:start": "bun run --elide-lines 0 --filter @fixr/db db:start",
"db:watch": "bun run --elide-lines 0 --filter @fixr/db db:watch",
"db:stop": "bun run --elide-lines 0 --filter @fixr/db db:stop",
diff --git a/packages/db/drizzle/0007_powerful_mulholland_black.sql b/packages/db/drizzle/0007_powerful_mulholland_black.sql
new file mode 100644
index 0000000..c24da9f
--- /dev/null
+++ b/packages/db/drizzle/0007_powerful_mulholland_black.sql
@@ -0,0 +1,10 @@
+ALTER TABLE `models` MODIFY COLUMN `announced` varchar(255);--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `status` varchar(255);--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `weight` varchar(255);--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `sim` varchar(255);--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `display_size` varchar(255);--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `display_resolution` varchar(255);--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `display_protection` varchar(255);--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `price` varchar(255);--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `display_size_ratio` varchar(255);--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `released` varchar(255);
\ No newline at end of file
diff --git a/packages/db/drizzle/0008_dear_karnak.sql b/packages/db/drizzle/0008_dear_karnak.sql
new file mode 100644
index 0000000..207642b
--- /dev/null
+++ b/packages/db/drizzle/0008_dear_karnak.sql
@@ -0,0 +1,29 @@
+ALTER TABLE `models` MODIFY COLUMN `announced` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `status` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `dimensions` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `weight` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `build` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `sim` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `display_type` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `display_size` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `display_resolution` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `display_protection` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `os` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `chipset` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `cpu` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `gpu` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `card_slot` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `internal_memory` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `main_camera` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `main_camera_video` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `selfie_camera` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `selfie_video` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `battery` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `battery_charging` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `network_tech` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `sensors` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `colors` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `models_text` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `price` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `display_size_ratio` text;--> statement-breakpoint
+ALTER TABLE `models` MODIFY COLUMN `released` text;
\ No newline at end of file
diff --git a/packages/db/drizzle/meta/0007_snapshot.json b/packages/db/drizzle/meta/0007_snapshot.json
new file mode 100644
index 0000000..7418b2a
--- /dev/null
+++ b/packages/db/drizzle/meta/0007_snapshot.json
@@ -0,0 +1,1077 @@
+{
+ "version": "5",
+ "dialect": "mysql",
+ "id": "46d97f25-6199-4c7a-ab20-1a0f9cb032f3",
+ "prevId": "469411a6-c473-42e2-89d1-da5d3e144652",
+ "tables": {
+ "categories": {
+ "name": "categories",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "categories_id": {
+ "name": "categories_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "categories_slug_unique": {
+ "name": "categories_slug_unique",
+ "columns": ["slug"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "clients": {
+ "name": "clients",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cpf": {
+ "name": "cpf",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "phone": {
+ "name": "phone",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "clients_user_id_users_id_fk": {
+ "name": "clients_user_id_users_id_fk",
+ "tableFrom": "clients",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "clients_id": {
+ "name": "clients_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "clients_cpf_unique": {
+ "name": "clients_cpf_unique",
+ "columns": ["cpf"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "companies": {
+ "name": "companies",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cnpj": {
+ "name": "cnpj",
+ "type": "varchar(14)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "address": {
+ "name": "address",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "subdomain": {
+ "name": "subdomain",
+ "type": "varchar(32)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "companies_id": {
+ "name": "companies_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "companies_cnpj_unique": {
+ "name": "companies_cnpj_unique",
+ "columns": ["cnpj"]
+ },
+ "companies_subdomain_unique": {
+ "name": "companies_subdomain_unique",
+ "columns": ["subdomain"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "employees": {
+ "name": "employees",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cpf": {
+ "name": "cpf",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "phone": {
+ "name": "phone",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "roles": {
+ "name": "roles",
+ "type": "enum('guest','technician','warehouse','financial','manager','admin')",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "employees_user_id_users_id_fk": {
+ "name": "employees_user_id_users_id_fk",
+ "tableFrom": "employees",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "employees_company_id_companies_id_fk": {
+ "name": "employees_company_id_companies_id_fk",
+ "tableFrom": "employees",
+ "tableTo": "companies",
+ "columnsFrom": ["company_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "employees_id": {
+ "name": "employees_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "employees_cpf_unique": {
+ "name": "employees_cpf_unique",
+ "columns": ["cpf"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "makers": {
+ "name": "makers",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "device_count": {
+ "name": "device_count",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "page_count": {
+ "name": "page_count",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "makers_id": {
+ "name": "makers_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "makers_slug_unique": {
+ "name": "makers_slug_unique",
+ "columns": ["slug"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "model_images": {
+ "name": "model_images",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "model_id": {
+ "name": "model_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "original_url": {
+ "name": "original_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "r2_key": {
+ "name": "r2_key",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "is_primary": {
+ "name": "is_primary",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ },
+ "variant": {
+ "name": "variant",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "position": {
+ "name": "position",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "model_images_model_id_models_id_fk": {
+ "name": "model_images_model_id_models_id_fk",
+ "tableFrom": "model_images",
+ "tableTo": "models",
+ "columnsFrom": ["model_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "model_images_id": {
+ "name": "model_images_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "models": {
+ "name": "models",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "maker_id": {
+ "name": "maker_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "image_url": {
+ "name": "image_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "image_local_path": {
+ "name": "image_local_path",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "category_id": {
+ "name": "category_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "announced": {
+ "name": "announced",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions": {
+ "name": "dimensions",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "weight": {
+ "name": "weight",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "build": {
+ "name": "build",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "sim": {
+ "name": "sim",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_type": {
+ "name": "display_type",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_size": {
+ "name": "display_size",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_resolution": {
+ "name": "display_resolution",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_protection": {
+ "name": "display_protection",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "os": {
+ "name": "os",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "chipset": {
+ "name": "chipset",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "cpu": {
+ "name": "cpu",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "gpu": {
+ "name": "gpu",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "card_slot": {
+ "name": "card_slot",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "internal_memory": {
+ "name": "internal_memory",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "main_camera": {
+ "name": "main_camera",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "main_camera_features": {
+ "name": "main_camera_features",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "main_camera_video": {
+ "name": "main_camera_video",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "selfie_camera": {
+ "name": "selfie_camera",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "selfie_features": {
+ "name": "selfie_features",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "selfie_video": {
+ "name": "selfie_video",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "battery": {
+ "name": "battery",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "battery_charging": {
+ "name": "battery_charging",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "network_tech": {
+ "name": "network_tech",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "sensors": {
+ "name": "sensors",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "colors": {
+ "name": "colors",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "colors_hex": {
+ "name": "colors_hex",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "models_text": {
+ "name": "models_text",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "price": {
+ "name": "price",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions_width": {
+ "name": "dimensions_width",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions_height": {
+ "name": "dimensions_height",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions_thickness": {
+ "name": "dimensions_thickness",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "weight_grams": {
+ "name": "weight_grams",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_size_inches": {
+ "name": "display_size_inches",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_size_ratio": {
+ "name": "display_size_ratio",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_res_width": {
+ "name": "display_res_width",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_res_height": {
+ "name": "display_res_height",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_res_ppi": {
+ "name": "display_res_ppi",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "released": {
+ "name": "released",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "meta": {
+ "name": "meta",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "models_maker_id_makers_id_fk": {
+ "name": "models_maker_id_makers_id_fk",
+ "tableFrom": "models",
+ "tableTo": "makers",
+ "columnsFrom": ["maker_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "models_category_id_categories_id_fk": {
+ "name": "models_category_id_categories_id_fk",
+ "tableFrom": "models",
+ "tableTo": "categories",
+ "columnsFrom": ["category_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "models_company_id_companies_id_fk": {
+ "name": "models_company_id_companies_id_fk",
+ "tableFrom": "models",
+ "tableTo": "companies",
+ "columnsFrom": ["company_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "models_id": {
+ "name": "models_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "slug_company_unique": {
+ "name": "slug_company_unique",
+ "columns": ["slug", "company_id"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "one_time_tokens": {
+ "name": "one_time_tokens",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "ott_type": {
+ "name": "ott_type",
+ "type": "enum('confirmation','password_reset','account_deletion')",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "relates_to": {
+ "name": "relates_to",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "one_time_tokens_user_id_users_id_fk": {
+ "name": "one_time_tokens_user_id_users_id_fk",
+ "tableFrom": "one_time_tokens",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "one_time_tokens_id": {
+ "name": "one_time_tokens_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "one_time_tokens_token_unique": {
+ "name": "one_time_tokens_token_unique",
+ "columns": ["token"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "refresh_tokens": {
+ "name": "refresh_tokens",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "refresh_tokens_user_id_users_id_fk": {
+ "name": "refresh_tokens_user_id_users_id_fk",
+ "tableFrom": "refresh_tokens",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "refresh_tokens_id": {
+ "name": "refresh_tokens_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "refresh_tokens_token_unique": {
+ "name": "refresh_tokens_token_unique",
+ "columns": ["token"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "users": {
+ "name": "users",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "email": {
+ "name": "email",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "password_hash": {
+ "name": "password_hash",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "google_id": {
+ "name": "google_id",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "avatar_url": {
+ "name": "avatar_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "verified": {
+ "name": "verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "users_id": {
+ "name": "users_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "users_email_unique": {
+ "name": "users_email_unique",
+ "columns": ["email"]
+ },
+ "users_google_id_unique": {
+ "name": "users_google_id_unique",
+ "columns": ["google_id"]
+ }
+ },
+ "checkConstraint": {}
+ }
+ },
+ "views": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "tables": {},
+ "indexes": {}
+ }
+}
diff --git a/packages/db/drizzle/meta/0008_snapshot.json b/packages/db/drizzle/meta/0008_snapshot.json
new file mode 100644
index 0000000..95d4b19
--- /dev/null
+++ b/packages/db/drizzle/meta/0008_snapshot.json
@@ -0,0 +1,1077 @@
+{
+ "version": "5",
+ "dialect": "mysql",
+ "id": "c6166889-3f02-4a1b-8963-5bd45d4efba5",
+ "prevId": "46d97f25-6199-4c7a-ab20-1a0f9cb032f3",
+ "tables": {
+ "categories": {
+ "name": "categories",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "categories_id": {
+ "name": "categories_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "categories_slug_unique": {
+ "name": "categories_slug_unique",
+ "columns": ["slug"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "clients": {
+ "name": "clients",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cpf": {
+ "name": "cpf",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "phone": {
+ "name": "phone",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "clients_user_id_users_id_fk": {
+ "name": "clients_user_id_users_id_fk",
+ "tableFrom": "clients",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "clients_id": {
+ "name": "clients_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "clients_cpf_unique": {
+ "name": "clients_cpf_unique",
+ "columns": ["cpf"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "companies": {
+ "name": "companies",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cnpj": {
+ "name": "cnpj",
+ "type": "varchar(14)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "address": {
+ "name": "address",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "subdomain": {
+ "name": "subdomain",
+ "type": "varchar(32)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "companies_id": {
+ "name": "companies_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "companies_cnpj_unique": {
+ "name": "companies_cnpj_unique",
+ "columns": ["cnpj"]
+ },
+ "companies_subdomain_unique": {
+ "name": "companies_subdomain_unique",
+ "columns": ["subdomain"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "employees": {
+ "name": "employees",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cpf": {
+ "name": "cpf",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "phone": {
+ "name": "phone",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "roles": {
+ "name": "roles",
+ "type": "enum('guest','technician','warehouse','financial','manager','admin')",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "employees_user_id_users_id_fk": {
+ "name": "employees_user_id_users_id_fk",
+ "tableFrom": "employees",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "employees_company_id_companies_id_fk": {
+ "name": "employees_company_id_companies_id_fk",
+ "tableFrom": "employees",
+ "tableTo": "companies",
+ "columnsFrom": ["company_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "employees_id": {
+ "name": "employees_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "employees_cpf_unique": {
+ "name": "employees_cpf_unique",
+ "columns": ["cpf"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "makers": {
+ "name": "makers",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "device_count": {
+ "name": "device_count",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "page_count": {
+ "name": "page_count",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "makers_id": {
+ "name": "makers_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "makers_slug_unique": {
+ "name": "makers_slug_unique",
+ "columns": ["slug"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "model_images": {
+ "name": "model_images",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "model_id": {
+ "name": "model_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "original_url": {
+ "name": "original_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "r2_key": {
+ "name": "r2_key",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "is_primary": {
+ "name": "is_primary",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ },
+ "variant": {
+ "name": "variant",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "position": {
+ "name": "position",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "model_images_model_id_models_id_fk": {
+ "name": "model_images_model_id_models_id_fk",
+ "tableFrom": "model_images",
+ "tableTo": "models",
+ "columnsFrom": ["model_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "model_images_id": {
+ "name": "model_images_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "models": {
+ "name": "models",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "maker_id": {
+ "name": "maker_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "image_url": {
+ "name": "image_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "image_local_path": {
+ "name": "image_local_path",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "category_id": {
+ "name": "category_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "announced": {
+ "name": "announced",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions": {
+ "name": "dimensions",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "weight": {
+ "name": "weight",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "build": {
+ "name": "build",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "sim": {
+ "name": "sim",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_type": {
+ "name": "display_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_size": {
+ "name": "display_size",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_resolution": {
+ "name": "display_resolution",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_protection": {
+ "name": "display_protection",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "os": {
+ "name": "os",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "chipset": {
+ "name": "chipset",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "cpu": {
+ "name": "cpu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "gpu": {
+ "name": "gpu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "card_slot": {
+ "name": "card_slot",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "internal_memory": {
+ "name": "internal_memory",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "main_camera": {
+ "name": "main_camera",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "main_camera_features": {
+ "name": "main_camera_features",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "main_camera_video": {
+ "name": "main_camera_video",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "selfie_camera": {
+ "name": "selfie_camera",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "selfie_features": {
+ "name": "selfie_features",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "selfie_video": {
+ "name": "selfie_video",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "battery": {
+ "name": "battery",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "battery_charging": {
+ "name": "battery_charging",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "network_tech": {
+ "name": "network_tech",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "sensors": {
+ "name": "sensors",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "colors": {
+ "name": "colors",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "colors_hex": {
+ "name": "colors_hex",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "models_text": {
+ "name": "models_text",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "price": {
+ "name": "price",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions_width": {
+ "name": "dimensions_width",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions_height": {
+ "name": "dimensions_height",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "dimensions_thickness": {
+ "name": "dimensions_thickness",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "weight_grams": {
+ "name": "weight_grams",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_size_inches": {
+ "name": "display_size_inches",
+ "type": "float",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_size_ratio": {
+ "name": "display_size_ratio",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_res_width": {
+ "name": "display_res_width",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_res_height": {
+ "name": "display_res_height",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "display_res_ppi": {
+ "name": "display_res_ppi",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "released": {
+ "name": "released",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "meta": {
+ "name": "meta",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "models_maker_id_makers_id_fk": {
+ "name": "models_maker_id_makers_id_fk",
+ "tableFrom": "models",
+ "tableTo": "makers",
+ "columnsFrom": ["maker_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "models_category_id_categories_id_fk": {
+ "name": "models_category_id_categories_id_fk",
+ "tableFrom": "models",
+ "tableTo": "categories",
+ "columnsFrom": ["category_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "models_company_id_companies_id_fk": {
+ "name": "models_company_id_companies_id_fk",
+ "tableFrom": "models",
+ "tableTo": "companies",
+ "columnsFrom": ["company_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "models_id": {
+ "name": "models_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "slug_company_unique": {
+ "name": "slug_company_unique",
+ "columns": ["slug", "company_id"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "one_time_tokens": {
+ "name": "one_time_tokens",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "ott_type": {
+ "name": "ott_type",
+ "type": "enum('confirmation','password_reset','account_deletion')",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "relates_to": {
+ "name": "relates_to",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "one_time_tokens_user_id_users_id_fk": {
+ "name": "one_time_tokens_user_id_users_id_fk",
+ "tableFrom": "one_time_tokens",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "one_time_tokens_id": {
+ "name": "one_time_tokens_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "one_time_tokens_token_unique": {
+ "name": "one_time_tokens_token_unique",
+ "columns": ["token"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "refresh_tokens": {
+ "name": "refresh_tokens",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "refresh_tokens_user_id_users_id_fk": {
+ "name": "refresh_tokens_user_id_users_id_fk",
+ "tableFrom": "refresh_tokens",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "refresh_tokens_id": {
+ "name": "refresh_tokens_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "refresh_tokens_token_unique": {
+ "name": "refresh_tokens_token_unique",
+ "columns": ["token"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "users": {
+ "name": "users",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "email": {
+ "name": "email",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "password_hash": {
+ "name": "password_hash",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "google_id": {
+ "name": "google_id",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "avatar_url": {
+ "name": "avatar_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "verified": {
+ "name": "verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "users_id": {
+ "name": "users_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "users_email_unique": {
+ "name": "users_email_unique",
+ "columns": ["email"]
+ },
+ "users_google_id_unique": {
+ "name": "users_google_id_unique",
+ "columns": ["google_id"]
+ }
+ },
+ "checkConstraint": {}
+ }
+ },
+ "views": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "tables": {},
+ "indexes": {}
+ }
+}
diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json
index bee8bc9..4ca78c0 100644
--- a/packages/db/drizzle/meta/_journal.json
+++ b/packages/db/drizzle/meta/_journal.json
@@ -50,6 +50,20 @@
"when": 1779887155497,
"tag": "0006_curved_doctor_octopus",
"breakpoints": true
+ },
+ {
+ "idx": 7,
+ "version": "5",
+ "when": 1779888252559,
+ "tag": "0007_powerful_mulholland_black",
+ "breakpoints": true
+ },
+ {
+ "idx": 8,
+ "version": "5",
+ "when": 1779888404608,
+ "tag": "0008_dear_karnak",
+ "breakpoints": true
}
]
}
diff --git a/packages/db/package.json b/packages/db/package.json
index 1bf2c94..72ce746 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -7,7 +7,8 @@
"db:push": "bunx --bun drizzle-kit push",
"db:generate": "bunx --bun drizzle-kit generate",
"db:studio": "bunx --bun drizzle-kit studio",
- "db:migrate": "bunx --bun tsx src/migrate.ts",
+ "db:migrate": "tsx src/migrate.ts",
+ "db:seed": "bun src/seed.ts",
"db:start": "docker compose up -d",
"db:watch": "docker compose up",
"db:stop": "docker compose stop",
diff --git a/packages/db/src/schema/models.ts b/packages/db/src/schema/models.ts
index 6cca532..087c7c6 100644
--- a/packages/db/src/schema/models.ts
+++ b/packages/db/src/schema/models.ts
@@ -33,46 +33,46 @@ export const models = mysqlTable(
() => categories.id
),
- announced: varchar("announced", { length: 100 }),
- status: varchar("status", { length: 100 }),
- dimensions: varchar("dimensions", { length: 255 }),
- weight: varchar("weight", { length: 100 }),
- build: varchar("build", { length: 255 }),
- sim: varchar("sim", { length: 100 }),
- displayType: varchar("display_type", { length: 255 }),
- displaySize: varchar("display_size", { length: 100 }),
- displayResolution: varchar("display_resolution", { length: 100 }),
- displayProtection: varchar("display_protection", { length: 100 }),
- os: varchar("os", { length: 255 }),
- chipset: varchar("chipset", { length: 255 }),
- cpu: varchar("cpu", { length: 255 }),
- gpu: varchar("gpu", { length: 255 }),
- cardSlot: varchar("card_slot", { length: 255 }),
- internalMemory: varchar("internal_memory", { length: 255 }),
- mainCamera: varchar("main_camera", { length: 255 }),
+ announced: text("announced"),
+ status: text("status"),
+ dimensions: text("dimensions"),
+ weight: text("weight"),
+ build: text("build"),
+ sim: text("sim"),
+ displayType: text("display_type"),
+ displaySize: text("display_size"),
+ displayResolution: text("display_resolution"),
+ displayProtection: text("display_protection"),
+ os: text("os"),
+ chipset: text("chipset"),
+ cpu: text("cpu"),
+ gpu: text("gpu"),
+ cardSlot: text("card_slot"),
+ internalMemory: text("internal_memory"),
+ mainCamera: text("main_camera"),
mainCameraFeatures: text("main_camera_features"),
- mainCameraVideo: varchar("main_camera_video", { length: 255 }),
- selfieCamera: varchar("selfie_camera", { length: 255 }),
+ mainCameraVideo: text("main_camera_video"),
+ selfieCamera: text("selfie_camera"),
selfieFeatures: text("selfie_features"),
- selfieVideo: varchar("selfie_video", { length: 255 }),
- battery: varchar("battery", { length: 255 }),
- batteryCharging: varchar("battery_charging", { length: 255 }),
- networkTech: varchar("network_tech", { length: 255 }),
- sensors: varchar("sensors", { length: 255 }),
- colors: varchar("colors", { length: 255 }),
+ selfieVideo: text("selfie_video"),
+ battery: text("battery"),
+ batteryCharging: text("battery_charging"),
+ networkTech: text("network_tech"),
+ sensors: text("sensors"),
+ colors: text("colors"),
colorsHex: text("colors_hex"),
- modelsText: varchar("models_text", { length: 255 }),
- price: varchar("price", { length: 100 }),
+ modelsText: text("models_text"),
+ price: text("price"),
dimensionsWidth: float("dimensions_width"),
dimensionsHeight: float("dimensions_height"),
dimensionsThickness: float("dimensions_thickness"),
weightGrams: float("weight_grams"),
displaySizeInches: float("display_size_inches"),
- displaySizeRatio: varchar("display_size_ratio", { length: 100 }),
+ displaySizeRatio: text("display_size_ratio"),
displayResWidth: int("display_res_width"),
displayResHeight: int("display_res_height"),
displayResPpi: int("display_res_ppi"),
- released: varchar("released", { length: 100 }),
+ released: text("released"),
meta: text("meta"),
diff --git a/packages/db/tsconfig.json b/packages/db/tsconfig.json
index 314d12f..8ee2d72 100644
--- a/packages/db/tsconfig.json
+++ b/packages/db/tsconfig.json
@@ -10,5 +10,5 @@
"esModuleInterop": true
},
"include": ["src/**/*"],
- "exclude": ["node_modules", "dist"]
+ "exclude": ["node_modules", "dist", "src/sqlites/sqlite-db"]
}
From d64af4e43464a4e8ae67e94421d47c4c42115ee3 Mon Sep 17 00:00:00 2001
From: Ricardo Amorim <102877738+risixdzn@users.noreply.github.com>
Date: Wed, 27 May 2026 14:14:16 -0300
Subject: [PATCH 3/9] chore(DB): Fix hanging migrations + table names
---
.../db/drizzle/0006_curved_doctor_octopus.sql | 93 --
.../0007_powerful_mulholland_black.sql | 10 -
packages/db/drizzle/0008_dear_karnak.sql | 29 -
packages/db/drizzle/meta/0006_snapshot.json | 1077 -----------------
packages/db/drizzle/meta/0007_snapshot.json | 1077 -----------------
packages/db/drizzle/meta/0008_snapshot.json | 1077 -----------------
packages/db/drizzle/meta/_journal.json | 21 -
packages/db/src/schema/categories.ts | 15 -
packages/db/src/schema/index.ts | 1 -
packages/db/src/schema/makers.ts | 22 -
packages/db/src/schema/model-categories.ts | 8 +-
packages/db/src/schema/model-makers.ts | 19 +-
packages/db/src/schema/models.ts | 8 +-
13 files changed, 19 insertions(+), 3438 deletions(-)
delete mode 100644 packages/db/drizzle/0006_curved_doctor_octopus.sql
delete mode 100644 packages/db/drizzle/0007_powerful_mulholland_black.sql
delete mode 100644 packages/db/drizzle/0008_dear_karnak.sql
delete mode 100644 packages/db/drizzle/meta/0006_snapshot.json
delete mode 100644 packages/db/drizzle/meta/0007_snapshot.json
delete mode 100644 packages/db/drizzle/meta/0008_snapshot.json
delete mode 100644 packages/db/src/schema/categories.ts
delete mode 100644 packages/db/src/schema/makers.ts
diff --git a/packages/db/drizzle/0006_curved_doctor_octopus.sql b/packages/db/drizzle/0006_curved_doctor_octopus.sql
deleted file mode 100644
index 6333cb5..0000000
--- a/packages/db/drizzle/0006_curved_doctor_octopus.sql
+++ /dev/null
@@ -1,93 +0,0 @@
-CREATE TABLE `categories` (
- `id` varchar(25) NOT NULL,
- `name` varchar(100) NOT NULL,
- `slug` varchar(100) NOT NULL,
- CONSTRAINT `categories_id` PRIMARY KEY(`id`),
- CONSTRAINT `categories_slug_unique` UNIQUE(`slug`)
-);
---> statement-breakpoint
-CREATE TABLE `makers` (
- `id` varchar(25) NOT NULL,
- `name` varchar(100) NOT NULL,
- `slug` varchar(100) NOT NULL,
- `url` varchar(255) NOT NULL,
- `device_count` int NOT NULL DEFAULT 0,
- `page_count` int,
- `created_at` timestamp NOT NULL DEFAULT (now()),
- CONSTRAINT `makers_id` PRIMARY KEY(`id`),
- CONSTRAINT `makers_slug_unique` UNIQUE(`slug`)
-);
---> statement-breakpoint
-CREATE TABLE `model_images` (
- `id` varchar(25) NOT NULL,
- `model_id` varchar(25) NOT NULL,
- `original_url` varchar(255),
- `r2_key` varchar(255),
- `is_primary` boolean NOT NULL DEFAULT false,
- `variant` varchar(50),
- `position` int NOT NULL DEFAULT 0,
- `created_at` timestamp NOT NULL DEFAULT (now()),
- CONSTRAINT `model_images_id` PRIMARY KEY(`id`)
-);
---> statement-breakpoint
-CREATE TABLE `models` (
- `id` varchar(25) NOT NULL,
- `maker_id` varchar(25) NOT NULL,
- `name` varchar(255) NOT NULL,
- `slug` varchar(100) NOT NULL,
- `url` varchar(255) NOT NULL,
- `image_url` varchar(255),
- `image_local_path` varchar(255),
- `category_id` varchar(25),
- `announced` varchar(100),
- `status` varchar(100),
- `dimensions` varchar(255),
- `weight` varchar(100),
- `build` varchar(255),
- `sim` varchar(100),
- `display_type` varchar(255),
- `display_size` varchar(100),
- `display_resolution` varchar(100),
- `display_protection` varchar(100),
- `os` varchar(255),
- `chipset` varchar(255),
- `cpu` varchar(255),
- `gpu` varchar(255),
- `card_slot` varchar(255),
- `internal_memory` varchar(255),
- `main_camera` varchar(255),
- `main_camera_features` text,
- `main_camera_video` varchar(255),
- `selfie_camera` varchar(255),
- `selfie_features` text,
- `selfie_video` varchar(255),
- `battery` varchar(255),
- `battery_charging` varchar(255),
- `network_tech` varchar(255),
- `sensors` varchar(255),
- `colors` varchar(255),
- `colors_hex` text,
- `models_text` varchar(255),
- `price` varchar(100),
- `dimensions_width` float,
- `dimensions_height` float,
- `dimensions_thickness` float,
- `weight_grams` float,
- `display_size_inches` float,
- `display_size_ratio` varchar(100),
- `display_res_width` int,
- `display_res_height` int,
- `display_res_ppi` int,
- `released` varchar(100),
- `meta` text,
- `company_id` varchar(25),
- `created_at` timestamp NOT NULL DEFAULT (now()),
- CONSTRAINT `models_id` PRIMARY KEY(`id`),
- CONSTRAINT `slug_company_unique` UNIQUE(`slug`,`company_id`)
-);
---> statement-breakpoint
-ALTER TABLE `employees` MODIFY COLUMN `roles` enum('guest','technician','warehouse','financial','manager','admin') NOT NULL;--> statement-breakpoint
-ALTER TABLE `model_images` ADD CONSTRAINT `model_images_model_id_models_id_fk` FOREIGN KEY (`model_id`) REFERENCES `models`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint
-ALTER TABLE `models` ADD CONSTRAINT `models_maker_id_makers_id_fk` FOREIGN KEY (`maker_id`) REFERENCES `makers`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint
-ALTER TABLE `models` ADD CONSTRAINT `models_category_id_categories_id_fk` FOREIGN KEY (`category_id`) REFERENCES `categories`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint
-ALTER TABLE `models` ADD CONSTRAINT `models_company_id_companies_id_fk` FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE no action ON UPDATE no action;
\ No newline at end of file
diff --git a/packages/db/drizzle/0007_powerful_mulholland_black.sql b/packages/db/drizzle/0007_powerful_mulholland_black.sql
deleted file mode 100644
index c24da9f..0000000
--- a/packages/db/drizzle/0007_powerful_mulholland_black.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-ALTER TABLE `models` MODIFY COLUMN `announced` varchar(255);--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `status` varchar(255);--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `weight` varchar(255);--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `sim` varchar(255);--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `display_size` varchar(255);--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `display_resolution` varchar(255);--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `display_protection` varchar(255);--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `price` varchar(255);--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `display_size_ratio` varchar(255);--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `released` varchar(255);
\ No newline at end of file
diff --git a/packages/db/drizzle/0008_dear_karnak.sql b/packages/db/drizzle/0008_dear_karnak.sql
deleted file mode 100644
index 207642b..0000000
--- a/packages/db/drizzle/0008_dear_karnak.sql
+++ /dev/null
@@ -1,29 +0,0 @@
-ALTER TABLE `models` MODIFY COLUMN `announced` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `status` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `dimensions` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `weight` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `build` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `sim` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `display_type` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `display_size` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `display_resolution` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `display_protection` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `os` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `chipset` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `cpu` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `gpu` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `card_slot` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `internal_memory` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `main_camera` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `main_camera_video` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `selfie_camera` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `selfie_video` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `battery` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `battery_charging` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `network_tech` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `sensors` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `colors` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `models_text` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `price` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `display_size_ratio` text;--> statement-breakpoint
-ALTER TABLE `models` MODIFY COLUMN `released` text;
\ No newline at end of file
diff --git a/packages/db/drizzle/meta/0006_snapshot.json b/packages/db/drizzle/meta/0006_snapshot.json
deleted file mode 100644
index 22338db..0000000
--- a/packages/db/drizzle/meta/0006_snapshot.json
+++ /dev/null
@@ -1,1077 +0,0 @@
-{
- "version": "5",
- "dialect": "mysql",
- "id": "469411a6-c473-42e2-89d1-da5d3e144652",
- "prevId": "96fef0d8-3c1e-4d2f-990d-625797fa1861",
- "tables": {
- "categories": {
- "name": "categories",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "slug": {
- "name": "slug",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "categories_id": {
- "name": "categories_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "categories_slug_unique": {
- "name": "categories_slug_unique",
- "columns": ["slug"]
- }
- },
- "checkConstraint": {}
- },
- "clients": {
- "name": "clients",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "cpf": {
- "name": "cpf",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "phone": {
- "name": "phone",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "clients_user_id_users_id_fk": {
- "name": "clients_user_id_users_id_fk",
- "tableFrom": "clients",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "clients_id": {
- "name": "clients_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "clients_cpf_unique": {
- "name": "clients_cpf_unique",
- "columns": ["cpf"]
- }
- },
- "checkConstraint": {}
- },
- "companies": {
- "name": "companies",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "cnpj": {
- "name": "cnpj",
- "type": "varchar(14)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "address": {
- "name": "address",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "subdomain": {
- "name": "subdomain",
- "type": "varchar(32)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "companies_id": {
- "name": "companies_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "companies_cnpj_unique": {
- "name": "companies_cnpj_unique",
- "columns": ["cnpj"]
- },
- "companies_subdomain_unique": {
- "name": "companies_subdomain_unique",
- "columns": ["subdomain"]
- }
- },
- "checkConstraint": {}
- },
- "employees": {
- "name": "employees",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "cpf": {
- "name": "cpf",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "phone": {
- "name": "phone",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "roles": {
- "name": "roles",
- "type": "enum('guest','technician','warehouse','financial','manager','admin')",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "company_id": {
- "name": "company_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "employees_user_id_users_id_fk": {
- "name": "employees_user_id_users_id_fk",
- "tableFrom": "employees",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- },
- "employees_company_id_companies_id_fk": {
- "name": "employees_company_id_companies_id_fk",
- "tableFrom": "employees",
- "tableTo": "companies",
- "columnsFrom": ["company_id"],
- "columnsTo": ["id"],
- "onDelete": "cascade",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "employees_id": {
- "name": "employees_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "employees_cpf_unique": {
- "name": "employees_cpf_unique",
- "columns": ["cpf"]
- }
- },
- "checkConstraint": {}
- },
- "makers": {
- "name": "makers",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "slug": {
- "name": "slug",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "url": {
- "name": "url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "device_count": {
- "name": "device_count",
- "type": "int",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": 0
- },
- "page_count": {
- "name": "page_count",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "makers_id": {
- "name": "makers_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "makers_slug_unique": {
- "name": "makers_slug_unique",
- "columns": ["slug"]
- }
- },
- "checkConstraint": {}
- },
- "model_images": {
- "name": "model_images",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "model_id": {
- "name": "model_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "original_url": {
- "name": "original_url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "r2_key": {
- "name": "r2_key",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "is_primary": {
- "name": "is_primary",
- "type": "boolean",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": false
- },
- "variant": {
- "name": "variant",
- "type": "varchar(50)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "position": {
- "name": "position",
- "type": "int",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": 0
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {
- "model_images_model_id_models_id_fk": {
- "name": "model_images_model_id_models_id_fk",
- "tableFrom": "model_images",
- "tableTo": "models",
- "columnsFrom": ["model_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "model_images_id": {
- "name": "model_images_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {},
- "checkConstraint": {}
- },
- "models": {
- "name": "models",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "maker_id": {
- "name": "maker_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "slug": {
- "name": "slug",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "url": {
- "name": "url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "image_url": {
- "name": "image_url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "image_local_path": {
- "name": "image_local_path",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "category_id": {
- "name": "category_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "announced": {
- "name": "announced",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "status": {
- "name": "status",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions": {
- "name": "dimensions",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "weight": {
- "name": "weight",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "build": {
- "name": "build",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "sim": {
- "name": "sim",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_type": {
- "name": "display_type",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_size": {
- "name": "display_size",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_resolution": {
- "name": "display_resolution",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_protection": {
- "name": "display_protection",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "os": {
- "name": "os",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "chipset": {
- "name": "chipset",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "cpu": {
- "name": "cpu",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "gpu": {
- "name": "gpu",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "card_slot": {
- "name": "card_slot",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "internal_memory": {
- "name": "internal_memory",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "main_camera": {
- "name": "main_camera",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "main_camera_features": {
- "name": "main_camera_features",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "main_camera_video": {
- "name": "main_camera_video",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "selfie_camera": {
- "name": "selfie_camera",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "selfie_features": {
- "name": "selfie_features",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "selfie_video": {
- "name": "selfie_video",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "battery": {
- "name": "battery",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "battery_charging": {
- "name": "battery_charging",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "network_tech": {
- "name": "network_tech",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "sensors": {
- "name": "sensors",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "colors": {
- "name": "colors",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "colors_hex": {
- "name": "colors_hex",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "models_text": {
- "name": "models_text",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "price": {
- "name": "price",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions_width": {
- "name": "dimensions_width",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions_height": {
- "name": "dimensions_height",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions_thickness": {
- "name": "dimensions_thickness",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "weight_grams": {
- "name": "weight_grams",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_size_inches": {
- "name": "display_size_inches",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_size_ratio": {
- "name": "display_size_ratio",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_res_width": {
- "name": "display_res_width",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_res_height": {
- "name": "display_res_height",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_res_ppi": {
- "name": "display_res_ppi",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "released": {
- "name": "released",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "meta": {
- "name": "meta",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "company_id": {
- "name": "company_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {
- "models_maker_id_makers_id_fk": {
- "name": "models_maker_id_makers_id_fk",
- "tableFrom": "models",
- "tableTo": "makers",
- "columnsFrom": ["maker_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- },
- "models_category_id_categories_id_fk": {
- "name": "models_category_id_categories_id_fk",
- "tableFrom": "models",
- "tableTo": "categories",
- "columnsFrom": ["category_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- },
- "models_company_id_companies_id_fk": {
- "name": "models_company_id_companies_id_fk",
- "tableFrom": "models",
- "tableTo": "companies",
- "columnsFrom": ["company_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "models_id": {
- "name": "models_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "slug_company_unique": {
- "name": "slug_company_unique",
- "columns": ["slug", "company_id"]
- }
- },
- "checkConstraint": {}
- },
- "one_time_tokens": {
- "name": "one_time_tokens",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "token": {
- "name": "token",
- "type": "varchar(128)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "ott_type": {
- "name": "ott_type",
- "type": "enum('confirmation','password_reset','account_deletion')",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "relates_to": {
- "name": "relates_to",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "expires_at": {
- "name": "expires_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "one_time_tokens_user_id_users_id_fk": {
- "name": "one_time_tokens_user_id_users_id_fk",
- "tableFrom": "one_time_tokens",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "cascade",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "one_time_tokens_id": {
- "name": "one_time_tokens_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "one_time_tokens_token_unique": {
- "name": "one_time_tokens_token_unique",
- "columns": ["token"]
- }
- },
- "checkConstraint": {}
- },
- "refresh_tokens": {
- "name": "refresh_tokens",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "token": {
- "name": "token",
- "type": "varchar(128)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "expires_at": {
- "name": "expires_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "refresh_tokens_user_id_users_id_fk": {
- "name": "refresh_tokens_user_id_users_id_fk",
- "tableFrom": "refresh_tokens",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "cascade",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "refresh_tokens_id": {
- "name": "refresh_tokens_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "refresh_tokens_token_unique": {
- "name": "refresh_tokens_token_unique",
- "columns": ["token"]
- }
- },
- "checkConstraint": {}
- },
- "users": {
- "name": "users",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "email": {
- "name": "email",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "password_hash": {
- "name": "password_hash",
- "type": "varchar(128)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "google_id": {
- "name": "google_id",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "avatar_url": {
- "name": "avatar_url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "verified": {
- "name": "verified",
- "type": "boolean",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": false
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "users_id": {
- "name": "users_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "users_email_unique": {
- "name": "users_email_unique",
- "columns": ["email"]
- },
- "users_google_id_unique": {
- "name": "users_google_id_unique",
- "columns": ["google_id"]
- }
- },
- "checkConstraint": {}
- }
- },
- "views": {},
- "_meta": {
- "schemas": {},
- "tables": {},
- "columns": {}
- },
- "internal": {
- "tables": {},
- "indexes": {}
- }
-}
diff --git a/packages/db/drizzle/meta/0007_snapshot.json b/packages/db/drizzle/meta/0007_snapshot.json
deleted file mode 100644
index 7418b2a..0000000
--- a/packages/db/drizzle/meta/0007_snapshot.json
+++ /dev/null
@@ -1,1077 +0,0 @@
-{
- "version": "5",
- "dialect": "mysql",
- "id": "46d97f25-6199-4c7a-ab20-1a0f9cb032f3",
- "prevId": "469411a6-c473-42e2-89d1-da5d3e144652",
- "tables": {
- "categories": {
- "name": "categories",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "slug": {
- "name": "slug",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "categories_id": {
- "name": "categories_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "categories_slug_unique": {
- "name": "categories_slug_unique",
- "columns": ["slug"]
- }
- },
- "checkConstraint": {}
- },
- "clients": {
- "name": "clients",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "cpf": {
- "name": "cpf",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "phone": {
- "name": "phone",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "clients_user_id_users_id_fk": {
- "name": "clients_user_id_users_id_fk",
- "tableFrom": "clients",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "clients_id": {
- "name": "clients_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "clients_cpf_unique": {
- "name": "clients_cpf_unique",
- "columns": ["cpf"]
- }
- },
- "checkConstraint": {}
- },
- "companies": {
- "name": "companies",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "cnpj": {
- "name": "cnpj",
- "type": "varchar(14)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "address": {
- "name": "address",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "subdomain": {
- "name": "subdomain",
- "type": "varchar(32)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "companies_id": {
- "name": "companies_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "companies_cnpj_unique": {
- "name": "companies_cnpj_unique",
- "columns": ["cnpj"]
- },
- "companies_subdomain_unique": {
- "name": "companies_subdomain_unique",
- "columns": ["subdomain"]
- }
- },
- "checkConstraint": {}
- },
- "employees": {
- "name": "employees",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "cpf": {
- "name": "cpf",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "phone": {
- "name": "phone",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "roles": {
- "name": "roles",
- "type": "enum('guest','technician','warehouse','financial','manager','admin')",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "company_id": {
- "name": "company_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "employees_user_id_users_id_fk": {
- "name": "employees_user_id_users_id_fk",
- "tableFrom": "employees",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- },
- "employees_company_id_companies_id_fk": {
- "name": "employees_company_id_companies_id_fk",
- "tableFrom": "employees",
- "tableTo": "companies",
- "columnsFrom": ["company_id"],
- "columnsTo": ["id"],
- "onDelete": "cascade",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "employees_id": {
- "name": "employees_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "employees_cpf_unique": {
- "name": "employees_cpf_unique",
- "columns": ["cpf"]
- }
- },
- "checkConstraint": {}
- },
- "makers": {
- "name": "makers",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "slug": {
- "name": "slug",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "url": {
- "name": "url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "device_count": {
- "name": "device_count",
- "type": "int",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": 0
- },
- "page_count": {
- "name": "page_count",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "makers_id": {
- "name": "makers_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "makers_slug_unique": {
- "name": "makers_slug_unique",
- "columns": ["slug"]
- }
- },
- "checkConstraint": {}
- },
- "model_images": {
- "name": "model_images",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "model_id": {
- "name": "model_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "original_url": {
- "name": "original_url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "r2_key": {
- "name": "r2_key",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "is_primary": {
- "name": "is_primary",
- "type": "boolean",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": false
- },
- "variant": {
- "name": "variant",
- "type": "varchar(50)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "position": {
- "name": "position",
- "type": "int",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": 0
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {
- "model_images_model_id_models_id_fk": {
- "name": "model_images_model_id_models_id_fk",
- "tableFrom": "model_images",
- "tableTo": "models",
- "columnsFrom": ["model_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "model_images_id": {
- "name": "model_images_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {},
- "checkConstraint": {}
- },
- "models": {
- "name": "models",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "maker_id": {
- "name": "maker_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "slug": {
- "name": "slug",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "url": {
- "name": "url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "image_url": {
- "name": "image_url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "image_local_path": {
- "name": "image_local_path",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "category_id": {
- "name": "category_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "announced": {
- "name": "announced",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "status": {
- "name": "status",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions": {
- "name": "dimensions",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "weight": {
- "name": "weight",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "build": {
- "name": "build",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "sim": {
- "name": "sim",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_type": {
- "name": "display_type",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_size": {
- "name": "display_size",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_resolution": {
- "name": "display_resolution",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_protection": {
- "name": "display_protection",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "os": {
- "name": "os",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "chipset": {
- "name": "chipset",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "cpu": {
- "name": "cpu",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "gpu": {
- "name": "gpu",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "card_slot": {
- "name": "card_slot",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "internal_memory": {
- "name": "internal_memory",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "main_camera": {
- "name": "main_camera",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "main_camera_features": {
- "name": "main_camera_features",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "main_camera_video": {
- "name": "main_camera_video",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "selfie_camera": {
- "name": "selfie_camera",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "selfie_features": {
- "name": "selfie_features",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "selfie_video": {
- "name": "selfie_video",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "battery": {
- "name": "battery",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "battery_charging": {
- "name": "battery_charging",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "network_tech": {
- "name": "network_tech",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "sensors": {
- "name": "sensors",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "colors": {
- "name": "colors",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "colors_hex": {
- "name": "colors_hex",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "models_text": {
- "name": "models_text",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "price": {
- "name": "price",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions_width": {
- "name": "dimensions_width",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions_height": {
- "name": "dimensions_height",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions_thickness": {
- "name": "dimensions_thickness",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "weight_grams": {
- "name": "weight_grams",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_size_inches": {
- "name": "display_size_inches",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_size_ratio": {
- "name": "display_size_ratio",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_res_width": {
- "name": "display_res_width",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_res_height": {
- "name": "display_res_height",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_res_ppi": {
- "name": "display_res_ppi",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "released": {
- "name": "released",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "meta": {
- "name": "meta",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "company_id": {
- "name": "company_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {
- "models_maker_id_makers_id_fk": {
- "name": "models_maker_id_makers_id_fk",
- "tableFrom": "models",
- "tableTo": "makers",
- "columnsFrom": ["maker_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- },
- "models_category_id_categories_id_fk": {
- "name": "models_category_id_categories_id_fk",
- "tableFrom": "models",
- "tableTo": "categories",
- "columnsFrom": ["category_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- },
- "models_company_id_companies_id_fk": {
- "name": "models_company_id_companies_id_fk",
- "tableFrom": "models",
- "tableTo": "companies",
- "columnsFrom": ["company_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "models_id": {
- "name": "models_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "slug_company_unique": {
- "name": "slug_company_unique",
- "columns": ["slug", "company_id"]
- }
- },
- "checkConstraint": {}
- },
- "one_time_tokens": {
- "name": "one_time_tokens",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "token": {
- "name": "token",
- "type": "varchar(128)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "ott_type": {
- "name": "ott_type",
- "type": "enum('confirmation','password_reset','account_deletion')",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "relates_to": {
- "name": "relates_to",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "expires_at": {
- "name": "expires_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "one_time_tokens_user_id_users_id_fk": {
- "name": "one_time_tokens_user_id_users_id_fk",
- "tableFrom": "one_time_tokens",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "cascade",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "one_time_tokens_id": {
- "name": "one_time_tokens_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "one_time_tokens_token_unique": {
- "name": "one_time_tokens_token_unique",
- "columns": ["token"]
- }
- },
- "checkConstraint": {}
- },
- "refresh_tokens": {
- "name": "refresh_tokens",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "token": {
- "name": "token",
- "type": "varchar(128)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "expires_at": {
- "name": "expires_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "refresh_tokens_user_id_users_id_fk": {
- "name": "refresh_tokens_user_id_users_id_fk",
- "tableFrom": "refresh_tokens",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "cascade",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "refresh_tokens_id": {
- "name": "refresh_tokens_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "refresh_tokens_token_unique": {
- "name": "refresh_tokens_token_unique",
- "columns": ["token"]
- }
- },
- "checkConstraint": {}
- },
- "users": {
- "name": "users",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "email": {
- "name": "email",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "password_hash": {
- "name": "password_hash",
- "type": "varchar(128)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "google_id": {
- "name": "google_id",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "avatar_url": {
- "name": "avatar_url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "verified": {
- "name": "verified",
- "type": "boolean",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": false
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "users_id": {
- "name": "users_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "users_email_unique": {
- "name": "users_email_unique",
- "columns": ["email"]
- },
- "users_google_id_unique": {
- "name": "users_google_id_unique",
- "columns": ["google_id"]
- }
- },
- "checkConstraint": {}
- }
- },
- "views": {},
- "_meta": {
- "schemas": {},
- "tables": {},
- "columns": {}
- },
- "internal": {
- "tables": {},
- "indexes": {}
- }
-}
diff --git a/packages/db/drizzle/meta/0008_snapshot.json b/packages/db/drizzle/meta/0008_snapshot.json
deleted file mode 100644
index 95d4b19..0000000
--- a/packages/db/drizzle/meta/0008_snapshot.json
+++ /dev/null
@@ -1,1077 +0,0 @@
-{
- "version": "5",
- "dialect": "mysql",
- "id": "c6166889-3f02-4a1b-8963-5bd45d4efba5",
- "prevId": "46d97f25-6199-4c7a-ab20-1a0f9cb032f3",
- "tables": {
- "categories": {
- "name": "categories",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "slug": {
- "name": "slug",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "categories_id": {
- "name": "categories_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "categories_slug_unique": {
- "name": "categories_slug_unique",
- "columns": ["slug"]
- }
- },
- "checkConstraint": {}
- },
- "clients": {
- "name": "clients",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "cpf": {
- "name": "cpf",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "phone": {
- "name": "phone",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "clients_user_id_users_id_fk": {
- "name": "clients_user_id_users_id_fk",
- "tableFrom": "clients",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "clients_id": {
- "name": "clients_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "clients_cpf_unique": {
- "name": "clients_cpf_unique",
- "columns": ["cpf"]
- }
- },
- "checkConstraint": {}
- },
- "companies": {
- "name": "companies",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "cnpj": {
- "name": "cnpj",
- "type": "varchar(14)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "address": {
- "name": "address",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "subdomain": {
- "name": "subdomain",
- "type": "varchar(32)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "companies_id": {
- "name": "companies_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "companies_cnpj_unique": {
- "name": "companies_cnpj_unique",
- "columns": ["cnpj"]
- },
- "companies_subdomain_unique": {
- "name": "companies_subdomain_unique",
- "columns": ["subdomain"]
- }
- },
- "checkConstraint": {}
- },
- "employees": {
- "name": "employees",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "cpf": {
- "name": "cpf",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "phone": {
- "name": "phone",
- "type": "varchar(11)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "roles": {
- "name": "roles",
- "type": "enum('guest','technician','warehouse','financial','manager','admin')",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "company_id": {
- "name": "company_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "employees_user_id_users_id_fk": {
- "name": "employees_user_id_users_id_fk",
- "tableFrom": "employees",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- },
- "employees_company_id_companies_id_fk": {
- "name": "employees_company_id_companies_id_fk",
- "tableFrom": "employees",
- "tableTo": "companies",
- "columnsFrom": ["company_id"],
- "columnsTo": ["id"],
- "onDelete": "cascade",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "employees_id": {
- "name": "employees_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "employees_cpf_unique": {
- "name": "employees_cpf_unique",
- "columns": ["cpf"]
- }
- },
- "checkConstraint": {}
- },
- "makers": {
- "name": "makers",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "slug": {
- "name": "slug",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "url": {
- "name": "url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "device_count": {
- "name": "device_count",
- "type": "int",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": 0
- },
- "page_count": {
- "name": "page_count",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "makers_id": {
- "name": "makers_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "makers_slug_unique": {
- "name": "makers_slug_unique",
- "columns": ["slug"]
- }
- },
- "checkConstraint": {}
- },
- "model_images": {
- "name": "model_images",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "model_id": {
- "name": "model_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "original_url": {
- "name": "original_url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "r2_key": {
- "name": "r2_key",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "is_primary": {
- "name": "is_primary",
- "type": "boolean",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": false
- },
- "variant": {
- "name": "variant",
- "type": "varchar(50)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "position": {
- "name": "position",
- "type": "int",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": 0
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {
- "model_images_model_id_models_id_fk": {
- "name": "model_images_model_id_models_id_fk",
- "tableFrom": "model_images",
- "tableTo": "models",
- "columnsFrom": ["model_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "model_images_id": {
- "name": "model_images_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {},
- "checkConstraint": {}
- },
- "models": {
- "name": "models",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "maker_id": {
- "name": "maker_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "slug": {
- "name": "slug",
- "type": "varchar(100)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "url": {
- "name": "url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "image_url": {
- "name": "image_url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "image_local_path": {
- "name": "image_local_path",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "category_id": {
- "name": "category_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "announced": {
- "name": "announced",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "status": {
- "name": "status",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions": {
- "name": "dimensions",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "weight": {
- "name": "weight",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "build": {
- "name": "build",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "sim": {
- "name": "sim",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_type": {
- "name": "display_type",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_size": {
- "name": "display_size",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_resolution": {
- "name": "display_resolution",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_protection": {
- "name": "display_protection",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "os": {
- "name": "os",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "chipset": {
- "name": "chipset",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "cpu": {
- "name": "cpu",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "gpu": {
- "name": "gpu",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "card_slot": {
- "name": "card_slot",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "internal_memory": {
- "name": "internal_memory",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "main_camera": {
- "name": "main_camera",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "main_camera_features": {
- "name": "main_camera_features",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "main_camera_video": {
- "name": "main_camera_video",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "selfie_camera": {
- "name": "selfie_camera",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "selfie_features": {
- "name": "selfie_features",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "selfie_video": {
- "name": "selfie_video",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "battery": {
- "name": "battery",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "battery_charging": {
- "name": "battery_charging",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "network_tech": {
- "name": "network_tech",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "sensors": {
- "name": "sensors",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "colors": {
- "name": "colors",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "colors_hex": {
- "name": "colors_hex",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "models_text": {
- "name": "models_text",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "price": {
- "name": "price",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions_width": {
- "name": "dimensions_width",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions_height": {
- "name": "dimensions_height",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "dimensions_thickness": {
- "name": "dimensions_thickness",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "weight_grams": {
- "name": "weight_grams",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_size_inches": {
- "name": "display_size_inches",
- "type": "float",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_size_ratio": {
- "name": "display_size_ratio",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_res_width": {
- "name": "display_res_width",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_res_height": {
- "name": "display_res_height",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "display_res_ppi": {
- "name": "display_res_ppi",
- "type": "int",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "released": {
- "name": "released",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "meta": {
- "name": "meta",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "company_id": {
- "name": "company_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- }
- },
- "indexes": {},
- "foreignKeys": {
- "models_maker_id_makers_id_fk": {
- "name": "models_maker_id_makers_id_fk",
- "tableFrom": "models",
- "tableTo": "makers",
- "columnsFrom": ["maker_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- },
- "models_category_id_categories_id_fk": {
- "name": "models_category_id_categories_id_fk",
- "tableFrom": "models",
- "tableTo": "categories",
- "columnsFrom": ["category_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- },
- "models_company_id_companies_id_fk": {
- "name": "models_company_id_companies_id_fk",
- "tableFrom": "models",
- "tableTo": "companies",
- "columnsFrom": ["company_id"],
- "columnsTo": ["id"],
- "onDelete": "no action",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "models_id": {
- "name": "models_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "slug_company_unique": {
- "name": "slug_company_unique",
- "columns": ["slug", "company_id"]
- }
- },
- "checkConstraint": {}
- },
- "one_time_tokens": {
- "name": "one_time_tokens",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "token": {
- "name": "token",
- "type": "varchar(128)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "ott_type": {
- "name": "ott_type",
- "type": "enum('confirmation','password_reset','account_deletion')",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "relates_to": {
- "name": "relates_to",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "expires_at": {
- "name": "expires_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "one_time_tokens_user_id_users_id_fk": {
- "name": "one_time_tokens_user_id_users_id_fk",
- "tableFrom": "one_time_tokens",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "cascade",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "one_time_tokens_id": {
- "name": "one_time_tokens_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "one_time_tokens_token_unique": {
- "name": "one_time_tokens_token_unique",
- "columns": ["token"]
- }
- },
- "checkConstraint": {}
- },
- "refresh_tokens": {
- "name": "refresh_tokens",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "token": {
- "name": "token",
- "type": "varchar(128)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "user_id": {
- "name": "user_id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "expires_at": {
- "name": "expires_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {
- "refresh_tokens_user_id_users_id_fk": {
- "name": "refresh_tokens_user_id_users_id_fk",
- "tableFrom": "refresh_tokens",
- "tableTo": "users",
- "columnsFrom": ["user_id"],
- "columnsTo": ["id"],
- "onDelete": "cascade",
- "onUpdate": "no action"
- }
- },
- "compositePrimaryKeys": {
- "refresh_tokens_id": {
- "name": "refresh_tokens_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "refresh_tokens_token_unique": {
- "name": "refresh_tokens_token_unique",
- "columns": ["token"]
- }
- },
- "checkConstraint": {}
- },
- "users": {
- "name": "users",
- "columns": {
- "id": {
- "name": "id",
- "type": "varchar(25)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "email": {
- "name": "email",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "password_hash": {
- "name": "password_hash",
- "type": "varchar(128)",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "google_id": {
- "name": "google_id",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "avatar_url": {
- "name": "avatar_url",
- "type": "varchar(255)",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "created_at": {
- "name": "created_at",
- "type": "timestamp",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": "(now())"
- },
- "verified": {
- "name": "verified",
- "type": "boolean",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false,
- "default": false
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {
- "users_id": {
- "name": "users_id",
- "columns": ["id"]
- }
- },
- "uniqueConstraints": {
- "users_email_unique": {
- "name": "users_email_unique",
- "columns": ["email"]
- },
- "users_google_id_unique": {
- "name": "users_google_id_unique",
- "columns": ["google_id"]
- }
- },
- "checkConstraint": {}
- }
- },
- "views": {},
- "_meta": {
- "schemas": {},
- "tables": {},
- "columns": {}
- },
- "internal": {
- "tables": {},
- "indexes": {}
- }
-}
diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json
index 4ca78c0..6e81e16 100644
--- a/packages/db/drizzle/meta/_journal.json
+++ b/packages/db/drizzle/meta/_journal.json
@@ -43,27 +43,6 @@
"when": 1760755210443,
"tag": "0005_faulty_mandarin",
"breakpoints": true
- },
- {
- "idx": 6,
- "version": "5",
- "when": 1779887155497,
- "tag": "0006_curved_doctor_octopus",
- "breakpoints": true
- },
- {
- "idx": 7,
- "version": "5",
- "when": 1779888252559,
- "tag": "0007_powerful_mulholland_black",
- "breakpoints": true
- },
- {
- "idx": 8,
- "version": "5",
- "when": 1779888404608,
- "tag": "0008_dear_karnak",
- "breakpoints": true
}
]
}
diff --git a/packages/db/src/schema/categories.ts b/packages/db/src/schema/categories.ts
deleted file mode 100644
index 49480d0..0000000
--- a/packages/db/src/schema/categories.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { createId } from "@paralleldrive/cuid2";
-import { mysqlTable, varchar } from "drizzle-orm/mysql-core";
-import { createSelectSchema } from "drizzle-zod";
-
-export const categories = mysqlTable("categories", {
- id: varchar("id", { length: 25 })
- .$defaultFn(() => createId())
- .primaryKey(),
- name: varchar("name", { length: 100 }).notNull(),
- slug: varchar("slug", { length: 100 }).unique().notNull(),
-});
-
-export const categorySelectSchema = createSelectSchema(categories);
-export type CategoryInsert = typeof categories.$inferInsert;
-export type CategorySelect = typeof categories.$inferSelect;
diff --git a/packages/db/src/schema/index.ts b/packages/db/src/schema/index.ts
index a3877c5..4cbaa08 100644
--- a/packages/db/src/schema/index.ts
+++ b/packages/db/src/schema/index.ts
@@ -1,4 +1,3 @@
-export * from "./categories";
export * from "./clients";
export * from "./companies";
export * from "./employees";
diff --git a/packages/db/src/schema/makers.ts b/packages/db/src/schema/makers.ts
deleted file mode 100644
index d9178a6..0000000
--- a/packages/db/src/schema/makers.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { createId } from "@paralleldrive/cuid2";
-import { int, mysqlTable, timestamp, varchar } from "drizzle-orm/mysql-core";
-import { createSelectSchema } from "drizzle-zod";
-import { z } from "zod";
-
-export const makers = mysqlTable("makers", {
- id: varchar("id", { length: 25 })
- .$defaultFn(() => createId())
- .primaryKey(),
- name: varchar("name", { length: 100 }).notNull(),
- slug: varchar("slug", { length: 100 }).unique().notNull(),
- url: varchar("url", { length: 255 }).notNull(),
- deviceCount: int("device_count").notNull().default(0),
- pageCount: int("page_count"),
- createdAt: timestamp("created_at").defaultNow().notNull(),
-});
-
-export const makerSelectSchema = createSelectSchema(makers, {
- createdAt: z.coerce.date(),
-});
-export type MakerInsert = typeof makers.$inferInsert;
-export type MakerSelect = typeof makers.$inferSelect;
diff --git a/packages/db/src/schema/model-categories.ts b/packages/db/src/schema/model-categories.ts
index 9037fa4..ba5e27f 100644
--- a/packages/db/src/schema/model-categories.ts
+++ b/packages/db/src/schema/model-categories.ts
@@ -7,11 +7,9 @@ export const modelCategories = mysqlTable("model_categories", {
.$defaultFn(() => createId())
.primaryKey(),
name: varchar("name", { length: 100 }).notNull(),
+ slug: varchar("slug", { length: 100 }).unique().notNull(),
});
export const modelCategorySelectSchema = createSelectSchema(modelCategories);
-
-/** @deprecated Renamed to {@link modelCategories} */
-export const deviceCategories = modelCategories;
-/** @deprecated Renamed to {@link modelCategorySelectSchema} */
-export const deviceCategorySelectSchema = modelCategorySelectSchema;
+export type CategoryInsert = typeof modelCategories.$inferInsert;
+export type CategorySelect = typeof modelCategories.$inferSelect;
diff --git a/packages/db/src/schema/model-makers.ts b/packages/db/src/schema/model-makers.ts
index eb30ca0..a92588b 100644
--- a/packages/db/src/schema/model-makers.ts
+++ b/packages/db/src/schema/model-makers.ts
@@ -1,17 +1,22 @@
import { createId } from "@paralleldrive/cuid2";
-import { mysqlTable, varchar } from "drizzle-orm/mysql-core";
+import { int, mysqlTable, timestamp, varchar } from "drizzle-orm/mysql-core";
import { createSelectSchema } from "drizzle-zod";
+import { z } from "zod";
export const modelMakers = mysqlTable("model_makers", {
id: varchar("id", { length: 25 })
.$defaultFn(() => createId())
.primaryKey(),
name: varchar("name", { length: 100 }).notNull(),
+ slug: varchar("slug", { length: 100 }).unique().notNull(),
+ url: varchar("url", { length: 255 }).notNull(),
+ deviceCount: int("device_count").notNull().default(0),
+ pageCount: int("page_count"),
+ createdAt: timestamp("created_at").defaultNow().notNull(),
});
-export const modelMakerSelectSchema = createSelectSchema(modelMakers);
-
-/** @deprecated Renamed to {@link modelMakers} */
-export const deviceBrands = modelMakers;
-/** @deprecated Renamed to {@link modelMakerSelectSchema} */
-export const deviceBrandSelectSchema = modelMakerSelectSchema;
+export const modelMakerSelectSchema = createSelectSchema(modelMakers, {
+ createdAt: z.coerce.date(),
+});
+export type MakerInsert = typeof modelMakers.$inferInsert;
+export type MakerSelect = typeof modelMakers.$inferSelect;
diff --git a/packages/db/src/schema/models.ts b/packages/db/src/schema/models.ts
index 087c7c6..d0a8509 100644
--- a/packages/db/src/schema/models.ts
+++ b/packages/db/src/schema/models.ts
@@ -10,9 +10,9 @@ import {
} from "drizzle-orm/mysql-core";
import { createSelectSchema } from "drizzle-zod";
import { z } from "zod";
-import { categories } from "./categories";
import { companies } from "./companies";
-import { makers } from "./makers";
+import { modelCategories } from "./model-categories";
+import { modelMakers } from "./model-makers";
export const models = mysqlTable(
"models",
@@ -22,7 +22,7 @@ export const models = mysqlTable(
.primaryKey(),
makerId: varchar("maker_id", { length: 25 })
.notNull()
- .references(() => makers.id),
+ .references(() => modelMakers.id),
name: varchar("name", { length: 255 }).notNull(),
slug: varchar("slug", { length: 100 }).notNull(),
url: varchar("url", { length: 255 }).notNull(),
@@ -30,7 +30,7 @@ export const models = mysqlTable(
imageLocalPath: varchar("image_local_path", { length: 255 }),
categoryId: varchar("category_id", { length: 25 }).references(
- () => categories.id
+ () => modelCategories.id
),
announced: text("announced"),
From b0234e99ecdc7969f3b90f35eeeab268a846a6a0 Mon Sep 17 00:00:00 2001
From: Ricardo Amorim <102877738+risixdzn@users.noreply.github.com>
Date: Wed, 27 May 2026 14:58:14 -0300
Subject: [PATCH 4/9] fix(DB): Revert migration states to correct order
---
packages/db/drizzle/0006_awesome_cloak.sql | 76 ++
packages/db/drizzle/meta/0006_snapshot.json | 962 ++++++++++++++++++++
packages/db/drizzle/meta/_journal.json | 7 +
3 files changed, 1045 insertions(+)
create mode 100644 packages/db/drizzle/0006_awesome_cloak.sql
create mode 100644 packages/db/drizzle/meta/0006_snapshot.json
diff --git a/packages/db/drizzle/0006_awesome_cloak.sql b/packages/db/drizzle/0006_awesome_cloak.sql
new file mode 100644
index 0000000..d05a057
--- /dev/null
+++ b/packages/db/drizzle/0006_awesome_cloak.sql
@@ -0,0 +1,76 @@
+CREATE TABLE `model_categories` (
+ `id` varchar(25) NOT NULL,
+ `name` varchar(100) NOT NULL,
+ `slug` varchar(100) NOT NULL,
+ CONSTRAINT `model_categories_id` PRIMARY KEY(`id`),
+ CONSTRAINT `model_categories_slug_unique` UNIQUE(`slug`)
+);
+--> statement-breakpoint
+CREATE TABLE `model_makers` (
+ `id` varchar(25) NOT NULL,
+ `name` varchar(100) NOT NULL,
+ `slug` varchar(100) NOT NULL,
+ `url` varchar(255) NOT NULL,
+ `device_count` int NOT NULL DEFAULT 0,
+ `page_count` int,
+ `created_at` timestamp NOT NULL DEFAULT (now()),
+ CONSTRAINT `model_makers_id` PRIMARY KEY(`id`),
+ CONSTRAINT `model_makers_slug_unique` UNIQUE(`slug`)
+);
+--> statement-breakpoint
+CREATE TABLE `service_order_images` (
+ `id` varchar(25) NOT NULL,
+ `service_order_id` varchar(25) NOT NULL,
+ `employee_id` varchar(25) NOT NULL,
+ `upload_id` varchar(25) NOT NULL,
+ `image_url` varchar(255) NOT NULL,
+ `file_name` varchar(255) NOT NULL,
+ `size_in_bytes` int NOT NULL,
+ `content_type` varchar(50) NOT NULL,
+ `description` varchar(255),
+ `created_at` timestamp NOT NULL DEFAULT (now()),
+ CONSTRAINT `service_order_images_id` PRIMARY KEY(`id`)
+);
+--> statement-breakpoint
+CREATE TABLE `service_orders` (
+ `id` varchar(25) NOT NULL,
+ `company_id` varchar(25) NOT NULL,
+ `client_id` varchar(25) NOT NULL,
+ `employee_id` varchar(25) NOT NULL,
+ `device_brand_id` varchar(25) NOT NULL,
+ `device_category_id` varchar(25) NOT NULL,
+ `device_model` varchar(100) NOT NULL,
+ `imei` varchar(50),
+ `reported_defect` text NOT NULL,
+ `observations` text,
+ `status` enum('pending','diagnosing','waiting_approval','approved','fixing','ready','delivered') NOT NULL DEFAULT 'pending',
+ `created_at` timestamp NOT NULL DEFAULT (now()),
+ `updated_at` timestamp NOT NULL DEFAULT (now()),
+ CONSTRAINT `service_orders_id` PRIMARY KEY(`id`)
+);
+--> statement-breakpoint
+CREATE TABLE `uploads` (
+ `id` varchar(25) NOT NULL,
+ `company_id` varchar(25) NOT NULL,
+ `employee_id` varchar(25) NOT NULL,
+ `key` varchar(512) NOT NULL,
+ `url` varchar(512) NOT NULL,
+ `file_name` varchar(255) NOT NULL,
+ `content_type` varchar(50) NOT NULL,
+ `size_in_bytes` int NOT NULL,
+ `status` varchar(20) NOT NULL DEFAULT 'pending',
+ `created_at` timestamp NOT NULL DEFAULT (now()),
+ CONSTRAINT `uploads_id` PRIMARY KEY(`id`)
+);
+--> statement-breakpoint
+ALTER TABLE `employees` MODIFY COLUMN `roles` enum('guest','technician','warehouse','financial','manager','admin') NOT NULL;--> statement-breakpoint
+ALTER TABLE `service_order_images` ADD CONSTRAINT `service_order_images_service_order_id_service_orders_id_fk` FOREIGN KEY (`service_order_id`) REFERENCES `service_orders`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `service_order_images` ADD CONSTRAINT `service_order_images_employee_id_employees_id_fk` FOREIGN KEY (`employee_id`) REFERENCES `employees`(`id`) ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `service_order_images` ADD CONSTRAINT `service_order_images_upload_id_uploads_id_fk` FOREIGN KEY (`upload_id`) REFERENCES `uploads`(`id`) ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `service_orders` ADD CONSTRAINT `service_orders_company_id_companies_id_fk` FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `service_orders` ADD CONSTRAINT `service_orders_client_id_clients_id_fk` FOREIGN KEY (`client_id`) REFERENCES `clients`(`id`) ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `service_orders` ADD CONSTRAINT `service_orders_employee_id_employees_id_fk` FOREIGN KEY (`employee_id`) REFERENCES `employees`(`id`) ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `service_orders` ADD CONSTRAINT `service_orders_device_brand_id_model_makers_id_fk` FOREIGN KEY (`device_brand_id`) REFERENCES `model_makers`(`id`) ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `service_orders` ADD CONSTRAINT `service_orders_device_category_id_model_categories_id_fk` FOREIGN KEY (`device_category_id`) REFERENCES `model_categories`(`id`) ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `uploads` ADD CONSTRAINT `uploads_company_id_companies_id_fk` FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE `uploads` ADD CONSTRAINT `uploads_employee_id_employees_id_fk` FOREIGN KEY (`employee_id`) REFERENCES `employees`(`id`) ON DELETE restrict ON UPDATE no action;
\ No newline at end of file
diff --git a/packages/db/drizzle/meta/0006_snapshot.json b/packages/db/drizzle/meta/0006_snapshot.json
new file mode 100644
index 0000000..0249b7c
--- /dev/null
+++ b/packages/db/drizzle/meta/0006_snapshot.json
@@ -0,0 +1,962 @@
+{
+ "version": "5",
+ "dialect": "mysql",
+ "id": "ab909380-0bce-443b-b2a8-5ebb6488b252",
+ "prevId": "96fef0d8-3c1e-4d2f-990d-625797fa1861",
+ "tables": {
+ "clients": {
+ "name": "clients",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cpf": {
+ "name": "cpf",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "phone": {
+ "name": "phone",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "clients_user_id_users_id_fk": {
+ "name": "clients_user_id_users_id_fk",
+ "tableFrom": "clients",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "clients_id": {
+ "name": "clients_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "clients_cpf_unique": {
+ "name": "clients_cpf_unique",
+ "columns": ["cpf"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "companies": {
+ "name": "companies",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cnpj": {
+ "name": "cnpj",
+ "type": "varchar(14)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "address": {
+ "name": "address",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "subdomain": {
+ "name": "subdomain",
+ "type": "varchar(32)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "companies_id": {
+ "name": "companies_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "companies_cnpj_unique": {
+ "name": "companies_cnpj_unique",
+ "columns": ["cnpj"]
+ },
+ "companies_subdomain_unique": {
+ "name": "companies_subdomain_unique",
+ "columns": ["subdomain"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "employees": {
+ "name": "employees",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "cpf": {
+ "name": "cpf",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "phone": {
+ "name": "phone",
+ "type": "varchar(11)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "roles": {
+ "name": "roles",
+ "type": "enum('guest','technician','warehouse','financial','manager','admin')",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "employees_user_id_users_id_fk": {
+ "name": "employees_user_id_users_id_fk",
+ "tableFrom": "employees",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "employees_company_id_companies_id_fk": {
+ "name": "employees_company_id_companies_id_fk",
+ "tableFrom": "employees",
+ "tableTo": "companies",
+ "columnsFrom": ["company_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "employees_id": {
+ "name": "employees_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "employees_cpf_unique": {
+ "name": "employees_cpf_unique",
+ "columns": ["cpf"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "model_categories": {
+ "name": "model_categories",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "model_categories_id": {
+ "name": "model_categories_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "model_categories_slug_unique": {
+ "name": "model_categories_slug_unique",
+ "columns": ["slug"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "model_makers": {
+ "name": "model_makers",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "slug": {
+ "name": "slug",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "device_count": {
+ "name": "device_count",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": 0
+ },
+ "page_count": {
+ "name": "page_count",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "model_makers_id": {
+ "name": "model_makers_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "model_makers_slug_unique": {
+ "name": "model_makers_slug_unique",
+ "columns": ["slug"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "one_time_tokens": {
+ "name": "one_time_tokens",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "ott_type": {
+ "name": "ott_type",
+ "type": "enum('confirmation','password_reset','account_deletion')",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "relates_to": {
+ "name": "relates_to",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "one_time_tokens_user_id_users_id_fk": {
+ "name": "one_time_tokens_user_id_users_id_fk",
+ "tableFrom": "one_time_tokens",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "one_time_tokens_id": {
+ "name": "one_time_tokens_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "one_time_tokens_token_unique": {
+ "name": "one_time_tokens_token_unique",
+ "columns": ["token"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "refresh_tokens": {
+ "name": "refresh_tokens",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "refresh_tokens_user_id_users_id_fk": {
+ "name": "refresh_tokens_user_id_users_id_fk",
+ "tableFrom": "refresh_tokens",
+ "tableTo": "users",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "refresh_tokens_id": {
+ "name": "refresh_tokens_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "refresh_tokens_token_unique": {
+ "name": "refresh_tokens_token_unique",
+ "columns": ["token"]
+ }
+ },
+ "checkConstraint": {}
+ },
+ "service_order_images": {
+ "name": "service_order_images",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "service_order_id": {
+ "name": "service_order_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "employee_id": {
+ "name": "employee_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "upload_id": {
+ "name": "upload_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "image_url": {
+ "name": "image_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "file_name": {
+ "name": "file_name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "size_in_bytes": {
+ "name": "size_in_bytes",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "service_order_images_service_order_id_service_orders_id_fk": {
+ "name": "service_order_images_service_order_id_service_orders_id_fk",
+ "tableFrom": "service_order_images",
+ "tableTo": "service_orders",
+ "columnsFrom": ["service_order_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "service_order_images_employee_id_employees_id_fk": {
+ "name": "service_order_images_employee_id_employees_id_fk",
+ "tableFrom": "service_order_images",
+ "tableTo": "employees",
+ "columnsFrom": ["employee_id"],
+ "columnsTo": ["id"],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "service_order_images_upload_id_uploads_id_fk": {
+ "name": "service_order_images_upload_id_uploads_id_fk",
+ "tableFrom": "service_order_images",
+ "tableTo": "uploads",
+ "columnsFrom": ["upload_id"],
+ "columnsTo": ["id"],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "service_order_images_id": {
+ "name": "service_order_images_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "service_orders": {
+ "name": "service_orders",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "client_id": {
+ "name": "client_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "employee_id": {
+ "name": "employee_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "device_brand_id": {
+ "name": "device_brand_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "device_category_id": {
+ "name": "device_category_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "device_model": {
+ "name": "device_model",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "imei": {
+ "name": "imei",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "reported_defect": {
+ "name": "reported_defect",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "observations": {
+ "name": "observations",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "enum('pending','diagnosing','waiting_approval','approved','fixing','ready','delivered')",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'pending'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "service_orders_company_id_companies_id_fk": {
+ "name": "service_orders_company_id_companies_id_fk",
+ "tableFrom": "service_orders",
+ "tableTo": "companies",
+ "columnsFrom": ["company_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "service_orders_client_id_clients_id_fk": {
+ "name": "service_orders_client_id_clients_id_fk",
+ "tableFrom": "service_orders",
+ "tableTo": "clients",
+ "columnsFrom": ["client_id"],
+ "columnsTo": ["id"],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "service_orders_employee_id_employees_id_fk": {
+ "name": "service_orders_employee_id_employees_id_fk",
+ "tableFrom": "service_orders",
+ "tableTo": "employees",
+ "columnsFrom": ["employee_id"],
+ "columnsTo": ["id"],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "service_orders_device_brand_id_model_makers_id_fk": {
+ "name": "service_orders_device_brand_id_model_makers_id_fk",
+ "tableFrom": "service_orders",
+ "tableTo": "model_makers",
+ "columnsFrom": ["device_brand_id"],
+ "columnsTo": ["id"],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "service_orders_device_category_id_model_categories_id_fk": {
+ "name": "service_orders_device_category_id_model_categories_id_fk",
+ "tableFrom": "service_orders",
+ "tableTo": "model_categories",
+ "columnsFrom": ["device_category_id"],
+ "columnsTo": ["id"],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "service_orders_id": {
+ "name": "service_orders_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "uploads": {
+ "name": "uploads",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "company_id": {
+ "name": "company_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "employee_id": {
+ "name": "employee_id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "key": {
+ "name": "key",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "url": {
+ "name": "url",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "file_name": {
+ "name": "file_name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "content_type": {
+ "name": "content_type",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "size_in_bytes": {
+ "name": "size_in_bytes",
+ "type": "int",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'pending'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "uploads_company_id_companies_id_fk": {
+ "name": "uploads_company_id_companies_id_fk",
+ "tableFrom": "uploads",
+ "tableTo": "companies",
+ "columnsFrom": ["company_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "uploads_employee_id_employees_id_fk": {
+ "name": "uploads_employee_id_employees_id_fk",
+ "tableFrom": "uploads",
+ "tableTo": "employees",
+ "columnsFrom": ["employee_id"],
+ "columnsTo": ["id"],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "uploads_id": {
+ "name": "uploads_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "checkConstraint": {}
+ },
+ "users": {
+ "name": "users",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "varchar(25)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "email": {
+ "name": "email",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "password_hash": {
+ "name": "password_hash",
+ "type": "varchar(128)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "google_id": {
+ "name": "google_id",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "avatar_url": {
+ "name": "avatar_url",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(now())"
+ },
+ "verified": {
+ "name": "verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "users_id": {
+ "name": "users_id",
+ "columns": ["id"]
+ }
+ },
+ "uniqueConstraints": {
+ "users_email_unique": {
+ "name": "users_email_unique",
+ "columns": ["email"]
+ },
+ "users_google_id_unique": {
+ "name": "users_google_id_unique",
+ "columns": ["google_id"]
+ }
+ },
+ "checkConstraint": {}
+ }
+ },
+ "views": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "tables": {},
+ "indexes": {}
+ }
+}
diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json
index 6e81e16..a3a26fd 100644
--- a/packages/db/drizzle/meta/_journal.json
+++ b/packages/db/drizzle/meta/_journal.json
@@ -43,6 +43,13 @@
"when": 1760755210443,
"tag": "0005_faulty_mandarin",
"breakpoints": true
+ },
+ {
+ "idx": 6,
+ "version": "5",
+ "when": 1779902286658,
+ "tag": "0006_awesome_cloak",
+ "breakpoints": true
}
]
}
From fb753f385c35db18690efb67f5431669705b0161 Mon Sep 17 00:00:00 2001
From: Ricardo Amorim <102877738+risixdzn@users.noreply.github.com>
Date: Sun, 31 May 2026 16:06:05 -0300
Subject: [PATCH 5/9] feat(Devices): Routes for reading categories, makers and
models
---
apps/server/src/config/r2.ts | 23 +-
.../core/docs/categories/categories.docs.ts | 61 +++++
.../src/core/docs/makers/makers.docs.ts | 79 ++++++
.../src/core/docs/models/models.docs.ts | 202 +++++++++++++++
.../src/core/docs/service-orders.docs.ts | 12 +-
apps/server/src/core/errors/index.ts | 6 +
apps/server/src/core/lib/r2.ts | 16 ++
.../modules/categories/controllers/index.ts | 32 +++
.../src/modules/categories/errors/index.ts | 10 +
.../modules/categories/repositories/index.ts | 33 +++
.../src/modules/categories/routes/index.ts | 46 ++++
.../src/modules/categories/services/index.ts | 64 +++++
.../src/modules/makers/controllers/index.ts | 41 +++
.../server/src/modules/makers/errors/index.ts | 15 ++
.../src/modules/makers/repositories/index.ts | 62 +++++
.../server/src/modules/makers/routes/index.ts | 54 ++++
.../src/modules/makers/services/index.ts | 134 ++++++++++
.../src/modules/models/controllers/index.ts | 62 +++++
.../server/src/modules/models/errors/index.ts | 25 ++
.../src/modules/models/repositories/index.ts | 244 ++++++++++++++++++
.../server/src/modules/models/routes/index.ts | 63 +++++
.../src/modules/models/services/index.ts | 202 +++++++++++++++
apps/server/src/server.ts | 22 +-
apps/web/app/(public)/downtime/page.tsx | 4 +-
packages/db/src/schema/index.ts | 2 +
packages/db/src/schema/model-categories.ts | 8 +-
packages/db/src/schema/model-makers.ts | 18 +-
packages/permissions/src/abilities.ts | 7 +
packages/schemas/package.json | 4 +
packages/schemas/src/models.ts | 43 +++
30 files changed, 1573 insertions(+), 21 deletions(-)
create mode 100644 apps/server/src/core/docs/categories/categories.docs.ts
create mode 100644 apps/server/src/core/docs/makers/makers.docs.ts
create mode 100644 apps/server/src/core/docs/models/models.docs.ts
create mode 100644 apps/server/src/modules/categories/controllers/index.ts
create mode 100644 apps/server/src/modules/categories/errors/index.ts
create mode 100644 apps/server/src/modules/categories/repositories/index.ts
create mode 100644 apps/server/src/modules/categories/routes/index.ts
create mode 100644 apps/server/src/modules/categories/services/index.ts
create mode 100644 apps/server/src/modules/makers/controllers/index.ts
create mode 100644 apps/server/src/modules/makers/errors/index.ts
create mode 100644 apps/server/src/modules/makers/repositories/index.ts
create mode 100644 apps/server/src/modules/makers/routes/index.ts
create mode 100644 apps/server/src/modules/makers/services/index.ts
create mode 100644 apps/server/src/modules/models/controllers/index.ts
create mode 100644 apps/server/src/modules/models/errors/index.ts
create mode 100644 apps/server/src/modules/models/repositories/index.ts
create mode 100644 apps/server/src/modules/models/routes/index.ts
create mode 100644 apps/server/src/modules/models/services/index.ts
create mode 100644 packages/schemas/src/models.ts
diff --git a/apps/server/src/config/r2.ts b/apps/server/src/config/r2.ts
index c5c34f6..6c3f995 100644
--- a/apps/server/src/config/r2.ts
+++ b/apps/server/src/config/r2.ts
@@ -1,11 +1,16 @@
-import { S3Client } from "@aws-sdk/client-s3";
+import { GetObjectCommand, S3Client } from "@aws-sdk/client-s3";
+import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
import { env } from "@fixr/env/server";
import {
buildObjectPublicUrl as _buildObjectPublicUrl,
isAllowedCompanyPhotoUrl as _isAllowedCompanyPhotoUrl,
} from "../core/lib/r2";
-export { buildUploadObjectKey, sanitizeUploadFileName } from "../core/lib/r2";
+export {
+ buildModelObjectKey,
+ buildUploadObjectKey,
+ sanitizeUploadFileName,
+} from "../core/lib/r2";
function parseR2BucketUrl(bucketUrl: string) {
const parsed = new URL(bucketUrl);
@@ -45,3 +50,17 @@ export function buildObjectPublicUrl(key: string) {
export function isAllowedCompanyPhotoUrl(url: string, companyId: string) {
return _isAllowedCompanyPhotoUrl(r2PublicBaseUrl, url, companyId);
}
+
+/**
+ * Generate a presigned GET URL for reading an object from R2
+ *
+ * @param key - The R2 object key
+ * @returns A presigned URL valid for 24 hours
+ */
+export async function generatePresignedGetUrl(key: string): Promise