コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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>());
        }
コード例 #6
0
        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);
        }