Commit graph

285 commits

Author SHA1 Message Date
b89e83df97 Refactor parties#index and parties#favorites
These are mostly the same methods, so we remove common code into build_parties_query and render_paginated_parties
2025-02-07 03:27:39 -08:00
234d337af7 Update parties_controller.rb
Adds the rest of the changes, too tired to write them all out. Some preview generation, some filtering
2025-02-07 03:22:47 -08:00
38f6c043bf Update parties_controller.rb
Updates apply_includes and apply_excludes, along with modifying id_to_table and build_query
2025-02-07 03:18:30 -08:00
fde9b08edc Update parties#index 2025-02-07 03:17:36 -08:00
59be9d80d2 Remove redundant return 2025-02-07 02:22:47 -08:00
09dc344e35 Refactor parties#create 2025-02-07 02:21:52 -08:00
b526ce2138 Fix old view name in PartyBlueprint 2025-02-07 02:21:38 -08:00
5ecfeb6684 Update filter condition helpers
Just minor refactoring
2025-02-07 02:17:04 -08:00
59564df5ab Adds a helper method for party privacy 2025-02-07 02:15:48 -08:00
5d8ec96172 Updates excluded methods and calculate_count
* Use `includes` instead of `joins`
* Use a less-insane way of counting
2025-02-07 02:11:50 -08:00
8194844d28 Update logic and logs 2025-02-07 02:06:40 -08:00
1bc7d5fac9 Add method comments 2025-02-07 02:02:44 -08:00
9f86f3bf29 Remove preview expiry constants
These are defined in the Coordinator instead
2025-02-07 01:59:53 -08:00
adbb048867 Refactored PartyBlueprint to minimize N+1s 2025-02-07 01:58:52 -08:00
cca4427a75 Add cache to is_favorited(user) 2025-02-07 01:58:29 -08:00
dc24f4e600 Add preview generation helpers
The Party model can respond to queries about its preview state with the following models:
- `schedule_preview_generation`
- `preview_content_changed?`
- `preview_expired?`
- `should_generate_preview?`
- `ready_for_preview?`
- `needs_preview_generation?`
- `preview_relevant_attributes`

