* add party_shares table and model with associations
* add party share errors and blueprint
* add party shares controller and routes
* include shared parties in listings and show
* add party share factory and model specs
* add party shares controller specs
* include shares in party response for owners
* add crew shared_parties endpoint
* add jobs search endpoint with pg_search
- add en_search and ja_search scopes to Job model
- add jobs action to SearchController with filtering
- supports row, proficiency, master_level, ultimate_mastery, accessory filters
* add jobs create endpoint
* add job accessories CRUD
- add accessory_type to blueprint
- add index, show, create, update, destroy actions
- editors only for mutations
* add routes for jobs search, create, and accessories CRUD
* add weapon_stat_modifiers table for ax skills and befoulments
* add fk columns for ax modifiers and befoulments, replace has_ax_skills with augment_type
* update models for weapon_stat_modifier fks and befoulments
* update blueprints for weapon_stat_modifier serialization
* update import service for weapon_stat_modifier fks and befoulments
* add weapon_stat_modifiers controller and update params for fks
* update tests and factories for weapon_stat_modifier fks
* fix remaining has_ax_skills and ax_modifier references
* add ax_modifier and befoulment_modifier to eager loading
* fix ax modifier column naming and migration approach
* add game_skill_ids for befoulment modifiers
- preview_sync endpoint shows what'll get deleted before you commit
- import services handle reconciliation (find missing items, delete them)
- grid items get flagged as orphaned when their collection source is gone
- party exposes has_orphaned_items
- blueprints include orphaned field
- aggregate scores across all membership periods for a user
- add gap markers for events where player wasn't in crew
- add membership history endpoint for editing multiple periods
- phantom_players table for tracking scores of non-user members
- claim flow: officer assigns phantom to user, user confirms, scores transfer
- CRUD endpoints plus /assign and /confirm_claim actions
- model/request specs for all functionality (37 examples)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- create crew_invitations table with status enum
- add CrewInvitation model with accept/reject flow
- add CrewInvitationsController for send/accept/reject
- add invitation error classes
- add invitation routes nested under crews
- add pending invitations endpoint for current user
- 38 passing specs for model and controller
- Add ArtifactImportService to parse game JSON and create collection artifacts
- Maps game skill_id to our (group, modifier) format using verified mapping
- Handles skill quality -> strength lookup via ArtifactSkill.base_values
- Supports duplicate detection via game_id, with optional update_existing flag
- Quirk artifacts get proficiency from game data; skills stored as empty
- Add POST /collection/artifacts/import endpoint
- Add game_id column to collection_artifacts, collection_weapons,
collection_summons for tracking game inventory instance IDs
- POST /artifacts/:id/download_image (sync single size)
- POST /artifacts/:id/download_images (async all sizes)
- GET /artifacts/:id/download_status (poll job status)
- restructure routes: read via /users/:id/collection/*, write via /collection/*
- add user lookup + privacy check to collection_characters_controller
- add race, proficiency, gender scopes to model
- delete old collection_controller
Add PATCH/PUT update actions to all three entity controllers with
editor role authorization. Routes updated to include :update action.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add weapon entity creation API following the established pattern from
characters and summons controllers.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- validate granblue_id via HEAD request to GBF CDN
- create characters with editor role check (role >= 7)
- async image download job with Redis status polling
- download_status endpoint for progress tracking
- Update all POST endpoints in tests from /api/v1/{weapons,characters,summons} to /api/v1/grid_{weapons,characters,summons}
- Update custom action endpoints (update_uncap, resolve, update_quick_summon) to use grid_ prefix
- Fix routes configuration to use :create instead of :post in resources definition
- Add custom DELETE routes that accept ID in request body
All 44 grid controller tests now pass with the new endpoint naming convention.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add page_size helper method to read from X-Per-Page header
- Set min (1) and max (100) bounds for page sizes
- Update all paginated endpoints to use dynamic page size
- Maintain backward compatibility with default sizes
* Update schema.rb
* Add endpoints for importing game data
This lets privileged users import canonical data for characters, weapons and summons directly from the game
* Update weapon series migration
This update fixes MigrateWeaponSeries from 20250218 such that it can be run on an empty database without throwing errors.
* Update .gitignore
Hide backups and logs directories, since we’ll be storing these in the project folder. Also hide mise’s .local directory.
* Change NewRelic log directory
Moved from log/ to logs/
* Add rake task for backing up/restoring prod db
* Rubocop fixes
* Fix error where :preview_state didn’t have an attribute
* Add supervisord ini
This uses my local paths, so we should try to abstract that away later.
* Ignore mise.toml
* Moved queries into PartyQueryBuilder service
PartyQueryBuilder supersedes PartyQueryingConcern as it is also used for UsersController (and is our fix for profiles being broken)
* Implement PartyQueryBuilder in controllers
* Update summon_transformer.rb
This should fix the transformer so that we properly capture summons and subaura summons
* Update parties_controller_spec.rb
* Add NewRelic license key
* Add Sentry
Why not?
* Install Rspec
* Create .aidigestignore
* Update rails_helper
- Added sections and comments
- Add support for loading via canonical.rb
- Add FactoryBot syntax methods
- Disable SQL logging in test environment
* Move gems around
* Add canonical.rb and test env CSVs
We load these CSVs via canonical.rb when we run tests as a data source for canonical objects.
* Remove RBS for now
This is too much and we need to find the right solution
* Refactor GridSummonsController and add tests
* Create GridSummon factory
* Refactor GridSummon and add documentation and tests
* Create have_error_on.rb
* Update .aidigestignore
* Fix warnings
* Add GridWeapons and Parties factories
* Refactor GridWeapon and add documentation and tests
* Create .rubocop.yml
* Create no_weapon_provided_error.rb
* Refactor GridWeaponsController
- Refactors controller
- Adds YARD documentation
- Adds Rspec tests
* Refactor GridSummonsController
- Refactors controller
- Adds YARD documentation
- Adds Rspec tests
* Enable shoulda/matchers
* Update User factory
* Update party.rb
We moved updating the party's element and extra flag to inside the party. We use an after_commit hook to minimize the amount of queries we're running to do this.
* Update party.rb
We change setting the edit key to use the conditional assignment operator so that it doesn't get overridden when we're running tests. This shouldn't have an effect in production.
* Update api_controller.rb
Change render_unprocessable_entity_response to render the errors hash instead of the exception so that we get more helpful errors.
* Add new errors
Added NoCharacterProvidedError and NoSummonProvidedError
* Add tests and docs to GridCharacter
We added a factory, spec and documentation to the GridCharacter model
* Ensure numericality
* Move enums into GranblueEnums
We don't use these yet, but it gives us a structured place to pull them from.
* Refactor GridCharactersController
- Refactors controller
- Adds YARD documentation
- Adds Rspec tests
* Add debug hook and other small changes
* Update grid_characters_controller.rb
Removes logs
* Update .gitignore
* Update .aidigestignore
* Refactored PartiesController
- Split PartiesController into three concerns
- Implemented testing for PartiesController and two concerns
- Implemented fixes across other files to ensure PartiesController tests pass
- Added Favorites factory
* Implement SimpleCov
* Refactor Party model
- Refactors Party model
- Adds tests
- Adds documentation
* Update granblue_enums.rb
Remove included block