public async Task <ActionResult <JobApplicationMinWithJoRes> > Post([FromBody] JobApplicationWithJoReq request) { int userId = int.Parse(HttpContext.User.Identity.Name); var response = await _jobApplicationService.CreateAsync(request, userId); return(StatusCode(201, response)); }
/// <summary> /// Create JobApplication /// </summary> /// <param name="model">JobApplication DTO</param> /// <param name="userId">User ID</param> /// <returns>JobApplication DTO</returns> public async Task <JobApplicationMinWithJoRes> CreateAsync(JobApplicationWithJoReq model, int userId) { JobOffer jobOffer = await _context.JobOffers .Include(jo => jo.Group) .Include(jo => jo.Address) .FirstOrDefaultAsync(jo => jo.JobOfferId == model.JobOfferId); // jobOffer not found if (jobOffer == null) { throw new AppLogicException("Nabídka nenalezena"); } Student student = await _context.Students .Include(student => student.User) .Where(student => student.User.UserId == userId) .Include(st => st.JobApplications) .ThenInclude(ja => ja.JobOffer) .FirstOrDefaultAsync(); // check if job offer start date is in future if (jobOffer.Start <= DateTime.UtcNow) { throw new AppLogicException("Nabídka již započala"); } // check if job offer is not full yet int freeSpaces = await _jobOfferService.GetFreeSpacesAsync(jobOffer.JobOfferId); if (freeSpaces <= 0) { throw new AppLogicException("Nejsou žádná volná místa"); } // check if job application for this job offer already exists bool applicationExists = await _context.JobApplications.AnyAsync((ja) => ja.JobOfferId == jobOffer.JobOfferId && ja.StudentId == student.StudentId); if (applicationExists) { throw new AppLogicException("Přihláška pro tuto nabídku již existuje"); } // check if job application in the same time interval already exists foreach (var ja in student.JobApplications) { if (ja.JobOffer.Start <= jobOffer.End && ja.JobOffer.End >= jobOffer.Start) { throw new AppLogicException("Přihláška se překrývá s termínem jiné přihlášky"); } } // create job application JobApplication jobApplication = new JobApplication { State = JobApplicationStates.Pending, Student = student, JobOffer = jobOffer }; _context.JobApplications.Add(jobApplication); await _context.SaveChangesAsync(); return(new JobApplicationMinWithJoRes(jobApplication)); }