Skip to content

Commit

Permalink
logic to update or created calendar/event
Browse files Browse the repository at this point in the history
  • Loading branch information
eversonclear committed Mar 14, 2023
1 parent 81df26a commit fc61c70
Showing 1 changed file with 69 additions and 49 deletions.
118 changes: 69 additions & 49 deletions app/services/google_calendar_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,59 +14,28 @@ def initialize(token, current_user)
end

def get_all_events
now = Time.now.iso8601

calendars = @google_service.list_calendar_lists

calendars.items.each do |calendar|
@calendar = Calendar.new(
user: @current_user,
access_role: calendar.access_role,
background_color: calendar.background_color,
color_id: calendar.color_id,
conference_properties: calendar.conference_properties.as_json,
default_reminders: calendar.default_reminders,
etag: calendar.etag,
foreground_color: calendar.foreground_color,
remote_id: calendar.id,
kind: calendar.kind,
selected: calendar.selected,
summary: calendar.summary,
time_zone: calendar.time_zone
)

events = @google_service.list_events(calendar.id,
single_events: true,
order_by: 'startTime',
time_min: now)

events.items.each do |event|
@calendar.events.new(
calendar: @calendar,
user: @current_user,
remote_created_at: event.created,
remote_updated_at: event.updated,
starts_at: event.start.date_time,
starts_at_timezone: event.start.time_zone,
finishes_at: event.end.date_time,
finishes_at_timezone: event.end.time_zone,
creator_email: event.creator.email,
self_created: event.creator.self,
etag: event.etag,
event_type: event.event_type ,
html_link: event.html_link,
i_cal_uid: event.i_cal_uid,
remote_id: event.id,
kind: event.kind,
organizer_email: event.organizer.email,
self_organized: event.organizer.self,
reminders: event.reminders.as_json,
status: event.status,
summary: event.summary,
)
calendars.items.each do |calendar_item|
@calendar = Calendar.where(remote_id: calendar_item.id).first

if @calendar.present?
@calendar.update(calendar_params(calendar_item))
else
@calendar = Calendar.create!(calendar_params(calendar_item))
end

@calendar.save
events = list_calendar_events(calendar_item.id)
events.items.each do |event_item|
@event = Event.where(calendar_id: @calendar.id, remote_id: event_item.id).first


if @event.present?
@event.update(event_params(event_item))
else
@calendar.events.create!(event_params(event_item))
end
end
end
end

Expand All @@ -77,4 +46,55 @@ def google_service
google_service.authorization = @token
google_service
end

def calendar_params(calendar)
{
user: @current_user,
access_role: calendar.access_role,
background_color: calendar.background_color,
color_id: calendar.color_id,
conference_properties: calendar.conference_properties.as_json,
default_reminders: calendar.default_reminders,
etag: calendar.etag,
foreground_color: calendar.foreground_color,
remote_id: calendar.id,
kind: calendar.kind,
selected: calendar.selected,
summary: calendar.summary,
time_zone: calendar.time_zone
}
end

def event_params(event)
{
calendar: @calendar,
user: @current_user,
remote_created_at: event.created,
remote_updated_at: event.updated,
starts_at: event.start.date_time || event.start.date,
starts_at_timezone: event.start.time_zone || '',
finishes_at: event.end.date_time || event.end.date,
finishes_at_timezone: event.end.time_zone || '',
creator_email: event.creator.email,
self_created: event.creator.self,
etag: event.etag,
event_type: event.event_type,
html_link: event.html_link,
i_cal_uid: event.i_cal_uid,
remote_id: event.id,
kind: event.kind,
organizer_email: event.organizer.email,
self_organized: event.organizer.self,
reminders: event.reminders.as_json || { },
status: event.status,
summary: event.summary,
}
end

def list_calendar_events(calendar_id)
@google_service.list_events(calendar_id,
single_events: true,
order_by: 'startTime',
time_min: Time.now.iso8601)
end
end

0 comments on commit fc61c70

Please sign in to comment.