Skip to content

Postupy a obecné nároky na vývoj

  • Za standartní se považuje vytvářet nové featury, zpracovávat změny, aj. v samostatných vývojových větvích, standartně “feature/[nazev_ticketu]”.
  • Všechny větve vycházejí z větve dev
  • Zpět do větve dev se dostanou cestou merge requestu
  • Z větve dev po otestování mergujeme do master
  • Deploy master větve vyžaduje ruční potvrzení
  • Models: Singular PascalCase (např. User, QuizzEvent)
  • Controllers: PascalCase + Controller suffix (např. UserController)
  • Migrations: snake_case s časovým prefixem (např. 2024_01_01_000000_create_users_table)
  • Seeders: PascalCase + Seeder suffix (např. UserRoleCompanySeeder)
  • Factories: PascalCase + Factory suffix (např. RegionFactory)
  • Tabulky: Plural snake_case s prefixem chk_ (např. chk_users, chk_regions)
  • Foreign keys: {model}_id (např. country_id, region_id)
  • Pivot tabulky: Alphabetically ordered, singular (např. chk_pub_user)
  • Všechny seedery musí být idempotentní — druhý běh nesmí přidat jediný řádek ani spadnout (hlídá DatabaseSeederIdempotenceTest)
  • updateOrCreate()/firstOrCreate() s přirozeným klíčem (name, slug, e-mail, (event_id, team_id)); insertOrIgnore jen pro lookup tabulky s pevnými ID. Nikdy klíč odvozený z data (now()->format('ym'))
  • Chybějící prerekvizity = RuntimeException s návodem, který seeder spustit; tiché return/fallbacky jsou zakázané
  • Observované modely (QuizzEvent, QuizzBlueprint, Team, rezervace, Pub, Topic, users…) zapisovat přes createQuietly/withoutEvents — a ručně doplnit, co jinak dělá potlačený boot() (např. Team.pairing_pin)
  • Žádné zápisy do filesystemu při seedu, žádná produkční ID, žádné nové pojmenování region slugů (kontrakt hlídá RegionSlugContractTest)
  • Jednorázové datové migrace NIKDY seederem — patří do migrace
  • Kompletní pravidla: skill writing-seeders v .claude/skills/
  • Unit testy používají SQLite in-memory databázi
  • Feature testy používají MySQL testovací databázi kviz_testing
  • Spouštějte testy v Docker kontejneru: docker-compose exec -T fpm php vendor/bin/pest