Commit Graph

271 Commits

Author SHA1 Message Date
Nabeel Shahzad
822524626f
refactor(addons): remove deprecated tests, update service bindings, and improve addon handling
- Removed outdated AddonsTableTest and related assertions.
- Unified service namespaces: migrated support classes to `Support` and service classes to `Services`.
- Added `name` column to the `addons` table and updated related models, migrations, and seeders.
- Replaced `AddonBootService` references with `AddonRuntimeService` throughout tests and codebase.
- Updated Rector configuration and Mago schema, improving import handling and schema validation.
- Simplified addon discovery logic, enhancing boot cache performance.
- Removed unused methods and adjusted runtime behavior for stricter validation and consistency.
2026-06-12 14:58:44 -05:00
Nabeel Shahzad
92648bdbe4
Remove the nwidart library 2026-06-12 14:58:44 -05:00
Nabeel Shahzad
1ed8ba8a18
More test fixes 2026-06-02 15:40:01 -05:00
Nabeel Shahzad
b4937a4975
Move settings out of yml into its own seeder 2026-05-31 13:37:33 -05:00
Nabeel Shahzad
5d799b6411
Composer update 2026-05-29 14:35:33 -05:00
Nabeel Shahzad
bfb8e66363
Rebase against main 2026-05-27 19:24:25 -05:00
Nabeel Shahzad
370c2f6fdf
feat(routeforge): admin batch flight composer + lint pipeline
New Filament page at /admin/route-forge: compose dozens of scheduled
flights across five topologies (Hub→Spokes, Spokes→Hub, Hub & Spokes,
Mesh, Chain), preview rows live, lint for operational issues, commit
as one Flight Bundle in a single atomic transaction.

Frontend: TypeScript + Preact 10 + @preact/signals + @date-fns/tz.
Separate Vite entry, 26.69 KB gzip (well under the 60 KB target).
Client-side generator + 12 lint rules; localStorage draft resume.

Backend: RouteForge service + 12 PHP lint rule classes + duplicate
checker + commit orchestration (Flight::withoutEvents + single
bundle-level activity log). Six endpoints under
/admin/route-forge/api/, gated by permission:create:flight.

Bundle picker is dual-mode — type a new name to create, or pick an
existing bundle to append flights to (read-only summary, server skips
the bundle persist step and stamps the existing id onto new flights).

Airport picker: click-to-open dropdown with 50-result alpha pages,
checkbox rows for multi-select, prefix-only search via new
searchMode=prefix opt-in on the shared AirportSearchQueryV1
(/api/airports default substring behavior preserved).

Quality: tsc strict mode clean, oxlint 0/0, phpstan no errors,
pint passing. Pest scaffolding deferred per workflow.

Tracking: openspec/changes/route-forge — 66/106 tasks complete
(sections 1, 2, 4, 5, 6, 7, 8; Pest 4.6/5.3/6.4 + sections 9–12
remaining).

