/
spirzen
/
it-code-examples
Обзор
Документация
Войти
/
spirzen
/
it-code-examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
examples/ruby/ruby-511-101-014/main.rb
57 строк
1 KB
Spirzen
Code migration pack
09 июн 2026, 01:41
09 июн 2026, 01:41
cebc284
Код
Авторство
О чём код?
def process_order(params) user = find_or_create_user(params) order = build_order(user, params) apply_discounts(order) order.save! process_payment(order, params) if params[:payment_method] notify_about_order(order) order end private def find_or_create_user(params) User.find_by(email: params[:email]) || User.create!( email: params[:email], name: params[:name], address: params[:address] ) end def build_order(user, params) order = Order.new(user: user, status: :pending) add_items_to_order(order, params[:items]) calculate_totals(order) order end def add_items_to_order(order, items_params) items_params.each do |item_params| product = Product.find(item_params[:product_id]) quantity = item_params[:quantity].to_i order.items << OrderItem.new( product: product, quantity: quantity, unit_price: product.price ) end end def calculate_totals(order) order.total = order.items.sum(&:total_price) order.tax = order.total * 0.2 order.grand_total = order.total + order.tax end def apply_discounts(order) order.apply_discount(5) if order.grand_total > 1000 end def process_payment(order, params) PaymentService.new.process(order) end def notify_about_order(order) NotificationService.new.order_created(order) end