public async Task <Response <Employee> > AddLeavesAsync(int userId, ICollection <Leave> leaves) { var employee = await DbContext.Set <Employee>().Include(e => e.Leaves).FirstOrDefaultAsync(e => e.Id == userId); if (employee == null) { return(new Response <Employee>(HttpStatusCode.NotFound, $"Employee with id = {userId} not found")); } if (LeavesValidator.TryMergeLeaves(employee.Leaves.ToList(), leaves)) { employee.Leaves = employee.Leaves.Concat(leaves).ToList(); await DbContext.SaveChangesAsync(); return(new Response <Employee>(employee)); } return(new Response <Employee>(HttpStatusCode.BadRequest, "Transferred leave is not correct")); }
public async Task <Response <Employee> > UpdateLeavesAsync(int userId, ICollection <Leave> leaves) { var employee = await DbContext.Set <Employee>().Include(e => e.Leaves).SingleOrDefaultAsync(e => e.Id == userId); if (employee == null) { return(new Response <Employee>(HttpStatusCode.NotFound, $"Employee with id = {userId} not found")); } try { foreach (Leave leave in leaves) { leave.EmployeeId = employee.Id; leave.Employee = employee; var currentLeave = employee.Leaves.SingleOrDefault(l => l.Id == leave.Id); if (currentLeave == null) { return(new Response <Employee>(HttpStatusCode.NotFound, $"Leave with id = {leave.Id} not found")); } Mapper.Map(leave, currentLeave); DbContext.Entry(currentLeave).State = EntityState.Modified; DbContext.Set <Leave>().Update(currentLeave); } if (!LeavesValidator.ValidateLeaves(employee.Leaves.ToList())) { return(new Response <Employee>(HttpStatusCode.BadRequest, "Transferred leave is not correct")); } await DbContext.SaveChangesAsync(); } catch (Exception e) { return(new Response <Employee>(HttpStatusCode.InternalServerError, "Internal server error")); } return(new Response <Employee>(Mapper.Map <Employee>(employee))); }