Removes the following methods:
- `schedule_preview_regeneration`
- `preview_relevant_changes?`
2025-02-07 01:58:17 -08:00
bd53af4339 Add counter caches to party 2025-02-07 01:54:27 -08:00
b86f3a90f6 Remove N+1 from grid object models
Reimplementing `character` `summon` and `weapon` was making N+1s which made queries really slow
2025-02-07 01:53:21 -08:00
4afccabaaf Refactor grid object blueprints 2025-02-07 01:51:34 -08:00
b71ca8e458 Refactor canonical object blueprints 2025-02-07 01:51:24 -08:00
e7db082d8b Update api_controller.rb
Add N+1 detectioin via Prosopite in development/test environments
2025-02-07 01:50:58 -08:00
11d324efe9
Fix image embeds 3 (#176)
* Add default preview images

* Update application.rb

* Adds app assets path in API mode
* Cleans up file

* Create assets.rb

An initializer for font assets (for image generation)

* Updates to Canvas and Coordinator

* Update parties_controller.rb

* Adds retry header if generation is still in progress
* Streams S3 content instead of redirecting to prevent 302

* Update coordinator.rbs

* Create previews.rake

A rake task for generating images offline

* Add commands to build phase
2025-01-20 03:55:22 -08:00
ad2e2cc028
More embed image bandaids (#175)
* Only re-index search when records are updated

* Add logs and fixes

* Add preview_s3_key to Parties

* Add some extra packages to Nixfile

* Add logging around custom font use
2025-01-18 22:32:13 -08:00
1c1ed0dd9d
Work towards fixing embed images (#174)
* Add Redis and Sidekiq

* Rename PreviewGenerationMonitor

* Update production.rb

require master key

* Initialize AWS at application start

* Add fallbacks for credentials

* Add logging

* Create railway.toml
2025-01-18 11:46:41 -08:00
e3a44ca0d5
Implement embed images (#173)
* Add mini_magick and rufus-scheduler

* Expose attributes and add sigs to AwsService

* Get Party ready for preview state

* Added new fields for preview state and generated_at timestamp
* Add preview state enum to model
* Add preview_relevant_changes? after_commit hook

* Add jobs for generating and cleaning up party previews

* Add new endpoints to PartiesController

* `preview` shows the preview and queues it up for generation if it doesn't exist yet
* `regenerate_preview` allows the party owner to force regeneration of previews

* Schedule jobs

* Stalled jobs are checked every 5 minutes
* Failed jobs are retried every hour
* Old preview jobs are cleaned up daily

* Add the preview service

This is where the bulk of the work is. This service renders out the preview images bit by bit. Currently we render the party name, creator, job icon, and weapon grid.

This includes signatures and some fonts.
2025-01-18 09:08:15 -08:00
0d5d4d5f59
Jedmund/import (#167)
* Move app/helpers/granblue_wiki to lib/parsers/wiki

This clears up the namespace beginning with "Granblue"

* Removed some top-level Granblue libs

DataImporter and DownloadManager exist inside of the PostDeployment namespace now so these files are redundant

* Fix Downloaders namespace

Our namespace was singular Downloader, now it is plural Downloaders to match the folder name

* Fix import paths

* DownloadManager was moved to downloaders/
* import_data task now uses the PostDeployment version of DataImporter

* Update application.rb

Eager-Load/Autoload the lib/ folder

* Update cors.rb

Add Granblue website and Extension ID to CORS

* Add transformers

Transformers take raw data from Granblue Fantasy and transforms them into hensei-compatible JSON. Transformers heavily borrow from vazkii/hensei-transfer.

* Add ImportController and route

This adds the controller that handles creating a full party from transformed Granblue Fantasy data
2025-01-17 12:02:12 -08:00
c0922203a7
Create pipeline for importing data via PRs (#148)
* Add table for data version and migrate

* Modify migration and re-migrate

* Create data_version.rb

Adds a model for DataVersion

* Add aws-sdk-s3 and create aws_service.rb

AwsService handles streaming game image files from the Granblue Fantasy server to our S3 instance.

* Add importers

The Importer libraries take CSV data and import them into the database for each type. We currently support characters, summons and weapons.

* Add downloaders

Downloaders take Granblue IDs and download images for those items from the Granblue Fantasy server in all relevant sizes.

Downloaders can download to disk or stream the file directly to S3.

* Create data_importer.rb

* Fetches a list of all CSV files present in the updates folder
* Checks which have already been imported
* Sends unimported data to the appropriate Importer to handle

* Create download_manager.rb

Creates an appropriate downloader for each Granblue ID it receives

* Update download_images.rake

Most of this task has been extracted into the Downloader libraries

* Update import_data.rake

* Create deploy.rake

This task is to be run as a post-deploy script. It checks for new unimported data, imports it, then downloads the relevant images to S3 or local disk depending on the parameters provided.

* Update credentials.yml.enc

* Began working on a README and added example CSVs

* Modify importer to handle updates

This way we can also add FLBs and other uncaps easier.

* Updates only require values that will change

When updating a row, fields that don't have a provided value will not be changed

* Rebuild search indices in post deploy

* Clean up logs with LoggingHelper

* More logging adjustments

Trying to get a nice-looking output

* Change some ASCII characters

* Final ASCII changes

* Fix issues with Summon and Weapon importers

* Finish README for contributing
2025-01-13 05:33:04 -08:00
0e490df113
Assorted updates (#146)
* Syntax updates

* Update rake task for image downloading

* Add endpoints for showing a single job
2025-01-08 12:19:19 -08:00
53760bf87a
Add raids#show (#145) 2024-02-21 23:25:11 -05:00
9cf8626752
Add support for weapon transcendence (#142)
* Add migrations

* Add weapon key 4 column

* Update schema.rb

* Add transcendence date to weapon

* Rename summon XLB to match weapon

* Update blueprints

* Update search

* Accept weapon transcendence step

* Update XLB to transcendence for summons

* Add logic for transcending weapons

* Add transcendence step to weapon blueprint
2024-01-15 14:05:17 -08:00
4cf6516fe5
Allow PartiesController to accept nested attributes (#141) 2024-01-13 09:56:55 -08:00
d465b87da6
Hotfix so weapon key search translates ints to arrays (#140) 2023-12-30 06:20:22 -08:00
10901a74da
Don't index on nicknames for now (#139)
This is causing us to be unable to re-index for some reason
2023-12-26 14:03:29 -08:00
00e5ec8c4b
API updates for Draconic Weapons Providence (#138)
* Make weapon key series an array

Draconic Weapons Providence can have original Draconic Weapon keys, but also have a new key that can only be equipped to them. Thanks, Cygames.

* Update weapon.rb

* Update to check key compatibility against an array instead of an int
* Add convenience function to check if the weapon is part of a Draconic Weapon series

* Update grid_weapon.rb

Update conflict detection to:
* Detect Draconic Weapons Providence
* Add multiple weapons to conflicting weapons instead of just one

* (WIP) Update conflict view rendering

Conflict blueprints should render multiple conflict weapons instead of just one.

Also adds Draconic Weapon Providence series to various places that check series by number

* Finish last bugs

We tested to ensure that conflict resolution appears for

* Opus and Draconic
* Draconic and Draconic 2
* Draconic 2 + Opus and Draconic 1
2023-12-26 03:21:06 -08:00
92f29dfa08
Set extra from raid party, not extra property (#137) 2023-11-05 14:30:08 -08:00
3356701671
Fix not_owner method (#136) 2023-10-11 11:25:02 +09:00
4945a82980
Nullify edit key when party is remixed (#135)
This stops logged in users from editing remixed parties
2023-09-26 07:53:14 +09:00
f8815043e6
Return the user's role in login and user blueprints (#133) 2023-09-09 02:29:32 -07:00
0cf1e629bf
Fix editing items without AX skills (#132)
Add & to check that the `ax_strength` keys exist before testing for `zero?`
2023-09-03 14:16:46 -07:00
2dd37d1a1e
Null out empty AX values before saving (#131) 2023-09-01 11:19:37 -07:00
5cd357be3f
Allow World Weapons in Extra slots (#130) 2023-08-31 18:42:20 -07:00
39b353d9bd
(Hotfix) Fix summon transcendence (#129)
Manually setting summon transcendence was not working due to a change that passed in the canonical object instead of the grid object to `max_uncap_level`
2023-08-26 15:38:54 -07:00
8381c668bc
Implement roles and visibility (#128)
* Add migrations to add user roles and party visibility.

* Update schema.rb

* Add admin check in User model

* Implement rudimentary visibility of teams

* Adds checks to Party model
* Hides parties from collection views depending on visibility
* Disallows viewing private parties if you're not the owner

* Add a party's visibility to blueprint

* Add admin mode

The API Controller checks if the user is logged in and whether they are an admin, and checks for the X-Admin-Mode header

* Implement admin mode overrides

* Add admin_mode to authorize

* Note to self: Implement user editing by admins

* Fix syntax error with equality in SQL

* Fix syntax error with method name

* Fix bug in who can see restricted parties

* Add privacy control to user profiles
2023-08-25 15:53:56 -07:00
c79d2717cc
Hotfix 20230821 (#127)
* Fix favorites page by fixing how query is built

* Set uncap level when GridSummon is created

If you don't, then NULL entries get sent to the database from the bookmarklet.
2023-08-24 20:41:31 -07:00
ac7f5ab80a
Send characters and summons in preview layout (#126) 2023-08-23 23:52:32 -07:00
af960d7a93
Fix favorites page by fixing how query is built (#125) 2023-08-21 20:42:54 -07:00
d2c5455120
Add support for inclusions/exclusions (#124)
* Remove ap call

* Fix remix render method

* Downcase username on db end

There was a bug where users with capital letters in their name could not access their profiles after we tried to make things case insensitive.

* Remove ap call and unused code

* Add granblue.team to cors

This works now!

* Implement all-entity search to support tagging objects (#117)

* Add table for multisearch

* Add new route for searching all entities

* Make models multisearchable

We're going to start with Character, Summon, Weapon and Jobs

* Add method to Search controller

This will search with trigram first, and then if there aren't enough results, search with prefixed text search

* Add support for Japanese all-entity search

* Update grid_summons_controller.rb

Set the proper uncap level for transcended summons

* Search is broken in Japanese!

* Grid model object updates

* Adds has_one association to canonical objects
* GridWeapon is_mainhand refactored
* GridCharacter add_awakening refactored

* (WIP) Add support for inclusion/exclusion + refactor

This commit adds basic support for including/excluding objects from collection filters. There is also a refactor of the filter logic as a whole. It is only implemented in `teams` for now and is a work in progress.

* Update multisearch for exclusions

* Add nicknames to the index for multisearchable
2023-08-21 20:01:15 -07:00
4ee7a3a644
Order search results by release or update date (#123)
The list of all items that shows up when you open the search modal will now list all items sorted latest first, whether the item is brand new or an item that recently got an uncap.
2023-08-20 01:56:15 -07:00
1646f3d555
Update item search with better fallbacks and nicknames (#122)
* Add migrations for nicknames

* Rename migrations to be after last migration

* Migrate database

* Update search in models

* Search against nickname columns
* Add dictionary search to EN search so its not only trigrams
2023-08-20 00:46:25 -07:00
0ccbb7ecfe
Implement wiki parsers (#121)
* Remove ap call

* Fix remix render method

* Downcase username on db end

There was a bug where users with capital letters in their name could not access their profiles after we tried to make things case insensitive.

* Remove ap call and unused code

* Add granblue.team to cors

This works now!

* Implement all-entity search to support tagging objects (#117)

* Add table for multisearch

* Add new route for searching all entities

* Make models multisearchable

We're going to start with Character, Summon, Weapon and Jobs

* Add method to Search controller

This will search with trigram first, and then if there aren't enough results, search with prefixed text search

* Add support for Japanese all-entity search

* Update grid_summons_controller.rb

Set the proper uncap level for transcended summons

* Search is broken in Japanese!

* Grid model object updates

* Adds has_one association to canonical objects
* GridWeapon is_mainhand refactored
* GridCharacter add_awakening refactored

* (WIP) Add support for inclusion/exclusion + refactor

This commit adds basic support for including/excluding objects from collection filters. There is also a refactor of the filter logic as a whole. It is only implemented in `teams` for now and is a work in progress.

* Revert "Grid model object updates"

This reverts commit 70e820b781.

* Revert "(WIP) Add support for inclusion/exclusion + refactor"

This reverts commit b5f9889c00.

* Add new dependencies

* Update database with new columns

* Create WikiError

This is modeled after the errors we might receive from the wiki

* Update GranblueWiki

This is an adaptation and cleanup of the original GranblueWiki class. We extracted the object-related code into a parser, and this class is now only responsible for requests and fetching common property maps.

* Create CharacterParser

The CharacterParser is responsible for taking the response from a wiki object and turning it into something usable. Most of the logic from the original GranblueWiki object ended up here.

To use, you can instantiate a CharacterParser with a Granblue ID. It will create the wiki object for you using the provided character and fetch data when you call `fetch` on the CharacterParser.

You can also fetch data for all characters with the static method `fetch_all`

Currently a specific subset of fields are persisted, but in the future more can and probably should be saved

* Add data tables for weapons and summons

This lets us store wiki data and release dates for weapons and summons

* Add mapping for bullets

* Properly pass props

* Update debug string

* Update character parser to use correct vars

* Add weapon parser

The weapon parser parses through weapon pages.

It has the ability to parse skills but that is not complete yet.

It can go through every weapon on the wiki with the aid of the new `wiki_en` column and parse basic data successfully

* Update code for FLB

If a weapon has ULB, it has FLB too

* Add summon parser

The summon parser parses through summon pages. Aura/Call parsing has not been added.

* Add XLB date column for summons

* Add fetch_from_list static method

This backports the `fetch_from_list` static method to CharacterParser and WeaponParser. This will let us fetch data for a specific set of items instead of having to fetch one-by-one or fetch the entire dataset again.
2023-08-19 23:05:32 -07:00