diff --git a/apps/dokploy/MIGRATIONS.md b/apps/dokploy/MIGRATIONS.md new file mode 100644 index 0000000000..7f9271390e --- /dev/null +++ b/apps/dokploy/MIGRATIONS.md @@ -0,0 +1,262 @@ +# Database Migrations Guide + +This document explains how to work with database migrations in Dokploy using Drizzle ORM. + +## Overview + +Dokploy uses [Drizzle ORM](https://orm.drizzle.team/) for database management. Migrations are stored in the `drizzle/` folder and use **timestamp-based prefixes** (e.g., `20240627123900_add-user-preferences.sql`) to prevent merge conflicts when multiple developers work on schema changes simultaneously. + +## Migration Commands + +| Command | Description | +|---------|-------------| +| `pnpm run migration:new ` | Generate a new migration with a descriptive name | +| `pnpm run migration:run` | Apply all pending migrations | +| `pnpm run migration:generate` | Generate migration from schema changes (raw drizzle-kit) | +| `pnpm run migration:up` | Update migration metadata | +| `pnpm run migration:drop` | Drop a migration | +| `pnpm run db:push` | Push schema directly to database (development only) | +| `pnpm run db:studio` | Open Drizzle Studio to browse the database | + +## Creating a New Migration + +### Step 1: Modify the Schema + +First, make changes to the schema files in `server/db/schema/`: + +```typescript +// server/db/schema/user.ts +export const user = pgTable("user", { + id: text("id").notNull().primaryKey(), + email: text("email").notNull().unique(), + // Add your new column + preferences: jsonb("preferences").default({}), +}); +``` + +### Step 2: Generate the Migration + +Use the `migration:new` command with a **descriptive name**: + +```bash +pnpm run migration:new add-user-preferences +``` + +This will: +1. Detect schema changes +2. Generate a migration file with a timestamp prefix +3. Create the corresponding snapshot file + +### Step 3: Review the Migration + +Check the generated SQL file in `drizzle/`: + +```sql +-- 20240627123900_add-user-preferences.sql +ALTER TABLE "user" ADD COLUMN "preferences" jsonb DEFAULT '{}'; +``` + +### Step 4: Test Locally + +Apply the migration to your local database: + +```bash +pnpm run migration:run +``` + +### Step 5: Commit Your Changes + +Commit both the schema changes and the migration files: + +```bash +git add server/db/schema/ drizzle/ +git commit -m "feat: add user preferences column" +``` + +## Migration Naming Conventions + +### Required Format + +- Use **kebab-case** (lowercase with hyphens): `add-user-preferences` +- **Start with a verb** that describes the action: + - `add-*` - Adding new columns, tables, or indexes + - `update-*` - Modifying existing structures + - `remove-*` - Removing columns, tables, or constraints + - `create-*` - Creating new tables or schemas + - `alter-*` - Altering table structures + - `rename-*` - Renaming columns or tables + - `fix-*` - Fixing data or schema issues + - `migrate-*` - Data migrations + +### Good Examples + +```bash +pnpm run migration:new add-user-preferences +pnpm run migration:new update-notification-schema +pnpm run migration:new remove-deprecated-columns +pnpm run migration:new create-audit-log-table +pnpm run migration:new rename-email-to-username +pnpm run migration:new add-project-description-index +pnpm run migration:new migrate-legacy-permissions +``` + +### Bad Examples + +```bash +# Too generic +pnpm run migration:new changes +pnpm run migration:new updates +pnpm run migration:new fix + +# Wrong format +pnpm run migration:new AddUserPreferences # Not kebab-case +pnpm run migration:new add_user_preferences # Underscores instead of hyphens + +# Not descriptive +pnpm run migration:new user-stuff +pnpm run migration:new new-migration +``` + +## How Timestamp Prefixes Prevent Conflicts + +### The Problem with Sequential Numbers + +With sequential numbering (`0001_`, `0002_`, etc.), if two developers create migrations from the same base: + +``` +Developer A: Creates 0134_add-feature-a.sql +Developer B: Creates 0134_add-feature-b.sql +``` + +Both migrations have the same prefix, causing conflicts when merging. + +### The Timestamp Solution + +With timestamp prefixes, each migration gets a unique identifier: + +``` +Developer A: Creates 20240627143052_add-feature-a.sql +Developer B: Creates 20240627143127_add-feature-b.sql +``` + +Even if created seconds apart, the migrations have unique prefixes and can be merged without conflicts. + +## Handling Migration Conflicts + +### Scenario: Two PRs with Migrations + +If you're working on a PR and another PR with migrations gets merged first: + +1. **Pull the latest changes**: + ```bash + git checkout main + git pull origin main + git checkout your-branch + git rebase main + ``` + +2. **No conflicts expected**: Because timestamp prefixes are unique, there should be no file conflicts. + +3. **Run migrations**: Test that all migrations apply correctly: + ```bash + pnpm run migration:run + ``` + +### Scenario: Schema Conflict + +If two migrations modify the same table in incompatible ways: + +1. Review both migrations +2. Create a new migration to resolve the conflict if needed +3. Communicate with the other developer + +## Custom SQL Migrations + +Sometimes you need to write custom SQL that Drizzle can't auto-generate: + +1. Generate an empty migration: + ```bash + pnpm run migration:new migrate-legacy-data + ``` + +2. Edit the generated SQL file to add your custom SQL: + ```sql + -- 20240627143052_migrate-legacy-data.sql + -- Custom SQL migration file + + UPDATE "user" SET "role" = 'admin' WHERE "legacy_admin" = true; + DELETE FROM "legacy_permissions"; + ``` + +3. Test thoroughly before committing. + +## Best Practices + +### DO + +- Always use `migration:new` instead of `migration:generate` +- Write descriptive migration names +- Test migrations locally before pushing +- Review generated SQL before committing +- Keep migrations small and focused +- Document complex migrations with SQL comments + +### DON'T + +- Don't edit existing migrations that have been merged/deployed +- Don't use generic names like "changes" or "updates" +- Don't include multiple unrelated changes in one migration +- Don't commit migrations without testing them +- Don't manually edit `_journal.json` + +## Troubleshooting + +### "No schema changes detected" + +If you run `migration:new` and get this error: + +1. Make sure you've saved your schema file changes +2. Check that your schema exports are correct +3. Verify the schema path in `drizzle.config.ts` + +### Migration fails to apply + +1. Check the error message for details +2. Look at the generated SQL for issues +3. Test the SQL manually in a database client +4. Consider if the migration needs to be split into steps + +### Journal out of sync + +If the `_journal.json` gets out of sync: + +```bash +pnpm run migration:up +``` + +This updates the migration metadata to match the actual files. + +## File Structure + +``` +apps/dokploy/ +├── drizzle/ +│ ├── meta/ +│ │ ├── _journal.json # Migration history +│ │ └── *_snapshot.json # Schema snapshots +│ └── *.sql # Migration files +├── server/ +│ └── db/ +│ ├── drizzle.config.ts # Drizzle configuration +│ ├── schema/ # Schema definitions +│ └── migration.ts # Migration runner +└── scripts/ + ├── generate-migration.ts # Migration helper + └── convert-migrations-to-timestamp.ts # Format converter +``` + +## Resources + +- [Drizzle ORM Documentation](https://orm.drizzle.team/) +- [Drizzle Kit Commands](https://orm.drizzle.team/docs/kit-overview) +- [Migration Best Practices](https://orm.drizzle.team/docs/migrations) diff --git a/apps/dokploy/drizzle/0057_damp_prism.sql b/apps/dokploy/drizzle/0057_damp_prism.sql deleted file mode 100644 index 363c2a9f48..0000000000 --- a/apps/dokploy/drizzle/0057_damp_prism.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE IF NOT EXISTS "ai" ( - "aiId" text PRIMARY KEY NOT NULL, - "name" text NOT NULL, - "apiUrl" text NOT NULL, - "apiKey" text NOT NULL, - "model" text NOT NULL, - "isEnabled" boolean DEFAULT true NOT NULL, - "adminId" text NOT NULL, - "createdAt" text NOT NULL -); ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "ai" ADD CONSTRAINT "ai_adminId_admin_adminId_fk" FOREIGN KEY ("adminId") REFERENCES "public"."admin"("adminId") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; diff --git a/apps/dokploy/drizzle/0000_reflective_puck.sql b/apps/dokploy/drizzle/20240416101901_reflective_puck.sql similarity index 100% rename from apps/dokploy/drizzle/0000_reflective_puck.sql rename to apps/dokploy/drizzle/20240416101901_reflective_puck.sql diff --git a/apps/dokploy/drizzle/0001_striped_tattoo.sql b/apps/dokploy/drizzle/20240422045357_striped_tattoo.sql similarity index 100% rename from apps/dokploy/drizzle/0001_striped_tattoo.sql rename to apps/dokploy/drizzle/20240422045357_striped_tattoo.sql diff --git a/apps/dokploy/drizzle/0002_ambiguous_carlie_cooper.sql b/apps/dokploy/drizzle/20240422052452_ambiguous_carlie_cooper.sql similarity index 100% rename from apps/dokploy/drizzle/0002_ambiguous_carlie_cooper.sql rename to apps/dokploy/drizzle/20240422052452_ambiguous_carlie_cooper.sql diff --git a/apps/dokploy/drizzle/0003_square_lightspeed.sql b/apps/dokploy/drizzle/20240424082541_square_lightspeed.sql similarity index 100% rename from apps/dokploy/drizzle/0003_square_lightspeed.sql rename to apps/dokploy/drizzle/20240424082541_square_lightspeed.sql diff --git a/apps/dokploy/drizzle/0004_nice_tenebrous.sql b/apps/dokploy/drizzle/20240425002532_nice_tenebrous.sql similarity index 100% rename from apps/dokploy/drizzle/0004_nice_tenebrous.sql rename to apps/dokploy/drizzle/20240425002532_nice_tenebrous.sql diff --git a/apps/dokploy/drizzle/0005_cute_terror.sql b/apps/dokploy/drizzle/20240512215850_cute_terror.sql similarity index 100% rename from apps/dokploy/drizzle/0005_cute_terror.sql rename to apps/dokploy/drizzle/20240512215850_cute_terror.sql diff --git a/apps/dokploy/drizzle/0006_oval_jimmy_woo.sql b/apps/dokploy/drizzle/20240513011925_oval_jimmy_woo.sql similarity index 100% rename from apps/dokploy/drizzle/0006_oval_jimmy_woo.sql rename to apps/dokploy/drizzle/20240513011925_oval_jimmy_woo.sql diff --git a/apps/dokploy/drizzle/0007_cute_guardsmen.sql b/apps/dokploy/drizzle/20240513012457_cute_guardsmen.sql similarity index 100% rename from apps/dokploy/drizzle/0007_cute_guardsmen.sql rename to apps/dokploy/drizzle/20240513012457_cute_guardsmen.sql diff --git a/apps/dokploy/drizzle/0008_lazy_sage.sql b/apps/dokploy/drizzle/20240513013543_lazy_sage.sql similarity index 100% rename from apps/dokploy/drizzle/0008_lazy_sage.sql rename to apps/dokploy/drizzle/20240513013543_lazy_sage.sql diff --git a/apps/dokploy/drizzle/0009_majestic_spencer_smythe.sql b/apps/dokploy/drizzle/20240513014614_majestic_spencer_smythe.sql similarity index 100% rename from apps/dokploy/drizzle/0009_majestic_spencer_smythe.sql rename to apps/dokploy/drizzle/20240513014614_majestic_spencer_smythe.sql diff --git a/apps/dokploy/drizzle/0010_lean_black_widow.sql b/apps/dokploy/drizzle/20240513042037_lean_black_widow.sql similarity index 100% rename from apps/dokploy/drizzle/0010_lean_black_widow.sql rename to apps/dokploy/drizzle/20240513042037_lean_black_widow.sql diff --git a/apps/dokploy/drizzle/0011_petite_calypso.sql b/apps/dokploy/drizzle/20240513042350_petite_calypso.sql similarity index 100% rename from apps/dokploy/drizzle/0011_petite_calypso.sql rename to apps/dokploy/drizzle/20240513042350_petite_calypso.sql diff --git a/apps/dokploy/drizzle/0012_chubby_umar.sql b/apps/dokploy/drizzle/20240518070156_chubby_umar.sql similarity index 100% rename from apps/dokploy/drizzle/0012_chubby_umar.sql rename to apps/dokploy/drizzle/20240518070156_chubby_umar.sql diff --git a/apps/dokploy/drizzle/0013_blushing_starjammers.sql b/apps/dokploy/drizzle/20240518234939_blushing_starjammers.sql similarity index 100% rename from apps/dokploy/drizzle/0013_blushing_starjammers.sql rename to apps/dokploy/drizzle/20240518234939_blushing_starjammers.sql diff --git a/apps/dokploy/drizzle/0014_same_hammerhead.sql b/apps/dokploy/drizzle/20240526092247_same_hammerhead.sql similarity index 100% rename from apps/dokploy/drizzle/0014_same_hammerhead.sql rename to apps/dokploy/drizzle/20240526092247_same_hammerhead.sql diff --git a/apps/dokploy/drizzle/0015_fearless_callisto.sql b/apps/dokploy/drizzle/20240605051517_fearless_callisto.sql similarity index 100% rename from apps/dokploy/drizzle/0015_fearless_callisto.sql rename to apps/dokploy/drizzle/20240605051517_fearless_callisto.sql diff --git a/apps/dokploy/drizzle/0016_chunky_leopardon.sql b/apps/dokploy/drizzle/20240623021956_chunky_leopardon.sql similarity index 100% rename from apps/dokploy/drizzle/0016_chunky_leopardon.sql rename to apps/dokploy/drizzle/20240623021956_chunky_leopardon.sql diff --git a/apps/dokploy/drizzle/0017_minor_post.sql b/apps/dokploy/drizzle/20240628035934_minor_post.sql similarity index 100% rename from apps/dokploy/drizzle/0017_minor_post.sql rename to apps/dokploy/drizzle/20240628035934_minor_post.sql diff --git a/apps/dokploy/drizzle/0018_careful_killmonger.sql b/apps/dokploy/drizzle/20240702135257_careful_killmonger.sql similarity index 100% rename from apps/dokploy/drizzle/0018_careful_killmonger.sql rename to apps/dokploy/drizzle/20240702135257_careful_killmonger.sql diff --git a/apps/dokploy/drizzle/0019_heavy_freak.sql b/apps/dokploy/drizzle/20240716061826_heavy_freak.sql similarity index 100% rename from apps/dokploy/drizzle/0019_heavy_freak.sql rename to apps/dokploy/drizzle/20240716061826_heavy_freak.sql diff --git a/apps/dokploy/drizzle/0020_fantastic_slapstick.sql b/apps/dokploy/drizzle/20240719043741_fantastic_slapstick.sql similarity index 100% rename from apps/dokploy/drizzle/0020_fantastic_slapstick.sql rename to apps/dokploy/drizzle/20240719043741_fantastic_slapstick.sql diff --git a/apps/dokploy/drizzle/0021_premium_sebastian_shaw.sql b/apps/dokploy/drizzle/20240719062703_premium_sebastian_shaw.sql similarity index 100% rename from apps/dokploy/drizzle/0021_premium_sebastian_shaw.sql rename to apps/dokploy/drizzle/20240719062703_premium_sebastian_shaw.sql diff --git a/apps/dokploy/drizzle/0022_warm_colonel_america.sql b/apps/dokploy/drizzle/20240721030603_warm_colonel_america.sql similarity index 100% rename from apps/dokploy/drizzle/0022_warm_colonel_america.sql rename to apps/dokploy/drizzle/20240721030603_warm_colonel_america.sql diff --git a/apps/dokploy/drizzle/0023_icy_maverick.sql b/apps/dokploy/drizzle/20240721061942_icy_maverick.sql similarity index 100% rename from apps/dokploy/drizzle/0023_icy_maverick.sql rename to apps/dokploy/drizzle/20240721061942_icy_maverick.sql diff --git a/apps/dokploy/drizzle/0024_dapper_supernaut.sql b/apps/dokploy/drizzle/20240721231315_dapper_supernaut.sql similarity index 100% rename from apps/dokploy/drizzle/0024_dapper_supernaut.sql rename to apps/dokploy/drizzle/20240721231315_dapper_supernaut.sql diff --git a/apps/dokploy/drizzle/0025_lying_mephisto.sql b/apps/dokploy/drizzle/20240722073733_lying_mephisto.sql similarity index 100% rename from apps/dokploy/drizzle/0025_lying_mephisto.sql rename to apps/dokploy/drizzle/20240722073733_lying_mephisto.sql diff --git a/apps/dokploy/drizzle/0026_known_dormammu.sql b/apps/dokploy/drizzle/20240726073340_known_dormammu.sql similarity index 100% rename from apps/dokploy/drizzle/0026_known_dormammu.sql rename to apps/dokploy/drizzle/20240726073340_known_dormammu.sql diff --git a/apps/dokploy/drizzle/0027_red_lady_bullseye.sql b/apps/dokploy/drizzle/20240731165819_red_lady_bullseye.sql similarity index 100% rename from apps/dokploy/drizzle/0027_red_lady_bullseye.sql rename to apps/dokploy/drizzle/20240731165819_red_lady_bullseye.sql diff --git a/apps/dokploy/drizzle/0028_jittery_eternity.sql b/apps/dokploy/drizzle/20240801091039_jittery_eternity.sql similarity index 100% rename from apps/dokploy/drizzle/0028_jittery_eternity.sql rename to apps/dokploy/drizzle/20240801091039_jittery_eternity.sql diff --git a/apps/dokploy/drizzle/0029_colossal_zodiak.sql b/apps/dokploy/drizzle/20240802055946_colossal_zodiak.sql similarity index 100% rename from apps/dokploy/drizzle/0029_colossal_zodiak.sql rename to apps/dokploy/drizzle/20240802055946_colossal_zodiak.sql diff --git a/apps/dokploy/drizzle/0030_little_kabuki.sql b/apps/dokploy/drizzle/20240814040819_little_kabuki.sql similarity index 100% rename from apps/dokploy/drizzle/0030_little_kabuki.sql rename to apps/dokploy/drizzle/20240814040819_little_kabuki.sql diff --git a/apps/dokploy/drizzle/0031_steep_vulture.sql b/apps/dokploy/drizzle/20240815060056_steep_vulture.sql similarity index 100% rename from apps/dokploy/drizzle/0031_steep_vulture.sql rename to apps/dokploy/drizzle/20240815060056_steep_vulture.sql diff --git a/apps/dokploy/drizzle/0032_flashy_shadow_king.sql b/apps/dokploy/drizzle/20240815070057_flashy_shadow_king.sql similarity index 100% rename from apps/dokploy/drizzle/0032_flashy_shadow_king.sql rename to apps/dokploy/drizzle/20240815070057_flashy_shadow_king.sql diff --git a/apps/dokploy/drizzle/0033_white_hawkeye.sql b/apps/dokploy/drizzle/20240902041202_white_hawkeye.sql similarity index 100% rename from apps/dokploy/drizzle/0033_white_hawkeye.sql rename to apps/dokploy/drizzle/20240902041202_white_hawkeye.sql diff --git a/apps/dokploy/drizzle/0034_aspiring_secret_warriors.sql b/apps/dokploy/drizzle/20240902055317_aspiring_secret_warriors.sql similarity index 100% rename from apps/dokploy/drizzle/0034_aspiring_secret_warriors.sql rename to apps/dokploy/drizzle/20240902055317_aspiring_secret_warriors.sql diff --git a/apps/dokploy/drizzle/0035_cool_gravity.sql b/apps/dokploy/drizzle/20240904055524_cool_gravity.sql similarity index 100% rename from apps/dokploy/drizzle/0035_cool_gravity.sql rename to apps/dokploy/drizzle/20240904055524_cool_gravity.sql diff --git a/apps/dokploy/drizzle/0036_tired_ronan.sql b/apps/dokploy/drizzle/20240905065551_tired_ronan.sql similarity index 100% rename from apps/dokploy/drizzle/0036_tired_ronan.sql rename to apps/dokploy/drizzle/20240905065551_tired_ronan.sql diff --git a/apps/dokploy/drizzle/0037_legal_namor.sql b/apps/dokploy/drizzle/20240922065809_legal_namor.sql similarity index 100% rename from apps/dokploy/drizzle/0037_legal_namor.sql rename to apps/dokploy/drizzle/20240922065809_legal_namor.sql diff --git a/apps/dokploy/drizzle/0038_rapid_landau.sql b/apps/dokploy/drizzle/20241003075450_rapid_landau.sql similarity index 100% rename from apps/dokploy/drizzle/0038_rapid_landau.sql rename to apps/dokploy/drizzle/20241003075450_rapid_landau.sql diff --git a/apps/dokploy/drizzle/0039_many_tiger_shark.sql b/apps/dokploy/drizzle/20241004055207_many_tiger_shark.sql similarity index 100% rename from apps/dokploy/drizzle/0039_many_tiger_shark.sql rename to apps/dokploy/drizzle/20241004055207_many_tiger_shark.sql diff --git a/apps/dokploy/drizzle/0040_graceful_wolfsbane.sql b/apps/dokploy/drizzle/20241013004937_graceful_wolfsbane.sql similarity index 100% rename from apps/dokploy/drizzle/0040_graceful_wolfsbane.sql rename to apps/dokploy/drizzle/20241013004937_graceful_wolfsbane.sql diff --git a/apps/dokploy/drizzle/0041_huge_bruce_banner.sql b/apps/dokploy/drizzle/20241023071038_huge_bruce_banner.sql similarity index 100% rename from apps/dokploy/drizzle/0041_huge_bruce_banner.sql rename to apps/dokploy/drizzle/20241023071038_huge_bruce_banner.sql diff --git a/apps/dokploy/drizzle/0042_fancy_havok.sql b/apps/dokploy/drizzle/20241026231359_fancy_havok.sql similarity index 100% rename from apps/dokploy/drizzle/0042_fancy_havok.sql rename to apps/dokploy/drizzle/20241026231359_fancy_havok.sql diff --git a/apps/dokploy/drizzle/0043_closed_naoko.sql b/apps/dokploy/drizzle/20241117200605_closed_naoko.sql similarity index 100% rename from apps/dokploy/drizzle/0043_closed_naoko.sql rename to apps/dokploy/drizzle/20241117200605_closed_naoko.sql diff --git a/apps/dokploy/drizzle/0044_sour_true_believers.sql b/apps/dokploy/drizzle/20241117203219_sour_true_believers.sql similarity index 100% rename from apps/dokploy/drizzle/0044_sour_true_believers.sql rename to apps/dokploy/drizzle/20241117203219_sour_true_believers.sql diff --git a/apps/dokploy/drizzle/0045_smiling_blur.sql b/apps/dokploy/drizzle/20241126180301_smiling_blur.sql similarity index 100% rename from apps/dokploy/drizzle/0045_smiling_blur.sql rename to apps/dokploy/drizzle/20241126180301_smiling_blur.sql diff --git a/apps/dokploy/drizzle/0046_purple_sleeper.sql b/apps/dokploy/drizzle/20241129033311_purple_sleeper.sql similarity index 100% rename from apps/dokploy/drizzle/0046_purple_sleeper.sql rename to apps/dokploy/drizzle/20241129033311_purple_sleeper.sql diff --git a/apps/dokploy/drizzle/0047_tidy_revanche.sql b/apps/dokploy/drizzle/20241207191810_tidy_revanche.sql similarity index 100% rename from apps/dokploy/drizzle/0047_tidy_revanche.sql rename to apps/dokploy/drizzle/20241207191810_tidy_revanche.sql diff --git a/apps/dokploy/drizzle/0048_flat_expediter.sql b/apps/dokploy/drizzle/20241207191923_flat_expediter.sql similarity index 100% rename from apps/dokploy/drizzle/0048_flat_expediter.sql rename to apps/dokploy/drizzle/20241207191923_flat_expediter.sql diff --git a/apps/dokploy/drizzle/0049_dark_leopardon.sql b/apps/dokploy/drizzle/20241208033242_dark_leopardon.sql similarity index 100% rename from apps/dokploy/drizzle/0049_dark_leopardon.sql rename to apps/dokploy/drizzle/20241208033242_dark_leopardon.sql diff --git a/apps/dokploy/drizzle/0050_nappy_wrecker.sql b/apps/dokploy/drizzle/20241211035144_nappy_wrecker.sql similarity index 100% rename from apps/dokploy/drizzle/0050_nappy_wrecker.sql rename to apps/dokploy/drizzle/20241211035144_nappy_wrecker.sql diff --git a/apps/dokploy/drizzle/0051_hard_gorgon.sql b/apps/dokploy/drizzle/20241215054442_hard_gorgon.sql similarity index 100% rename from apps/dokploy/drizzle/0051_hard_gorgon.sql rename to apps/dokploy/drizzle/20241215054442_hard_gorgon.sql diff --git a/apps/dokploy/drizzle/0052_bumpy_luckman.sql b/apps/dokploy/drizzle/20241221192857_bumpy_luckman.sql similarity index 100% rename from apps/dokploy/drizzle/0052_bumpy_luckman.sql rename to apps/dokploy/drizzle/20241221192857_bumpy_luckman.sql diff --git a/apps/dokploy/drizzle/0053_broken_kulan_gath.sql b/apps/dokploy/drizzle/20241225092724_broken_kulan_gath.sql similarity index 100% rename from apps/dokploy/drizzle/0053_broken_kulan_gath.sql rename to apps/dokploy/drizzle/20241225092724_broken_kulan_gath.sql diff --git a/apps/dokploy/drizzle/0054_nervous_spencer_smythe.sql b/apps/dokploy/drizzle/20250112081021_nervous_spencer_smythe.sql similarity index 100% rename from apps/dokploy/drizzle/0054_nervous_spencer_smythe.sql rename to apps/dokploy/drizzle/20250112081021_nervous_spencer_smythe.sql diff --git a/apps/dokploy/drizzle/0055_next_serpent_society.sql b/apps/dokploy/drizzle/20250112081343_next_serpent_society.sql similarity index 100% rename from apps/dokploy/drizzle/0055_next_serpent_society.sql rename to apps/dokploy/drizzle/20250112081343_next_serpent_society.sql diff --git a/apps/dokploy/drizzle/0056_majestic_skaar.sql b/apps/dokploy/drizzle/20250113173838_majestic_skaar.sql similarity index 100% rename from apps/dokploy/drizzle/0056_majestic_skaar.sql rename to apps/dokploy/drizzle/20250113173838_majestic_skaar.sql diff --git a/apps/dokploy/drizzle/0057_tricky_living_tribunal.sql b/apps/dokploy/drizzle/20250119170103_tricky_living_tribunal.sql similarity index 100% rename from apps/dokploy/drizzle/0057_tricky_living_tribunal.sql rename to apps/dokploy/drizzle/20250119170103_tricky_living_tribunal.sql diff --git a/apps/dokploy/drizzle/0058_brown_sharon_carter.sql b/apps/dokploy/drizzle/20250123061503_brown_sharon_carter.sql similarity index 100% rename from apps/dokploy/drizzle/0058_brown_sharon_carter.sql rename to apps/dokploy/drizzle/20250123061503_brown_sharon_carter.sql diff --git a/apps/dokploy/drizzle/0059_striped_bill_hollister.sql b/apps/dokploy/drizzle/20250123065240_striped_bill_hollister.sql similarity index 100% rename from apps/dokploy/drizzle/0059_striped_bill_hollister.sql rename to apps/dokploy/drizzle/20250123065240_striped_bill_hollister.sql diff --git a/apps/dokploy/drizzle/0060_disable-aggressive-cache.sql b/apps/dokploy/drizzle/20250126221816_disable-aggressive-cache.sql similarity index 100% rename from apps/dokploy/drizzle/0060_disable-aggressive-cache.sql rename to apps/dokploy/drizzle/20250126221816_disable-aggressive-cache.sql diff --git a/apps/dokploy/drizzle/0061_many_molten_man.sql b/apps/dokploy/drizzle/20250202072824_many_molten_man.sql similarity index 100% rename from apps/dokploy/drizzle/0061_many_molten_man.sql rename to apps/dokploy/drizzle/20250202072824_many_molten_man.sql diff --git a/apps/dokploy/drizzle/0062_slippery_white_tiger.sql b/apps/dokploy/drizzle/20250202075315_slippery_white_tiger.sql similarity index 100% rename from apps/dokploy/drizzle/0062_slippery_white_tiger.sql rename to apps/dokploy/drizzle/20250202075315_slippery_white_tiger.sql diff --git a/apps/dokploy/drizzle/0063_panoramic_dreadnoughts.sql b/apps/dokploy/drizzle/20250202190045_panoramic_dreadnoughts.sql similarity index 100% rename from apps/dokploy/drizzle/0063_panoramic_dreadnoughts.sql rename to apps/dokploy/drizzle/20250202190045_panoramic_dreadnoughts.sql diff --git a/apps/dokploy/drizzle/0064_previous_agent_brand.sql b/apps/dokploy/drizzle/20250203063307_previous_agent_brand.sql similarity index 100% rename from apps/dokploy/drizzle/0064_previous_agent_brand.sql rename to apps/dokploy/drizzle/20250203063307_previous_agent_brand.sql diff --git a/apps/dokploy/drizzle/0065_daily_zaladane.sql b/apps/dokploy/drizzle/20250209075737_daily_zaladane.sql similarity index 100% rename from apps/dokploy/drizzle/0065_daily_zaladane.sql rename to apps/dokploy/drizzle/20250209075737_daily_zaladane.sql diff --git a/apps/dokploy/drizzle/0066_yielding_echo.sql b/apps/dokploy/drizzle/20250213060833_yielding_echo.sql similarity index 100% rename from apps/dokploy/drizzle/0066_yielding_echo.sql rename to apps/dokploy/drizzle/20250213060833_yielding_echo.sql diff --git a/apps/dokploy/drizzle/0067_condemned_sugar_man.sql b/apps/dokploy/drizzle/20250302050723_condemned_sugar_man.sql similarity index 100% rename from apps/dokploy/drizzle/0067_condemned_sugar_man.sql rename to apps/dokploy/drizzle/20250302050723_condemned_sugar_man.sql diff --git a/apps/dokploy/drizzle/0068_complex_rhino.sql b/apps/dokploy/drizzle/20250302064236_complex_rhino.sql similarity index 100% rename from apps/dokploy/drizzle/0068_complex_rhino.sql rename to apps/dokploy/drizzle/20250302064236_complex_rhino.sql diff --git a/apps/dokploy/drizzle/0069_legal_bill_hollister.sql b/apps/dokploy/drizzle/20250305053516_legal_bill_hollister.sql similarity index 100% rename from apps/dokploy/drizzle/0069_legal_bill_hollister.sql rename to apps/dokploy/drizzle/20250305053516_legal_bill_hollister.sql diff --git a/apps/dokploy/drizzle/0070_useful_serpent_society.sql b/apps/dokploy/drizzle/20250307044457_useful_serpent_society.sql similarity index 100% rename from apps/dokploy/drizzle/0070_useful_serpent_society.sql rename to apps/dokploy/drizzle/20250307044457_useful_serpent_society.sql diff --git a/apps/dokploy/drizzle/0071_flaky_black_queen.sql b/apps/dokploy/drizzle/20250308185420_flaky_black_queen.sql similarity index 100% rename from apps/dokploy/drizzle/0071_flaky_black_queen.sql rename to apps/dokploy/drizzle/20250308185420_flaky_black_queen.sql diff --git a/apps/dokploy/drizzle/0072_green_susan_delgado.sql b/apps/dokploy/drizzle/20250309022329_green_susan_delgado.sql similarity index 100% rename from apps/dokploy/drizzle/0072_green_susan_delgado.sql rename to apps/dokploy/drizzle/20250309022329_green_susan_delgado.sql diff --git a/apps/dokploy/drizzle/0073_hot_domino.sql b/apps/dokploy/drizzle/20250309030801_hot_domino.sql similarity index 100% rename from apps/dokploy/drizzle/0073_hot_domino.sql rename to apps/dokploy/drizzle/20250309030801_hot_domino.sql diff --git a/apps/dokploy/drizzle/0074_black_quasar.sql b/apps/dokploy/drizzle/20250309031424_black_quasar.sql similarity index 100% rename from apps/dokploy/drizzle/0074_black_quasar.sql rename to apps/dokploy/drizzle/20250309031424_black_quasar.sql diff --git a/apps/dokploy/drizzle/0075_young_typhoid_mary.sql b/apps/dokploy/drizzle/20250309033847_young_typhoid_mary.sql similarity index 100% rename from apps/dokploy/drizzle/0075_young_typhoid_mary.sql rename to apps/dokploy/drizzle/20250309033847_young_typhoid_mary.sql diff --git a/apps/dokploy/drizzle/0076_young_sharon_ventura.sql b/apps/dokploy/drizzle/20250309041554_young_sharon_ventura.sql similarity index 100% rename from apps/dokploy/drizzle/0076_young_sharon_ventura.sql rename to apps/dokploy/drizzle/20250309041554_young_sharon_ventura.sql diff --git a/apps/dokploy/drizzle/0077_chemical_dreadnoughts.sql b/apps/dokploy/drizzle/20250309084806_chemical_dreadnoughts.sql similarity index 100% rename from apps/dokploy/drizzle/0077_chemical_dreadnoughts.sql rename to apps/dokploy/drizzle/20250309084806_chemical_dreadnoughts.sql diff --git a/apps/dokploy/drizzle/0078_uneven_omega_sentinel.sql b/apps/dokploy/drizzle/20250316080314_uneven_omega_sentinel.sql similarity index 100% rename from apps/dokploy/drizzle/0078_uneven_omega_sentinel.sql rename to apps/dokploy/drizzle/20250316080314_uneven_omega_sentinel.sql diff --git a/apps/dokploy/drizzle/0079_bizarre_wendell_rand.sql b/apps/dokploy/drizzle/20250318070810_bizarre_wendell_rand.sql similarity index 100% rename from apps/dokploy/drizzle/0079_bizarre_wendell_rand.sql rename to apps/dokploy/drizzle/20250318070810_bizarre_wendell_rand.sql diff --git a/apps/dokploy/drizzle/0080_sleepy_sinister_six.sql b/apps/dokploy/drizzle/20250329204106_sleepy_sinister_six.sql similarity index 100% rename from apps/dokploy/drizzle/0080_sleepy_sinister_six.sql rename to apps/dokploy/drizzle/20250329204106_sleepy_sinister_six.sql diff --git a/apps/dokploy/drizzle/0081_lovely_mentallo.sql b/apps/dokploy/drizzle/20250329204734_lovely_mentallo.sql similarity index 100% rename from apps/dokploy/drizzle/0081_lovely_mentallo.sql rename to apps/dokploy/drizzle/20250329204734_lovely_mentallo.sql diff --git a/apps/dokploy/drizzle/0082_clean_mandarin.sql b/apps/dokploy/drizzle/20250329223449_clean_mandarin.sql similarity index 100% rename from apps/dokploy/drizzle/0082_clean_mandarin.sql rename to apps/dokploy/drizzle/20250329223449_clean_mandarin.sql diff --git a/apps/dokploy/drizzle/0083_parallel_stranger.sql b/apps/dokploy/drizzle/20250329224611_parallel_stranger.sql similarity index 100% rename from apps/dokploy/drizzle/0083_parallel_stranger.sql rename to apps/dokploy/drizzle/20250329224611_parallel_stranger.sql diff --git a/apps/dokploy/drizzle/0084_thin_iron_lad.sql b/apps/dokploy/drizzle/20250406071952_thin_iron_lad.sql similarity index 100% rename from apps/dokploy/drizzle/0084_thin_iron_lad.sql rename to apps/dokploy/drizzle/20250406071952_thin_iron_lad.sql diff --git a/apps/dokploy/drizzle/0085_equal_captain_stacy.sql b/apps/dokploy/drizzle/20250426221329_equal_captain_stacy.sql similarity index 100% rename from apps/dokploy/drizzle/0085_equal_captain_stacy.sql rename to apps/dokploy/drizzle/20250426221329_equal_captain_stacy.sql diff --git a/apps/dokploy/drizzle/0086_rainy_gertrude_yorkes.sql b/apps/dokploy/drizzle/20250426223116_rainy_gertrude_yorkes.sql similarity index 100% rename from apps/dokploy/drizzle/0086_rainy_gertrude_yorkes.sql rename to apps/dokploy/drizzle/20250426223116_rainy_gertrude_yorkes.sql diff --git a/apps/dokploy/drizzle/0087_lively_risque.sql b/apps/dokploy/drizzle/20250427031243_lively_risque.sql similarity index 100% rename from apps/dokploy/drizzle/0087_lively_risque.sql rename to apps/dokploy/drizzle/20250427031243_lively_risque.sql diff --git a/apps/dokploy/drizzle/0088_illegal_ma_gnuci.sql b/apps/dokploy/drizzle/20250503072208_illegal_ma_gnuci.sql similarity index 100% rename from apps/dokploy/drizzle/0088_illegal_ma_gnuci.sql rename to apps/dokploy/drizzle/20250503072208_illegal_ma_gnuci.sql diff --git a/apps/dokploy/drizzle/0089_noisy_sandman.sql b/apps/dokploy/drizzle/20250504210244_noisy_sandman.sql similarity index 100% rename from apps/dokploy/drizzle/0089_noisy_sandman.sql rename to apps/dokploy/drizzle/20250504210244_noisy_sandman.sql diff --git a/apps/dokploy/drizzle/0090_clean_wolf_cub.sql b/apps/dokploy/drizzle/20250506052838_clean_wolf_cub.sql similarity index 100% rename from apps/dokploy/drizzle/0090_clean_wolf_cub.sql rename to apps/dokploy/drizzle/20250506052838_clean_wolf_cub.sql diff --git a/apps/dokploy/drizzle/0091_spotty_kulan_gath.sql b/apps/dokploy/drizzle/20250506080002_spotty_kulan_gath.sql similarity index 100% rename from apps/dokploy/drizzle/0091_spotty_kulan_gath.sql rename to apps/dokploy/drizzle/20250506080002_spotty_kulan_gath.sql diff --git a/apps/dokploy/drizzle/0092_stiff_the_watchers.sql b/apps/dokploy/drizzle/20250520035349_stiff_the_watchers.sql similarity index 100% rename from apps/dokploy/drizzle/0092_stiff_the_watchers.sql rename to apps/dokploy/drizzle/20250520035349_stiff_the_watchers.sql diff --git a/apps/dokploy/drizzle/0093_nice_gorilla_man.sql b/apps/dokploy/drizzle/20250620052738_nice_gorilla_man.sql similarity index 100% rename from apps/dokploy/drizzle/0093_nice_gorilla_man.sql rename to apps/dokploy/drizzle/20250620052738_nice_gorilla_man.sql diff --git a/apps/dokploy/drizzle/0094_numerous_carmella_unuscione.sql b/apps/dokploy/drizzle/20250622022654_numerous_carmella_unuscione.sql similarity index 100% rename from apps/dokploy/drizzle/0094_numerous_carmella_unuscione.sql rename to apps/dokploy/drizzle/20250622022654_numerous_carmella_unuscione.sql diff --git a/apps/dokploy/drizzle/0095_curly_justice.sql b/apps/dokploy/drizzle/20250622031812_curly_justice.sql similarity index 100% rename from apps/dokploy/drizzle/0095_curly_justice.sql rename to apps/dokploy/drizzle/20250622031812_curly_justice.sql diff --git a/apps/dokploy/drizzle/0096_small_shaman.sql b/apps/dokploy/drizzle/20250622043350_small_shaman.sql similarity index 100% rename from apps/dokploy/drizzle/0096_small_shaman.sql rename to apps/dokploy/drizzle/20250622043350_small_shaman.sql diff --git a/apps/dokploy/drizzle/0097_hard_lizard.sql b/apps/dokploy/drizzle/20250622044721_hard_lizard.sql similarity index 100% rename from apps/dokploy/drizzle/0097_hard_lizard.sql rename to apps/dokploy/drizzle/20250622044721_hard_lizard.sql diff --git a/apps/dokploy/drizzle/0098_conscious_chat.sql b/apps/dokploy/drizzle/20250629214105_conscious_chat.sql similarity index 100% rename from apps/dokploy/drizzle/0098_conscious_chat.sql rename to apps/dokploy/drizzle/20250629214105_conscious_chat.sql diff --git a/apps/dokploy/drizzle/0099_wise_golden_guardian.sql b/apps/dokploy/drizzle/20250705053249_wise_golden_guardian.sql similarity index 100% rename from apps/dokploy/drizzle/0099_wise_golden_guardian.sql rename to apps/dokploy/drizzle/20250705053249_wise_golden_guardian.sql diff --git a/apps/dokploy/drizzle/0100_purple_rogue.sql b/apps/dokploy/drizzle/20250705185536_purple_rogue.sql similarity index 100% rename from apps/dokploy/drizzle/0100_purple_rogue.sql rename to apps/dokploy/drizzle/20250705185536_purple_rogue.sql diff --git a/apps/dokploy/drizzle/0101_moaning_blazing_skull.sql b/apps/dokploy/drizzle/20250705214031_moaning_blazing_skull.sql similarity index 100% rename from apps/dokploy/drizzle/0101_moaning_blazing_skull.sql rename to apps/dokploy/drizzle/20250705214031_moaning_blazing_skull.sql diff --git a/apps/dokploy/drizzle/0102_opposite_grandmaster.sql b/apps/dokploy/drizzle/20250707003805_opposite_grandmaster.sql similarity index 100% rename from apps/dokploy/drizzle/0102_opposite_grandmaster.sql rename to apps/dokploy/drizzle/20250707003805_opposite_grandmaster.sql diff --git a/apps/dokploy/drizzle/0103_cultured_pestilence.sql b/apps/dokploy/drizzle/20250714040244_cultured_pestilence.sql similarity index 100% rename from apps/dokploy/drizzle/0103_cultured_pestilence.sql rename to apps/dokploy/drizzle/20250714040244_cultured_pestilence.sql diff --git a/apps/dokploy/drizzle/0104_omniscient_randall.sql b/apps/dokploy/drizzle/20250803075007_omniscient_randall.sql similarity index 100% rename from apps/dokploy/drizzle/0104_omniscient_randall.sql rename to apps/dokploy/drizzle/20250803075007_omniscient_randall.sql diff --git a/apps/dokploy/drizzle/0105_clumsy_quicksilver.sql b/apps/dokploy/drizzle/20250803221441_clumsy_quicksilver.sql similarity index 100% rename from apps/dokploy/drizzle/0105_clumsy_quicksilver.sql rename to apps/dokploy/drizzle/20250803221441_clumsy_quicksilver.sql diff --git a/apps/dokploy/drizzle/0106_purple_maggott.sql b/apps/dokploy/drizzle/20250811113422_purple_maggott.sql similarity index 100% rename from apps/dokploy/drizzle/0106_purple_maggott.sql rename to apps/dokploy/drizzle/20250811113422_purple_maggott.sql diff --git a/apps/dokploy/drizzle/0107_loud_kang.sql b/apps/dokploy/drizzle/20250902061513_loud_kang.sql similarity index 100% rename from apps/dokploy/drizzle/0107_loud_kang.sql rename to apps/dokploy/drizzle/20250902061513_loud_kang.sql diff --git a/apps/dokploy/drizzle/0108_lazy_next_avengers.sql b/apps/dokploy/drizzle/20250904031518_lazy_next_avengers.sql similarity index 100% rename from apps/dokploy/drizzle/0108_lazy_next_avengers.sql rename to apps/dokploy/drizzle/20250904031518_lazy_next_avengers.sql diff --git a/apps/dokploy/drizzle/0109_remarkable_sauron.sql b/apps/dokploy/drizzle/20250905060053_remarkable_sauron.sql similarity index 100% rename from apps/dokploy/drizzle/0109_remarkable_sauron.sql rename to apps/dokploy/drizzle/20250905060053_remarkable_sauron.sql diff --git a/apps/dokploy/drizzle/0110_red_psynapse.sql b/apps/dokploy/drizzle/20250906201221_red_psynapse.sql similarity index 100% rename from apps/dokploy/drizzle/0110_red_psynapse.sql rename to apps/dokploy/drizzle/20250906201221_red_psynapse.sql diff --git a/apps/dokploy/drizzle/0111_mushy_wolfsbane.sql b/apps/dokploy/drizzle/20250921091044_mushy_wolfsbane.sql similarity index 100% rename from apps/dokploy/drizzle/0111_mushy_wolfsbane.sql rename to apps/dokploy/drizzle/20250921091044_mushy_wolfsbane.sql diff --git a/apps/dokploy/drizzle/0112_freezing_skrulls.sql b/apps/dokploy/drizzle/20250921193840_freezing_skrulls.sql similarity index 100% rename from apps/dokploy/drizzle/0112_freezing_skrulls.sql rename to apps/dokploy/drizzle/20250921193840_freezing_skrulls.sql diff --git a/apps/dokploy/drizzle/0113_complete_rafael_vega.sql b/apps/dokploy/drizzle/20250927081336_complete_rafael_vega.sql similarity index 100% rename from apps/dokploy/drizzle/0113_complete_rafael_vega.sql rename to apps/dokploy/drizzle/20250927081336_complete_rafael_vega.sql diff --git a/apps/dokploy/drizzle/0114_dry_black_tom.sql b/apps/dokploy/drizzle/20251005054612_dry_black_tom.sql similarity index 100% rename from apps/dokploy/drizzle/0114_dry_black_tom.sql rename to apps/dokploy/drizzle/20251005054612_dry_black_tom.sql diff --git a/apps/dokploy/drizzle/0115_serious_black_bird.sql b/apps/dokploy/drizzle/20251005060900_serious_black_bird.sql similarity index 100% rename from apps/dokploy/drizzle/0115_serious_black_bird.sql rename to apps/dokploy/drizzle/20251005060900_serious_black_bird.sql diff --git a/apps/dokploy/drizzle/0116_amusing_firedrake.sql b/apps/dokploy/drizzle/20251005061923_amusing_firedrake.sql similarity index 100% rename from apps/dokploy/drizzle/0116_amusing_firedrake.sql rename to apps/dokploy/drizzle/20251005061923_amusing_firedrake.sql diff --git a/apps/dokploy/drizzle/0117_lumpy_nuke.sql b/apps/dokploy/drizzle/20251025054233_lumpy_nuke.sql similarity index 100% rename from apps/dokploy/drizzle/0117_lumpy_nuke.sql rename to apps/dokploy/drizzle/20251025054233_lumpy_nuke.sql diff --git a/apps/dokploy/drizzle/0118_loose_anita_blake.sql b/apps/dokploy/drizzle/20251025181024_loose_anita_blake.sql similarity index 100% rename from apps/dokploy/drizzle/0118_loose_anita_blake.sql rename to apps/dokploy/drizzle/20251025181024_loose_anita_blake.sql diff --git a/apps/dokploy/drizzle/0119_bouncy_morbius.sql b/apps/dokploy/drizzle/20251103040556_bouncy_morbius.sql similarity index 100% rename from apps/dokploy/drizzle/0119_bouncy_morbius.sql rename to apps/dokploy/drizzle/20251103040556_bouncy_morbius.sql diff --git a/apps/dokploy/drizzle/0120_lame_captain_midlands.sql b/apps/dokploy/drizzle/20251108200900_lame_captain_midlands.sql similarity index 100% rename from apps/dokploy/drizzle/0120_lame_captain_midlands.sql rename to apps/dokploy/drizzle/20251108200900_lame_captain_midlands.sql diff --git a/apps/dokploy/drizzle/0121_rainy_cargill.sql b/apps/dokploy/drizzle/20251121195717_rainy_cargill.sql similarity index 100% rename from apps/dokploy/drizzle/0121_rainy_cargill.sql rename to apps/dokploy/drizzle/20251121195717_rainy_cargill.sql diff --git a/apps/dokploy/drizzle/0122_absent_frightful_four.sql b/apps/dokploy/drizzle/20251130050947_absent_frightful_four.sql similarity index 100% rename from apps/dokploy/drizzle/0122_absent_frightful_four.sql rename to apps/dokploy/drizzle/20251130050947_absent_frightful_four.sql diff --git a/apps/dokploy/drizzle/0123_cloudy_piledriver.sql b/apps/dokploy/drizzle/20251130175508_cloudy_piledriver.sql similarity index 100% rename from apps/dokploy/drizzle/0123_cloudy_piledriver.sql rename to apps/dokploy/drizzle/20251130175508_cloudy_piledriver.sql diff --git a/apps/dokploy/drizzle/0124_certain_cloak.sql b/apps/dokploy/drizzle/20251201064414_certain_cloak.sql similarity index 100% rename from apps/dokploy/drizzle/0124_certain_cloak.sql rename to apps/dokploy/drizzle/20251201064414_certain_cloak.sql diff --git a/apps/dokploy/drizzle/0125_neat_the_phantom.sql b/apps/dokploy/drizzle/20251201071327_neat_the_phantom.sql similarity index 100% rename from apps/dokploy/drizzle/0125_neat_the_phantom.sql rename to apps/dokploy/drizzle/20251201071327_neat_the_phantom.sql diff --git a/apps/dokploy/drizzle/0126_nifty_monster_badoon.sql b/apps/dokploy/drizzle/20251206235455_nifty_monster_badoon.sql similarity index 100% rename from apps/dokploy/drizzle/0126_nifty_monster_badoon.sql rename to apps/dokploy/drizzle/20251206235455_nifty_monster_badoon.sql diff --git a/apps/dokploy/drizzle/0127_superb_alice.sql b/apps/dokploy/drizzle/20251207081309_superb_alice.sql similarity index 100% rename from apps/dokploy/drizzle/0127_superb_alice.sql rename to apps/dokploy/drizzle/20251207081309_superb_alice.sql diff --git a/apps/dokploy/drizzle/0128_hard_falcon.sql b/apps/dokploy/drizzle/20251207100149_hard_falcon.sql similarity index 100% rename from apps/dokploy/drizzle/0128_hard_falcon.sql rename to apps/dokploy/drizzle/20251207100149_hard_falcon.sql diff --git a/apps/dokploy/drizzle/0129_pale_roughhouse.sql b/apps/dokploy/drizzle/20251207193944_pale_roughhouse.sql similarity index 100% rename from apps/dokploy/drizzle/0129_pale_roughhouse.sql rename to apps/dokploy/drizzle/20251207193944_pale_roughhouse.sql diff --git a/apps/dokploy/drizzle/0130_perpetual_screwball.sql b/apps/dokploy/drizzle/20251208042057_perpetual_screwball.sql similarity index 100% rename from apps/dokploy/drizzle/0130_perpetual_screwball.sql rename to apps/dokploy/drizzle/20251208042057_perpetual_screwball.sql diff --git a/apps/dokploy/drizzle/0131_volatile_beast.sql b/apps/dokploy/drizzle/20251210045701_volatile_beast.sql similarity index 100% rename from apps/dokploy/drizzle/0131_volatile_beast.sql rename to apps/dokploy/drizzle/20251210045701_volatile_beast.sql diff --git a/apps/dokploy/drizzle/0132_clean_layla_miller.sql b/apps/dokploy/drizzle/20251210060253_clean_layla_miller.sql similarity index 100% rename from apps/dokploy/drizzle/0132_clean_layla_miller.sql rename to apps/dokploy/drizzle/20251210060253_clean_layla_miller.sql diff --git a/apps/dokploy/drizzle/0133_striped_the_order.sql b/apps/dokploy/drizzle/20251221071758_striped_the_order.sql similarity index 100% rename from apps/dokploy/drizzle/0133_striped_the_order.sql rename to apps/dokploy/drizzle/20251221071758_striped_the_order.sql diff --git a/apps/dokploy/drizzle/meta/0000_snapshot.json b/apps/dokploy/drizzle/meta/20240416101901_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0000_snapshot.json rename to apps/dokploy/drizzle/meta/20240416101901_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0001_snapshot.json b/apps/dokploy/drizzle/meta/20240422045357_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0001_snapshot.json rename to apps/dokploy/drizzle/meta/20240422045357_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0002_snapshot.json b/apps/dokploy/drizzle/meta/20240422052452_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0002_snapshot.json rename to apps/dokploy/drizzle/meta/20240422052452_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0003_snapshot.json b/apps/dokploy/drizzle/meta/20240424082541_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0003_snapshot.json rename to apps/dokploy/drizzle/meta/20240424082541_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0004_snapshot.json b/apps/dokploy/drizzle/meta/20240425002532_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0004_snapshot.json rename to apps/dokploy/drizzle/meta/20240425002532_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0005_snapshot.json b/apps/dokploy/drizzle/meta/20240512215850_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0005_snapshot.json rename to apps/dokploy/drizzle/meta/20240512215850_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0006_snapshot.json b/apps/dokploy/drizzle/meta/20240513011925_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0006_snapshot.json rename to apps/dokploy/drizzle/meta/20240513011925_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0007_snapshot.json b/apps/dokploy/drizzle/meta/20240513012457_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0007_snapshot.json rename to apps/dokploy/drizzle/meta/20240513012457_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0008_snapshot.json b/apps/dokploy/drizzle/meta/20240513013543_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0008_snapshot.json rename to apps/dokploy/drizzle/meta/20240513013543_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0009_snapshot.json b/apps/dokploy/drizzle/meta/20240513014614_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0009_snapshot.json rename to apps/dokploy/drizzle/meta/20240513014614_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0010_snapshot.json b/apps/dokploy/drizzle/meta/20240513042037_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0010_snapshot.json rename to apps/dokploy/drizzle/meta/20240513042037_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0011_snapshot.json b/apps/dokploy/drizzle/meta/20240513042350_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0011_snapshot.json rename to apps/dokploy/drizzle/meta/20240513042350_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0012_snapshot.json b/apps/dokploy/drizzle/meta/20240518070156_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0012_snapshot.json rename to apps/dokploy/drizzle/meta/20240518070156_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0013_snapshot.json b/apps/dokploy/drizzle/meta/20240518234939_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0013_snapshot.json rename to apps/dokploy/drizzle/meta/20240518234939_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0014_snapshot.json b/apps/dokploy/drizzle/meta/20240526092247_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0014_snapshot.json rename to apps/dokploy/drizzle/meta/20240526092247_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0015_snapshot.json b/apps/dokploy/drizzle/meta/20240605051517_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0015_snapshot.json rename to apps/dokploy/drizzle/meta/20240605051517_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0016_snapshot.json b/apps/dokploy/drizzle/meta/20240623021956_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0016_snapshot.json rename to apps/dokploy/drizzle/meta/20240623021956_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0017_snapshot.json b/apps/dokploy/drizzle/meta/20240628035934_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0017_snapshot.json rename to apps/dokploy/drizzle/meta/20240628035934_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0018_snapshot.json b/apps/dokploy/drizzle/meta/20240702135257_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0018_snapshot.json rename to apps/dokploy/drizzle/meta/20240702135257_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0019_snapshot.json b/apps/dokploy/drizzle/meta/20240716061826_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0019_snapshot.json rename to apps/dokploy/drizzle/meta/20240716061826_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0020_snapshot.json b/apps/dokploy/drizzle/meta/20240719043741_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0020_snapshot.json rename to apps/dokploy/drizzle/meta/20240719043741_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0021_snapshot.json b/apps/dokploy/drizzle/meta/20240719062703_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0021_snapshot.json rename to apps/dokploy/drizzle/meta/20240719062703_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0022_snapshot.json b/apps/dokploy/drizzle/meta/20240721030603_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0022_snapshot.json rename to apps/dokploy/drizzle/meta/20240721030603_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0023_snapshot.json b/apps/dokploy/drizzle/meta/20240721061942_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0023_snapshot.json rename to apps/dokploy/drizzle/meta/20240721061942_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0024_snapshot.json b/apps/dokploy/drizzle/meta/20240721231315_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0024_snapshot.json rename to apps/dokploy/drizzle/meta/20240721231315_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0025_snapshot.json b/apps/dokploy/drizzle/meta/20240722073733_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0025_snapshot.json rename to apps/dokploy/drizzle/meta/20240722073733_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0026_snapshot.json b/apps/dokploy/drizzle/meta/20240726073340_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0026_snapshot.json rename to apps/dokploy/drizzle/meta/20240726073340_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0027_snapshot.json b/apps/dokploy/drizzle/meta/20240731165819_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0027_snapshot.json rename to apps/dokploy/drizzle/meta/20240731165819_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0028_snapshot.json b/apps/dokploy/drizzle/meta/20240801091039_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0028_snapshot.json rename to apps/dokploy/drizzle/meta/20240801091039_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0029_snapshot.json b/apps/dokploy/drizzle/meta/20240802055946_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0029_snapshot.json rename to apps/dokploy/drizzle/meta/20240802055946_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0030_snapshot.json b/apps/dokploy/drizzle/meta/20240814040819_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0030_snapshot.json rename to apps/dokploy/drizzle/meta/20240814040819_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0031_snapshot.json b/apps/dokploy/drizzle/meta/20240815060056_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0031_snapshot.json rename to apps/dokploy/drizzle/meta/20240815060056_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0032_snapshot.json b/apps/dokploy/drizzle/meta/20240815070057_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0032_snapshot.json rename to apps/dokploy/drizzle/meta/20240815070057_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0033_snapshot.json b/apps/dokploy/drizzle/meta/20240902041202_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0033_snapshot.json rename to apps/dokploy/drizzle/meta/20240902041202_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0034_snapshot.json b/apps/dokploy/drizzle/meta/20240902055317_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0034_snapshot.json rename to apps/dokploy/drizzle/meta/20240902055317_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0035_snapshot.json b/apps/dokploy/drizzle/meta/20240904055524_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0035_snapshot.json rename to apps/dokploy/drizzle/meta/20240904055524_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0036_snapshot.json b/apps/dokploy/drizzle/meta/20240905065551_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0036_snapshot.json rename to apps/dokploy/drizzle/meta/20240905065551_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0037_snapshot.json b/apps/dokploy/drizzle/meta/20240922065809_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0037_snapshot.json rename to apps/dokploy/drizzle/meta/20240922065809_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0038_snapshot.json b/apps/dokploy/drizzle/meta/20241003075450_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0038_snapshot.json rename to apps/dokploy/drizzle/meta/20241003075450_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0039_snapshot.json b/apps/dokploy/drizzle/meta/20241004055207_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0039_snapshot.json rename to apps/dokploy/drizzle/meta/20241004055207_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0040_snapshot.json b/apps/dokploy/drizzle/meta/20241013004937_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0040_snapshot.json rename to apps/dokploy/drizzle/meta/20241013004937_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0041_snapshot.json b/apps/dokploy/drizzle/meta/20241023071038_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0041_snapshot.json rename to apps/dokploy/drizzle/meta/20241023071038_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0042_snapshot.json b/apps/dokploy/drizzle/meta/20241026231359_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0042_snapshot.json rename to apps/dokploy/drizzle/meta/20241026231359_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0043_snapshot.json b/apps/dokploy/drizzle/meta/20241117200605_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0043_snapshot.json rename to apps/dokploy/drizzle/meta/20241117200605_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0044_snapshot.json b/apps/dokploy/drizzle/meta/20241117203219_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0044_snapshot.json rename to apps/dokploy/drizzle/meta/20241117203219_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0045_snapshot.json b/apps/dokploy/drizzle/meta/20241126180301_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0045_snapshot.json rename to apps/dokploy/drizzle/meta/20241126180301_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0046_snapshot.json b/apps/dokploy/drizzle/meta/20241129033311_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0046_snapshot.json rename to apps/dokploy/drizzle/meta/20241129033311_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0047_snapshot.json b/apps/dokploy/drizzle/meta/20241207191810_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0047_snapshot.json rename to apps/dokploy/drizzle/meta/20241207191810_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0048_snapshot.json b/apps/dokploy/drizzle/meta/20241207191923_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0048_snapshot.json rename to apps/dokploy/drizzle/meta/20241207191923_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0049_snapshot.json b/apps/dokploy/drizzle/meta/20241208033242_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0049_snapshot.json rename to apps/dokploy/drizzle/meta/20241208033242_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0050_snapshot.json b/apps/dokploy/drizzle/meta/20241211035144_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0050_snapshot.json rename to apps/dokploy/drizzle/meta/20241211035144_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0051_snapshot.json b/apps/dokploy/drizzle/meta/20241215054442_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0051_snapshot.json rename to apps/dokploy/drizzle/meta/20241215054442_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0052_snapshot.json b/apps/dokploy/drizzle/meta/20241221192857_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0052_snapshot.json rename to apps/dokploy/drizzle/meta/20241221192857_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0053_snapshot.json b/apps/dokploy/drizzle/meta/20241225092724_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0053_snapshot.json rename to apps/dokploy/drizzle/meta/20241225092724_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0054_snapshot.json b/apps/dokploy/drizzle/meta/20250112081021_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0054_snapshot.json rename to apps/dokploy/drizzle/meta/20250112081021_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0055_snapshot.json b/apps/dokploy/drizzle/meta/20250112081343_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0055_snapshot.json rename to apps/dokploy/drizzle/meta/20250112081343_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0056_snapshot.json b/apps/dokploy/drizzle/meta/20250113173838_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0056_snapshot.json rename to apps/dokploy/drizzle/meta/20250113173838_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0057_snapshot.json b/apps/dokploy/drizzle/meta/20250119170103_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0057_snapshot.json rename to apps/dokploy/drizzle/meta/20250119170103_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0058_snapshot.json b/apps/dokploy/drizzle/meta/20250123061503_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0058_snapshot.json rename to apps/dokploy/drizzle/meta/20250123061503_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0059_snapshot.json b/apps/dokploy/drizzle/meta/20250123065240_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0059_snapshot.json rename to apps/dokploy/drizzle/meta/20250123065240_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0060_snapshot.json b/apps/dokploy/drizzle/meta/20250126221816_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0060_snapshot.json rename to apps/dokploy/drizzle/meta/20250126221816_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0061_snapshot.json b/apps/dokploy/drizzle/meta/20250202072824_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0061_snapshot.json rename to apps/dokploy/drizzle/meta/20250202072824_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0062_snapshot.json b/apps/dokploy/drizzle/meta/20250202075315_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0062_snapshot.json rename to apps/dokploy/drizzle/meta/20250202075315_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0063_snapshot.json b/apps/dokploy/drizzle/meta/20250202190045_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0063_snapshot.json rename to apps/dokploy/drizzle/meta/20250202190045_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0064_snapshot.json b/apps/dokploy/drizzle/meta/20250203063307_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0064_snapshot.json rename to apps/dokploy/drizzle/meta/20250203063307_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0065_snapshot.json b/apps/dokploy/drizzle/meta/20250209075737_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0065_snapshot.json rename to apps/dokploy/drizzle/meta/20250209075737_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0066_snapshot.json b/apps/dokploy/drizzle/meta/20250213060833_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0066_snapshot.json rename to apps/dokploy/drizzle/meta/20250213060833_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0067_snapshot.json b/apps/dokploy/drizzle/meta/20250302050723_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0067_snapshot.json rename to apps/dokploy/drizzle/meta/20250302050723_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0068_snapshot.json b/apps/dokploy/drizzle/meta/20250302064236_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0068_snapshot.json rename to apps/dokploy/drizzle/meta/20250302064236_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0069_snapshot.json b/apps/dokploy/drizzle/meta/20250305053516_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0069_snapshot.json rename to apps/dokploy/drizzle/meta/20250305053516_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0070_snapshot.json b/apps/dokploy/drizzle/meta/20250307044457_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0070_snapshot.json rename to apps/dokploy/drizzle/meta/20250307044457_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0071_snapshot.json b/apps/dokploy/drizzle/meta/20250308185420_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0071_snapshot.json rename to apps/dokploy/drizzle/meta/20250308185420_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0072_snapshot.json b/apps/dokploy/drizzle/meta/20250309022329_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0072_snapshot.json rename to apps/dokploy/drizzle/meta/20250309022329_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0073_snapshot.json b/apps/dokploy/drizzle/meta/20250309030801_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0073_snapshot.json rename to apps/dokploy/drizzle/meta/20250309030801_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0074_snapshot.json b/apps/dokploy/drizzle/meta/20250309031424_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0074_snapshot.json rename to apps/dokploy/drizzle/meta/20250309031424_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0075_snapshot.json b/apps/dokploy/drizzle/meta/20250309033847_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0075_snapshot.json rename to apps/dokploy/drizzle/meta/20250309033847_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0076_snapshot.json b/apps/dokploy/drizzle/meta/20250309041554_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0076_snapshot.json rename to apps/dokploy/drizzle/meta/20250309041554_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0077_snapshot.json b/apps/dokploy/drizzle/meta/20250309084806_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0077_snapshot.json rename to apps/dokploy/drizzle/meta/20250309084806_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0078_snapshot.json b/apps/dokploy/drizzle/meta/20250316080314_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0078_snapshot.json rename to apps/dokploy/drizzle/meta/20250316080314_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0079_snapshot.json b/apps/dokploy/drizzle/meta/20250318070810_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0079_snapshot.json rename to apps/dokploy/drizzle/meta/20250318070810_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0080_snapshot.json b/apps/dokploy/drizzle/meta/20250329204106_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0080_snapshot.json rename to apps/dokploy/drizzle/meta/20250329204106_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0081_snapshot.json b/apps/dokploy/drizzle/meta/20250329204734_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0081_snapshot.json rename to apps/dokploy/drizzle/meta/20250329204734_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0082_snapshot.json b/apps/dokploy/drizzle/meta/20250329223449_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0082_snapshot.json rename to apps/dokploy/drizzle/meta/20250329223449_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0083_snapshot.json b/apps/dokploy/drizzle/meta/20250329224611_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0083_snapshot.json rename to apps/dokploy/drizzle/meta/20250329224611_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0084_snapshot.json b/apps/dokploy/drizzle/meta/20250406071952_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0084_snapshot.json rename to apps/dokploy/drizzle/meta/20250406071952_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0085_snapshot.json b/apps/dokploy/drizzle/meta/20250426221329_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0085_snapshot.json rename to apps/dokploy/drizzle/meta/20250426221329_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0086_snapshot.json b/apps/dokploy/drizzle/meta/20250426223116_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0086_snapshot.json rename to apps/dokploy/drizzle/meta/20250426223116_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0087_snapshot.json b/apps/dokploy/drizzle/meta/20250427031243_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0087_snapshot.json rename to apps/dokploy/drizzle/meta/20250427031243_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0088_snapshot.json b/apps/dokploy/drizzle/meta/20250503072208_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0088_snapshot.json rename to apps/dokploy/drizzle/meta/20250503072208_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0089_snapshot.json b/apps/dokploy/drizzle/meta/20250504210244_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0089_snapshot.json rename to apps/dokploy/drizzle/meta/20250504210244_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0090_snapshot.json b/apps/dokploy/drizzle/meta/20250506052838_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0090_snapshot.json rename to apps/dokploy/drizzle/meta/20250506052838_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0091_snapshot.json b/apps/dokploy/drizzle/meta/20250506080002_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0091_snapshot.json rename to apps/dokploy/drizzle/meta/20250506080002_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0092_snapshot.json b/apps/dokploy/drizzle/meta/20250520035349_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0092_snapshot.json rename to apps/dokploy/drizzle/meta/20250520035349_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0093_snapshot.json b/apps/dokploy/drizzle/meta/20250620052738_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0093_snapshot.json rename to apps/dokploy/drizzle/meta/20250620052738_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0094_snapshot.json b/apps/dokploy/drizzle/meta/20250622022654_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0094_snapshot.json rename to apps/dokploy/drizzle/meta/20250622022654_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0095_snapshot.json b/apps/dokploy/drizzle/meta/20250622031812_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0095_snapshot.json rename to apps/dokploy/drizzle/meta/20250622031812_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0096_snapshot.json b/apps/dokploy/drizzle/meta/20250622043350_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0096_snapshot.json rename to apps/dokploy/drizzle/meta/20250622043350_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0097_snapshot.json b/apps/dokploy/drizzle/meta/20250622044721_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0097_snapshot.json rename to apps/dokploy/drizzle/meta/20250622044721_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0098_snapshot.json b/apps/dokploy/drizzle/meta/20250629214105_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0098_snapshot.json rename to apps/dokploy/drizzle/meta/20250629214105_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0099_snapshot.json b/apps/dokploy/drizzle/meta/20250705053249_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0099_snapshot.json rename to apps/dokploy/drizzle/meta/20250705053249_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0100_snapshot.json b/apps/dokploy/drizzle/meta/20250705185536_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0100_snapshot.json rename to apps/dokploy/drizzle/meta/20250705185536_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0101_snapshot.json b/apps/dokploy/drizzle/meta/20250705214031_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0101_snapshot.json rename to apps/dokploy/drizzle/meta/20250705214031_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0102_snapshot.json b/apps/dokploy/drizzle/meta/20250707003805_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0102_snapshot.json rename to apps/dokploy/drizzle/meta/20250707003805_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0103_snapshot.json b/apps/dokploy/drizzle/meta/20250714040244_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0103_snapshot.json rename to apps/dokploy/drizzle/meta/20250714040244_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0104_snapshot.json b/apps/dokploy/drizzle/meta/20250803075007_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0104_snapshot.json rename to apps/dokploy/drizzle/meta/20250803075007_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0105_snapshot.json b/apps/dokploy/drizzle/meta/20250803221441_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0105_snapshot.json rename to apps/dokploy/drizzle/meta/20250803221441_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0106_snapshot.json b/apps/dokploy/drizzle/meta/20250811113422_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0106_snapshot.json rename to apps/dokploy/drizzle/meta/20250811113422_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0107_snapshot.json b/apps/dokploy/drizzle/meta/20250902061513_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0107_snapshot.json rename to apps/dokploy/drizzle/meta/20250902061513_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0108_snapshot.json b/apps/dokploy/drizzle/meta/20250904031518_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0108_snapshot.json rename to apps/dokploy/drizzle/meta/20250904031518_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0109_snapshot.json b/apps/dokploy/drizzle/meta/20250905060053_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0109_snapshot.json rename to apps/dokploy/drizzle/meta/20250905060053_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0110_snapshot.json b/apps/dokploy/drizzle/meta/20250906201221_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0110_snapshot.json rename to apps/dokploy/drizzle/meta/20250906201221_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0111_snapshot.json b/apps/dokploy/drizzle/meta/20250921091044_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0111_snapshot.json rename to apps/dokploy/drizzle/meta/20250921091044_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0112_snapshot.json b/apps/dokploy/drizzle/meta/20250921193840_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0112_snapshot.json rename to apps/dokploy/drizzle/meta/20250921193840_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0113_snapshot.json b/apps/dokploy/drizzle/meta/20250927081336_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0113_snapshot.json rename to apps/dokploy/drizzle/meta/20250927081336_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0114_snapshot.json b/apps/dokploy/drizzle/meta/20251005054612_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0114_snapshot.json rename to apps/dokploy/drizzle/meta/20251005054612_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0115_snapshot.json b/apps/dokploy/drizzle/meta/20251005060900_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0115_snapshot.json rename to apps/dokploy/drizzle/meta/20251005060900_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0116_snapshot.json b/apps/dokploy/drizzle/meta/20251005061923_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0116_snapshot.json rename to apps/dokploy/drizzle/meta/20251005061923_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0117_snapshot.json b/apps/dokploy/drizzle/meta/20251025054233_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0117_snapshot.json rename to apps/dokploy/drizzle/meta/20251025054233_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0118_snapshot.json b/apps/dokploy/drizzle/meta/20251025181024_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0118_snapshot.json rename to apps/dokploy/drizzle/meta/20251025181024_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0119_snapshot.json b/apps/dokploy/drizzle/meta/20251103040556_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0119_snapshot.json rename to apps/dokploy/drizzle/meta/20251103040556_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0120_snapshot.json b/apps/dokploy/drizzle/meta/20251108200900_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0120_snapshot.json rename to apps/dokploy/drizzle/meta/20251108200900_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0121_snapshot.json b/apps/dokploy/drizzle/meta/20251121195717_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0121_snapshot.json rename to apps/dokploy/drizzle/meta/20251121195717_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0122_snapshot.json b/apps/dokploy/drizzle/meta/20251130050947_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0122_snapshot.json rename to apps/dokploy/drizzle/meta/20251130050947_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0123_snapshot.json b/apps/dokploy/drizzle/meta/20251130175508_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0123_snapshot.json rename to apps/dokploy/drizzle/meta/20251130175508_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0124_snapshot.json b/apps/dokploy/drizzle/meta/20251201064414_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0124_snapshot.json rename to apps/dokploy/drizzle/meta/20251201064414_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0125_snapshot.json b/apps/dokploy/drizzle/meta/20251201071327_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0125_snapshot.json rename to apps/dokploy/drizzle/meta/20251201071327_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0126_snapshot.json b/apps/dokploy/drizzle/meta/20251206235455_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0126_snapshot.json rename to apps/dokploy/drizzle/meta/20251206235455_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0127_snapshot.json b/apps/dokploy/drizzle/meta/20251207081309_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0127_snapshot.json rename to apps/dokploy/drizzle/meta/20251207081309_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0128_snapshot.json b/apps/dokploy/drizzle/meta/20251207100149_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0128_snapshot.json rename to apps/dokploy/drizzle/meta/20251207100149_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0129_snapshot.json b/apps/dokploy/drizzle/meta/20251207193944_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0129_snapshot.json rename to apps/dokploy/drizzle/meta/20251207193944_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0130_snapshot.json b/apps/dokploy/drizzle/meta/20251208042057_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0130_snapshot.json rename to apps/dokploy/drizzle/meta/20251208042057_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0131_snapshot.json b/apps/dokploy/drizzle/meta/20251210045701_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0131_snapshot.json rename to apps/dokploy/drizzle/meta/20251210045701_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0132_snapshot.json b/apps/dokploy/drizzle/meta/20251210060253_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0132_snapshot.json rename to apps/dokploy/drizzle/meta/20251210060253_snapshot.json diff --git a/apps/dokploy/drizzle/meta/0133_snapshot.json b/apps/dokploy/drizzle/meta/20251221071758_snapshot.json similarity index 100% rename from apps/dokploy/drizzle/meta/0133_snapshot.json rename to apps/dokploy/drizzle/meta/20251221071758_snapshot.json diff --git a/apps/dokploy/drizzle/meta/_journal.json b/apps/dokploy/drizzle/meta/_journal.json index 3f67c5d173..8fe5a34334 100644 --- a/apps/dokploy/drizzle/meta/_journal.json +++ b/apps/dokploy/drizzle/meta/_journal.json @@ -6,938 +6,938 @@ "idx": 0, "version": "5", "when": 1713262741218, - "tag": "0000_reflective_puck", + "tag": "20240416101901_reflective_puck", "breakpoints": true }, { "idx": 1, "version": "5", "when": 1713761637676, - "tag": "0001_striped_tattoo", + "tag": "20240422045357_striped_tattoo", "breakpoints": true }, { "idx": 2, "version": "5", "when": 1713763492341, - "tag": "0002_ambiguous_carlie_cooper", + "tag": "20240422052452_ambiguous_carlie_cooper", "breakpoints": true }, { "idx": 3, "version": "5", "when": 1713947141424, - "tag": "0003_square_lightspeed", + "tag": "20240424082541_square_lightspeed", "breakpoints": true }, { "idx": 4, "version": "5", "when": 1714004732716, - "tag": "0004_nice_tenebrous", + "tag": "20240425002532_nice_tenebrous", "breakpoints": true }, { "idx": 5, "version": "5", "when": 1715551130605, - "tag": "0005_cute_terror", + "tag": "20240512215850_cute_terror", "breakpoints": true }, { "idx": 6, "version": "6", "when": 1715563165991, - "tag": "0006_oval_jimmy_woo", + "tag": "20240513011925_oval_jimmy_woo", "breakpoints": true }, { "idx": 7, "version": "6", "when": 1715563497100, - "tag": "0007_cute_guardsmen", + "tag": "20240513012457_cute_guardsmen", "breakpoints": true }, { "idx": 8, "version": "6", "when": 1715564143641, - "tag": "0008_lazy_sage", + "tag": "20240513013543_lazy_sage", "breakpoints": true }, { "idx": 9, "version": "6", "when": 1715564774423, - "tag": "0009_majestic_spencer_smythe", + "tag": "20240513014614_majestic_spencer_smythe", "breakpoints": true }, { "idx": 10, "version": "6", "when": 1715574037832, - "tag": "0010_lean_black_widow", + "tag": "20240513042037_lean_black_widow", "breakpoints": true }, { "idx": 11, "version": "6", "when": 1715574230599, - "tag": "0011_petite_calypso", + "tag": "20240513042350_petite_calypso", "breakpoints": true }, { "idx": 12, "version": "6", "when": 1716015716708, - "tag": "0012_chubby_umar", + "tag": "20240518070156_chubby_umar", "breakpoints": true }, { "idx": 13, "version": "6", "when": 1716076179443, - "tag": "0013_blushing_starjammers", + "tag": "20240518234939_blushing_starjammers", "breakpoints": true }, { "idx": 14, "version": "6", "when": 1716715367982, - "tag": "0014_same_hammerhead", + "tag": "20240526092247_same_hammerhead", "breakpoints": true }, { "idx": 15, "version": "6", "when": 1717564517104, - "tag": "0015_fearless_callisto", + "tag": "20240605051517_fearless_callisto", "breakpoints": true }, { "idx": 16, "version": "6", "when": 1719109196484, - "tag": "0016_chunky_leopardon", + "tag": "20240623021956_chunky_leopardon", "breakpoints": true }, { "idx": 17, "version": "6", "when": 1719547174326, - "tag": "0017_minor_post", + "tag": "20240628035934_minor_post", "breakpoints": true }, { "idx": 18, "version": "6", "when": 1719928377858, - "tag": "0018_careful_killmonger", + "tag": "20240702135257_careful_killmonger", "breakpoints": true }, { "idx": 19, "version": "6", "when": 1721110706912, - "tag": "0019_heavy_freak", + "tag": "20240716061826_heavy_freak", "breakpoints": true }, { "idx": 20, "version": "6", "when": 1721363861686, - "tag": "0020_fantastic_slapstick", + "tag": "20240719043741_fantastic_slapstick", "breakpoints": true }, { "idx": 21, "version": "6", "when": 1721370423752, - "tag": "0021_premium_sebastian_shaw", + "tag": "20240719062703_premium_sebastian_shaw", "breakpoints": true }, { "idx": 22, "version": "6", "when": 1721531163852, - "tag": "0022_warm_colonel_america", + "tag": "20240721030603_warm_colonel_america", "breakpoints": true }, { "idx": 23, "version": "6", "when": 1721542782659, - "tag": "0023_icy_maverick", + "tag": "20240721061942_icy_maverick", "breakpoints": true }, { "idx": 24, "version": "6", "when": 1721603595092, - "tag": "0024_dapper_supernaut", + "tag": "20240721231315_dapper_supernaut", "breakpoints": true }, { "idx": 25, "version": "6", "when": 1721633853118, - "tag": "0025_lying_mephisto", + "tag": "20240722073733_lying_mephisto", "breakpoints": true }, { "idx": 26, "version": "6", "when": 1721979220929, - "tag": "0026_known_dormammu", + "tag": "20240726073340_known_dormammu", "breakpoints": true }, { "idx": 27, "version": "6", "when": 1722445099203, - "tag": "0027_red_lady_bullseye", + "tag": "20240731165819_red_lady_bullseye", "breakpoints": true }, { "idx": 28, "version": "6", "when": 1722503439951, - "tag": "0028_jittery_eternity", + "tag": "20240801091039_jittery_eternity", "breakpoints": true }, { "idx": 29, "version": "6", "when": 1722578386823, - "tag": "0029_colossal_zodiak", + "tag": "20240802055946_colossal_zodiak", "breakpoints": true }, { "idx": 30, "version": "6", "when": 1723608499147, - "tag": "0030_little_kabuki", + "tag": "20240814040819_little_kabuki", "breakpoints": true }, { "idx": 31, "version": "6", "when": 1723701656243, - "tag": "0031_steep_vulture", + "tag": "20240815060056_steep_vulture", "breakpoints": true }, { "idx": 32, "version": "6", "when": 1723705257806, - "tag": "0032_flashy_shadow_king", + "tag": "20240815070057_flashy_shadow_king", "breakpoints": true }, { "idx": 33, "version": "6", "when": 1725250322137, - "tag": "0033_white_hawkeye", + "tag": "20240902041202_white_hawkeye", "breakpoints": true }, { "idx": 34, "version": "6", "when": 1725256397019, - "tag": "0034_aspiring_secret_warriors", + "tag": "20240902055317_aspiring_secret_warriors", "breakpoints": true }, { "idx": 35, "version": "6", "when": 1725429324584, - "tag": "0035_cool_gravity", + "tag": "20240904055524_cool_gravity", "breakpoints": true }, { "idx": 36, "version": "6", "when": 1725519351871, - "tag": "0036_tired_ronan", + "tag": "20240905065551_tired_ronan", "breakpoints": true }, { "idx": 37, "version": "6", "when": 1726988289562, - "tag": "0037_legal_namor", + "tag": "20240922065809_legal_namor", "breakpoints": true }, { "idx": 38, "version": "6", "when": 1727942090102, - "tag": "0038_rapid_landau", + "tag": "20241003075450_rapid_landau", "breakpoints": true }, { "idx": 39, "version": "6", "when": 1728021127765, - "tag": "0039_many_tiger_shark", + "tag": "20241004055207_many_tiger_shark", "breakpoints": true }, { "idx": 40, "version": "6", "when": 1728780577084, - "tag": "0040_graceful_wolfsbane", + "tag": "20241013004937_graceful_wolfsbane", "breakpoints": true }, { "idx": 41, "version": "6", "when": 1729667438853, - "tag": "0041_huge_bruce_banner", + "tag": "20241023071038_huge_bruce_banner", "breakpoints": true }, { "idx": 42, "version": "6", "when": 1729984439862, - "tag": "0042_fancy_havok", + "tag": "20241026231359_fancy_havok", "breakpoints": true }, { "idx": 43, "version": "6", "when": 1731873965888, - "tag": "0043_closed_naoko", + "tag": "20241117200605_closed_naoko", "breakpoints": true }, { "idx": 44, "version": "6", "when": 1731875539532, - "tag": "0044_sour_true_believers", + "tag": "20241117203219_sour_true_believers", "breakpoints": true }, { "idx": 45, "version": "6", "when": 1732644181718, - "tag": "0045_smiling_blur", + "tag": "20241126180301_smiling_blur", "breakpoints": true }, { "idx": 46, "version": "6", "when": 1732851191048, - "tag": "0046_purple_sleeper", + "tag": "20241129033311_purple_sleeper", "breakpoints": true }, { "idx": 47, "version": "6", "when": 1733599090582, - "tag": "0047_tidy_revanche", + "tag": "20241207191810_tidy_revanche", "breakpoints": true }, { "idx": 48, "version": "6", "when": 1733599163710, - "tag": "0048_flat_expediter", + "tag": "20241207191923_flat_expediter", "breakpoints": true }, { "idx": 49, "version": "6", "when": 1733628762978, - "tag": "0049_dark_leopardon", + "tag": "20241208033242_dark_leopardon", "breakpoints": true }, { "idx": 50, "version": "6", "when": 1733889104203, - "tag": "0050_nappy_wrecker", + "tag": "20241211035144_nappy_wrecker", "breakpoints": true }, { "idx": 51, "version": "6", "when": 1734241482851, - "tag": "0051_hard_gorgon", + "tag": "20241215054442_hard_gorgon", "breakpoints": true }, { "idx": 52, "version": "6", "when": 1734809337308, - "tag": "0052_bumpy_luckman", + "tag": "20241221192857_bumpy_luckman", "breakpoints": true }, { "idx": 53, "version": "6", "when": 1735118844878, - "tag": "0053_broken_kulan_gath", + "tag": "20241225092724_broken_kulan_gath", "breakpoints": true }, { "idx": 54, "version": "6", "when": 1736669421560, - "tag": "0054_nervous_spencer_smythe", + "tag": "20250112081021_nervous_spencer_smythe", "breakpoints": true }, { "idx": 55, "version": "6", "when": 1736669623831, - "tag": "0055_next_serpent_society", + "tag": "20250112081343_next_serpent_society", "breakpoints": true }, { "idx": 56, "version": "6", "when": 1736789918294, - "tag": "0056_majestic_skaar", + "tag": "20250113173838_majestic_skaar", "breakpoints": true }, { "idx": 57, "version": "6", "when": 1737306063563, - "tag": "0057_tricky_living_tribunal", + "tag": "20250119170103_tricky_living_tribunal", "breakpoints": true }, { "idx": 58, "version": "6", "when": 1737612903012, - "tag": "0058_brown_sharon_carter", + "tag": "20250123061503_brown_sharon_carter", "breakpoints": true }, { "idx": 59, "version": "6", "when": 1737615160768, - "tag": "0059_striped_bill_hollister", + "tag": "20250123065240_striped_bill_hollister", "breakpoints": true }, { "idx": 60, "version": "6", "when": 1737929896838, - "tag": "0060_disable-aggressive-cache", + "tag": "20250126221816_disable-aggressive-cache", "breakpoints": true }, { "idx": 61, "version": "7", "when": 1738481304953, - "tag": "0061_many_molten_man", + "tag": "20250202072824_many_molten_man", "breakpoints": true }, { "idx": 62, "version": "7", "when": 1738482795112, - "tag": "0062_slippery_white_tiger", + "tag": "20250202075315_slippery_white_tiger", "breakpoints": true }, { "idx": 63, "version": "7", "when": 1738522845992, - "tag": "0063_panoramic_dreadnoughts", + "tag": "20250202190045_panoramic_dreadnoughts", "breakpoints": true }, { "idx": 64, "version": "7", "when": 1738564387043, - "tag": "0064_previous_agent_brand", + "tag": "20250203063307_previous_agent_brand", "breakpoints": true }, { "idx": 65, "version": "7", "when": 1739087857244, - "tag": "0065_daily_zaladane", + "tag": "20250209075737_daily_zaladane", "breakpoints": true }, { "idx": 66, "version": "7", "when": 1739426913392, - "tag": "0066_yielding_echo", + "tag": "20250213060833_yielding_echo", "breakpoints": true }, { "idx": 67, "version": "7", "when": 1740892043121, - "tag": "0067_condemned_sugar_man", + "tag": "20250302050723_condemned_sugar_man", "breakpoints": true }, { "idx": 68, "version": "7", "when": 1740897756774, - "tag": "0068_complex_rhino", + "tag": "20250302064236_complex_rhino", "breakpoints": true }, { "idx": 69, "version": "7", "when": 1741152916611, - "tag": "0069_legal_bill_hollister", + "tag": "20250305053516_legal_bill_hollister", "breakpoints": true }, { "idx": 70, "version": "7", "when": 1741322697251, - "tag": "0070_useful_serpent_society", + "tag": "20250307044457_useful_serpent_society", "breakpoints": true }, { "idx": 71, "version": "7", "when": 1741460060541, - "tag": "0071_flaky_black_queen", + "tag": "20250308185420_flaky_black_queen", "breakpoints": true }, { "idx": 72, "version": "7", "when": 1741487009559, - "tag": "0072_green_susan_delgado", + "tag": "20250309022329_green_susan_delgado", "breakpoints": true }, { "idx": 73, "version": "7", "when": 1741489681190, - "tag": "0073_hot_domino", + "tag": "20250309030801_hot_domino", "breakpoints": true }, { "idx": 74, "version": "7", "when": 1741490064139, - "tag": "0074_black_quasar", + "tag": "20250309031424_black_quasar", "breakpoints": true }, { "idx": 75, "version": "7", "when": 1741491527516, - "tag": "0075_young_typhoid_mary", + "tag": "20250309033847_young_typhoid_mary", "breakpoints": true }, { "idx": 76, "version": "7", "when": 1741493754270, - "tag": "0076_young_sharon_ventura", + "tag": "20250309041554_young_sharon_ventura", "breakpoints": true }, { "idx": 77, "version": "7", "when": 1741510086231, - "tag": "0077_chemical_dreadnoughts", + "tag": "20250309084806_chemical_dreadnoughts", "breakpoints": true }, { "idx": 78, "version": "7", "when": 1742112194375, - "tag": "0078_uneven_omega_sentinel", + "tag": "20250316080314_uneven_omega_sentinel", "breakpoints": true }, { "idx": 79, "version": "7", "when": 1742281690186, - "tag": "0079_bizarre_wendell_rand", + "tag": "20250318070810_bizarre_wendell_rand", "breakpoints": true }, { "idx": 80, "version": "7", "when": 1743280866402, - "tag": "0080_sleepy_sinister_six", + "tag": "20250329204106_sleepy_sinister_six", "breakpoints": true }, { "idx": 81, "version": "7", "when": 1743281254393, - "tag": "0081_lovely_mentallo", + "tag": "20250329204734_lovely_mentallo", "breakpoints": true }, { "idx": 82, "version": "7", "when": 1743287689974, - "tag": "0082_clean_mandarin", + "tag": "20250329223449_clean_mandarin", "breakpoints": true }, { "idx": 83, "version": "7", "when": 1743288371413, - "tag": "0083_parallel_stranger", + "tag": "20250329224611_parallel_stranger", "breakpoints": true }, { "idx": 84, "version": "7", "when": 1743923992280, - "tag": "0084_thin_iron_lad", + "tag": "20250406071952_thin_iron_lad", "breakpoints": true }, { "idx": 85, "version": "7", "when": 1745705609181, - "tag": "0085_equal_captain_stacy", + "tag": "20250426221329_equal_captain_stacy", "breakpoints": true }, { "idx": 86, "version": "7", "when": 1745706676004, - "tag": "0086_rainy_gertrude_yorkes", + "tag": "20250426223116_rainy_gertrude_yorkes", "breakpoints": true }, { "idx": 87, "version": "7", "when": 1745723563822, - "tag": "0087_lively_risque", + "tag": "20250427031243_lively_risque", "breakpoints": true }, { "idx": 88, "version": "7", "when": 1746256928101, - "tag": "0088_illegal_ma_gnuci", + "tag": "20250503072208_illegal_ma_gnuci", "breakpoints": true }, { "idx": 89, "version": "7", "when": 1746392564463, - "tag": "0089_noisy_sandman", + "tag": "20250504210244_noisy_sandman", "breakpoints": true }, { "idx": 90, "version": "7", "when": 1746509318678, - "tag": "0090_clean_wolf_cub", + "tag": "20250506052838_clean_wolf_cub", "breakpoints": true }, { "idx": 91, "version": "7", "when": 1746518402168, - "tag": "0091_spotty_kulan_gath", + "tag": "20250506080002_spotty_kulan_gath", "breakpoints": true }, { "idx": 92, "version": "7", "when": 1747713229160, - "tag": "0092_stiff_the_watchers", + "tag": "20250520035349_stiff_the_watchers", "breakpoints": true }, { "idx": 93, "version": "7", "when": 1750397258622, - "tag": "0093_nice_gorilla_man", + "tag": "20250620052738_nice_gorilla_man", "breakpoints": true }, { "idx": 94, "version": "7", "when": 1750559214977, - "tag": "0094_numerous_carmella_unuscione", + "tag": "20250622022654_numerous_carmella_unuscione", "breakpoints": true }, { "idx": 95, "version": "7", "when": 1750562292392, - "tag": "0095_curly_justice", + "tag": "20250622031812_curly_justice", "breakpoints": true }, { "idx": 96, "version": "7", "when": 1750566830268, - "tag": "0096_small_shaman", + "tag": "20250622043350_small_shaman", "breakpoints": true }, { "idx": 97, "version": "7", "when": 1750567641441, - "tag": "0097_hard_lizard", + "tag": "20250622044721_hard_lizard", "breakpoints": true }, { "idx": 98, "version": "7", "when": 1751233265357, - "tag": "0098_conscious_chat", + "tag": "20250629214105_conscious_chat", "breakpoints": true }, { "idx": 99, "version": "7", "when": 1751693569786, - "tag": "0099_wise_golden_guardian", + "tag": "20250705053249_wise_golden_guardian", "breakpoints": true }, { "idx": 100, "version": "7", "when": 1751741736144, - "tag": "0100_purple_rogue", + "tag": "20250705185536_purple_rogue", "breakpoints": true }, { "idx": 101, "version": "7", "when": 1751751631943, - "tag": "0101_moaning_blazing_skull", + "tag": "20250705214031_moaning_blazing_skull", "breakpoints": true }, { "idx": 102, "version": "7", "when": 1751848685503, - "tag": "0102_opposite_grandmaster", + "tag": "20250707003805_opposite_grandmaster", "breakpoints": true }, { "idx": 103, "version": "7", "when": 1752465764072, - "tag": "0103_cultured_pestilence", + "tag": "20250714040244_cultured_pestilence", "breakpoints": true }, { "idx": 104, "version": "7", "when": 1754207407121, - "tag": "0104_omniscient_randall", + "tag": "20250803075007_omniscient_randall", "breakpoints": true }, { "idx": 105, "version": "7", "when": 1754259281559, - "tag": "0105_clumsy_quicksilver", + "tag": "20250803221441_clumsy_quicksilver", "breakpoints": true }, { "idx": 106, "version": "7", "when": 1754912062243, - "tag": "0106_purple_maggott", + "tag": "20250811113422_purple_maggott", "breakpoints": true }, { "idx": 107, "version": "7", "when": 1756793713380, - "tag": "0107_loud_kang", + "tag": "20250902061513_loud_kang", "breakpoints": true }, { "idx": 108, "version": "7", "when": 1756955718127, - "tag": "0108_lazy_next_avengers", + "tag": "20250904031518_lazy_next_avengers", "breakpoints": true }, { "idx": 109, "version": "7", "when": 1757052053574, - "tag": "0109_remarkable_sauron", + "tag": "20250905060053_remarkable_sauron", "breakpoints": true }, { "idx": 110, "version": "7", "when": 1757189541734, - "tag": "0110_red_psynapse", + "tag": "20250906201221_red_psynapse", "breakpoints": true }, { "idx": 111, "version": "7", "when": 1758445844561, - "tag": "0111_mushy_wolfsbane", + "tag": "20250921091044_mushy_wolfsbane", "breakpoints": true }, { "idx": 112, "version": "7", "when": 1758483520214, - "tag": "0112_freezing_skrulls", + "tag": "20250921193840_freezing_skrulls", "breakpoints": true }, { "idx": 113, "version": "7", "when": 1758960816504, - "tag": "0113_complete_rafael_vega", + "tag": "20250927081336_complete_rafael_vega", "breakpoints": true }, { "idx": 114, "version": "7", "when": 1759643172958, - "tag": "0114_dry_black_tom", + "tag": "20251005054612_dry_black_tom", "breakpoints": true }, { "idx": 115, "version": "7", "when": 1759644540829, - "tag": "0115_serious_black_bird", + "tag": "20251005060900_serious_black_bird", "breakpoints": true }, { "idx": 116, "version": "7", "when": 1759645163834, - "tag": "0116_amusing_firedrake", + "tag": "20251005061923_amusing_firedrake", "breakpoints": true }, { "idx": 117, "version": "7", "when": 1761370953274, - "tag": "0117_lumpy_nuke", + "tag": "20251025054233_lumpy_nuke", "breakpoints": true }, { "idx": 118, "version": "7", "when": 1761415824484, - "tag": "0118_loose_anita_blake", + "tag": "20251025181024_loose_anita_blake", "breakpoints": true }, { "idx": 119, "version": "7", "when": 1762142756443, - "tag": "0119_bouncy_morbius", + "tag": "20251103040556_bouncy_morbius", "breakpoints": true }, { "idx": 120, "version": "7", "when": 1762632540024, - "tag": "0120_lame_captain_midlands", + "tag": "20251108200900_lame_captain_midlands", "breakpoints": true }, { "idx": 121, "version": "7", "when": 1763755037033, - "tag": "0121_rainy_cargill", + "tag": "20251121195717_rainy_cargill", "breakpoints": true }, { "idx": 122, "version": "7", "when": 1764479387555, - "tag": "0122_absent_frightful_four", + "tag": "20251130050947_absent_frightful_four", "breakpoints": true }, { "idx": 123, "version": "7", "when": 1764525308939, - "tag": "0123_cloudy_piledriver", + "tag": "20251130175508_cloudy_piledriver", "breakpoints": true }, { "idx": 124, "version": "7", "when": 1764571454170, - "tag": "0124_certain_cloak", + "tag": "20251201064414_certain_cloak", "breakpoints": true }, { "idx": 125, "version": "7", "when": 1764573207555, - "tag": "0125_neat_the_phantom", + "tag": "20251201071327_neat_the_phantom", "breakpoints": true }, { "idx": 126, "version": "7", "when": 1765065295708, - "tag": "0126_nifty_monster_badoon", + "tag": "20251206235455_nifty_monster_badoon", "breakpoints": true }, { "idx": 127, "version": "7", "when": 1765095189368, - "tag": "0127_superb_alice", + "tag": "20251207081309_superb_alice", "breakpoints": true }, { "idx": 128, "version": "7", "when": 1765101709413, - "tag": "0128_hard_falcon", + "tag": "20251207100149_hard_falcon", "breakpoints": true }, { "idx": 129, "version": "7", "when": 1765136384035, - "tag": "0129_pale_roughhouse", + "tag": "20251207193944_pale_roughhouse", "breakpoints": true }, { "idx": 130, "version": "7", "when": 1765167657813, - "tag": "0130_perpetual_screwball", + "tag": "20251208042057_perpetual_screwball", "breakpoints": true }, { "idx": 131, "version": "7", "when": 1765342621312, - "tag": "0131_volatile_beast", + "tag": "20251210045701_volatile_beast", "breakpoints": true }, { "idx": 132, "version": "7", "when": 1765346573500, - "tag": "0132_clean_layla_miller", + "tag": "20251210060253_clean_layla_miller", "breakpoints": true }, { "idx": 133, "version": "7", "when": 1766301478005, - "tag": "0133_striped_the_order", + "tag": "20251221071758_striped_the_order", "breakpoints": true }, { diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index c33826adb7..8f355993a7 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -15,6 +15,8 @@ "dev": "tsx -r dotenv/config ./server/server.ts --project tsconfig.server.json ", "studio": "drizzle-kit studio --config ./server/db/drizzle.config.ts", "migration:generate": "drizzle-kit generate --config ./server/db/drizzle.config.ts", + "migration:new": "tsx scripts/generate-migration.ts", + "migration:convert": "tsx scripts/convert-migrations-to-timestamp.ts", "migration:run": "tsx -r dotenv/config migration.ts", "manual-migration:run": "tsx -r dotenv/config migrate.ts", "migration:up": "drizzle-kit up --config ./server/db/drizzle.config.ts", diff --git a/apps/dokploy/scripts/convert-migrations-to-timestamp.ts b/apps/dokploy/scripts/convert-migrations-to-timestamp.ts new file mode 100644 index 0000000000..a7a0c75d0b --- /dev/null +++ b/apps/dokploy/scripts/convert-migrations-to-timestamp.ts @@ -0,0 +1,237 @@ +#!/usr/bin/env tsx +/** + * Migration Conversion Script + * + * This script converts existing Drizzle migrations from index-based naming (0001_name.sql) + * to timestamp-based naming (20240627123900_name.sql) to prevent merge conflicts + * when multiple developers create migrations in parallel. + * + * Usage: pnpm run migration:convert + * + * What this script does: + * 1. Backs up the current drizzle folder + * 2. Reads _journal.json to get all migration entries with timestamps + * 3. Renames SQL files from NNNN_name.sql to YYYYMMDDHHmmss_name.sql + * 4. Renames snapshot files from NNNN_snapshot.json to YYYYMMDDHHmmss_snapshot.json + * 5. Updates _journal.json with new tags + * + * The script is idempotent - running it multiple times is safe. + */ + +import * as fs from "node:fs"; +import * as path from "node:path"; + +const DRIZZLE_DIR = path.join(process.cwd(), "drizzle"); +const META_DIR = path.join(DRIZZLE_DIR, "meta"); +const JOURNAL_PATH = path.join(META_DIR, "_journal.json"); +const BACKUP_DIR = path.join(process.cwd(), "drizzle-backup"); + +interface JournalEntry { + idx: number; + version: string; + when: number; + tag: string; + breakpoints: boolean; +} + +interface Journal { + version: string; + dialect: string; + entries: JournalEntry[]; +} + +/** + * Convert Unix timestamp (milliseconds) to YYYYMMDDHHmmss format + */ +function timestampToPrefix(unixMs: number): string { + const date = new Date(unixMs); + const year = date.getUTCFullYear(); + const month = String(date.getUTCMonth() + 1).padStart(2, "0"); + const day = String(date.getUTCDate()).padStart(2, "0"); + const hours = String(date.getUTCHours()).padStart(2, "0"); + const minutes = String(date.getUTCMinutes()).padStart(2, "0"); + const seconds = String(date.getUTCSeconds()).padStart(2, "0"); + + return `${year}${month}${day}${hours}${minutes}${seconds}`; +} + +/** + * Check if a tag already uses timestamp format + */ +function isTimestampFormat(tag: string): boolean { + // Timestamp format: 14 digits followed by underscore + return /^\d{14}_/.test(tag); +} + +/** + * Check if a tag uses index format + */ +function isIndexFormat(tag: string): boolean { + // Index format: 4 digits followed by underscore + return /^\d{4}_/.test(tag); +} + +/** + * Extract the name part from a tag (everything after the prefix) + */ +function extractName(tag: string): string { + if (isTimestampFormat(tag)) { + return tag.substring(15); // 14 digits + underscore + } + if (isIndexFormat(tag)) { + return tag.substring(5); // 4 digits + underscore + } + return tag; +} + +/** + * Create backup of the drizzle folder + */ +function createBackup(): void { + if (fs.existsSync(BACKUP_DIR)) { + console.log("Removing existing backup..."); + fs.rmSync(BACKUP_DIR, { recursive: true }); + } + + console.log(`Creating backup at ${BACKUP_DIR}...`); + fs.cpSync(DRIZZLE_DIR, BACKUP_DIR, { recursive: true }); + console.log("Backup created successfully."); +} + +/** + * Main conversion function + */ +async function convertMigrations(): Promise { + console.log("\n=== Drizzle Migration Format Converter ===\n"); + + // Check if drizzle directory exists + if (!fs.existsSync(DRIZZLE_DIR)) { + console.error("Error: drizzle directory not found at", DRIZZLE_DIR); + process.exit(1); + } + + // Check if journal exists + if (!fs.existsSync(JOURNAL_PATH)) { + console.error("Error: _journal.json not found at", JOURNAL_PATH); + process.exit(1); + } + + // Read current journal + const journalContent = fs.readFileSync(JOURNAL_PATH, "utf-8"); + const journal: Journal = JSON.parse(journalContent); + + // Check if already converted + const alreadyTimestamp = journal.entries.every((entry) => + isTimestampFormat(entry.tag), + ); + if (alreadyTimestamp) { + console.log( + "Migrations are already in timestamp format. No conversion needed.", + ); + return; + } + + // Check if all entries are in index format + const allIndex = journal.entries.every((entry) => isIndexFormat(entry.tag)); + if (!allIndex) { + const mixedEntries = journal.entries.filter( + (entry) => !isIndexFormat(entry.tag) && !isTimestampFormat(entry.tag), + ); + if (mixedEntries.length > 0) { + console.error( + "Error: Found entries with unknown format:", + mixedEntries.map((e) => e.tag), + ); + process.exit(1); + } + } + + console.log(`Found ${journal.entries.length} migrations to convert.\n`); + + // Create backup before making changes + createBackup(); + + // Track renames for summary + const renames: Array<{ oldTag: string; newTag: string }> = []; + + // Process each entry + for (const entry of journal.entries) { + const oldTag = entry.tag; + const name = extractName(oldTag); + const timestampPrefix = timestampToPrefix(entry.when); + const newTag = `${timestampPrefix}_${name}`; + + // Rename SQL file + const oldSqlPath = path.join(DRIZZLE_DIR, `${oldTag}.sql`); + const newSqlPath = path.join(DRIZZLE_DIR, `${newTag}.sql`); + + if (fs.existsSync(oldSqlPath)) { + fs.renameSync(oldSqlPath, newSqlPath); + } else { + console.warn(`Warning: SQL file not found: ${oldSqlPath}`); + } + + // Rename snapshot file + // Drizzle uses just the index for snapshots: 0000_snapshot.json + const oldIndexOnly = oldTag.split("_")[0]; + const oldSnapshotPath = path.join( + META_DIR, + `${oldIndexOnly}_snapshot.json`, + ); + const newSnapshotPath = path.join( + META_DIR, + `${timestampPrefix}_snapshot.json`, + ); + + if (fs.existsSync(oldSnapshotPath)) { + fs.renameSync(oldSnapshotPath, newSnapshotPath); + } else { + console.warn(`Warning: Snapshot file not found: ${oldSnapshotPath}`); + } + + // Update entry tag + entry.tag = newTag; + renames.push({ oldTag, newTag }); + } + + // Write updated journal + fs.writeFileSync(JOURNAL_PATH, JSON.stringify(journal, null, 2)); + + // Print summary + console.log("\n=== Conversion Summary ===\n"); + console.log(`Converted ${renames.length} migrations:\n`); + + // Show first 5 and last 5 renames + const showCount = 5; + if (renames.length <= showCount * 2) { + for (const { oldTag, newTag } of renames) { + console.log(` ${oldTag}.sql -> ${newTag}.sql`); + } + } else { + for (let i = 0; i < showCount; i++) { + const { oldTag, newTag } = renames[i]; + console.log(` ${oldTag}.sql -> ${newTag}.sql`); + } + console.log(` ... (${renames.length - showCount * 2} more) ...`); + for (let i = renames.length - showCount; i < renames.length; i++) { + const { oldTag, newTag } = renames[i]; + console.log(` ${oldTag}.sql -> ${newTag}.sql`); + } + } + + console.log(`\nBackup saved to: ${BACKUP_DIR}`); + console.log("\n=== Conversion Complete ===\n"); + console.log("Next steps:"); + console.log( + "1. Verify the migrations by running: pnpm run migration:run (on a test database)", + ); + console.log("2. Update drizzle.config.ts to use timestamp prefix"); + console.log("3. Delete the backup folder after verification"); + console.log(""); +} + +// Run the conversion +convertMigrations().catch((error) => { + console.error("Conversion failed:", error); + process.exit(1); +}); diff --git a/apps/dokploy/scripts/generate-migration.ts b/apps/dokploy/scripts/generate-migration.ts new file mode 100644 index 0000000000..5ffff08c88 --- /dev/null +++ b/apps/dokploy/scripts/generate-migration.ts @@ -0,0 +1,200 @@ +#!/usr/bin/env tsx +/** + * Migration Generation Helper Script + * + * This script wraps drizzle-kit generate to enforce meaningful migration names. + * It prevents the creation of migrations with random/auto-generated names. + * + * Usage: + * pnpm run migration:new + * + * Examples: + * pnpm run migration:new add-user-preferences + * pnpm run migration:new update-notification-schema + * pnpm run migration:new remove-deprecated-columns + * + * Naming conventions: + * - Use kebab-case (lowercase with hyphens) + * - Start with a verb: add, update, remove, create, alter, fix, etc. + * - Be descriptive but concise + * - Avoid generic names like "changes" or "updates" + */ + +import { execSync } from "node:child_process"; +import * as path from "node:path"; + +const VALID_PREFIXES = [ + "add", + "update", + "remove", + "create", + "alter", + "fix", + "rename", + "drop", + "modify", + "init", + "migrate", + "refactor", + "enable", + "disable", + "setup", +]; + +const FORBIDDEN_NAMES = [ + "changes", + "updates", + "migration", + "new", + "test", + "temp", + "tmp", + "fix", + "bug", + "feature", +]; + +function printUsage(): void { + console.log(` +Migration Generation Helper +=========================== + +Usage: pnpm run migration:new + +Arguments: + migration-name A descriptive name for the migration in kebab-case + +Examples: + pnpm run migration:new add-user-preferences + pnpm run migration:new update-notification-schema + pnpm run migration:new remove-deprecated-columns + pnpm run migration:new create-audit-log-table + pnpm run migration:new rename-email-to-username + +Naming conventions: + - Use kebab-case (lowercase letters and hyphens only) + - Start with a verb: ${VALID_PREFIXES.slice(0, 5).join(", ")}, etc. + - Be descriptive but concise (3-50 characters) + - Describe WHAT the migration does, not WHY + +Bad examples: + - "changes" (too generic) + - "fix-bug" (not descriptive) + - "UserPreferences" (not kebab-case) + - "add_user_preferences" (use hyphens, not underscores) +`); +} + +function validateMigrationName(name: string): { + valid: boolean; + error?: string; +} { + // Check if name is provided + if (!name || name.trim() === "") { + return { valid: false, error: "Migration name is required" }; + } + + // Check length + if (name.length < 3) { + return { + valid: false, + error: "Migration name must be at least 3 characters", + }; + } + + if (name.length > 50) { + return { + valid: false, + error: "Migration name must be 50 characters or less", + }; + } + + // Check for kebab-case format (lowercase letters, numbers, and hyphens) + if ( + !/^[a-z][a-z0-9-]*[a-z0-9]$/.test(name) && + !/^[a-z][a-z0-9]*$/.test(name) + ) { + return { + valid: false, + error: + "Migration name must be in kebab-case (lowercase letters, numbers, and hyphens only)", + }; + } + + // Check for double hyphens + if (name.includes("--")) { + return { + valid: false, + error: "Migration name cannot contain double hyphens", + }; + } + + // Check for forbidden generic names + if (FORBIDDEN_NAMES.includes(name.toLowerCase())) { + return { + valid: false, + error: `Migration name "${name}" is too generic. Please be more descriptive.`, + }; + } + + // Warn if name doesn't start with a common verb (but don't reject) + const startsWithVerb = VALID_PREFIXES.some((prefix) => + name.toLowerCase().startsWith(prefix), + ); + + if (!startsWithVerb) { + console.warn( + `\nWarning: Migration name "${name}" doesn't start with a common verb.`, + ); + console.warn(`Consider using one of: ${VALID_PREFIXES.join(", ")}\n`); + } + + return { valid: true }; +} + +async function generateMigration(name: string): Promise { + const configPath = path.join(process.cwd(), "server/db/drizzle.config.ts"); + + console.log(`\nGenerating migration: ${name}\n`); + + try { + // Run drizzle-kit generate with the custom name + execSync(`drizzle-kit generate --config ${configPath} --name=${name}`, { + stdio: "inherit", + cwd: process.cwd(), + }); + + console.log(`\nMigration "${name}" generated successfully!`); + console.log("\nNext steps:"); + console.log("1. Review the generated SQL in the drizzle/ folder"); + console.log("2. Test the migration locally: pnpm run migration:run"); + console.log("3. Commit the migration files with your schema changes\n"); + } catch (error) { + console.error("\nFailed to generate migration."); + if (error instanceof Error && error.message.includes("No schema changes")) { + console.log( + "No schema changes detected. Make sure you've modified the schema files first.", + ); + } + process.exit(1); + } +} + +// Main execution +const args = process.argv.slice(2); + +if (args.length === 0 || args[0] === "--help" || args[0] === "-h") { + printUsage(); + process.exit(args.length === 0 ? 1 : 0); +} + +const migrationName = args[0]; +const validation = validateMigrationName(migrationName); + +if (!validation.valid) { + console.error(`\nError: ${validation.error}\n`); + printUsage(); + process.exit(1); +} + +generateMigration(migrationName); diff --git a/apps/dokploy/server/db/drizzle.config.ts b/apps/dokploy/server/db/drizzle.config.ts index 60a3bb9378..f99a24664e 100644 --- a/apps/dokploy/server/db/drizzle.config.ts +++ b/apps/dokploy/server/db/drizzle.config.ts @@ -10,5 +10,6 @@ export default defineConfig({ migrations: { table: "migrations", schema: "public", + prefix: "timestamp", }, });