add BuyCryptoOrder and SellCryptoOrder entities
This commit is contained in:
36
app/models/buy_crypto_order.rb
Normal file
36
app/models/buy_crypto_order.rb
Normal file
@@ -0,0 +1,36 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: buy_crypto_orders
|
||||
#
|
||||
# id :bigint not null, primary key
|
||||
# paid_amount_cents :integer default(0), not null
|
||||
# received_amount :decimal(20, 10)
|
||||
# status :string not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# currency_id :bigint not null
|
||||
# user_id :bigint not null
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
# index_buy_crypto_orders_on_currency_id (currency_id)
|
||||
# index_buy_crypto_orders_on_user_id (user_id)
|
||||
#
|
||||
# Foreign Keys
|
||||
#
|
||||
# fk_rails_... (currency_id => currencies.id)
|
||||
# fk_rails_... (user_id => users.id)
|
||||
#
|
||||
class BuyCryptoOrder < ApplicationRecord
|
||||
include Processable
|
||||
|
||||
belongs_to :user
|
||||
belongs_to :currency
|
||||
|
||||
monetize :paid_amount_cents
|
||||
|
||||
validates :paid_amount_cents, presence: true, numericality: { greater_than: 0 }
|
||||
validates :received_amount, presence: true, if: :completed?
|
||||
end
|
||||
21
app/models/concerns/processable.rb
Normal file
21
app/models/concerns/processable.rb
Normal file
@@ -0,0 +1,21 @@
|
||||
# frozen_string_literal: true
|
||||
module Processable
|
||||
extend Enumerize
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
enumerize :status, in: [:processing, :completed, :canceled], default: :processing
|
||||
end
|
||||
|
||||
def processing?
|
||||
status == :processing
|
||||
end
|
||||
|
||||
def completed?
|
||||
status == :completed
|
||||
end
|
||||
|
||||
def canceled?
|
||||
status == :canceled
|
||||
end
|
||||
end
|
||||
36
app/models/sell_crypto_order.rb
Normal file
36
app/models/sell_crypto_order.rb
Normal file
@@ -0,0 +1,36 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: sell_crypto_orders
|
||||
#
|
||||
# id :bigint not null, primary key
|
||||
# paid_amount :decimal(20, 10) default(0.0), not null
|
||||
# received_amount_cents :integer
|
||||
# status :string not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# currency_id :bigint not null
|
||||
# user_id :bigint not null
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
# index_sell_crypto_orders_on_currency_id (currency_id)
|
||||
# index_sell_crypto_orders_on_user_id (user_id)
|
||||
#
|
||||
# Foreign Keys
|
||||
#
|
||||
# fk_rails_... (currency_id => currencies.id)
|
||||
# fk_rails_... (user_id => users.id)
|
||||
#
|
||||
class SellCryptoOrder < ApplicationRecord
|
||||
include Processable
|
||||
|
||||
belongs_to :user
|
||||
belongs_to :currency
|
||||
|
||||
monetize :received_amount_cents
|
||||
|
||||
validates :paid_amount, presence: true, numericality: { greater_than: 0 }
|
||||
validates :received_amount_cents, presence: true, if: :completed?
|
||||
end
|
||||
Reference in New Issue
Block a user