Ejemplo n.º 1
0
        public async Task CreateReport(ReportContract contract, string userId)
        {
            var task = await _repository.GetTask(contract.TaskId);

            var group = await _repository.GetGroup(task.GroupId);

            if (group.Members.All(m => m.UserId != userId || !m.IsActive))
            {
                throw new UserNotFoundException();
            }
            var project = group.Projects.FirstOrDefault(p => p.Id == contract.ProjectId);

            if (project is null)
            {
                throw new ProjectsNotFoundException(contract.Id);
            }
            if (!project.MembersIds.Contains(userId))
            {
                throw new UserNotFoundException();
            }

            if (task.Reports.Any(r => r.UserId == userId))
            {
                throw new UserAlreadyJoinedException();
            }
            var report = _reportModelMapper.Map(contract, userId);
            await _repository.AddReport(report);
        }