diff --git a/apps/api/app/controllers/api/events_controller.rb b/apps/api/app/controllers/api/events_controller.rb index fccb296..b0e40ac 100644 --- a/apps/api/app/controllers/api/events_controller.rb +++ b/apps/api/app/controllers/api/events_controller.rb @@ -4,7 +4,10 @@ class Api::EventsController < ApiController end api :GET, "/api/events", "List all events" - returns code: 200, desc: "Array of events" + returns code: 200, desc: "Array of events" do + property :name, String, desc: "Event name" + property :date, String, desc: "Event date (ISO 8601)" + end def index render json: EventService.new.index end diff --git a/apps/api/app/controllers/api/members_controller.rb b/apps/api/app/controllers/api/members_controller.rb index 27a75d2..d81a2c2 100644 --- a/apps/api/app/controllers/api/members_controller.rb +++ b/apps/api/app/controllers/api/members_controller.rb @@ -4,7 +4,13 @@ class Api::MembersController < ApiController end api :GET, "/api/members", "List all team members" - returns code: 200, desc: "Array of team members" + returns code: 200, desc: "Array of team members" do + property :nick, String, desc: "Nickname" + property :real_nick, String, desc: "Real name" + property :motto, String, desc: "Motto / tagline" + property :avatar_filename, String, desc: "Avatar filename" + property :image_url, String, desc: "Avatar image URL (e.g. /api/image/123)" + end def index render json: MemberService.new.index end diff --git a/apps/api/app/controllers/api/software_controller.rb b/apps/api/app/controllers/api/software_controller.rb index c6275e1..6da6dfb 100644 --- a/apps/api/app/controllers/api/software_controller.rb +++ b/apps/api/app/controllers/api/software_controller.rb @@ -3,8 +3,56 @@ class Api::SoftwareController < ApiController short "Software catalog" end + def_param_group :external_link do + property :ID, Integer, desc: "Link ID" + property :softwareId, Integer, desc: "Parent software ID" + property :label, String, desc: "Link label (e.g. GitHub)" + property :url, String, desc: "Link URL" + end + + def_param_group :software_image do + property :url, String, desc: "Image URL (e.g. /api/image/123)" + property :isDefault, :boolean, desc: "Default image flag" + property :position, Integer, desc: "Display order" + end + + def_param_group :release do + property :ID, Integer, desc: "Release ID" + property :softwareId, Integer, desc: "Parent software ID" + property :version, String, desc: "Version string" + property :cartridgePath, String, desc: "Cartridge file path" + property :sourcePath, String, desc: "Source file path" + property :htmlFolderPath, String, desc: "HTML playable folder path" + property :docsFolderPath, String, desc: "Documentation folder path" + property :downloadCount, Integer, desc: "Download count for this release" + end + api :GET, "/api/software", "List all software entries with releases" - returns code: 200, desc: "Array of software entries with nested releases" + returns code: 200, desc: "Wrapper object with softwares array" do + property :softwares, Array, desc: "Array of software entries" do + property :ID, Integer, desc: "Software ID" + property :name, String, desc: "Internal name" + property :title, String, desc: "Display title" + property :author, String, desc: "Author name" + property :desc, String, desc: "Short description" + property :story, String, desc: "Long description / story" + property :license, String, desc: "License type" + property :platform, String, desc: "Platform (tic80, love, ebitengine, c64)" + property :status, String, desc: "Status (active, inactive)" + property :highlighted, :boolean, desc: "Currently highlighted" + property :imageUrl, String, desc: "Default image URL" + property :externalLinks, Array, desc: "External links" do + property :ID, Integer, desc: "Link ID" + property :label, String, desc: "Link label" + property :url, String, desc: "Link URL" + end + property :images, Array, desc: "Image gallery" do + property :url, String, desc: "Image URL" + property :isDefault, :boolean, desc: "Default image flag" + property :position, Integer, desc: "Display order" + end + end + end def index render json: SoftwareService.new.index end diff --git a/apps/api/app/controllers/api/software_highlighted_controller.rb b/apps/api/app/controllers/api/software_highlighted_controller.rb index 88b7219..35489ef 100644 --- a/apps/api/app/controllers/api/software_highlighted_controller.rb +++ b/apps/api/app/controllers/api/software_highlighted_controller.rb @@ -4,7 +4,33 @@ class Api::SoftwareHighlightedController < ApiController end api :GET, "/api/software/highlighted", "Get currently highlighted software entry" - returns code: 200, desc: "Highlighted software entry with releases" + returns code: 200, desc: "Highlighted software with releases and stats" do + property :software, Hash, desc: "Software entry" do + property :ID, Integer, desc: "Software ID" + property :name, String, desc: "Internal name" + property :title, String, desc: "Display title" + property :author, String, desc: "Author name" + property :desc, String, desc: "Short description" + property :story, String, desc: "Long description / story" + property :license, String, desc: "License type" + property :platform, String, desc: "Platform (tic80, love, ebitengine, c64)" + property :status, String, desc: "Status" + property :highlighted, :boolean, desc: "Highlighted flag" + property :imageUrl, String, desc: "Default image URL" + end + property :releases, Array, desc: "All releases" do + property :ID, Integer, desc: "Release ID" + property :version, String, desc: "Version string" + property :cartridgePath, String, desc: "Cartridge path" + property :sourcePath, String, desc: "Source path" + property :htmlFolderPath, String, desc: "HTML folder path" + property :docsFolderPath, String, desc: "Docs folder path" + property :downloadCount, Integer, desc: "Download count" + end + property :latestRelease, Hash, desc: "Latest release object" + property :webPlayableRelease, Hash, desc: "Web-playable release (if any)" + property :totalDownloads, Integer, desc: "Total download count across all releases" + end error code: 404, desc: "No highlighted software found" def index result = SoftwareHighlightedService.new.index diff --git a/apps/api/app/controllers/api/swagger_controller.rb b/apps/api/app/controllers/api/swagger_controller.rb new file mode 100644 index 0000000..3a1fd43 --- /dev/null +++ b/apps/api/app/controllers/api/swagger_controller.rb @@ -0,0 +1,43 @@ +class Api::SwaggerController < ActionController::Base + layout false + + def index + render html: swagger_html.html_safe + end + + private + + def swagger_html + <<~HTML + + +
+ + +