Добавить событие в календарь другого пользователя, используя Google :: Api :: V3 - PullRequest
0 голосов
/ 10 марта 2020

Я создаю веб-приложение, которое имеет следующие классы. User и Booking. Мне нужно дать возможность более чистым пользователям утверждать заказы, которые, в свою очередь, создадут событие в календаре хостов.

У пользователей есть два типа, cleaners и hosts. У каждого пользователя есть календарь.

У меня есть два варианта использования, которые мне трудно удовлетворить.

  1. Хост принимает запрос очистителей Booking; когда это происходит, статус Booking изменяется на одобренный, и событие добавляется в календарь хостов. Этот шаг работает так, как и должно быть, потому что current_user - это host, которому через oauth разрешено вносить изменения в свой календарь.
def new_event(start, endd, cleaner)
    client = Signet::OAuth2::Client.new(client_options)
    client.update!(session[:authorization])
    service = Google::Apis::CalendarV3::CalendarService.new
    service.authorization = client
    calendar = service.get_calendar(:primary)
    today = Date.today
    event = Google::Apis::CalendarV3::Event.new({
      start: Google::Apis::CalendarV3::EventDateTime.new(date: start),
      end: Google::Apis::CalendarV3::EventDateTime.new(date: endd),
      summary: "Cleaning Scheduled by #{cleaner}"
    })
    service.insert_event(calendar.id, event)
  end

Я называю этот метод здесь

def approve
    @booking = Booking.find(params[:id])
    @booking.update(status:'approved')
      if @booking.save
        flash[:success] = "Reservation Approved"
        # send_approved_booking_notification(@booking)
        new_event(@booking.starts_at.to_date,@booking.starts_at.to_date, @booking.cleaner.name)
        redirect_to dashboard_path
      else
Хозяин запрашивает уборщика, и уборщик утверждает бронирование, когда уборщик утверждает, событие должно быть опубликовано в календаре хозяина; В настоящее время событие добавляется только в календарь авторизованных пользователей, который в данном случае является календарем уборщиков. Как я могу опубликовать это событие в календаре пользователя, который создал запрос (хост)?

TLDR;

как добавить событие из календаря одного пользователя в календарь другого пользователя с помощью Google :: Api :: CalendarV3?

1 Ответ

1 голос
/ 10 марта 2020

Решением моей проблемы было добавление attendee к параметрам моего нового события. В этом случае я указал адрес электронной почты host, и событие было добавлено в календарь уборщиков и в календарь организатора. Вот мой new_event метод, который вставляет событие в оба календаря

def new_event(start, endd, cleaner, host)
    client = Signet::OAuth2::Client.new(client_options)
    client.update!(session[:authorization])
    service = Google::Apis::CalendarV3::CalendarService.new
    service.authorization = client
    calendar = service.get_calendar(:primary)
    today = Date.today
    event = Google::Apis::CalendarV3::Event.new({
      start: Google::Apis::CalendarV3::EventDateTime.new(date: start),
      end: Google::Apis::CalendarV3::EventDateTime.new(date: endd),
      attendees: [{email: host.email}],
      summary: "Cleaning Scheduled by #{cleaner}"
    })
    service.insert_event(calendar.id, event)
end
...