public async Task <IActionResult> Put( [FromRoute] int jobApplicationId, [FromBody] JobApplicationWithStateReq request) { bool found = await _jobApplicationService.EditAsync(jobApplicationId, request); if (!found) { return(StatusCode(404)); } return(StatusCode(204)); }
/// <summary> /// Edit JobApplication /// </summary> /// <param name="jobApplicationId">JobApplication ID</param> /// <param name="model">JobApplication DTO</param> /// <returns>Bool if JobApplication was found</returns> public async Task <bool> EditAsync(int jobApplicationId, JobApplicationWithStateReq model) { // route id and model id differs if (jobApplicationId != model.JobApplicationId) { throw new AppLogicException("Neplatný požadavek"); } var jobApplication = await _context.JobApplications .Include(ja => ja.JobOffer) .FirstAsync(ja => ja.JobApplicationId == jobApplicationId); // job application not found if (jobApplication == null) { return(false); } // check if the transition between states is valid bool toPenErr = model.State == JobApplicationStates.Pending; bool toAppErr = (model.State == JobApplicationStates.Approved) && (jobApplication.State != JobApplicationStates.Pending); bool toDenErr = (model.State == JobApplicationStates.Denied) && (jobApplication.State != JobApplicationStates.Pending); bool toAbsErr = (model.State == JobApplicationStates.Absent) && ((jobApplication.State != JobApplicationStates.Attended) && (jobApplication.State != JobApplicationStates.Approved)); bool toAttErr = (model.State == JobApplicationStates.Attended) && ((jobApplication.State != JobApplicationStates.Absent) && (jobApplication.State != JobApplicationStates.Approved)); if (toPenErr || toAppErr || toDenErr || toAbsErr || toAttErr) { throw new AppLogicException("Nevalidní přechod mezi stavy přihlášky"); } // when approving/denying application if (model.State == JobApplicationStates.Approved || model.State == JobApplicationStates.Denied) { // check if job offer has aleready begun if (jobApplication.JobOffer.Start <= DateTime.UtcNow) { throw new AppLogicException("Brigáda již započala"); } int freeSpaces = await _jobOfferService.GetFreeSpacesAsync(jobApplication.JobOffer.JobOfferId); if (freeSpaces < 1) { throw new AppLogicException("Již nejsou volná místa"); } } // when setting absent/attended state else if (model.State == JobApplicationStates.Absent || model.State == JobApplicationStates.Attended) { // check if job offer has already ended if (jobApplication.JobOffer.End > DateTime.UtcNow) { throw new AppLogicException("Brigáda ještě neskončila"); } } // edit job application jobApplication.State = model.State; await _context.SaveChangesAsync(); return(true); }