- cached_by_name indexes by both EN and JP names
- find_by_name looks up skill by either language
- strength_for_quality computes strength from quality tier
- 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
- crews table with name, gamertag, granblue_crew_id, description
- crew_memberships with role enum (member/vice_captain/captain)
- partial unique index ensures one active crew per user
- updated User model with crew associations and helper methods
- 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
* 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