auction_fun_core 0.8.5 → 0.8.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/auction_fun_core.gemspec +1 -0
- data/db/migrate/20240229143000_create_auctions.rb +1 -0
- data/db/seeds.rb +87 -36
- data/i18n/en-US/contracts/contracts.en-US.yml +9 -0
- data/i18n/en-US/mail/application.en-US.yml +59 -0
- data/i18n/en-US/mail/auction_context/post_auction/participant.en-US.yml +13 -0
- data/i18n/en-US/mail/auction_context/post_auction/winner.en-US.yml +13 -0
- data/i18n/pt-BR/contracts/contracts.pt-BR.yml +9 -0
- data/i18n/pt-BR/mail/application.pt-BR.yml +59 -0
- data/i18n/pt-BR/mail/auction_context/post_auction/participant.pt-BR.yml +13 -0
- data/i18n/pt-BR/mail/auction_context/post_auction/winner.pt-BR.yml +13 -0
- data/i18n/pt-BR/mail/user_context/registration.pt-BR.yml +0 -4
- data/lib/auction_fun_core/contracts/auction_context/post_auction/participant_contract.rb +42 -0
- data/lib/auction_fun_core/contracts/auction_context/post_auction/winner_contract.rb +41 -0
- data/lib/auction_fun_core/contracts/auction_context/processor/finish/closed_contract.rb +47 -0
- data/lib/auction_fun_core/contracts/auction_context/processor/finish/penny_contract.rb +48 -0
- data/lib/auction_fun_core/contracts/auction_context/processor/finish/standard_contract.rb +48 -0
- data/lib/auction_fun_core/entities/auction.rb +6 -0
- data/lib/auction_fun_core/operations/auction_context/create_operation.rb +12 -2
- data/lib/auction_fun_core/operations/auction_context/post_auction/participant_operation.rb +52 -0
- data/lib/auction_fun_core/operations/auction_context/post_auction/winner_operation.rb +51 -0
- data/lib/auction_fun_core/operations/auction_context/processor/finish/closed_operation.rb +100 -0
- data/lib/auction_fun_core/operations/auction_context/processor/finish/penny_operation.rb +100 -0
- data/lib/auction_fun_core/operations/auction_context/processor/finish/standard_operation.rb +102 -0
- data/lib/auction_fun_core/operations/auction_context/processor/start_operation.rb +23 -11
- data/lib/auction_fun_core/operations/bid_context/create_bid_penny_operation.rb +57 -7
- data/lib/auction_fun_core/operations/staff_context/registration_operation.rb +10 -0
- data/lib/auction_fun_core/relations/auctions.rb +167 -26
- data/lib/auction_fun_core/relations/staffs.rb +1 -1
- data/lib/auction_fun_core/services/mail/auction_context/post_auction/participant_mailer.rb +31 -0
- data/lib/auction_fun_core/services/mail/auction_context/post_auction/winner_mailer.rb +31 -0
- data/lib/auction_fun_core/services/mail/templates/auction_context/post_auction/participant.html.erb +173 -0
- data/lib/auction_fun_core/services/mail/templates/auction_context/post_auction/winner.html.erb +174 -0
- data/lib/auction_fun_core/services/mail/templates/user_context/registration.html.erb +2 -2
- data/lib/auction_fun_core/version.rb +1 -1
- data/lib/auction_fun_core/workers/application_job.rb +2 -0
- data/lib/auction_fun_core/workers/operations/auction_context/post_auction/participant_operation_job.rb +33 -0
- data/lib/auction_fun_core/workers/operations/auction_context/post_auction/winner_operation_job.rb +33 -0
- data/lib/auction_fun_core/workers/operations/auction_context/processor/finish/closed_operation_job.rb +34 -0
- data/lib/auction_fun_core/workers/operations/auction_context/processor/finish/penny_operation_job.rb +37 -0
- data/lib/auction_fun_core/workers/operations/auction_context/processor/finish/standard_operation_job.rb +34 -0
- data/lib/auction_fun_core/workers/services/mail/auction_context/post_auction/participant_mailer_job.rb +51 -0
- data/lib/auction_fun_core/workers/services/mail/auction_context/post_auction/winner_mailer_job.rb +51 -0
- data/system/providers/background_job.rb +19 -0
- metadata +43 -5
- data/lib/auction_fun_core/contracts/auction_context/processor/finish_contract.rb +0 -27
- data/lib/auction_fun_core/operations/auction_context/processor/finish_operation.rb +0 -61
- data/lib/auction_fun_core/workers/operations/auction_context/processor/finish_operation_job.rb +0 -32
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module AuctionFunCore
|
4
|
-
module Contracts
|
5
|
-
module AuctionContext
|
6
|
-
module Processor
|
7
|
-
##
|
8
|
-
# Contract class for finish auctions.
|
9
|
-
#
|
10
|
-
class FinishContract < Contracts::ApplicationContract
|
11
|
-
option :auction_repo, default: proc { Repos::AuctionContext::AuctionRepository.new }
|
12
|
-
|
13
|
-
params do
|
14
|
-
required(:auction_id).filled(:integer)
|
15
|
-
end
|
16
|
-
|
17
|
-
# Validation for auction.
|
18
|
-
# Validates if the auction exists in the database.
|
19
|
-
rule(:auction_id) do |context:|
|
20
|
-
context[:auction] ||= auction_repo.by_id(value)
|
21
|
-
key.failure(I18n.t("contracts.errors.custom.not_found")) unless context[:auction]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module AuctionFunCore
|
4
|
-
module Operations
|
5
|
-
module AuctionContext
|
6
|
-
module Processor
|
7
|
-
##
|
8
|
-
# Operation class for dispatch finish auction.
|
9
|
-
# By default, this change auction status from 'running' to 'finished'.
|
10
|
-
#
|
11
|
-
class FinishOperation < AuctionFunCore::Operations::Base
|
12
|
-
include Import["repos.auction_context.auction_repository"]
|
13
|
-
include Import["contracts.auction_context.processor.finish_contract"]
|
14
|
-
|
15
|
-
# @todo Add custom doc
|
16
|
-
def self.call(auction_id, &block)
|
17
|
-
operation = new.call(auction_id)
|
18
|
-
|
19
|
-
return operation unless block
|
20
|
-
|
21
|
-
Dry::Matcher::ResultMatcher.call(operation, &block)
|
22
|
-
end
|
23
|
-
|
24
|
-
# It only performs the basic processing of completing an auction.
|
25
|
-
# It just changes the status at the database level and triggers the finished event.
|
26
|
-
# @param auction_id [Integer] Auction ID
|
27
|
-
# @return [Dry::Monads::Result::Success, Dry::Monads::Result::Failure]
|
28
|
-
def call(auction_id)
|
29
|
-
yield validate(auction_id: auction_id)
|
30
|
-
|
31
|
-
auction_repository.transaction do |_t|
|
32
|
-
@auction, _ = auction_repository.update(auction_id, status: "finished")
|
33
|
-
|
34
|
-
publish_auction_finish_event(@auction)
|
35
|
-
end
|
36
|
-
|
37
|
-
Success(@auction)
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
# Calls the finish contract class to perform the validation
|
43
|
-
# of the informed attributes.
|
44
|
-
# @param attributes [Hash] auction attributes
|
45
|
-
# @return [Dry::Monads::Result::Success, Dry::Monads::Result::Failure]
|
46
|
-
def validate(attributes)
|
47
|
-
contract = finish_contract.call(attributes)
|
48
|
-
|
49
|
-
return Failure(contract.errors.to_h) if contract.failure?
|
50
|
-
|
51
|
-
Success(contract.to_h)
|
52
|
-
end
|
53
|
-
|
54
|
-
def publish_auction_finish_event(auction)
|
55
|
-
Application[:event].publish("auctions.finished", auction.to_h)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
data/lib/auction_fun_core/workers/operations/auction_context/processor/finish_operation_job.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module AuctionFunCore
|
4
|
-
module Workers
|
5
|
-
module Operations
|
6
|
-
module AuctionContext
|
7
|
-
module Processor
|
8
|
-
##
|
9
|
-
# BackgroundJob class for call finish auction operation.
|
10
|
-
#
|
11
|
-
class FinishOperationJob < Workers::ApplicationJob
|
12
|
-
include Import["repos.auction_context.auction_repository"]
|
13
|
-
include Import["operations.auction_context.processor.finish_operation"]
|
14
|
-
|
15
|
-
# @todo Add detailed documentation
|
16
|
-
def perform(auction_id, retry_count = 0)
|
17
|
-
auction = auction_repository.by_id!(auction_id)
|
18
|
-
|
19
|
-
finish_operation.call(auction.id)
|
20
|
-
rescue => e
|
21
|
-
capture_exception(e, {auction_id: auction_id, retry_count: retry_count})
|
22
|
-
raise if retry_count >= MAX_RETRIES
|
23
|
-
|
24
|
-
interval = backoff_exponential_job(retry_count)
|
25
|
-
self.class.perform_at(interval, auction_id, retry_count + 1)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|