public List <AppointmentReadModel> Handle(GetAppointmentsQuery query) { var calendar = new CalendarReadModel(); calendar = _redisService.HashGet <CalendarReadModel>($"{calendar.RedisKey}", $"{query.Id}", CommandFlags.PreferMaster); return(calendar.Appointments.Where(x => x.StartingTime >= query.StartDate && x.StartingTime <= query.EndDate.AddHours(24).AddSeconds(-1)).ToList()); }
public async Task Consume(ConsumeContext <ICalendarCreatedEvent> context) { var @event = context.Message; var calendar = new CalendarReadModel { Id = @event.AggregateId, UserId = @event.UserId, WorkingHours = @event.WorkingHours, Version = @event.Version }; _redisService.HashSet($"{calendar.RedisKey}", $"{calendar.Id}", calendar, When.Always, CommandFlags.PreferMaster); }
public List <AppointmentReadModel> Handle(GetOpenAppointmentsQuery query) { var calendar = new CalendarReadModel(); calendar = _redisService.HashGet <CalendarReadModel>($"{calendar.RedisKey}", $"{query.Id}", CommandFlags.PreferMaster); var openAppointments = calendar.Appointments.Where(x => x.State == "Open"); if (!string.IsNullOrWhiteSpace(query.Term)) { openAppointments = openAppointments.Where(x => x.PetName.ToLower().Contains(query.Term.ToLower()) || x.OwnerFamilyName.ToLower().Contains(query.Term.ToLower()) || x.OwnerGivenName.ToLower().Contains(query.Term.ToLower())).ToList(); } return(openAppointments.ToList()); }
public async Task Consume(ConsumeContext <IAppointmentCreatedEvent> context) { var @event = context.Message; var calendar = new CalendarReadModel(); calendar = _redisService.HashGet <CalendarReadModel>($"{calendar.RedisKey}", $"{@event.CalendarId}", CommandFlags.PreferMaster); calendar.Appointments.Add(new AppointmentReadModel { Id = @event.AggregateId, OwnerFamilyName = @event.OwnerFamilyName, OwnerGivenName = @event.OwnerGivenName, OwnerId = @event.OwnerId, PetId = @event.PetId, PetName = @event.PetName, StartingTime = @event.StartingTime, State = @event.State, }); _redisService.HashSet($"{calendar.RedisKey}", $"{@event.CalendarId}", calendar, When.Always, CommandFlags.PreferMaster); }
public List <string> Handle(GetCalendarFreeSpotsQuery query) { var calendar = new CalendarReadModel(); calendar = _redisService.HashGet <CalendarReadModel>($"{calendar.RedisKey}", $"{query.Id}", CommandFlags.PreferMaster); var dayOfWeek = query.Date.DayOfWeek; if (calendar.WorkingHours.ContainsKey(dayOfWeek.ToString())) { var workingHours = calendar.WorkingHours[dayOfWeek.ToString()]; var workingHoursStart = new DateTimeOffset(query.Date.Date).Add(TimeSpan.FromHours(workingHours.Item1)); var workingHoursEnd = new DateTimeOffset(query.Date.Date).Add(TimeSpan.FromHours(workingHours.Item2)); var startingTimeSpots = Enumerable.Range(0, int.MaxValue) .Select(multiplier => workingHoursStart.Add(TimeSpan.FromMinutes(30 * multiplier))) .TakeWhile(span => span <= workingHoursEnd); var alreadyScheduledSpots = calendar.Appointments.Select(app => app.StartingTime).ToList(); startingTimeSpots = startingTimeSpots.Where(startingTime => !alreadyScheduledSpots.Contains(startingTime)); return(startingTimeSpots.Select(x => x.TimeOfDay.ToString()).ToList()); } return(new List <string>()); }
public async Task Consume(ConsumeContext <IAppointmentFinalizedEvent> context) { var @event = context.Message; var calendar = new CalendarReadModel(); calendar = _redisService.HashGet <CalendarReadModel>($"{calendar.RedisKey}", $"{@event.CalendarId}", CommandFlags.PreferMaster); var oldAppointment = calendar.Appointments.FirstOrDefault(a => a.Id == @event.AggregateId); calendar.Appointments.Remove(oldAppointment); calendar.Appointments.Add(new AppointmentReadModel { Id = oldAppointment.Id, OwnerFamilyName = oldAppointment.OwnerFamilyName, OwnerGivenName = oldAppointment.OwnerGivenName, OwnerId = oldAppointment.OwnerId, PetId = oldAppointment.PetId, PetName = oldAppointment.PetName, StartingTime = oldAppointment.StartingTime, State = @event.State, MedicalHistory = @event.MedicalHistory, Diagnostic = @event.Diagnostic }); _redisService.HashSet($"{calendar.RedisKey}", $"{@event.CalendarId}", calendar, When.Always, CommandFlags.PreferMaster); }