From 6f0dd42cc8bb263880fba3110aad898b50a6b4a7 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sat, 26 Feb 2022 19:27:49 -0800 Subject: [PATCH 1/7] Add route for all parties --- config/routes.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/routes.rb b/config/routes.rb index 0134515..43d9dc8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,7 @@ Rails.application.routes.draw do get 'parties/:id/weapons', to: 'parties#weapons' get 'parties/:id/summons', to: 'parties#summons' get 'parties/:id/characters', to: 'parties#characters' + get 'parties/all', to: 'parties#all' post 'check/email', to: 'users#check_email' post 'check/username', to: 'users#check_username' From 3f979f6d62a3f09b77947712930b5d9cdfee0773 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sat, 26 Feb 2022 19:29:19 -0800 Subject: [PATCH 2/7] Add endpoint for getting all parties No filters yet --- app/controllers/api/v1/parties_controller.rb | 5 +++++ app/views/api/v1/parties/all.json.rabl | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 app/views/api/v1/parties/all.json.rabl diff --git a/app/controllers/api/v1/parties_controller.rb b/app/controllers/api/v1/parties_controller.rb index 42fba29..35bc48e 100644 --- a/app/controllers/api/v1/parties_controller.rb +++ b/app/controllers/api/v1/parties_controller.rb @@ -53,6 +53,11 @@ class Api::V1::PartiesController < Api::V1::ApiController render :characters, status: :ok end + def all + @parties = Party.all() + render :all, status: :ok + end + private def random_string diff --git a/app/views/api/v1/parties/all.json.rabl b/app/views/api/v1/parties/all.json.rabl new file mode 100644 index 0000000..5afe05e --- /dev/null +++ b/app/views/api/v1/parties/all.json.rabl @@ -0,0 +1,3 @@ +collection @parties + +extends 'parties/base' From f5a4afc01d79c30231a149c6c48b3afb073d17ac Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sat, 26 Feb 2022 20:44:16 -0800 Subject: [PATCH 3/7] Begrudgingly adding an element field to parties Also added it in the JSON template --- app/views/api/v1/parties/base.json.rabl | 2 +- db/migrate/20220227042147_add_element_to_parties.rb | 5 +++++ db/schema.rb | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20220227042147_add_element_to_parties.rb diff --git a/app/views/api/v1/parties/base.json.rabl b/app/views/api/v1/parties/base.json.rabl index fb871b5..3f664c4 100644 --- a/app/views/api/v1/parties/base.json.rabl +++ b/app/views/api/v1/parties/base.json.rabl @@ -1,6 +1,6 @@ object :party -attributes :id, :user_id, :name, :description, :shortcode, :created_at, :updated_at +attributes :id, :user_id, :name, :description, :element, :shortcode, :created_at, :updated_at node :is_extra do |p| p.extra diff --git a/db/migrate/20220227042147_add_element_to_parties.rb b/db/migrate/20220227042147_add_element_to_parties.rb new file mode 100644 index 0000000..8d2f83f --- /dev/null +++ b/db/migrate/20220227042147_add_element_to_parties.rb @@ -0,0 +1,5 @@ +class AddElementToParties < ActiveRecord::Migration[6.1] + def change + add_column :parties, :element, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index d284c17..e2f168e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,12 +10,11 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_02_25_014523) do +ActiveRecord::Schema.define(version: 2022_02_27_042147) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" enable_extension "plpgsql" - enable_extension "timescaledb" create_table "characters", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "name_en" @@ -132,6 +131,7 @@ ActiveRecord::Schema.define(version: 2022_02_25_014523) do t.string "name" t.text "description" t.uuid "raid_id" + t.integer "element" t.index ["user_id"], name: "index_parties_on_user_id" end From 2a40abf08f687f88b114eda3559be74c2c242892 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sat, 26 Feb 2022 20:47:09 -0800 Subject: [PATCH 4/7] Save the party's element when the mainhand is changed --- app/controllers/api/v1/grid_weapons_controller.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/controllers/api/v1/grid_weapons_controller.rb b/app/controllers/api/v1/grid_weapons_controller.rb index 5deb3d5..e87ee49 100644 --- a/app/controllers/api/v1/grid_weapons_controller.rb +++ b/app/controllers/api/v1/grid_weapons_controller.rb @@ -17,6 +17,12 @@ class Api::V1::GridWeaponsController < Api::V1::ApiController end @weapon = GridWeapon.create!(weapon_params.merge(party_id: party.id, weapon_id: canonical_weapon.id)) + + if (@weapon.position == -1) + party.element = @weapon.weapon.element + party.save! + end + render :show, status: :created if @weapon.save! end From af8b9d3570cdba3d896708b9979f6ef1be033a81 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sat, 26 Feb 2022 20:57:24 -0800 Subject: [PATCH 5/7] Implement filterable endpoint for all parties --- app/controllers/api/v1/parties_controller.rb | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/controllers/api/v1/parties_controller.rb b/app/controllers/api/v1/parties_controller.rb index 35bc48e..fba7874 100644 --- a/app/controllers/api/v1/parties_controller.rb +++ b/app/controllers/api/v1/parties_controller.rb @@ -2,10 +2,6 @@ class Api::V1::PartiesController < Api::V1::ApiController before_action :set_from_slug, except: ['create', 'update'] before_action :set, only: ['update', 'destroy'] - def index - parties = Party.all - end - def create @party = Party.new(shortcode: random_string) @party.extra = party_params['extra'] @@ -53,8 +49,14 @@ class Api::V1::PartiesController < Api::V1::ApiController render :characters, status: :ok end - def all - @parties = Party.all() + def index + element = request.params['element'] + raid = request.params['raid'] + recency = request.params['recency'] ? Time.at(request.params['recency']).to_datetime.beginning_of_day : nil + now = DateTime.current + + @parties = Party.where(element: element, raid_id: raid, created_at: recency..now) + render :all, status: :ok end From 0c405d7f5a6b1cdb33caabc9aa0b1ad63fcc4c91 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sun, 27 Feb 2022 00:32:50 -0800 Subject: [PATCH 6/7] Add user object to JSON templates instead of just user id --- app/views/api/v1/parties/base.json.rabl | 6 +++++- app/views/api/v1/parties/characters.json.rabl | 6 +++++- app/views/api/v1/parties/summons.json.rabl | 6 +++++- app/views/api/v1/parties/weapons.json.rabl | 6 +++++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/app/views/api/v1/parties/base.json.rabl b/app/views/api/v1/parties/base.json.rabl index 3f664c4..760a164 100644 --- a/app/views/api/v1/parties/base.json.rabl +++ b/app/views/api/v1/parties/base.json.rabl @@ -1,11 +1,15 @@ object :party -attributes :id, :user_id, :name, :description, :element, :shortcode, :created_at, :updated_at +attributes :id, :name, :description, :element, :shortcode, :created_at, :updated_at node :is_extra do |p| p.extra end +node :user do |p| + partial('users/base', :object => p.user) +end + node :raid do |p| partial('raids/base', :object => p.raid) end diff --git a/app/views/api/v1/parties/characters.json.rabl b/app/views/api/v1/parties/characters.json.rabl index f786b24..17d3d9c 100644 --- a/app/views/api/v1/parties/characters.json.rabl +++ b/app/views/api/v1/parties/characters.json.rabl @@ -1,6 +1,10 @@ object @party -attributes :id, :user_id, :name, :description, :shortcode +attributes :id, :name, :description, :shortcode + +node :user do |p| + partial('users/base', :object => p.user) +end node :raid do |p| partial('raids/base', :object => p.raid) diff --git a/app/views/api/v1/parties/summons.json.rabl b/app/views/api/v1/parties/summons.json.rabl index e2ee1c6..f6faea5 100644 --- a/app/views/api/v1/parties/summons.json.rabl +++ b/app/views/api/v1/parties/summons.json.rabl @@ -1,6 +1,10 @@ object @party -attributes :id, :user_id, :name, :description, :shortcode +attributes :id, :name, :description, :shortcode + +node :user do |p| + partial('users/base', :object => p.user) +end node :raid do |p| partial('raids/base', :object => p.raid) diff --git a/app/views/api/v1/parties/weapons.json.rabl b/app/views/api/v1/parties/weapons.json.rabl index e64587f..436451b 100644 --- a/app/views/api/v1/parties/weapons.json.rabl +++ b/app/views/api/v1/parties/weapons.json.rabl @@ -1,6 +1,10 @@ object @party -attributes :id, :user_id, :name, :description, :shortcode +attributes :id, :name, :description, :shortcode + +node :user do |p| + partial('users/base', :object => p.user) +end node :raid do |p| partial('raids/base', :object => p.raid) From 4907f7c584c60294794098939b3b7a92f76b9fd2 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sun, 27 Feb 2022 00:33:00 -0800 Subject: [PATCH 7/7] Properly implement filtering --- app/controllers/api/v1/parties_controller.rb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/v1/parties_controller.rb b/app/controllers/api/v1/parties_controller.rb index fba7874..419a7b4 100644 --- a/app/controllers/api/v1/parties_controller.rb +++ b/app/controllers/api/v1/parties_controller.rb @@ -1,5 +1,5 @@ class Api::V1::PartiesController < Api::V1::ApiController - before_action :set_from_slug, except: ['create', 'update'] + before_action :set_from_slug, except: ['create', 'update', 'index'] before_action :set, only: ['update', 'destroy'] def create @@ -50,12 +50,15 @@ class Api::V1::PartiesController < Api::V1::ApiController end def index - element = request.params['element'] - raid = request.params['raid'] - recency = request.params['recency'] ? Time.at(request.params['recency']).to_datetime.beginning_of_day : nil now = DateTime.current + start_time = (now - params['recency'].to_i.seconds).to_datetime.beginning_of_day unless request.params['recency'].blank? - @parties = Party.where(element: element, raid_id: raid, created_at: recency..now) + conditions = {} + conditions[:element] = request.params['element'] unless request.params['element'].blank? + conditions[:raid] = request.params['raid'] unless request.params['raid'].blank? + conditions[:created_at] = start_time..now unless request.params['recency'].blank? + + @parties = Party.where(conditions) render :all, status: :ok end