From 17f644c170dd84f84aeb9c613e6ff572ee23aa06 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 6 Jan 2026 22:34:15 +0000 Subject: [PATCH 1/2] feat(db): migrate to timestamp-based migrations to prevent PR conflicts This change addresses the issue of migration file conflicts when multiple contributors create migrations in parallel. The previous sequential numbering system (0001_, 0002_, etc.) caused conflicts when two PRs both added migrations. Changes: - Convert all 134 existing migrations from index format (0000_) to timestamp format (YYYYMMDDHHmmss_) based on their original creation timestamps - Add `prefix: 'timestamp'` to drizzle.config.ts for future migrations - Add `migration:new` script that enforces descriptive migration names - Add `migration:convert` script for the one-time conversion - Add MIGRATIONS.md documentation for contributors - Remove orphaned migration file (0057_damp_prism.sql) The timestamp format prevents conflicts because each migration gets a unique prefix based on when it was created (e.g., 20240627143052_add-feature.sql). New workflow for contributors: pnpm run migration:new add-user-preferences This generates migrations with meaningful names and timestamp prefixes, eliminating merge conflicts and improving migration readability. --- apps/dokploy/MIGRATIONS.md | 262 +++++++++++++++++ apps/dokploy/drizzle/0057_damp_prism.sql | 16 -- ...sql => 20240416101901_reflective_puck.sql} | 0 ....sql => 20240422045357_striped_tattoo.sql} | 0 ...0240422052452_ambiguous_carlie_cooper.sql} | 0 ...l => 20240424082541_square_lightspeed.sql} | 0 ....sql => 20240425002532_nice_tenebrous.sql} | 0 ...ror.sql => 20240512215850_cute_terror.sql} | 0 ....sql => 20240513011925_oval_jimmy_woo.sql} | 0 ....sql => 20240513012457_cute_guardsmen.sql} | 0 ..._sage.sql => 20240513013543_lazy_sage.sql} | 0 ...0240513014614_majestic_spencer_smythe.sql} | 0 ...ql => 20240513042037_lean_black_widow.sql} | 0 ....sql => 20240513042350_petite_calypso.sql} | 0 ...mar.sql => 20240518070156_chubby_umar.sql} | 0 ...> 20240518234939_blushing_starjammers.sql} | 0 ...sql => 20240526092247_same_hammerhead.sql} | 0 ...l => 20240605051517_fearless_callisto.sql} | 0 ...ql => 20240623021956_chunky_leopardon.sql} | 0 ...post.sql => 20240628035934_minor_post.sql} | 0 ... => 20240702135257_careful_killmonger.sql} | 0 ...eak.sql => 20240716061826_heavy_freak.sql} | 0 ...=> 20240719043741_fantastic_slapstick.sql} | 0 ...20240719062703_premium_sebastian_shaw.sql} | 0 ...> 20240721030603_warm_colonel_america.sql} | 0 ...ck.sql => 20240721061942_icy_maverick.sql} | 0 ...ql => 20240721231315_dapper_supernaut.sql} | 0 ....sql => 20240722073733_lying_mephisto.sql} | 0 ....sql => 20240726073340_known_dormammu.sql} | 0 ...l => 20240731165819_red_lady_bullseye.sql} | 0 ...ql => 20240801091039_jittery_eternity.sql} | 0 ...sql => 20240802055946_colossal_zodiak.sql} | 0 ...i.sql => 20240814040819_little_kabuki.sql} | 0 ...e.sql => 20240815060056_steep_vulture.sql} | 0 ... => 20240815070057_flashy_shadow_king.sql} | 0 ...e.sql => 20240902041202_white_hawkeye.sql} | 0 ...240902055317_aspiring_secret_warriors.sql} | 0 ...ty.sql => 20240904055524_cool_gravity.sql} | 0 ...nan.sql => 20240905065551_tired_ronan.sql} | 0 ...mor.sql => 20240922065809_legal_namor.sql} | 0 ...au.sql => 20241003075450_rapid_landau.sql} | 0 ...ql => 20241004055207_many_tiger_shark.sql} | 0 ... => 20241013004937_graceful_wolfsbane.sql} | 0 ...l => 20241023071038_huge_bruce_banner.sql} | 0 ...vok.sql => 20241026231359_fancy_havok.sql} | 0 ...ko.sql => 20241117200605_closed_naoko.sql} | 0 ...=> 20241117203219_sour_true_believers.sql} | 0 ...ur.sql => 20241126180301_smiling_blur.sql} | 0 ....sql => 20241129033311_purple_sleeper.sql} | 0 ...e.sql => 20241207191810_tidy_revanche.sql} | 0 ....sql => 20241207191923_flat_expediter.sql} | 0 ....sql => 20241208033242_dark_leopardon.sql} | 0 ...r.sql => 20241211035144_nappy_wrecker.sql} | 0 ...gon.sql => 20241215054442_hard_gorgon.sql} | 0 ...n.sql => 20241221192857_bumpy_luckman.sql} | 0 ...l => 20241225092724_broken_kulan_gath.sql} | 0 ...20250112081021_nervous_spencer_smythe.sql} | 0 ...> 20250112081343_next_serpent_society.sql} | 0 ....sql => 20250113173838_majestic_skaar.sql} | 0 ...20250119170103_tricky_living_tribunal.sql} | 0 ...=> 20250123061503_brown_sharon_carter.sql} | 0 ...20250123065240_striped_bill_hollister.sql} | 0 ...250126221816_disable-aggressive-cache.sql} | 0 ...sql => 20250202072824_many_molten_man.sql} | 0 ...> 20250202075315_slippery_white_tiger.sql} | 0 ...20250202190045_panoramic_dreadnoughts.sql} | 0 ...> 20250203063307_previous_agent_brand.sql} | 0 ....sql => 20250209075737_daily_zaladane.sql} | 0 ...o.sql => 20250213060833_yielding_echo.sql} | 0 ...=> 20250302050723_condemned_sugar_man.sql} | 0 ...o.sql => 20250302064236_complex_rhino.sql} | 0 ...> 20250305053516_legal_bill_hollister.sql} | 0 ...20250307044457_useful_serpent_society.sql} | 0 ...l => 20250308185420_flaky_black_queen.sql} | 0 ...=> 20250309022329_green_susan_delgado.sql} | 0 ...mino.sql => 20250309030801_hot_domino.sql} | 0 ...ar.sql => 20250309031424_black_quasar.sql} | 0 ... => 20250309033847_young_typhoid_mary.sql} | 0 ...> 20250309041554_young_sharon_ventura.sql} | 0 ... 20250309084806_chemical_dreadnoughts.sql} | 0 ... 20250316080314_uneven_omega_sentinel.sql} | 0 ...> 20250318070810_bizarre_wendell_rand.sql} | 0 ...=> 20250329204106_sleepy_sinister_six.sql} | 0 ...sql => 20250329204734_lovely_mentallo.sql} | 0 ....sql => 20250329223449_clean_mandarin.sql} | 0 ...l => 20250329224611_parallel_stranger.sql} | 0 ...d.sql => 20250406071952_thin_iron_lad.sql} | 0 ...=> 20250426221329_equal_captain_stacy.sql} | 0 ... 20250426223116_rainy_gertrude_yorkes.sql} | 0 ...e.sql => 20250427031243_lively_risque.sql} | 0 ...ql => 20250503072208_illegal_ma_gnuci.sql} | 0 ...n.sql => 20250504210244_noisy_sandman.sql} | 0 ....sql => 20250506052838_clean_wolf_cub.sql} | 0 ...l => 20250506080002_spotty_kulan_gath.sql} | 0 ... => 20250520035349_stiff_the_watchers.sql} | 0 ...ql => 20250620052738_nice_gorilla_man.sql} | 0 ...622022654_numerous_carmella_unuscione.sql} | 0 ...e.sql => 20250622031812_curly_justice.sql} | 0 ...an.sql => 20250622043350_small_shaman.sql} | 0 ...ard.sql => 20250622044721_hard_lizard.sql} | 0 ....sql => 20250629214105_conscious_chat.sql} | 0 ...> 20250705053249_wise_golden_guardian.sql} | 0 ...ue.sql => 20250705185536_purple_rogue.sql} | 0 ... 20250705214031_moaning_blazing_skull.sql} | 0 ...> 20250707003805_opposite_grandmaster.sql} | 0 ...=> 20250714040244_cultured_pestilence.sql} | 0 ... => 20250803075007_omniscient_randall.sql} | 0 ... => 20250803221441_clumsy_quicksilver.sql} | 0 ....sql => 20250811113422_purple_maggott.sql} | 0 ..._kang.sql => 20250902061513_loud_kang.sql} | 0 ... => 20250904031518_lazy_next_avengers.sql} | 0 ...l => 20250905060053_remarkable_sauron.sql} | 0 ...se.sql => 20250906201221_red_psynapse.sql} | 0 ...sql => 20250921091044_mushy_wolfsbane.sql} | 0 ...ql => 20250921193840_freezing_skrulls.sql} | 0 ...> 20250927081336_complete_rafael_vega.sql} | 0 ...m.sql => 20251005054612_dry_black_tom.sql} | 0 ... => 20251005060900_serious_black_bird.sql} | 0 ...l => 20251005061923_amusing_firedrake.sql} | 0 ...nuke.sql => 20251025054233_lumpy_nuke.sql} | 0 ...l => 20251025181024_loose_anita_blake.sql} | 0 ....sql => 20251103040556_bouncy_morbius.sql} | 0 ... 20251108200900_lame_captain_midlands.sql} | 0 ...l.sql => 20251121195717_rainy_cargill.sql} | 0 ... 20251130050947_absent_frightful_four.sql} | 0 ...l => 20251130175508_cloudy_piledriver.sql} | 0 ...k.sql => 20251201064414_certain_cloak.sql} | 0 ...ql => 20251201071327_neat_the_phantom.sql} | 0 ...> 20251206235455_nifty_monster_badoon.sql} | 0 ...ce.sql => 20251207081309_superb_alice.sql} | 0 ...con.sql => 20251207100149_hard_falcon.sql} | 0 ...sql => 20251207193944_pale_roughhouse.sql} | 0 ...=> 20251208042057_perpetual_screwball.sql} | 0 ....sql => 20251210045701_volatile_beast.sql} | 0 ... => 20251210060253_clean_layla_miller.sql} | 0 ...l => 20251221071758_striped_the_order.sql} | 0 ...shot.json => 20240416101901_snapshot.json} | 0 ...shot.json => 20240422045357_snapshot.json} | 0 ...shot.json => 20240422052452_snapshot.json} | 0 ...shot.json => 20240424082541_snapshot.json} | 0 ...shot.json => 20240425002532_snapshot.json} | 0 ...shot.json => 20240512215850_snapshot.json} | 0 ...shot.json => 20240513011925_snapshot.json} | 0 ...shot.json => 20240513012457_snapshot.json} | 0 ...shot.json => 20240513013543_snapshot.json} | 0 ...shot.json => 20240513014614_snapshot.json} | 0 ...shot.json => 20240513042037_snapshot.json} | 0 ...shot.json => 20240513042350_snapshot.json} | 0 ...shot.json => 20240518070156_snapshot.json} | 0 ...shot.json => 20240518234939_snapshot.json} | 0 ...shot.json => 20240526092247_snapshot.json} | 0 ...shot.json => 20240605051517_snapshot.json} | 0 ...shot.json => 20240623021956_snapshot.json} | 0 ...shot.json => 20240628035934_snapshot.json} | 0 ...shot.json => 20240702135257_snapshot.json} | 0 ...shot.json => 20240716061826_snapshot.json} | 0 ...shot.json => 20240719043741_snapshot.json} | 0 ...shot.json => 20240719062703_snapshot.json} | 0 ...shot.json => 20240721030603_snapshot.json} | 0 ...shot.json => 20240721061942_snapshot.json} | 0 ...shot.json => 20240721231315_snapshot.json} | 0 ...shot.json => 20240722073733_snapshot.json} | 0 ...shot.json => 20240726073340_snapshot.json} | 0 ...shot.json => 20240731165819_snapshot.json} | 0 ...shot.json => 20240801091039_snapshot.json} | 0 ...shot.json => 20240802055946_snapshot.json} | 0 ...shot.json => 20240814040819_snapshot.json} | 0 ...shot.json => 20240815060056_snapshot.json} | 0 ...shot.json => 20240815070057_snapshot.json} | 0 ...shot.json => 20240902041202_snapshot.json} | 0 ...shot.json => 20240902055317_snapshot.json} | 0 ...shot.json => 20240904055524_snapshot.json} | 0 ...shot.json => 20240905065551_snapshot.json} | 0 ...shot.json => 20240922065809_snapshot.json} | 0 ...shot.json => 20241003075450_snapshot.json} | 0 ...shot.json => 20241004055207_snapshot.json} | 0 ...shot.json => 20241013004937_snapshot.json} | 0 ...shot.json => 20241023071038_snapshot.json} | 0 ...shot.json => 20241026231359_snapshot.json} | 0 ...shot.json => 20241117200605_snapshot.json} | 0 ...shot.json => 20241117203219_snapshot.json} | 0 ...shot.json => 20241126180301_snapshot.json} | 0 ...shot.json => 20241129033311_snapshot.json} | 0 ...shot.json => 20241207191810_snapshot.json} | 0 ...shot.json => 20241207191923_snapshot.json} | 0 ...shot.json => 20241208033242_snapshot.json} | 0 ...shot.json => 20241211035144_snapshot.json} | 0 ...shot.json => 20241215054442_snapshot.json} | 0 ...shot.json => 20241221192857_snapshot.json} | 0 ...shot.json => 20241225092724_snapshot.json} | 0 ...shot.json => 20250112081021_snapshot.json} | 0 ...shot.json => 20250112081343_snapshot.json} | 0 ...shot.json => 20250113173838_snapshot.json} | 0 ...shot.json => 20250119170103_snapshot.json} | 0 ...shot.json => 20250123061503_snapshot.json} | 0 ...shot.json => 20250123065240_snapshot.json} | 0 ...shot.json => 20250126221816_snapshot.json} | 0 ...shot.json => 20250202072824_snapshot.json} | 0 ...shot.json => 20250202075315_snapshot.json} | 0 ...shot.json => 20250202190045_snapshot.json} | 0 ...shot.json => 20250203063307_snapshot.json} | 0 ...shot.json => 20250209075737_snapshot.json} | 0 ...shot.json => 20250213060833_snapshot.json} | 0 ...shot.json => 20250302050723_snapshot.json} | 0 ...shot.json => 20250302064236_snapshot.json} | 0 ...shot.json => 20250305053516_snapshot.json} | 0 ...shot.json => 20250307044457_snapshot.json} | 0 ...shot.json => 20250308185420_snapshot.json} | 0 ...shot.json => 20250309022329_snapshot.json} | 0 ...shot.json => 20250309030801_snapshot.json} | 0 ...shot.json => 20250309031424_snapshot.json} | 0 ...shot.json => 20250309033847_snapshot.json} | 0 ...shot.json => 20250309041554_snapshot.json} | 0 ...shot.json => 20250309084806_snapshot.json} | 0 ...shot.json => 20250316080314_snapshot.json} | 0 ...shot.json => 20250318070810_snapshot.json} | 0 ...shot.json => 20250329204106_snapshot.json} | 0 ...shot.json => 20250329204734_snapshot.json} | 0 ...shot.json => 20250329223449_snapshot.json} | 0 ...shot.json => 20250329224611_snapshot.json} | 0 ...shot.json => 20250406071952_snapshot.json} | 0 ...shot.json => 20250426221329_snapshot.json} | 0 ...shot.json => 20250426223116_snapshot.json} | 0 ...shot.json => 20250427031243_snapshot.json} | 0 ...shot.json => 20250503072208_snapshot.json} | 0 ...shot.json => 20250504210244_snapshot.json} | 0 ...shot.json => 20250506052838_snapshot.json} | 0 ...shot.json => 20250506080002_snapshot.json} | 0 ...shot.json => 20250520035349_snapshot.json} | 0 ...shot.json => 20250620052738_snapshot.json} | 0 ...shot.json => 20250622022654_snapshot.json} | 0 ...shot.json => 20250622031812_snapshot.json} | 0 ...shot.json => 20250622043350_snapshot.json} | 0 ...shot.json => 20250622044721_snapshot.json} | 0 ...shot.json => 20250629214105_snapshot.json} | 0 ...shot.json => 20250705053249_snapshot.json} | 0 ...shot.json => 20250705185536_snapshot.json} | 0 ...shot.json => 20250705214031_snapshot.json} | 0 ...shot.json => 20250707003805_snapshot.json} | 0 ...shot.json => 20250714040244_snapshot.json} | 0 ...shot.json => 20250803075007_snapshot.json} | 0 ...shot.json => 20250803221441_snapshot.json} | 0 ...shot.json => 20250811113422_snapshot.json} | 0 ...shot.json => 20250902061513_snapshot.json} | 0 ...shot.json => 20250904031518_snapshot.json} | 0 ...shot.json => 20250905060053_snapshot.json} | 0 ...shot.json => 20250906201221_snapshot.json} | 0 ...shot.json => 20250921091044_snapshot.json} | 0 ...shot.json => 20250921193840_snapshot.json} | 0 ...shot.json => 20250927081336_snapshot.json} | 0 ...shot.json => 20251005054612_snapshot.json} | 0 ...shot.json => 20251005060900_snapshot.json} | 0 ...shot.json => 20251005061923_snapshot.json} | 0 ...shot.json => 20251025054233_snapshot.json} | 0 ...shot.json => 20251025181024_snapshot.json} | 0 ...shot.json => 20251103040556_snapshot.json} | 0 ...shot.json => 20251108200900_snapshot.json} | 0 ...shot.json => 20251121195717_snapshot.json} | 0 ...shot.json => 20251130050947_snapshot.json} | 0 ...shot.json => 20251130175508_snapshot.json} | 0 ...shot.json => 20251201064414_snapshot.json} | 0 ...shot.json => 20251201071327_snapshot.json} | 0 ...shot.json => 20251206235455_snapshot.json} | 0 ...shot.json => 20251207081309_snapshot.json} | 0 ...shot.json => 20251207100149_snapshot.json} | 0 ...shot.json => 20251207193944_snapshot.json} | 0 ...shot.json => 20251208042057_snapshot.json} | 0 ...shot.json => 20251210045701_snapshot.json} | 0 ...shot.json => 20251210060253_snapshot.json} | 0 ...shot.json => 20251221071758_snapshot.json} | 0 apps/dokploy/drizzle/meta/_journal.json | 268 +++++++++--------- apps/dokploy/package.json | 2 + .../convert-migrations-to-timestamp.ts | 231 +++++++++++++++ apps/dokploy/scripts/generate-migration.ts | 185 ++++++++++++ apps/dokploy/server/db/drizzle.config.ts | 1 + 275 files changed, 815 insertions(+), 150 deletions(-) create mode 100644 apps/dokploy/MIGRATIONS.md delete mode 100644 apps/dokploy/drizzle/0057_damp_prism.sql rename apps/dokploy/drizzle/{0000_reflective_puck.sql => 20240416101901_reflective_puck.sql} (100%) rename apps/dokploy/drizzle/{0001_striped_tattoo.sql => 20240422045357_striped_tattoo.sql} (100%) rename apps/dokploy/drizzle/{0002_ambiguous_carlie_cooper.sql => 20240422052452_ambiguous_carlie_cooper.sql} (100%) rename apps/dokploy/drizzle/{0003_square_lightspeed.sql => 20240424082541_square_lightspeed.sql} (100%) rename apps/dokploy/drizzle/{0004_nice_tenebrous.sql => 20240425002532_nice_tenebrous.sql} (100%) rename apps/dokploy/drizzle/{0005_cute_terror.sql => 20240512215850_cute_terror.sql} (100%) rename apps/dokploy/drizzle/{0006_oval_jimmy_woo.sql => 20240513011925_oval_jimmy_woo.sql} (100%) rename apps/dokploy/drizzle/{0007_cute_guardsmen.sql => 20240513012457_cute_guardsmen.sql} (100%) rename apps/dokploy/drizzle/{0008_lazy_sage.sql => 20240513013543_lazy_sage.sql} (100%) rename apps/dokploy/drizzle/{0009_majestic_spencer_smythe.sql => 20240513014614_majestic_spencer_smythe.sql} (100%) rename apps/dokploy/drizzle/{0010_lean_black_widow.sql => 20240513042037_lean_black_widow.sql} (100%) rename apps/dokploy/drizzle/{0011_petite_calypso.sql => 20240513042350_petite_calypso.sql} (100%) rename apps/dokploy/drizzle/{0012_chubby_umar.sql => 20240518070156_chubby_umar.sql} (100%) rename apps/dokploy/drizzle/{0013_blushing_starjammers.sql => 20240518234939_blushing_starjammers.sql} (100%) rename apps/dokploy/drizzle/{0014_same_hammerhead.sql => 20240526092247_same_hammerhead.sql} (100%) rename apps/dokploy/drizzle/{0015_fearless_callisto.sql => 20240605051517_fearless_callisto.sql} (100%) rename apps/dokploy/drizzle/{0016_chunky_leopardon.sql => 20240623021956_chunky_leopardon.sql} (100%) rename apps/dokploy/drizzle/{0017_minor_post.sql => 20240628035934_minor_post.sql} (100%) rename apps/dokploy/drizzle/{0018_careful_killmonger.sql => 20240702135257_careful_killmonger.sql} (100%) rename apps/dokploy/drizzle/{0019_heavy_freak.sql => 20240716061826_heavy_freak.sql} (100%) rename apps/dokploy/drizzle/{0020_fantastic_slapstick.sql => 20240719043741_fantastic_slapstick.sql} (100%) rename apps/dokploy/drizzle/{0021_premium_sebastian_shaw.sql => 20240719062703_premium_sebastian_shaw.sql} (100%) rename apps/dokploy/drizzle/{0022_warm_colonel_america.sql => 20240721030603_warm_colonel_america.sql} (100%) rename apps/dokploy/drizzle/{0023_icy_maverick.sql => 20240721061942_icy_maverick.sql} (100%) rename apps/dokploy/drizzle/{0024_dapper_supernaut.sql => 20240721231315_dapper_supernaut.sql} (100%) rename apps/dokploy/drizzle/{0025_lying_mephisto.sql => 20240722073733_lying_mephisto.sql} (100%) rename apps/dokploy/drizzle/{0026_known_dormammu.sql => 20240726073340_known_dormammu.sql} (100%) rename apps/dokploy/drizzle/{0027_red_lady_bullseye.sql => 20240731165819_red_lady_bullseye.sql} (100%) rename apps/dokploy/drizzle/{0028_jittery_eternity.sql => 20240801091039_jittery_eternity.sql} (100%) rename apps/dokploy/drizzle/{0029_colossal_zodiak.sql => 20240802055946_colossal_zodiak.sql} (100%) rename apps/dokploy/drizzle/{0030_little_kabuki.sql => 20240814040819_little_kabuki.sql} (100%) rename apps/dokploy/drizzle/{0031_steep_vulture.sql => 20240815060056_steep_vulture.sql} (100%) rename apps/dokploy/drizzle/{0032_flashy_shadow_king.sql => 20240815070057_flashy_shadow_king.sql} (100%) rename apps/dokploy/drizzle/{0033_white_hawkeye.sql => 20240902041202_white_hawkeye.sql} (100%) rename apps/dokploy/drizzle/{0034_aspiring_secret_warriors.sql => 20240902055317_aspiring_secret_warriors.sql} (100%) rename apps/dokploy/drizzle/{0035_cool_gravity.sql => 20240904055524_cool_gravity.sql} (100%) rename apps/dokploy/drizzle/{0036_tired_ronan.sql => 20240905065551_tired_ronan.sql} (100%) rename apps/dokploy/drizzle/{0037_legal_namor.sql => 20240922065809_legal_namor.sql} (100%) rename apps/dokploy/drizzle/{0038_rapid_landau.sql => 20241003075450_rapid_landau.sql} (100%) rename apps/dokploy/drizzle/{0039_many_tiger_shark.sql => 20241004055207_many_tiger_shark.sql} (100%) rename apps/dokploy/drizzle/{0040_graceful_wolfsbane.sql => 20241013004937_graceful_wolfsbane.sql} (100%) rename apps/dokploy/drizzle/{0041_huge_bruce_banner.sql => 20241023071038_huge_bruce_banner.sql} (100%) rename apps/dokploy/drizzle/{0042_fancy_havok.sql => 20241026231359_fancy_havok.sql} (100%) rename apps/dokploy/drizzle/{0043_closed_naoko.sql => 20241117200605_closed_naoko.sql} (100%) rename apps/dokploy/drizzle/{0044_sour_true_believers.sql => 20241117203219_sour_true_believers.sql} (100%) rename apps/dokploy/drizzle/{0045_smiling_blur.sql => 20241126180301_smiling_blur.sql} (100%) rename apps/dokploy/drizzle/{0046_purple_sleeper.sql => 20241129033311_purple_sleeper.sql} (100%) rename apps/dokploy/drizzle/{0047_tidy_revanche.sql => 20241207191810_tidy_revanche.sql} (100%) rename apps/dokploy/drizzle/{0048_flat_expediter.sql => 20241207191923_flat_expediter.sql} (100%) rename apps/dokploy/drizzle/{0049_dark_leopardon.sql => 20241208033242_dark_leopardon.sql} (100%) rename apps/dokploy/drizzle/{0050_nappy_wrecker.sql => 20241211035144_nappy_wrecker.sql} (100%) rename apps/dokploy/drizzle/{0051_hard_gorgon.sql => 20241215054442_hard_gorgon.sql} (100%) rename apps/dokploy/drizzle/{0052_bumpy_luckman.sql => 20241221192857_bumpy_luckman.sql} (100%) rename apps/dokploy/drizzle/{0053_broken_kulan_gath.sql => 20241225092724_broken_kulan_gath.sql} (100%) rename apps/dokploy/drizzle/{0054_nervous_spencer_smythe.sql => 20250112081021_nervous_spencer_smythe.sql} (100%) rename apps/dokploy/drizzle/{0055_next_serpent_society.sql => 20250112081343_next_serpent_society.sql} (100%) rename apps/dokploy/drizzle/{0056_majestic_skaar.sql => 20250113173838_majestic_skaar.sql} (100%) rename apps/dokploy/drizzle/{0057_tricky_living_tribunal.sql => 20250119170103_tricky_living_tribunal.sql} (100%) rename apps/dokploy/drizzle/{0058_brown_sharon_carter.sql => 20250123061503_brown_sharon_carter.sql} (100%) rename apps/dokploy/drizzle/{0059_striped_bill_hollister.sql => 20250123065240_striped_bill_hollister.sql} (100%) rename apps/dokploy/drizzle/{0060_disable-aggressive-cache.sql => 20250126221816_disable-aggressive-cache.sql} (100%) rename apps/dokploy/drizzle/{0061_many_molten_man.sql => 20250202072824_many_molten_man.sql} (100%) rename apps/dokploy/drizzle/{0062_slippery_white_tiger.sql => 20250202075315_slippery_white_tiger.sql} (100%) rename apps/dokploy/drizzle/{0063_panoramic_dreadnoughts.sql => 20250202190045_panoramic_dreadnoughts.sql} (100%) rename apps/dokploy/drizzle/{0064_previous_agent_brand.sql => 20250203063307_previous_agent_brand.sql} (100%) rename apps/dokploy/drizzle/{0065_daily_zaladane.sql => 20250209075737_daily_zaladane.sql} (100%) rename apps/dokploy/drizzle/{0066_yielding_echo.sql => 20250213060833_yielding_echo.sql} (100%) rename apps/dokploy/drizzle/{0067_condemned_sugar_man.sql => 20250302050723_condemned_sugar_man.sql} (100%) rename apps/dokploy/drizzle/{0068_complex_rhino.sql => 20250302064236_complex_rhino.sql} (100%) rename apps/dokploy/drizzle/{0069_legal_bill_hollister.sql => 20250305053516_legal_bill_hollister.sql} (100%) rename apps/dokploy/drizzle/{0070_useful_serpent_society.sql => 20250307044457_useful_serpent_society.sql} (100%) rename apps/dokploy/drizzle/{0071_flaky_black_queen.sql => 20250308185420_flaky_black_queen.sql} (100%) rename apps/dokploy/drizzle/{0072_green_susan_delgado.sql => 20250309022329_green_susan_delgado.sql} (100%) rename apps/dokploy/drizzle/{0073_hot_domino.sql => 20250309030801_hot_domino.sql} (100%) rename apps/dokploy/drizzle/{0074_black_quasar.sql => 20250309031424_black_quasar.sql} (100%) rename apps/dokploy/drizzle/{0075_young_typhoid_mary.sql => 20250309033847_young_typhoid_mary.sql} (100%) rename apps/dokploy/drizzle/{0076_young_sharon_ventura.sql => 20250309041554_young_sharon_ventura.sql} (100%) rename apps/dokploy/drizzle/{0077_chemical_dreadnoughts.sql => 20250309084806_chemical_dreadnoughts.sql} (100%) rename apps/dokploy/drizzle/{0078_uneven_omega_sentinel.sql => 20250316080314_uneven_omega_sentinel.sql} (100%) rename apps/dokploy/drizzle/{0079_bizarre_wendell_rand.sql => 20250318070810_bizarre_wendell_rand.sql} (100%) rename apps/dokploy/drizzle/{0080_sleepy_sinister_six.sql => 20250329204106_sleepy_sinister_six.sql} (100%) rename apps/dokploy/drizzle/{0081_lovely_mentallo.sql => 20250329204734_lovely_mentallo.sql} (100%) rename apps/dokploy/drizzle/{0082_clean_mandarin.sql => 20250329223449_clean_mandarin.sql} (100%) rename apps/dokploy/drizzle/{0083_parallel_stranger.sql => 20250329224611_parallel_stranger.sql} (100%) rename apps/dokploy/drizzle/{0084_thin_iron_lad.sql => 20250406071952_thin_iron_lad.sql} (100%) rename apps/dokploy/drizzle/{0085_equal_captain_stacy.sql => 20250426221329_equal_captain_stacy.sql} (100%) rename apps/dokploy/drizzle/{0086_rainy_gertrude_yorkes.sql => 20250426223116_rainy_gertrude_yorkes.sql} (100%) rename apps/dokploy/drizzle/{0087_lively_risque.sql => 20250427031243_lively_risque.sql} (100%) rename apps/dokploy/drizzle/{0088_illegal_ma_gnuci.sql => 20250503072208_illegal_ma_gnuci.sql} (100%) rename apps/dokploy/drizzle/{0089_noisy_sandman.sql => 20250504210244_noisy_sandman.sql} (100%) rename apps/dokploy/drizzle/{0090_clean_wolf_cub.sql => 20250506052838_clean_wolf_cub.sql} (100%) rename apps/dokploy/drizzle/{0091_spotty_kulan_gath.sql => 20250506080002_spotty_kulan_gath.sql} (100%) rename apps/dokploy/drizzle/{0092_stiff_the_watchers.sql => 20250520035349_stiff_the_watchers.sql} (100%) rename apps/dokploy/drizzle/{0093_nice_gorilla_man.sql => 20250620052738_nice_gorilla_man.sql} (100%) rename apps/dokploy/drizzle/{0094_numerous_carmella_unuscione.sql => 20250622022654_numerous_carmella_unuscione.sql} (100%) rename apps/dokploy/drizzle/{0095_curly_justice.sql => 20250622031812_curly_justice.sql} (100%) rename apps/dokploy/drizzle/{0096_small_shaman.sql => 20250622043350_small_shaman.sql} (100%) rename apps/dokploy/drizzle/{0097_hard_lizard.sql => 20250622044721_hard_lizard.sql} (100%) rename apps/dokploy/drizzle/{0098_conscious_chat.sql => 20250629214105_conscious_chat.sql} (100%) rename apps/dokploy/drizzle/{0099_wise_golden_guardian.sql => 20250705053249_wise_golden_guardian.sql} (100%) rename apps/dokploy/drizzle/{0100_purple_rogue.sql => 20250705185536_purple_rogue.sql} (100%) rename apps/dokploy/drizzle/{0101_moaning_blazing_skull.sql => 20250705214031_moaning_blazing_skull.sql} (100%) rename apps/dokploy/drizzle/{0102_opposite_grandmaster.sql => 20250707003805_opposite_grandmaster.sql} (100%) rename apps/dokploy/drizzle/{0103_cultured_pestilence.sql => 20250714040244_cultured_pestilence.sql} (100%) rename apps/dokploy/drizzle/{0104_omniscient_randall.sql => 20250803075007_omniscient_randall.sql} (100%) rename apps/dokploy/drizzle/{0105_clumsy_quicksilver.sql => 20250803221441_clumsy_quicksilver.sql} (100%) rename apps/dokploy/drizzle/{0106_purple_maggott.sql => 20250811113422_purple_maggott.sql} (100%) rename apps/dokploy/drizzle/{0107_loud_kang.sql => 20250902061513_loud_kang.sql} (100%) rename apps/dokploy/drizzle/{0108_lazy_next_avengers.sql => 20250904031518_lazy_next_avengers.sql} (100%) rename apps/dokploy/drizzle/{0109_remarkable_sauron.sql => 20250905060053_remarkable_sauron.sql} (100%) rename apps/dokploy/drizzle/{0110_red_psynapse.sql => 20250906201221_red_psynapse.sql} (100%) rename apps/dokploy/drizzle/{0111_mushy_wolfsbane.sql => 20250921091044_mushy_wolfsbane.sql} (100%) rename apps/dokploy/drizzle/{0112_freezing_skrulls.sql => 20250921193840_freezing_skrulls.sql} (100%) rename apps/dokploy/drizzle/{0113_complete_rafael_vega.sql => 20250927081336_complete_rafael_vega.sql} (100%) rename apps/dokploy/drizzle/{0114_dry_black_tom.sql => 20251005054612_dry_black_tom.sql} (100%) rename apps/dokploy/drizzle/{0115_serious_black_bird.sql => 20251005060900_serious_black_bird.sql} (100%) rename apps/dokploy/drizzle/{0116_amusing_firedrake.sql => 20251005061923_amusing_firedrake.sql} (100%) rename apps/dokploy/drizzle/{0117_lumpy_nuke.sql => 20251025054233_lumpy_nuke.sql} (100%) rename apps/dokploy/drizzle/{0118_loose_anita_blake.sql => 20251025181024_loose_anita_blake.sql} (100%) rename apps/dokploy/drizzle/{0119_bouncy_morbius.sql => 20251103040556_bouncy_morbius.sql} (100%) rename apps/dokploy/drizzle/{0120_lame_captain_midlands.sql => 20251108200900_lame_captain_midlands.sql} (100%) rename apps/dokploy/drizzle/{0121_rainy_cargill.sql => 20251121195717_rainy_cargill.sql} (100%) rename apps/dokploy/drizzle/{0122_absent_frightful_four.sql => 20251130050947_absent_frightful_four.sql} (100%) rename apps/dokploy/drizzle/{0123_cloudy_piledriver.sql => 20251130175508_cloudy_piledriver.sql} (100%) rename apps/dokploy/drizzle/{0124_certain_cloak.sql => 20251201064414_certain_cloak.sql} (100%) rename apps/dokploy/drizzle/{0125_neat_the_phantom.sql => 20251201071327_neat_the_phantom.sql} (100%) rename apps/dokploy/drizzle/{0126_nifty_monster_badoon.sql => 20251206235455_nifty_monster_badoon.sql} (100%) rename apps/dokploy/drizzle/{0127_superb_alice.sql => 20251207081309_superb_alice.sql} (100%) rename apps/dokploy/drizzle/{0128_hard_falcon.sql => 20251207100149_hard_falcon.sql} (100%) rename apps/dokploy/drizzle/{0129_pale_roughhouse.sql => 20251207193944_pale_roughhouse.sql} (100%) rename apps/dokploy/drizzle/{0130_perpetual_screwball.sql => 20251208042057_perpetual_screwball.sql} (100%) rename apps/dokploy/drizzle/{0131_volatile_beast.sql => 20251210045701_volatile_beast.sql} (100%) rename apps/dokploy/drizzle/{0132_clean_layla_miller.sql => 20251210060253_clean_layla_miller.sql} (100%) rename apps/dokploy/drizzle/{0133_striped_the_order.sql => 20251221071758_striped_the_order.sql} (100%) rename apps/dokploy/drizzle/meta/{0000_snapshot.json => 20240416101901_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0001_snapshot.json => 20240422045357_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0002_snapshot.json => 20240422052452_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0003_snapshot.json => 20240424082541_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0004_snapshot.json => 20240425002532_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0005_snapshot.json => 20240512215850_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0006_snapshot.json => 20240513011925_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0007_snapshot.json => 20240513012457_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0008_snapshot.json => 20240513013543_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0009_snapshot.json => 20240513014614_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0010_snapshot.json => 20240513042037_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0011_snapshot.json => 20240513042350_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0012_snapshot.json => 20240518070156_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0013_snapshot.json => 20240518234939_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0014_snapshot.json => 20240526092247_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0015_snapshot.json => 20240605051517_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0016_snapshot.json => 20240623021956_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0017_snapshot.json => 20240628035934_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0018_snapshot.json => 20240702135257_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0019_snapshot.json => 20240716061826_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0020_snapshot.json => 20240719043741_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0021_snapshot.json => 20240719062703_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0022_snapshot.json => 20240721030603_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0023_snapshot.json => 20240721061942_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0024_snapshot.json => 20240721231315_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0025_snapshot.json => 20240722073733_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0026_snapshot.json => 20240726073340_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0027_snapshot.json => 20240731165819_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0028_snapshot.json => 20240801091039_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0029_snapshot.json => 20240802055946_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0030_snapshot.json => 20240814040819_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0031_snapshot.json => 20240815060056_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0032_snapshot.json => 20240815070057_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0033_snapshot.json => 20240902041202_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0034_snapshot.json => 20240902055317_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0035_snapshot.json => 20240904055524_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0036_snapshot.json => 20240905065551_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0037_snapshot.json => 20240922065809_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0038_snapshot.json => 20241003075450_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0039_snapshot.json => 20241004055207_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0040_snapshot.json => 20241013004937_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0041_snapshot.json => 20241023071038_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0042_snapshot.json => 20241026231359_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0043_snapshot.json => 20241117200605_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0044_snapshot.json => 20241117203219_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0045_snapshot.json => 20241126180301_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0046_snapshot.json => 20241129033311_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0047_snapshot.json => 20241207191810_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0048_snapshot.json => 20241207191923_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0049_snapshot.json => 20241208033242_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0050_snapshot.json => 20241211035144_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0051_snapshot.json => 20241215054442_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0052_snapshot.json => 20241221192857_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0053_snapshot.json => 20241225092724_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0054_snapshot.json => 20250112081021_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0055_snapshot.json => 20250112081343_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0056_snapshot.json => 20250113173838_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0057_snapshot.json => 20250119170103_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0058_snapshot.json => 20250123061503_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0059_snapshot.json => 20250123065240_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0060_snapshot.json => 20250126221816_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0061_snapshot.json => 20250202072824_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0062_snapshot.json => 20250202075315_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0063_snapshot.json => 20250202190045_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0064_snapshot.json => 20250203063307_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0065_snapshot.json => 20250209075737_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0066_snapshot.json => 20250213060833_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0067_snapshot.json => 20250302050723_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0068_snapshot.json => 20250302064236_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0069_snapshot.json => 20250305053516_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0070_snapshot.json => 20250307044457_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0071_snapshot.json => 20250308185420_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0072_snapshot.json => 20250309022329_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0073_snapshot.json => 20250309030801_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0074_snapshot.json => 20250309031424_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0075_snapshot.json => 20250309033847_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0076_snapshot.json => 20250309041554_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0077_snapshot.json => 20250309084806_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0078_snapshot.json => 20250316080314_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0079_snapshot.json => 20250318070810_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0080_snapshot.json => 20250329204106_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0081_snapshot.json => 20250329204734_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0082_snapshot.json => 20250329223449_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0083_snapshot.json => 20250329224611_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0084_snapshot.json => 20250406071952_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0085_snapshot.json => 20250426221329_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0086_snapshot.json => 20250426223116_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0087_snapshot.json => 20250427031243_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0088_snapshot.json => 20250503072208_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0089_snapshot.json => 20250504210244_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0090_snapshot.json => 20250506052838_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0091_snapshot.json => 20250506080002_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0092_snapshot.json => 20250520035349_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0093_snapshot.json => 20250620052738_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0094_snapshot.json => 20250622022654_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0095_snapshot.json => 20250622031812_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0096_snapshot.json => 20250622043350_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0097_snapshot.json => 20250622044721_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0098_snapshot.json => 20250629214105_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0099_snapshot.json => 20250705053249_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0100_snapshot.json => 20250705185536_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0101_snapshot.json => 20250705214031_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0102_snapshot.json => 20250707003805_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0103_snapshot.json => 20250714040244_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0104_snapshot.json => 20250803075007_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0105_snapshot.json => 20250803221441_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0106_snapshot.json => 20250811113422_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0107_snapshot.json => 20250902061513_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0108_snapshot.json => 20250904031518_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0109_snapshot.json => 20250905060053_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0110_snapshot.json => 20250906201221_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0111_snapshot.json => 20250921091044_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0112_snapshot.json => 20250921193840_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0113_snapshot.json => 20250927081336_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0114_snapshot.json => 20251005054612_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0115_snapshot.json => 20251005060900_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0116_snapshot.json => 20251005061923_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0117_snapshot.json => 20251025054233_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0118_snapshot.json => 20251025181024_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0119_snapshot.json => 20251103040556_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0120_snapshot.json => 20251108200900_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0121_snapshot.json => 20251121195717_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0122_snapshot.json => 20251130050947_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0123_snapshot.json => 20251130175508_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0124_snapshot.json => 20251201064414_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0125_snapshot.json => 20251201071327_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0126_snapshot.json => 20251206235455_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0127_snapshot.json => 20251207081309_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0128_snapshot.json => 20251207100149_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0129_snapshot.json => 20251207193944_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0130_snapshot.json => 20251208042057_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0131_snapshot.json => 20251210045701_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0132_snapshot.json => 20251210060253_snapshot.json} (100%) rename apps/dokploy/drizzle/meta/{0133_snapshot.json => 20251221071758_snapshot.json} (100%) create mode 100644 apps/dokploy/scripts/convert-migrations-to-timestamp.ts create mode 100644 apps/dokploy/scripts/generate-migration.ts 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 bd6c62c46c..72024a651b 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 375ecbe69c..1066e9e03a 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..1e02907fd3 --- /dev/null +++ b/apps/dokploy/scripts/convert-migrations-to-timestamp.ts @@ -0,0 +1,231 @@ +#!/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..784f00dfda --- /dev/null +++ b/apps/dokploy/scripts/generate-migration.ts @@ -0,0 +1,185 @@ +#!/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", }, }); From f771f10a4692e8cd3a7a2add115a0112866e9dbc Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 00:02:15 +0000 Subject: [PATCH 2/2] [autofix.ci] apply automated fixes --- .../convert-migrations-to-timestamp.ts | 10 ++++++-- apps/dokploy/scripts/generate-migration.ts | 25 +++++++++++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/apps/dokploy/scripts/convert-migrations-to-timestamp.ts b/apps/dokploy/scripts/convert-migrations-to-timestamp.ts index 1e02907fd3..a7a0c75d0b 100644 --- a/apps/dokploy/scripts/convert-migrations-to-timestamp.ts +++ b/apps/dokploy/scripts/convert-migrations-to-timestamp.ts @@ -174,8 +174,14 @@ async function convertMigrations(): Promise { // 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`); + 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); diff --git a/apps/dokploy/scripts/generate-migration.ts b/apps/dokploy/scripts/generate-migration.ts index 784f00dfda..5ffff08c88 100644 --- a/apps/dokploy/scripts/generate-migration.ts +++ b/apps/dokploy/scripts/generate-migration.ts @@ -85,7 +85,10 @@ Bad examples: `); } -function validateMigrationName(name: string): { valid: boolean; error?: string } { +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" }; @@ -93,15 +96,24 @@ function validateMigrationName(name: string): { valid: boolean; error?: string } // Check length if (name.length < 3) { - return { valid: false, error: "Migration name must be at least 3 characters" }; + 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" }; + 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)) { + if ( + !/^[a-z][a-z0-9-]*[a-z0-9]$/.test(name) && + !/^[a-z][a-z0-9]*$/.test(name) + ) { return { valid: false, error: @@ -111,7 +123,10 @@ function validateMigrationName(name: string): { valid: boolean; error?: string } // Check for double hyphens if (name.includes("--")) { - return { valid: false, error: "Migration name cannot contain double hyphens" }; + return { + valid: false, + error: "Migration name cannot contain double hyphens", + }; } // Check for forbidden generic names