# Conflicts:
#	package-lock.json
#	package.json
2026-05-24 11:55:33 -05:00
Nabeel Shahzad
9dc78d22cd
I guess we needed the data migrator 2026-05-23 12:34:05 -05:00
Nabeel Shahzad
612c173dab
Remove is_default and composer update
# Conflicts:
#	composer.lock
2026-05-23 12:05:32 -05:00
Arthur Pariente
d823e72238
refactor: remove VaCentral package and update airport lookup implementation 2026-05-22 18:27:54 +02:00
Nabeel S.
de34422008
Updating styling and looks of the installer/admin/system filament pages (#2211)
* fix(installer): handle missing DB and fix CSRF middleware class

- InstalledCheck: wrap Schema::hasTable in try-catch to handle when
database is unreachable or does not exist, preventing crash before
installer can redirect
- SystemPanelProvider, AdminPanelProvider: fix non-existent
PreventRequestForgery class to ValidateCsrfToken (Laravel 12)
- .env.example: change default SESSION_DRIVER from database to file
so fresh installs don't require sessions table before migrations run

* Filament installer/system styles and changes

* Don't include frontend js in system/admin

* Don't include frontend js in system/admin

* fix(translations): normalize 'informations' and snake_case keys

- Fix ungrammatical plural 'informations' → 'Information' across all locales
- Rename joined-word translation keys to snake_case convention:
  auth: create_account, forgot_password, full_name, email_address, etc.
  pireps: new_flight_report, flight_time, flight_level, fields_readonly, etc.
  common: newest_pilots, live_map, rights_reserved, toggle_colors
  flights: flight_time, profile: transfer_hours, widgets: live_map
  dashboard: total_hours, your_balance, your_last_report, no_reports_yet
- Update all PHP/Blade references to renamed keys
- Add missing translation keys to non-English locales (send_reset_link,
  comment, error_changing_state, fields, field_value, landing_rate, etc.)
- Fix fr/filament.php: two keys on single line
- Fix en/aircraft.php: double space in 'Dry Weight'
- Run Pint on all modified files

* Design and other small changes

* feat(admin): add News Filament resource and seed PIREP sample data

Replace the dashboard News widget with a full Filament resource that
opens Create/Edit in modals (no separate pages routed). Adds the
matching policy so filament-shield can wire permissions.

Add a dev seed script (scripts/seed_sample_pireps.php) that inserts
sample airports, subfleets, aircraft, and 10 admin-owned PIREPs (last
two PENDING) to populate an empty database for UI testing.

Fix lazy-load exception on the PIREPs admin table by eager-loading
airline, aircraft and user via modifyQueryUsing; the table only worked
before because the database had no PIREPs.

* chore(admin): pending Filament panel refactor in working tree

Pre-existing uncommitted work from earlier sessions. Not authored or
reviewed in this commit's session; batched here only to clear the
working tree.

Includes:
- Airports resource simplified to modal-via-no-route pattern
  (CreateAirport, EditAirport page stubs deleted; getPages trimmed
  to index only)
- Modules page renamed to Addons
- New plugins: ClearCachesPlugin, SidebarCollapseTogglePlugin
- ClearCaches Livewire component
- Filament admin theme.css restyle
- NavigationGroup enum + lang/common, lang/filament tweaks
- system/brand.blade.php moved to shared/brand.blade.php
- Override attribute normalization across Filament resources

* fix(review): address CodeRabbit PR #2211 review feedback

Critical
- Restore CSRF middleware (PreventRequestForgery) in Admin + System panels
- Fix Addons page redirectRoute (modules -> addons) in 3 actions
- SeederService: fix SplFileInfo TypeError, guard missing seed dir, arrow fn
- YamlSeeder: propagate $ignore_errors, fix SplFileInfo bug, guard file read,
  proper File facade import
- Installer: gate install via withoutGlobalScopes()->exists() not count(),
  drop duplicated stream() of full buffer after chunked streaming
- .env.example: APP_DEBUG/DEBUGBAR_ENABLED default to false

Bugs
- seed_sample_pireps.php: swap KSAN/KLAX lat/lon
- theme.css: drop phantom mobile ::before rule (no matching selector)
- module-links-topbar.blade: localize hardcoded Admin label
- seven/app.blade: drop @vite call referencing removed bundles

i18n
- de/auth: fix Adresse typo + translate send_reset_link
- de/installer.title: brand wordmark phpvms
- fr/auth.toc_accept: fix acceptez typo
- es-es/it/tr/jp/pt-br: translate 10 PIREP keys + send_reset_link/fill_captcha
- de/es-es/it/jp/tr/common: add toggle_colors

Cleanup
- Remove dead commented blocks (Installer headerActions, InstallSeeder,
  YamlSeeder, seed_sample_pireps section dividers)
- NewsResource label uses common.news namespace
- login-hero alt uses lowercase brand

Rector + Pint auto-fixes
- Add declare(strict_types=1) where missing
- Add arrow-fn return types for brandLogo + News table schema
- Standardize catch-block exception names

* wip: pre-plan baseline (pirep map work + admin/frontend JS split)

* feat(pireps): add PerformanceChartService for ACARS chart datasets

* feat(pireps): load fares/field_values + build performance chart payload

* refactor(pireps): drop relation manager tabs (will embed inline)

* feat(pireps): register Chart.js wrapper for performance charts

* feat(pireps): add detail page header + stat strip partial

* feat(pireps): add unified Route & Performance card partial

* feat(pireps): add notes + filed route partial

* feat(pireps): add detail sidebar partial

* feat(pireps): wire new detail blade composition + embedded RMs

* feat(pireps): style v2 detail page (Stripe-flavored, theme tokens, dark mode)

* chore(pireps): drop legacy .fi-pirep-modal-* styles

* fix(pireps): inline Acars query to satisfy PHPStan level 5

larastan does not forward #[Scope] attribute methods through
HasMany relation builders, so calling `->ofType()->orderedByCreatedAt()`
on the relation tripped method.notFound at PHPStan level 5.

Replace with explicit where() + orderBy() — same runtime behavior,
no scope-forwarding surface for the analyzer to miss.

* fix(pireps): prune wasted eager loads + preserve zero-fuel samples

- Eager-load `user.rank` (sidebar reads $pilot->rank->name and would N+1
  on every detail page view).
- Drop `comments.user`, `transactions`, `fares.fare` from loadMissing —
  the embedded relation managers issue their own queries, so preloading
  at the page level only adds round-trips for data the page itself never
  uses.
- Fix fuel series to treat a fuel value of `0` as a real sample rather
  than null. Previously `$s->fuel ? ... : null` collapsed legitimate
  empty-tanks readings into gaps.

* fix(pireps): restore eager loads for embedded relation managers

Filament relation managers ARE separate Livewire queries, but their
blade columns still reach into nested relations on each row
(e.g. PirepFare->fare in FaresRelationManager). With lazy loading
disabled globally via Model::preventLazyLoading, those accesses
hard-fail with LazyLoadingViolationException.

Restore comments.user / transactions / fares.fare to the parent
loadMissing(). Keep user.rank from the earlier fix.

Reverts the wasted-load optimization in d6a8a3b5 — the optimization
was based on speculation, not measurement, and broke real
runtime behavior. Net effect: one extra preload per detail page,
versus a 500 error.

Refs: detail.blade.php:46 @livewire(FaresRelationManager)

* fix(pireps): address review findings (eager loads, ts null guard, downsample tail)

Tier A fixes from post-merge review of the redesign branch.

ViewPirep::mount
- Add fares.pirep + field_values.pirep to loadMissing. The FaresRelationManager
  and FieldValuesRelationManager column `disabled` closures call
  `$record->pirep->read_only` per row. Under Model::preventLazyLoading
  (active in dev/test) that triggered a lazy-load violation when editing
  any fare/field value. Production silently lazy-loaded on every edit.
- Drop airline from loadMissing. No partial or relation manager touches the
  airline relation; the preload was dead weight.

PerformanceChartService::ts
- Guard against null Acars$created_at (documented Carbon|null; partial imports
  leave it unset). Use \DateTimeInterface instanceof check rather than ?->,
  because larastan narrows the model property to non-null Carbon and reports
  nullsafe.neverNull at level 5 even when the runtime type is genuinely null.

PerformanceChartService::downsample
- Always include the final sample. Previously `$i % $step === 0` could drop
  the last point when total count was not a multiple of step, hiding the
  touchdown / arrival sample from the chart. Index 0 stays included via
  the existing modulo, so first + last are both preserved.

* refactor(pireps): drop route text card, restore route bar under map

Removes the raw waypoint route card from the PIREP view (notes partial),
restores the route bar (departure/arrival ICAO + name + block times + line)
that sits below the map in route-performance partial, and re-adds its
matching CSS in the admin theme.

- resources/views/filament/pireps/detail/notes.blade.php: remove route text card
- resources/views/filament/pireps/detail/route-performance.blade.php: restore route bar block + php helpers (blockOff/blockOn/duration/unitDistance)
- resources/css/filament/admin/theme.css: restore .fi-pirep-detail-v2-route-bar styles

* wip(pireps): landing analysis card, perf chart split, comment policy + tooling

Bundles in-progress PIREP detail work plus build tooling that landed in the
working tree:

PIREP detail
- Landing analysis card: runway plan-views, scorecard polar, attitude
  indicators (route-performance partial owns the markup; see prior commit).
- PerformanceChartService: build landing payload + extra chart series.
- Sidebar + modal/detail partials: stacked custom-fields card, layout tweaks.
- PirepCommentPolicy + RelationManager wiring for per-row authorization.

Assets
- Split AlpineComponents into resources/js/components/{pirep-landing-analysis,pirep-performance-chart}.js.
- bin/build.js esbuild driver; package.json/vite.config.js/.gitignore updates.
- Drop legacy resources/js/admin/pirep-performance-chart.js (moved to components/).

Misc
- AdminPanelProvider, base_map.js, config/services.php small adjustments.
- justfile task runner.
- composer/package lock updates.

* feat(admin): improve PIREP detail page layout and theming

- Split fares/transactions into separate cards (was single Finance card)
- Fares: plain text columns, no pagination, currency formatting
- Transactions: JetBrains Mono money amounts, no pagination
- Net total row in its own card
- Sidebar facts (Pilot/Flight) use stacked layout matching PIREP fields
- JetBrains Mono font for all money values (fi-pirep-money-mono)
- Map switches CartoDB.Voyager/DarkMatter on theme change
- Admin sidebar width 14.5rem
- PIREP detail sidebar sticky positioning accounts for topbar

* View pirep page updates

* fix: admin pirep page UX improvements and chart stability

- View PIREP button: transparent background, no fill
- Flight number links to view PIREP page
- PIREP detail heading shows flight number + route (VMS7620 C.PF MMMX→MMAA)
- Hero section: pilot name + aircraft on top line, filed time + source on secondary
- Sidebar: remove sticky scroll, let entire page scroll naturally
- Performance chart: fix canvas detachment on tab switch by wrapping in wire:ignore parent and using .canvas

* Shape up finances table

* feat: add flight log timeline tab with phase-colored badges

Two-column flight strip on Flight Log tab rendering ACARS LOG entries
(type=2) with timestamp/altitude/speed badges and phase assignment
from PerformanceChartService phase detection. Sort toggle flips
between earliest-first and latest-first order.

* fix(review): address code review blockers

- phpunit.xml: restore DB_CONNECTION=sqlite (suite was hitting MySQL
  with :memory: database name, all tests 500ing on first query)
- ViewPirep::getHeading: use typed $this->record over getRecord()
  to fix 4 phpstan property.notFound errors at level 5
- NewsResource: drop user_id overwrite on EditAction; preserved the
  original author. user_id only set on create now.
- PerformanceChartService: remove discarded toFloat call on landing
  speed (no consumer anywhere in codebase)

Pre-PR checks: pint v, phpstan v, rector v, pest v (368 passed).

* chore(review): tidy review minors

- finance widgets: refresh /livewire/update comment to v4 hashed path
  format; widget visibility logic is path-agnostic so behavior unchanged
- seed_sample_pireps: make bulk PIREP loop idempotent. lookup by
  source_name + flight_number + airport pair so re-running the script
  no longer duplicates the 10 routes on each invocation

* fix(pireps): flight-log rows respect dark mode

Inline style="background: #..." on each row + badge was overriding
the dark-mode CSS rules, leaving alternating rows white in dark mode.

- blade: drop the phaseColor/phaseBg/phaseTextColor/rowBg PHP closures.
  collapse to a single $phaseBucket helper that maps a phase code to a
  bucket name (ground/climb/cruise/descent/land/neutral). row + badge
  pick up CSS modifier classes instead of inline styles.
- theme.css: add zebra + phase tint rules for the row (.--zebra,
  .--phase-climb, .--phase-land) plus six badge variants. each has a
  light + dark pair using translucent tints with brighter text so the
  badge stays readable against the gray-900 row background.

* fix(ci): guard Vite::asset() against missing build manifest

composer install runs `package:discover` which boots service providers.
AdminPanelProvider::register() called Vite::asset() eagerly, throwing
ViteManifestNotFoundException on CI / fresh clones where composer runs
before npm has built the frontend.

Move the admin maps Js asset behind an `is_file(public_path(...))`
guard so the provider registers the rest of the assets unconditionally
and skips the Vite-resolved entry until the manifest exists. The map
blade has its own @vite() at render time so end-user behavior is
unchanged once `npm run build` has run.

Verified locally by removing public/build/manifest.json and running
composer dump-autoload — package:discover now completes cleanly.

* fix(ci): guard AlpineComponent assets against missing dist files

filament:upgrade (post-autoload-dump) was throwing on CI when copying
resources/js/dist/components/pirep-performance-chart.js to the public
assets folder. The esbuild'd Alpine components are produced by
bin/build.js and not committed, so a fresh clone has no dist directory
when composer post-autoload hooks run.

Loop the components through an `is_file()` guard like the Vite manifest
check added in the previous commit. Provider registration completes
when the frontend hasn't been built; the components register the
moment `npm run build` (or `node bin/build.js`) creates the files.

Verified by removing resources/js/dist and re-running
`php artisan filament:upgrade` — clean.

* chore(ci): build frontend before composer + commit dist artifacts

Two coordinated fixes for CI ordering + asset shipping:

(A) Reorder CI so Node + frontend build run BEFORE composer install.
The Laravel post-autoload-dump hook chain (package:discover ->
filament:upgrade) boots service providers which read the Vite manifest
and copy AlpineComponent files at register time. Running composer first
threw ViteManifestNotFoundException and copy() ENOENT on a fresh clone.

Affects all three jobs in build.yml:
- `build` (matrix x3 PHP versions): Node setup moved above composer
- `artifacts` (release packager): same swap
- `docker` (image builder): Node setup added (was composer-only)

(C) Commit `resources/js/dist/components/*.js` esbuild output. Removes
the runtime dependency on `node bin/build.js` for downstream consumers
(shared hosting installs, fresh composer-create-project flows). Matches
the existing convention for `public/js/filament/*` and
`public/assets/frontend/js/*` which are already committed pre-built.

A "Verify committed dist files match a fresh build" CI step diffs the
post-build tree against HEAD so contributors who edit the AlpineComponent
sources without re-running `npm run build:components` fail the build with
a clear error rather than shipping stale dist files.

The defensive `is_file()` guards in AdminPanelProvider stay (committed
in 7fdf2b2b + 97618bb8) — belt and suspenders against partial checkouts.

Refs PR #2211 review.

* chore(js): reorganize Filament components under admin/ + lint cleanup

CI lint failures surfaced two issues that local lint had buried under
1318 warnings from the committed esbuild output (Chart.js internals):

- resources/js/app.js was an empty stub (`//`), never imported anywhere.
  Removed.
- RW_RUNWAY_TOP in pirep-landing-analysis.js was declared but never
  used. Removed.

Folded in a directory reorg while touching the same files:

- Sources move to resources/js/admin/components/. Mirrors the existing
  resources/js/admin/ tree (request.js, storage.js, maps/, etc.) which
  was created in this branch for the admin-only JS split.
- Esbuild output mirrors the source layout — moves to
  resources/js/dist/admin/components/.
- bin/build.js entry + outfile paths updated.
- AdminPanelProvider resource_path() updated to match.

Tooling guards added so dist noise stops drowning real warnings:

- .oxlintrc.json: ignore resources/js/dist/** (bundled output)
- .oxfmtrc.json: ignore resources/js/dist/** (minified output)
- bin/build.js itself was new in this branch and not yet oxfmt-clean;
  reformatted (quotes/semis/indent).

Verified locally: oxlint 0 warnings 0 errors, fmt:check clean for all
tracked files, pint v, phpstan v, rector v.

* fix(ci): three-step bootstrap to break composer<->vite chicken-and-egg

The previous "npm before composer" reorder broke the build:
resources/css/filament/admin/theme.css imports
vendor/filament/filament/resources/css/theme.css, which doesn't exist
until composer install has run. Vite resolve failed at CI line 1.

Reverting to "composer before npm" re-triggers the original failure
(ViteManifestNotFoundException during package:discover; ENOENT during
filament:upgrade) because composer post-autoload-dump boots service
providers that need the Vite manifest + dist files.

Fix: three-step bootstrap, applied to all three jobs in build.yml.

  1. composer install --no-scripts
       Pulls vendor/ (Vite needs it for theme.css @imports) WITHOUT
       firing post-autoload-dump (which would boot the providers
       prematurely).
  2. npm install + npm run build
       Now resolves the vendor CSS @import. Produces
       public/build/manifest.json and rebuilds
       resources/js/dist/admin/components/*.js.
  3. composer dump-autoload
       Re-fires post-autoload-dump. package:discover and
       filament:upgrade boot providers cleanly — the Vite manifest
       and dist files are both present.

Verified locally inside the dev container: removed vendor/,
public/build/, resources/js/dist/, ran the three steps, all clean.

The freshness check (git diff --exit-code resources/js/dist) and the
build matrix's lint/fmt/pint/pest/phpstan stages run unchanged — only
the bootstrap order in front of them changes.

* fix(installer): address CodeRabbit review feedback

- Add Response return type to InstalledCheck::handle()
- Translate hero_title for es-es, fr, pt-br locales
- Standardize brand alt text to 'phpvms'
- Null-safe source label in PIREP row blade to avoid error
  when source_name is set but source enum is null
- Render landing_rate stat box for 0 values (use !== null check)

* chore(build): stop committing compiled JS/CSS assets

Untrack frontend build artifacts and rely on CI to (re)build them:

- resources/js/dist/ AlpineComponents (output of bin/build.js)
- public/js/filament/, public/css/filament/, public/fonts/filament/
- public/css/filament-spatie-backup/

The Filament assets are re-published by 'php artisan filament:upgrade'
during composer post-autoload-dump. The AlpineComponents are produced by
'npm run build'. Both already run in build.yml and release.yml.

Also drop the now-obsolete 'verify committed dist files match a fresh
build' step in CI \u2014 dist files are no longer tracked.

* refactor(filament): remove is_file guards around admin assets

The guards were added when composer post-autoload-dump could fire before
`npm run build` produced the frontend artifacts. CI now does a three-step
bootstrap (composer install --no-scripts -> npm build -> composer
dump-autoload) so dist files and the Vite manifest always exist by the
time AdminPanelProvider::register() runs. Release tarballs ship them
pre-built.

If assets are missing at runtime we want to know immediately, not
silently degrade the admin panel.

* refactor(filament): mirror Pireps namespace under views/filament/pireps

Co-locate page views and partials under resources/views/filament/pireps/
to mirror App\Filament\Resources\Pireps namespace.

- pages/{list-pireps,view-pirep}.blade.php (was filament/resources/pireps/pages/)
- partials/row.blade.php + partials/detail/* (was filament/pireps/{row,detail}/)
- Update $view in ListPireps and ViewPirep
- Rewrite 6 @include paths

* chore(build): add npm clean script to remove built assets

Removes public/build (Vite output) and resources/js/dist (esbuild
components output) in one command.

* Add the fillament public assets back in

* Move the vite js into the page render hook, lazily load map on first use
2026-05-20 11:05:32 -05:00
Arthur Parienté
992b6d343a
[8.x] feature: upgrade to Laravel 13 (#2204)
* upgrade to laravel 13

* phpstan

* rollback to symfony 7.4

* fix: ModuleService merge

* refactor: new rector rules
2026-05-06 11:27:21 -05:00
Nabeel S.
849ab9ac7f
chore: remove prettus/l5-repository (Phase 8 cleanup) (#2202)
* chore: remove prettus/l5-repository (Phase 8 cleanup)

Phase 8 of the Prettus repository removal. Phases 1-7 deleted all 25 concrete
repositories and rewired callers; this drops the package itself plus the
remaining scaffolding.

- Migrate Sluggable observer registration from ObserverServiceProviders boot
  to #[ObservedBy(Sluggable::class)] attributes on FlightField, FlightFieldValue,
  Page, PirepField, PirepFieldValue.
- Delete app/Providers/ObserverServiceProviders.php, app/Contracts/Repository.php,
  app/Repositories/ (incl. Criteria/WhereCriteria.php), config/repository.php.
- Drop RepositoryServiceProvider and ObserverServiceProviders from config/app.php.
- Sweep dead 'use Prettus\Validator\Exceptions\ValidatorException' imports from
  10 files plus the 12 orphaned '@throws ValidatorException' docblock lines that
  PHPStan would otherwise flag as throws.notThrowable.
- Move pagination default from deleted config/repository.php to config/phpvms.php
  ('pagination.limit' => 20, matches historical value). Update 8 prod callers +
  2 test sites to read 'phpvms.pagination.limit'.
- Drop App\Contracts\Repository exception from tests/Arch/GlobalTest.php
  http-helpers rule.
- composer remove prettus/l5-repository (drops prettus/laravel-validation
  transitively).

No public API, JSON shape, or behavior change. Pint, PHPStan level 5, Pest, and
Rector --dry-run all pass; the 7 pre-existing CSRF/ProfileUpdated test failures
on main remain unchanged.

* fix(pagination): default 50, max cap 100, central paginate_limit() helper

Address PR #2202 review feedback (CodeRabbit + Copilot):

- config/phpvms.php: pagination.limit = 50 (default page size),
  pagination.max = 100 (hard cap on ?limit= query input).
- Add paginate_limit() helper in app/helpers.php that resolves the raw
  ?limit= value, falls back to pagination.limit, and clamps to
  [1, pagination.max]. Single source of truth for per-page sanitization.
- Replace ad-hoc `$request->query('limit') ?: config(...)` patterns in
  8 controllers with paginate_limit():
  - Api: AirportController, FleetController, FlightController,
    NewsController, UserController (fleet + pireps)
  - Frontend: FlightController, PirepController, UserController
  Frontend/UserController previously used 20 as fallback default; now
  consistent with the rest of the app at 50.
- SearchAirportsRequest validator now bounds ?limit= against
  pagination.max (100) instead of pagination.limit (50), so callers can
  request the full clamp range. Add boundary test asserting limit=100
  passes and limit=101 fails.

Net effect: API endpoints can no longer be coerced into oversized result
sets via ?limit=. Default page size moves from 20 to 50 to match the
review consensus.
2026-05-02 14:39:06 -05:00
Nabeel S.
d601b1f9e2
Phase 5 of prettus repository removal. (#2195)
* test(setting): characterization tests for setting() helper + API shape

* refactor(setting,expense): add #[Scope] + #[ObservedBy] + casts() + drop dead $rules

* feat(services): add SettingService with cache-aware store/retrieve

* feat(finance): add FinanceService::getExpensesForType

* refactor(setting): migrate setting()/setting_save() helpers to SettingService

* refactor(setting): migrate Api controller, Filament page, importer, test helper to SettingService

* refactor(expense): migrate PirepFinanceService, ExportAction, FinanceTest to FinanceService::getExpensesForType

* refactor(setting,expense): delete SettingRepository and ExpenseRepository

* test(setting): use Setting::byKey scope in characterization test

* refactor(setting): drop redundant Cache::forget in Maintenance page

SettingService::store() now invalidates the per-key cache slot internally
(introduced in d9c94195). Manual Cache::forget calls after setting_save()
became dead code in this branch, mirroring the same cleanup applied to
Filament/Pages/Settings.php in 31aa55da. Drops the now-unused Cache import
as well — caught by deep review.

* fix(setting): increment count in SettingsImporter run

Pre-existing bug. $count was declared but never incremented, so the
import log always read 'Imported 0 settings' regardless of how many
settings the legacy importer actually wrote.

Found during Phase 5 deep review.

* refactor(filament): wrap settings save in DB::transaction

The Filament Settings page writes N setting rows in a foreach loop,
then calls FinanceService::changeJournalCurrencies() which rewrites
journal + journal_transaction rows to a (potentially) new currency.
A throw mid-loop or mid-currency-migration left the DB with half-saved
settings or a half-migrated journal.

Wrap both halves in a single DB::transaction() so a partial failure
rolls back all writes atomically.

Found during Phase 5 deep review.

* refactor(services): declare strict_types=1 across app/Services/

Phase 5 introduced declare(strict_types=1); in SettingService.php only.
This commit applies the same declaration to the remaining 65 service
files for consistency.

65 files migrated. 6 files required minimal signature/cast adjustments
to handle existing caller patterns where strict mode exposed implicit
type coercion at runtime or in phpstan:

- FareService::recalculateFares cast $pivot->capacity to (float)
  before floor() (DB returns string).
- Finance/RecurringFinanceService::processExpenses cast
  $expense->ref_model to (string) before explode() (nullable column).
- AirportLookup/VaCentralLookup, GeoService: pass $e->getMessage()
  to Log::error() instead of the Exception object.
- DatabaseService::time() cast Carbon to (string) (return type contract).
- ModuleService::installModule pass $file->getRealPath() to PharData
  and Madzipper::make() (UploadedFile -> string path).

No files reverted. No tests modified.

Found during Phase 5 deep review (convention drift).

* style(setting): align match arms for pint 1.29.1

Pint 1.29.1 aligns => arrows in match expressions under
binary_operator_spaces (with align_single_space_minimal). 1.29.0 did
not. CI installs latest globally and fails on the un-aligned form.

Bumped composer.lock so local matches CI.

* Update app/Services/Finance/RecurringFinanceService.php

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* refactor(installer): add strict types to LoggerTrait

LoggerTrait declared strict_types=1 but methods had no parameter or
return types. Added: comment(string $text): void, info(string $text):
void, error(string $text): void.

FlightImporter:59 was passing a Throwable to error() — switched to
$e->getMessage() to match the new contract. Same pattern applied in
5b2133a8 to VaCentralLookup and GeoService.

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-04-27 15:21:27 -05:00
dependabot[bot]
97c2f4d8c5 build(deps): bump composer/composer from 2.9.4 to 2.9.6
Bumps [composer/composer](https://github.com/composer/composer) from 2.9.4 to 2.9.6.
- [Release notes](https://github.com/composer/composer/releases)
- [Changelog](https://github.com/composer/composer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/composer/composer/compare/2.9.4...2.9.6)

---
updated-dependencies:
- dependency-name: composer/composer
  dependency-version: 2.9.6
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-24 16:52:43 -05:00
dependabot[bot]
a2882b6fe9 build(deps): bump phpseclib/phpseclib from 3.0.50 to 3.0.51
Bumps [phpseclib/phpseclib](https://github.com/phpseclib/phpseclib) from 3.0.50 to 3.0.51.
- [Release notes](https://github.com/phpseclib/phpseclib/releases)
- [Changelog](https://github.com/phpseclib/phpseclib/blob/master/CHANGELOG.md)
- [Commits](https://github.com/phpseclib/phpseclib/compare/3.0.50...3.0.51)

---
updated-dependencies:
- dependency-name: phpseclib/phpseclib
  dependency-version: 3.0.51
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-24 16:50:00 -05:00
Arthur Parienté
d3d63b9fc4
[8.x] fix: update permission strings to use kebab-case format (#2171)
* fix: update permission strings to use kebab-case format

* fix: standardize permission strings to kebab-case format

* fix: update permission strings to kebab-case format
2026-04-15 21:41:08 -05:00
Arthur Parienté
60d8cc0fd2
[8.x] chore: update league/commonmark phpseclib/phpseclib and filament/filament (#2173)
* chore: update league/commonmark phpseclib/phpseclib and filament/filament

* chore: update aws/aws-sdk-php
2026-03-28 17:35:59 -05:00
Arthur Parienté
379a9b38cc
[8.x] feat: improve tests suite (#2166)
* wip

* fix simbrief tests

* more fixes

* run pint

* fix(tests): fake notifications in registration test

* refactor(tests): AI suggestions and performance improvements

* deprecation warning with PHP85

* fix(tests): fake notifications in access with valid invite test

* refactor(build): optimize autoload and remove unnecessary commands

* refactor(tests): update PHPUnit configuration and improve test structure

* refactor: put GeoJson under the right namespace
2026-03-18 16:35:19 -05:00
Nabeel S.
5623f7ef92
Add symfony polyfill packages (#2163)
* Add symfony polyfill packages

* Minimum PHP version to 8.3

* Suggestions
2026-03-15 13:42:10 -05:00
dependabot[bot]
49b6c11f12
build(deps): bump league/commonmark from 2.8.0 to 2.8.1 (#2154)
Bumps [league/commonmark](https://github.com/thephpleague/commonmark) from 2.8.0 to 2.8.1.
- [Release notes](https://github.com/thephpleague/commonmark/releases)
- [Changelog](https://github.com/thephpleague/commonmark/blob/2.8/CHANGELOG.md)
- [Commits](https://github.com/thephpleague/commonmark/compare/2.8.0...2.8.1)

---
updated-dependencies:
- dependency-name: league/commonmark
  dependency-version: 2.8.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-15 10:49:49 -05:00
Arthur Parienté
b4f2187ff8
[8.x] feat: add laravel/boost (#2148)
* feat: add laravel/boost

* don't commit ai files

* add boost note in readme

* Update laravel/boost
2026-03-15 10:45:05 -05:00
Arthur Parienté
06426afe25
[8.x] feat(simbrief): use json format instead of xml (#2149)
* db changes

* allow simbrief username to be updated in profile

* ask for the simbrief username

* update how an ofp is created and retrieved

* first implementation of dto

* update and fix everything

* update tests

* fix phpstan, add caster and refactor namespaces

* fix phpstan

* fix alternate_navlog type

* fake storage for tests

* add an observer to delete the json when deleting the simbrief sql entry

* apply some coderabbit fixes

* more coderabbit fixes

* update DTOs

* make sure all DTOs are final

* fix naming conventions

* make etops and tracks optional

* fix phpstan

* try to fix ci by using sqlite instead of mysql

* Update composer.lock

* move simbrief ofp url to config

* run pint
2026-03-15 10:35:20 -05:00
Arthur Parienté
b2bc7b0900
[8.x] refactor: upgrade pint (#2152)
* refactor: upgrade pint

* exclude modules from pint

* apply ai suggestions
2026-03-14 13:34:18 -05:00
Arthur Parienté
5a069a4bc3
chore: update packages to fix CVE (#2146) 2026-02-17 12:29:58 -06:00
Arthur Parienté
07faf8640a
[8.x] Drop PHP 8.2, add PHP 8.5 support & upgrade core dependencies (#2142)
* remove php82 support

* bump pest to v4

* bump a bunch of packages for PHP85

* upgrade filament and livewire

* replace all the deprecated request::get (symfony 7.4)

* update livewire config file

* update php versions in ci

* fix phpstan

* add a check for the diversion handler
2026-02-03 11:29:44 -06:00
Arthur Parienté
acd38c9fa8
[8.x] feat: Filament Import Export (#2136)
* add migrations

* add setting to choose which importers to use

* bump filament

* enable database notifications

* add AirportImporter and AirportExporter

* move the untrash code to beforeUpdate

* fix validation rules

* add AircraftImporter and AircraftExporter

* fix phpstan

* add ExpenseImporter and ExpenseExporter

* add FareImporter and FareExporter

* add FlightImporter and FlightExporter

* add SubfleetImporter and SubfleetExporter

* change how relationships are processed in FlightImporter

* restore records if they are trashed after import

* phpstan and types

* fix packages

* remove foreign keys

* apply some of the fixes suggested by CodeRabbit

* fix docstring

* re add the fk

* bump filament
2026-01-09 16:10:53 -06:00
Arthur Parienté
2ca4a7bbf4
[8.x] feat: upgrade Filament Shield (#2115)
* wip

* fix user permissions

* fix module links plugin

* fix permissions

* delete the custom permissions seeder

* fix v7 importer

* fix packages versions

* fix create permission tables

* update composer.lock
2025-10-08 15:28:32 -05:00
Arthur Parienté
24af8117d1
update Filament Backup (#2117)
Co-authored-by: Nabeel S. <99736+nabeelio@users.noreply.github.com>
2025-10-08 15:05:43 -05:00
Arthur Parienté
c8ff66d7c7
[8.x] feat: update Filament (#2118)
* feat: update Filament

* fix: openspout
2025-10-08 14:20:16 -05:00
Arthur Parienté
8e4618665d
[8.x] New module structure (#2005)
* New module structure (wip)

* Update DatabaseActivator

* Run pint

* Delete the cache file

* Delete the cache file in DatabaseActivator

* Also delete the cache file when deleting a module

* update composer.lock

* fix: composer.lock

* build: update composer.lock

* chore: update composer.lock

* chore: update model.stub

---------

Co-authored-by: Nabeel S. <99736+nabeelio@users.noreply.github.com>
2025-08-21 11:30:22 -05:00
Arthur Parienté
0695ed0823
chore(phpstan): setup and add level 1 (#2073)
* wip

* refactor: phpstan level 1

* refactor: how the amount of people per fare is passed in the simbrief resource

* ci: add phpstan

* refactor: phpstan level 2

* fix: new avatar column name

* refactor: rollback avatar column name

* fix: type in FareService
2025-08-20 11:32:48 -05:00
Arthur Parienté
b3ef038cbb
build: update packages (#2068)
* build: update packages

* build: update composer.lock
2025-08-14 12:36:57 -05:00
Arthur Parienté
5aa4f0d3e3
feat: reintroduce ide-helper (#2067)
* feat: add back ide-helper

* feat: add model phpdocs

* feat: generate ide-helper automatically after composer update
2025-08-14 10:15:37 -05:00
Arthur Parienté
a715ddf486
feat(admin): upgrade to Filament v4 (#2062)
* remove filament-clusters

* upgrade livewire

* remove coolsam modules and resolve modules providers before filament

* update dependencies

* run upgrade script

* refactor: module links plugin

* refactor: version widget

* refactor: admin panel

* refactor: create custom theme to use tailwindcss classes

* feat: add language switcher plugin

* refactor: migrate ActivityLogResource

* refactor: migrate SimBriefAirframes

* refactor: migrate AirlineResource

* refactor: translate FilesRelationManager

* refactor: migrate AirportResource

* refactor: translate FilesRelationManager

* refactor: translate ExpensesRelationManager

* refactor: migrate AwardResource

* refactor: migrate ExpenseResource

* refactor: migrate FareResource

* refactor: migrate FlightResource

* refactor: migrate InviteResource

* refactor: migrate ModuleResource

* refactor: migrate PageResource

* refactor: migrate PirepFieldResource

* refactor: migrate PirepResource

* refactor: some translations in the FlightResource

* refactor: migrate RankResource

* refactor: migrate SubfleetResource

* refactor: migrate AircraftResource

* refactor: migrate TyperatingResource

* refactor: migrate UserFieldResource

* refactor: migrate UserResource

* refactor: remove the emptyStateActions

* refactor: migrate Finances

* fix: SimBriefAirframe

* refactor: migrate Maintenance

* refactor: migrate Settings

* refactor: remove old pages views

* refactor: NavigationGroups

* feat: upgrade SystemPanel, Update page and add streamed response to migrations

* fix: canAccess in Updater

* feat: upgrade the whole SystemPanel

* remove tests migrations (oops)

* refactor: remove system theme

* chore: update filament

* fix: role system and custom permission generator

* fix: airport translation

* feat: translate dashboard widgets

* fix: version major number

* refactor: update IconColumn boolean

* chore: upgrade to vite v7 and fix some CVEs

* feat: run pint in parallel and add rector to pre-commit

* chore: downgrade openspout to support php 82

* feat(admin): add prefetching

* fix(pre-commit): run pint only on staged files

* fix(seeds): in_progress.yml seeds

* refactor: add full type coverage to admin

* fix: permissions in PirepFieldsAction and UserFieldsAction

* refactor: translation for PIREPs Fields

---------

Co-authored-by: Nabeel S. <99736+nabeelio@users.noreply.github.com>
2025-08-13 10:20:23 -05:00
Arthur Parienté
9bf5473a70
[8.x] migrate to pest (#2048)
* update packages

* add type coverage

* more pest plugins

* update ci

* fix parallel testing

* run rector
2025-06-21 10:57:51 -05:00
Arthur Parienté
2da56e8117
[8.x] Apply policies only to filament (#2043)
* Move policies

* update guessPolicyNamesUsing

* wip

* Run pint

* update packages

* refactor RolePolicy

* update composer.lock
2025-05-08 11:30:32 -05:00
Arthur Parienté
64b2ef98c0
hotfix: upgrade filament (#2044) 2025-05-08 11:13:47 -05:00
Arthur Parienté
56ee63d86b
[8.x] Laravel 12 Upgrade (#2031)
* Upgrade to Laravel 12

* update packages

---------

Co-authored-by: Nabeel S. <99736+nabeelio@users.noreply.github.com>
2025-05-07 09:07:58 -05:00
Arthur Parienté
b69979ef1e
Merge branch 'feature/8.0' (#2041)
* Run rector

* Run rector
2025-05-05 19:58:37 -05:00
Arthur Parienté
0311fcc9d1
[8.x] Upgrade to phpunit11 (#2024)
* update to phpunit 11

* Update composer.lock
2025-03-14 12:28:45 -05:00
Arthur Parienté
2546c5cf22
[8.x] Add composer run dev command (#2009)
* Add basic composer run dev

* Update composer.lock
2025-03-14 12:26:44 -05:00
Arthur Parienté
28e2d33b88
[8.x] Add RectorPHP (#1986)
* Add rector

* Remove cache

* Run rector again

* Run pint

* Run Rector in CI

* Update composer.lock
2025-03-14 11:38:16 -05:00
Arthur Parienté
a991363559
[8.x] Bump laravel version (#2025)
* Bump laravel version

* Run pint
2025-03-13 11:50:43 -05:00
Arthur Parienté
cae0063dbe
Update packages (#2006) 2025-03-13 10:25:12 -05:00
Arthur Parienté
665607ef09
[8.x] Add log viewer (#1971)
* add opcodesio/log-viewer

* set up with custom permission

* update composer.lock

* add failsafe in gate definitions

* run pint
2025-01-22 06:19:12 -05:00
Arthur Parienté
c0da3388de
[8.x] Upgrade Packages (#1964)
* Upgrade Packages

* Upgrade filp/whoops

* update package for php84 support

* Update voku/portable-ascii

* Update more packages for PHP84 support
2025-01-20 10:56:52 -06:00
Arthur Parienté
878778bac8
Add back fork of coolsam/modules (#1956) 2025-01-16 14:14:04 -06:00
Arthur Parienté
11747da6ba
[8.x] New Admin Interface, Laravel 11 Upgrade and Vite Upgrade (#1953)
* LatestPirepsChart Widget

* Apply fixes from StyleCI

* Fix Pirep widgets

* Add missing icons

* Migrate permission system to spatie and add filament shield

* Apply fixes from StyleCI

* Fix AircraftResource

* Use global RelationManagers when possible

* Apply fixes from StyleCI

* Update Maintenance page

* Update AirlineResource

* Add emptyStateActions

* Apply fixes from StyleCI

* Fix SubfleetResource

* Update Resources

* Apply fixes from StyleCI

* Add Filament Cluster

* Publish Filament Assets

* Use RichEditor for notes and descriptions

* Add Filament Global Search

* Apply fixes from StyleCI

* Remove old admin interface

* Update old admin theme (for backward compatibility)

* Add UpdatePending Middleware to Admin Dashboard

* Add OldModulesLinks widget

* Apply fixes from StyleCI

* Fix Edit Module

* Update arthurpar06's fork of coolsam/modules

* Enable shield auto-discovery

* Update arthurpar06's fork of coolsam/modules

* Update arthurpar06's fork of coolsam/modules

* Make sure only super_admins can edit roles

* Update arthurpar06's fork of coolsam/modules

* Apply fixes from StyleCI

* Remove role permissions from ShieldSeeder

* Move the upgrade role system migrations to a single one. Make previous admin users admin again

* Fix fares relationship pivot

* Fix drop table order for roles migrations

* Run the ShieldSeeder on install

* Remove sample module from old module links

* Fix permission upgrade migration

* Apply fixes from StyleCI

* Migrate from webpack to vite

* Fix missing icons in login

* Fix leaflet-bar on hover

* Fix sass division

* Build new assets

* Update brand name

* Apply fixes from StyleCI

* Add link to frontend in admin

* Apply fixes from StyleCI

* Add user avatar in filament

* Use tabs for settings

* Apply fixes from StyleCI

* Fix composer.lock

* Add backups page in admin

* Apply fixes from StyleCI

* Fix Flight Level in FlightResource

* Hot reload for filament in local

* Improve global search in admin

* Apply fixes from StyleCI

* Upgrade to filament 3.1

* Update filament

* Fix dev seeds

* Add migrations for roles and permissions

* Apply fixes from StyleCI

* Delete temp tables after new roles import

* Add missing permission checks

* Add more sortable/searchable fields

* Use ActionGroup in PirepResource

* Add UsersRelationManager in AwardResource

* Apply fixes from StyleCI

* Add sortable and searchable to AwardResource

* Apply fixes from StyleCI

* Rework PirepResource form

* Apply fixes from StyleCI

* Fix recordUrl in PirepResource

* Add aircraft button in subfleet edit page

* Add placeholders for pivot

* Add Fare > Flight relationship

* Update modules stub

* Update arthurpar06's fork of coolsam/modules

* Apply fixes from StyleCI

* Fix modules stub replacements

* Add Favicon to Filament

* Remove webpack dependencies

* Delete cache files

* Fix composer.lock

* Allow more control over custom Pirep Fields

* New actions in Maintenance

* New Aircraft Fields

* Upgrade to vite 5

* Upgrade to tailwindcss 3.4

* Move import roles and permissions to migrations data

* Apply fixes from StyleCI

* Upgrade to filament 3.2

* Upgrade filament

* Add InviteResource

* Add ability to create user from admin

* Apply fixes from StyleCI

* Fix composer.json

* Update composer.lock

* Update composer.lock

* Fix composer.lock

* Add ActivityLog to filament

* Apply fixes from StyleCI

* Upgrade dependencies

* Fix OldModulesLinksWidget

* Add access_admin gate

* Update filament plugins

* Update seeders and migrations related to permissions upgrade

* Upgrade filament

* Add unsaved changes alerts

* Remove laravelcollective/html

* Use fork for queueworker/sansdaemon

* Remove laravelcollective/html provider

* Bump dependencies

* Add mariadb db driver

* Apply fixes from StyleCI

* Update money config file

* wip

* Add ModuleLinksPlugin

* Add permissions check in ModuleLinksPlugin

* Remove OldModulesLinks Widget

* Update AdminPanelProvider stub

* Apply fixes from StyleCI

* Fix webcron id cache

* Remove some old controllers

* Add ajax calls for airports in admin

* Update Dependencies

* Hide internal userfields in admin

* Fix Expenses

* Add ability to edit news

* Apply fixes from StyleCI

* Add optimize in maintenance

* Add update app to maintenance

* Add installer in filament

* Node dependencies upgrade

* Fix new installer

* wip

* Add LegacyImporter

* Add Updater

* Add pages slugs

* Remove system link from module links

* Update redirect url

* Add migrations output to installer

* Update system middleware links

* Remove old system

* Some fixes

* Apply fixes from StyleCI

* Fix InstalledCheck middleware

* Improve Installer Page

* Apply fixes from StyleCI

* Fix Installer

* Add more types to system pages

* Add some phpdocs

* Apply fixes from StyleCI

* Update composer.lock

* Add ability to add multiple ranks to a subfleet at once

* SimBrief Airframes & Aircraft Weight Casting in filament

* Apply fixes from StyleCI

* Update primary color

* Upgrade packages (for security reasons)

* Upgrade some npm packages

* Apply fixes from StyleCI

* Upgrade to vite v6

* Use FiltersForm in Finances and migrate AirlineFinanceTable to a TableWidget

* Apply fixes from StyleCI

* Add missing policies

* Apply fixes from StyleCI

* Fix ShieldSeeder namespace

* Update composer.lock

* Remove v7 migrations

* Do not seed roles via yaml

* Update installer

* Apply fixes from StyleCI

* Migrate queueworker/sansdaemon

* Fix Finance Widgets

* Apply fixes from StyleCI

* Update ability middlewares

* remove old admin views

* make columns toggleable in AirportResource

* update sail and docker to php84

* update php versions in build

* upgrade packages to support php8.4

* fix: Implicitly marking parameter ... as nullable is deprecated, the explicit nullable type must be used instead

* fix: Implicitly marking parameter ... as nullable is deprecated, the explicit nullable type must be used instead

* add missing pagination for old admin

* Apply automatic changes

* update composer.lock

* update AdminPanelProvider stub

* update UserResource icon

* hide internal user fields

* Add go back to app in admin panel provider stub

* Apply automatic changes

* Update ModuleLinksPlugin

* Add ModuleSetupFilament command

* Apply automatic changes

* Change migrations date to ensure good order

* Update composer.lock

* Migrate create_phpvms_table migration to laravel 11 syntax

* Don't show in progress, draft and cancelled pireps in admin

* Add missing 's' in ranks navigation label

* Don't create old role tables on fresh installs

* Add back default

* Redirect /update to /system/update

* Change news default pagination

* fix admin link in nav

* fix permissions for updater

* fix permissions for updater

* Lint code

* Remove PHP 8.1 from workflow

* fix findUsersOnLeave

* update composer.lock

* Update role export

* Fix export table names

---------

Co-authored-by: StyleCI Bot <bot@styleci.io>
Co-authored-by: ArthurHetem <arthurhetemgames@gmail.com>
Co-authored-by: arthurpar06 <arthurpar06@users.noreply.github.com>
2025-01-16 10:24:26 -06:00
Nabeel S.
e29adf51f9
Squash migrations (#1940)
* Cleanup old migrations

Squash them all into a single migration file.

* Update collation/charset

* Remove collation from binary column

* Apply automatic changes

* Restore old migrations

* Update the charset migration

* Add FK checks

* Remove extra migration file

---------

Co-authored-by: nabeelio <99736+nabeelio@users.noreply.github.com>
2025-01-13 11:12:34 -06:00