public void Should_NaoAgendar_When_UsuarioNaoEncontrado()
        {
            var model = new ScheduleMeetingsModel()
            {
                RoomId = 1, UserId = 0
            };

            var response = _scheduleMeetingsAppService.Schedule(model);

            Assert.True(response.IsNotValid());
        }
Example #2
0
 public ActionResult <ResponseModel> Schedule([FromBody] ScheduleMeetingsModel model)
 {
     try
     {
         return(Ok(_scheduleMeetingsAppService.Schedule(model)));
     }
     catch
     {
         return(StatusCode(StatusCodes.Status500InternalServerError));
     }
 }
        public void Should_Agendar_When_PeriodoDisponivel(TimeSpan start, TimeSpan end)
        {
            var model = new ScheduleMeetingsModel()
            {
                RoomId = 1,
                UserId = 1,
                Date   = DateTime.Today,
                Start  = start,
                End    = end
            };

            var response = _scheduleMeetingsAppService.Schedule(model);

            Assert.True(response.Success);
        }
        public ResponseModel Schedule(ScheduleMeetingsModel model)
        {
            try
            {
                #region Validations

                var response = ResponseModel.Empty();

                #region Validate model

                if (model.Date.Date < DateTime.Today)
                {
                    response.AddError($"Deve-se marcar a reunião apartir da data de {DateTime.Today.ToString("dd/MM/yyyy")}");
                }

                if (model.Date.Date == DateTime.Today && model.Start < DateTime.Now.ToTimeSpan())
                {
                    response.AddError("Hora início da reunião deve ser maior que a hora atual");
                }

                if (model.End <= model.Start)
                {
                    response.AddError("Hora final da reunião deve ser maior que a hora de início");
                }

                if (response.IsNotValid())
                {
                    return(response);
                }

                #endregion

                if (!_roomsRepository.Exists(model.RoomId))
                {
                    response.AddError("Sala não encontrada");
                }

                if (!_usersRepository.Exists(model.UserId))
                {
                    response.AddError("Usuário não encontrado");
                }

                var scheduledMeetings = _scheduleMeetingsRepository.GetByDate(model.Date, model.RoomId);

                if (!Meeting.Available(scheduledMeetings, model.Start, model.End))
                {
                    response.AddError($"Não foi possível agendar a reunião no dia {model.Date.ToString("dd/MM/yyyy")} nesse período ({model.Start} - {model.End})");
                }

                if (response.IsNotValid())
                {
                    return(response);
                }
                #endregion

                var meeting = ScheduleMeetings.New();

                meeting.UserId       = model.UserId;
                meeting.RoomId       = model.RoomId;
                meeting.Title        = model.Title;
                meeting.MeetingDate  = model.Date;
                meeting.MeetingStart = model.Start;
                meeting.MeetingEnd   = model.End;

                _scheduleMeetingsRepository.Add(meeting);
                _unitOfWork.Commit();

                return(ResponseModel.BuildSuccess());
            }
            catch (Exception ex)
            {
                return(ResponseModel.BuildError($"Erro interno: {ex.Message}"));
            }
        }