web payable and asset view

This commit is contained in:
2026-08-02 22:54:37 +02:00
parent 73cc567e1f
commit 242c808add
8 changed files with 86 additions and 79 deletions
+1 -2
View File
@@ -3,7 +3,7 @@ ActiveAdmin.register Software do
:license, :platform, :status, :highlighted,
software_images_attributes: [ :id, :image_id, :is_default, :position, :file_upload, :_destroy ],
external_links_attributes: [ :id, :label, :url, :_destroy ],
releases_attributes: [ :id, :version, :web_playable, :_destroy,
releases_attributes: [ :id, :version, :_destroy,
{ release_assets_attributes: [ :id, :kind, :path, :_destroy ] } ]
menu priority: 2, label: "🎮 Softwares"
@@ -127,7 +127,6 @@ ActiveAdmin.register Software do
f.inputs "Releases" do
f.has_many :releases, allow_destroy: true, new_record: true do |r|
r.input :version
r.input :web_playable
r.has_many :release_assets, allow_destroy: true, new_record: true do |ra|
ra.input :kind, as: :select, collection: ReleaseAsset::KINDS, include_blank: false
ra.input :path
+2 -2
View File
@@ -18,13 +18,13 @@ class Release < ApplicationRecord
return unless software&.platform == "c64"
has_html = release_assets.reject(&:marked_for_destruction?).any? { |a| a.kind == "html" }
if has_html || web_playable?
if has_html
errors.add(:base, "C64 releases cannot be web playable (download only)")
end
end
def self.ransackable_attributes(auth_object = nil)
%w[created_at deleted_at id software_id updated_at version web_playable]
%w[created_at deleted_at id software_id updated_at version]
end
def self.ransackable_associations(auth_object = nil)
@@ -2,9 +2,10 @@ module SoftwareResponseBuilder
private
def build_response(software, releases)
sorted = releases.sort_by { |r| r.created_at || Time.at(0) }.reverse
latest = sorted.reject { |r| r.version.to_s.start_with?("dev-") }.first
web_playable = sorted.find { |r| r.release_assets.any? { |a| a.kind == "html" } }
sorted = releases.sort_by { |r| r.created_at || Time.at(0) }.reverse
latest = sorted.reject { |r| r.version.to_s.start_with?("dev-") }.first
# web-playable, ha az utolsó (stabil) release-nek van webes assetje
web_playable = latest if latest&.release_assets&.any? { |a| a.kind == "html" }
total_downloads = releases.sum { |r| r.association(:downloads).loaded? ? r.downloads.size : 0 }
SoftwareDetailSerializer.render_as_hash(software,
@@ -0,0 +1,5 @@
class RemoveWebPlayableFromReleases < ActiveRecord::Migration[8.1]
def change
remove_column :releases, :web_playable, :boolean, default: false
end
end
+1 -2
View File
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[8.1].define(version: 2026_08_02_000002) do
ActiveRecord::Schema[8.1].define(version: 2026_08_02_000003) do
create_table "admin_users", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
t.datetime "created_at", null: false
t.string "email", default: "", null: false
@@ -188,7 +188,6 @@ ActiveRecord::Schema[8.1].define(version: 2026_08_02_000002) do
t.bigint "software_id", unsigned: true
t.datetime "updated_at", precision: 3
t.string "version", limit: 64
t.boolean "web_playable", default: false
t.index ["deleted_at"], name: "idx_releases_deleted_at"
t.index ["software_id"], name: "idx_releases_software_id"
end