From efc5eb10894fc95487c55628b94024e97cd60139 Mon Sep 17 00:00:00 2001 From: HombreLaser Date: Mon, 27 Mar 2023 20:41:55 -0600 Subject: Añade CardsController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/addresses_controller.rb | 4 +- app/controllers/api/cards_controller.rb | 59 ++++++++++++++++++++++++++ app/controllers/api/companies_controller.rb | 8 +--- app/controllers/api/products_controller.rb | 10 ++--- app/controllers/serializers/card_serializer.rb | 8 ++++ config/routes.rb | 1 + 6 files changed, 75 insertions(+), 15 deletions(-) create mode 100644 app/controllers/api/cards_controller.rb create mode 100644 app/controllers/serializers/card_serializer.rb diff --git a/app/controllers/api/addresses_controller.rb b/app/controllers/api/addresses_controller.rb index 3319607..e371268 100644 --- a/app/controllers/api/addresses_controller.rb +++ b/app/controllers/api/addresses_controller.rb @@ -32,7 +32,7 @@ module Api begin case @service.call when :not_found - render json: { error_message: 'Not found' }, status: :not_found + render status: :not_found when :unprocessable_entity render json: { error_messages: @service.address.errors.full_messages }, status: :unprocessable_entity else @@ -47,7 +47,7 @@ module Api def destroy @address = current_user_account.addresses.find_by(id: params[:id]) - render json: { error_message: 'Not found' }, status: :not_found and return if @address.nil? + render status: :not_found and return if @address.nil? Services::Addresses::DestroyAddressService.new(current_user_account, params, @address).call render status: :see_other diff --git a/app/controllers/api/cards_controller.rb b/app/controllers/api/cards_controller.rb new file mode 100644 index 0000000..a890ce7 --- /dev/null +++ b/app/controllers/api/cards_controller.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module Api + # CardsController + # Or, the payment method's controller. + class CardsController < AuthenticatedController + def index + @cards = current_user_account.cards + + render json: serialized_collection.serializable_hash, status: :ok + end + + def create + @card = current_user_account.cards.new(permitted_params) + + if @card.save + render json: serialized_object.serializable_hash, status: :ok + else + render json: { error_messages: @card.errors.full_messages }, status: :unprocessable_entity + end + end + + def update + @card = Card.find_by(id: params[:id]) + + render status: :not_found and return if @card.nil? + + if @card.update(permitted_params) + render json: serialized_object.serializable_hash, status: :ok + else + render json: { error_messages: @card.errors.full_messages }, status: :unprocessable_entity + end + end + + def destroy + @card = Card.find_by(id: params[:id]) + + render status: :not_found and return if @card.nil? + + @card.destroy + + render status: :see_other + end + + private + + def serialized_collection + Serializers::CardSerializer.new(@cards) + end + + def serialized_object + Serializers::CardSerializer.new(@card) + end + + def permitted_params + params.permit(:number, :expiration_year, :expiration_month, :expiration_day, :security_code) + end + end +end diff --git a/app/controllers/api/companies_controller.rb b/app/controllers/api/companies_controller.rb index 973eedb..b79c58b 100644 --- a/app/controllers/api/companies_controller.rb +++ b/app/controllers/api/companies_controller.rb @@ -14,7 +14,7 @@ module Api render json: serialized_object.serializable_hash, status: :ok and return if @company - render json: not_found_error_message, status: :not_found + render status: :not_found end def create @@ -28,7 +28,7 @@ module Api def update @company = Company.find_by(short_name: params[:id]) - render json: not_found_error_message, status: :not_found and return if @company.nil? + render status: :not_found and return if @company.nil? if @company.update(permitted_params) render json: serialized_object.serializable_hash, status: :ok @@ -50,9 +50,5 @@ module Api def permitted_params params.permit(:name, :country, :short_name, :logo) end - - def not_found_error_message - { error_message: "No se encontró la compañía #{params[:short_name]}" } - end end end diff --git a/app/controllers/api/products_controller.rb b/app/controllers/api/products_controller.rb index 7856420..5fa7763 100644 --- a/app/controllers/api/products_controller.rb +++ b/app/controllers/api/products_controller.rb @@ -4,7 +4,7 @@ module Api # ProductsController class ProductsController < MasterController def show - render json: not_found_error_message, status: :not_found and return unless Product.exists?(public_id: params[:id]) + render status: :not_found and return unless Product.exists?(public_id: params[:id]) render json: serialized_object(params[:id]).serializable_hash, status: :ok end @@ -28,7 +28,7 @@ module Api def update @product = Product.find_by(public_id: params[:id]) - render json: not_found_error_message, status: :not_found and return if @product.nil? + render status: :not_found and return if @product.nil? if @product.update(object_params) render json: serialized_object(@product.public_id).serializable_hash, status: :ok @@ -40,7 +40,7 @@ module Api def destroy @product = Product.find_by(public_id: params[:id]) - render json: not_found_error_message, status: :not_found and return if @product.nil? + render status: :not_found and return if @product.nil? @product.destroy render status: :see_other @@ -72,9 +72,5 @@ module Api public_id = SecureRandom.hex(12) while Product.exists?(public_id:) permitted_params.merge(categories:, public_id:) end - - def not_found_error_message - { error_message: 'No existe el producto' } - end end end diff --git a/app/controllers/serializers/card_serializer.rb b/app/controllers/serializers/card_serializer.rb new file mode 100644 index 0000000..ba97443 --- /dev/null +++ b/app/controllers/serializers/card_serializer.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module Serializers + # CardSerializer + class CardSerializer < BaseSerializer + attributes :id, :number, :expiration_year, :expiration_month, :expiration_day, :security_code + end +end diff --git a/config/routes.rb b/config/routes.rb index 249bb71..148abe2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -13,6 +13,7 @@ Rails.application.routes.draw do post '/account/addresses', to: 'addresses#create' put '/account/addresses/:id', to: 'addresses#update' delete '/account/addresses/:id', to: 'addresses#destroy' + get '/account/cards', to: 'cards#index' put '/account', to: 'user_accounts#update' resources :companies, only: %i[index show create update] resources :products, only: %i[index show create update destroy] -- cgit v1.2.3