hensei-api/sig/preview_service/coordinator.rbs
Justin Edmund 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

74 lines
1.7 KiB
Text

module PreviewService
class Coordinator
PREVIEW_FOLDER: String
PREVIEW_WIDTH: Integer
PREVIEW_HEIGHT: Integer
PREVIEW_EXPIRY: ActiveSupport::Duration
GENERATION_TIMEOUT: ActiveSupport::Duration
LOCAL_STORAGE_PATH: Pathname
@party: Party
@image_fetcher: ImageFetcherService
@grid_service: Grid
@canvas_service: Canvas
@aws_service: AwsService
def initialize: (Party party) -> void
def preview_url: -> String
def generate_preview: -> bool
def force_regenerate: -> bool
def delete_preview: -> void
private
def create_preview_image: -> MiniMagick::Image
def add_job_icon: (MiniMagick::Image image, MiniMagick::Image job_icon) -> MiniMagick::Image
def organize_and_draw_weapons: (MiniMagick::Image image) -> MiniMagick::Image
def draw_mainhand_weapon: (MiniMagick::Image image, MiniMagick::Image weapon_image) -> MiniMagick::Image
def save_preview: (MiniMagick::Image image) -> void
def setup_storage: -> void
def upload_to_s3: (MiniMagick::Image image) -> void
def save_to_local_storage: (MiniMagick::Image image) -> void
def preview_filename: -> String
def local_preview_path: -> Pathname
def local_preview_url: -> String
def preview_key: -> String
def preview_exists?: -> bool
def generate_s3_url: -> String
def should_generate?: -> bool
def generation_in_progress?: -> bool
def set_generation_in_progress: -> void
def clear_generation_in_progress: -> void
def schedule_generation: -> void
def default_preview_url: -> String
def delete_s3_preview: -> void
def delete_local_previews: -> void
def handle_preview_generation_error: (Exception error) -> void
end
end