public async Task <IActionResult> PutEmployee(int id, [FromBody] EmployeeForCreationDTO employeeForCreation)
        {
            var employee = _mapper.Map <Employee>(employeeForCreation);

            employee.Id = id;
            _unitOfWork.Repository <Employee>().Update(employee);

            try
            {
                await _unitOfWork.Complete();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!await _unitOfWork.Repository <Employee>().Contains(d => employee.Id == id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <IActionResult> CreateEmployeeForCompany(Guid companyId, [FromBody] EmployeeForCreationDTO employee)
        {
            var employeeEntity = _mapper.Map <Employee>(employee);

            _repository.Employee.CreateEmployeeForCompany(companyId, employeeEntity);
            await _repository.SaveAsync();

            var employeeToReturn = _mapper.Map <EmployeeDTO>(employeeEntity);

            return(CreatedAtRoute("GetEmployeeForCompany", new{ companyId, id = employeeToReturn.Id },
                                  employeeToReturn));
        }
        public async Task <ActionResult <Employee> > PostEmployee([FromBody] EmployeeForCreationDTO employeeForCreation)
        {
            var employee = _mapper.Map <Employee>(employeeForCreation);
            await _unitOfWork.Repository <Employee>().Add(employee);

            await _unitOfWork.Complete();

            // mapp to a returnable obj
            var employeeToReturn = _mapper.Map <EmployeeForReturnDTO>(employee);

            return(new CreatedAtRouteResult(nameof(GetEmployee), new { employee.Id }, employeeToReturn));
        }
        public async Task <IActionResult> CreateEmployeeForCompany(Guid companyId, [FromBody] EmployeeForCreationDTO employee)
        {
            var company = await _repo.Company.GetCompanyAsync(companyId, trackChanges : false);

            if (company == null)
            {
                _logger.LogInfo($"Company with id {companyId} does not exist in the database");
                return(NotFound());
            }

            var employeeEntity = _mapper.Map <Employee>(employee);

            _repo.Employee.CreateEmployeeForCompany(companyId, employeeEntity);
            await _repo.SaveAsync();

            var employeeToReturn = _mapper.Map <EmployeeDTO>(employeeEntity);

            return(CreatedAtRoute("GetEmployeeForCompany", new { companyId, id = employeeToReturn.Id }, employeeToReturn));
        }