diff --git a/app/controllers/combats_controller.rb b/app/controllers/combats_controller.rb new file mode 100644 index 0000000..ae66e25 --- /dev/null +++ b/app/controllers/combats_controller.rb @@ -0,0 +1,29 @@ +class CombatsController < ApplicationController + COMBATS_RENDER_CONFIG = { + left_fighter: { only: CreaturesController::SHOWABLE_ATTRIBUTES }, + right_fighter: { only: CreaturesController::SHOWABLE_ATTRIBUTES }, + winner: { only: CreaturesController::SHOWABLE_ATTRIBUTES }, + } + + def create + left_fighter = Creature.find(params[:left_fighter_id]) + right_fighter = Creature.find(params[:right_fighter_id]) + + @combat = Combat.new(create_params) + @combat.left_fighter = left_fighter + @combat.right_fighter = right_fighter + @combat.baston! + @combat.left_fighter.save! + @combat.right_fighter.save! + @combat.save! + + render json: @combat.as_json(include: COMBATS_RENDER_CONFIG) + rescue ActiveRecord::RecordNotFound + render json: {}, status: 404 + end + + private + def create_params + params.require(:combat).permit(:name) + end +end \ No newline at end of file diff --git a/app/models/combat.rb b/app/models/combat.rb index 71f7cc4..d874cad 100644 --- a/app/models/combat.rb +++ b/app/models/combat.rb @@ -3,7 +3,7 @@ class Combat < ApplicationRecord belongs_to :left_fighter, class_name: 'Creature' belongs_to :right_fighter, class_name: 'Creature' - belongs_to :winner, class_name: 'Creature' + belongs_to :winner, class_name: 'Creature', optional: true def baston! return if left_fighter.nil? || right_fighter.nil? diff --git a/config/routes.rb b/config/routes.rb index aa692af..c522ad6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,6 +9,9 @@ Rails.application.routes.draw do put '/creatures/:id', to: 'creatures#update' delete '/creatures/:id', to: 'creatures#destroy' + # Combats + post '/combats', to: 'combats#create' + # Defines the root path route ("/") root 'home#welcome' end