Class: OwnerReview
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- OwnerReview
- Defined in:
- app/models/owner_review.rb
Overview
typed: ignore A review by owner to customer Created from owner v2 dashboard
Class Method Summary collapse
-
.create_by_owner(reservation_id:, rating:, comment:) ⇒ Object
Used by Controllers/dashboard/v2/owner_reviews.
-
.get_by_reservation_ids(ids) ⇒ Object
Used by Controllers/dashboard/v2/owner_reviews.
Methods inherited from ApplicationRecord
Class Method Details
.create_by_owner(reservation_id:, rating:, comment:) ⇒ Object
Used by Controllers/dashboard/v2/owner_reviews
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'app/models/owner_review.rb', line 13 def self.create_by_owner(reservation_id:, rating:, comment:) reservation = Reservation.find(reservation_id) guest = nil if reservation.user_id.blank? reservation_phone = reservation.phone.delete! '+' guest = Guest.find_by(phone: reservation_phone) guest = Guest.create(phone: reservation_phone, name: reservation.name, reservation: reservation) if guest.blank? end review = OwnerReview.create(reservation_id: reservation_id, rating: , comment: comment, user: reservation&.user, guest: guest, owner_id: reservation.restaurant.owner_id) if review.save reservation.guest = guest reservation.save end review end |
.get_by_reservation_ids(ids) ⇒ Object
Used by Controllers/dashboard/v2/owner_reviews
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'app/models/owner_review.rb', line 36 def self.get_by_reservation_ids(ids) return [] if ids.flatten.compact.blank? Rails.cache.fetch("#{self.class}:get_by_reservation_ids:#{ids.join}", expiry_in: 1.hour) do user_sql = <<~SQL SELECT `owner_reviews`.`user_id`, trim(round(AVG(`owner_reviews`.`rating`),2))+0 AS avg_rating FROM owner_reviews JOIN `reservations` ON `reservations`.`user_id` = `owner_reviews`.`user_id` WHERE `reservations`.`id` IN (#{ids.join(', ')}) AND `reservations`.`active` = 1 AND `reservations`.`no_show` = 0 GROUP BY `owner_reviews`.`user_id` SQL guest_sql = <<~SQL SELECT `owner_reviews`.`guest_id`, trim(round(AVG(`owner_reviews`.`rating`),2))+0 AS avg_rating FROM owner_reviews JOIN `reservations` ON `reservations`.`guest_id` = `owner_reviews`.`guest_id` WHERE `reservations`.`id` IN (#{ids.join(', ')}) AND `reservations`.`active` = 1 AND `reservations`.`no_show` = 0 GROUP BY `owner_reviews`.`guest_id` SQL OwnerReview.find_by_sql(user_sql) + OwnerReview.find_by_sql(guest_sql) end end |