コード例 #1
0
        public SlotDto ConvertToDto(OfficeHoursSlot entity, int lmsUserId)
        {
            var result = new SlotDto
            {
                Id     = entity.Id,
                Status = entity.Status,
                Start  = entity.Start,
                End    = entity.End
            };

            if (entity.User.Id == lmsUserId || entity.Availability.User.Id == lmsUserId)
            {
                result.CanEdit   = true;
                result.UserName  = entity.User.Name ?? entity.User.Username;
                result.Subject   = entity.Subject;
                result.Questions = entity.Questions;
            }

            return(result);
        }
コード例 #2
0
        public async Task <OperationResultWithData <IEnumerable <SlotDto> > > AddSlots(int ohId, LmsUser lmsUser, IEnumerable <CreateSlotDto> dtos, OfficeHoursSlotStatus status = OfficeHoursSlotStatus.Booked)
        {
            var availabilities = _availabilityModel.GetAvailabilities(ohId); //await _context.OhTeacherAvailabilities.Include(x => x.Meeting).Where(x => x.Meeting.Id == meetingId).ToListAsync();// &&x.lmsUserId == lmsUserId
            var entities       = new List <OfficeHoursSlot>();

            foreach (var dto in dtos)
            {
                //validate interval and non-busy
                var availability = availabilities.FirstOrDefault(x =>
                {
                    var availabilityDto = ConvertToDto(x);
                    var slots           = GetSlotsForAvailability(availabilityDto, dto.Start, dto.End, lmsUser.Id, x);
                    return(slots.Any(s => s.Start == dto.Start && s.Status == (int)OfficeHoursSlotStatus.Free));
                });
                if (availability == null)
                {
                    return(OperationResultWithData <IEnumerable <SlotDto> > .Error(
                               "Time is already booked or out of any availability range. Please refresh page."));
                }

                var entity = new OfficeHoursSlot
                {
                    Availability = availability,
                    //RequesterName = requesterName,
                    User      = lmsUser,
                    Start     = dto.Start,
                    End       = dto.End,
                    Subject   = dto.Subject,
                    Questions = dto.Questions,
                    Status    = (int)status
                };

                _slotModel.RegisterSave(entity, false);
                entities.Add(entity);
            }

            _slotModel.Flush();
            return(entities.Select(x => ConvertToDto(x, lmsUser.Id)).ToSuccessResult());
        }