class ProjectPackages::BiddingService < ApplicationService Error = Class.new(StandardError) attr_reader :package, :user def initialize(package, user) @package = package @user = user end def call raise Error, '竞标已截止' if package.bidding_end? raise Error, '不能参与自己发布的竞标' if package.creator_id == user.id raise Error, '您已参与竞标' if package.bidding_users.exists?(user_id: user.id) ActiveRecord::Base.transaction do package.bidding_users.create!(user_id: user.id) send_bidding_notify! end end private def send_bidding_notify! Tiding.create!(user_id: package.creator_id, trigger_user_id: user.id, container_id: package.id, container_type: 'ProjectPackage', tiding_type: 'Bidding') end end