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); }
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()); }