public async Task <string> AddAsync(PostViewModel model, string employerId) { var offer = AutoMapperConfig.MapperInstance.Map <JobOffer>(model); offer.EmployerId = employerId; offer.CreatedOn = DateTime.UtcNow; var jobOfferLanguages = new List <JobOfferLanguage>(); foreach (var languageId in model.LanguagesIds) { var jobOfferLanguage = new JobOfferLanguage { JobOffer = offer, LanguageId = languageId, CreatedOn = DateTime.UtcNow, }; jobOfferLanguages.Add(jobOfferLanguage); } var jobOfferSkills = new List <JobOfferSkill>(); foreach (var skillId in model.SkillsIds) { var jobOfferSkill = new JobOfferSkill { JobOffer = offer, SkillId = skillId, CreatedOn = DateTime.UtcNow, }; jobOfferSkills.Add(jobOfferSkill); } var jobTypes = new List <JobOfferJobType>(); foreach (var jobTypeId in model.JobTypesIds) { var jobOfferJobType = new JobOfferJobType { JobOffer = offer, JobTypeId = jobTypeId, CreatedOn = DateTime.UtcNow, }; jobTypes.Add(jobOfferJobType); } try { await this.jobOffersRepository.AddAsync(offer); await this.jobOfferSkillsRepository.AddRangeAsync(jobOfferSkills); await this.jobOfferLanguagesRepository.AddRangeAsync(jobOfferLanguages); await this.jobOfferJobTypesRepository.AddRangeAsync(jobTypes); await this.jobOffersRepository.SaveChangesAsync(); await this.jobOfferSkillsRepository.SaveChangesAsync(); await this.jobOfferLanguagesRepository.SaveChangesAsync(); await this.jobOfferJobTypesRepository.SaveChangesAsync(); return(offer.Id); } catch (Exception) { return(null); } }
public async Task <string> UpdateAsync(EditViewModel model, string employerId) { var jobOffer = this.jobOffersRepository .All() .Where(jo => jo.Id == model.JobOfferDetails.Id) .FirstOrDefault(); if (jobOffer == null) { return(null); } var input = model.JobOfferDetails; jobOffer.Position = input.Position; jobOffer.Description = input.SanitizedDescription; jobOffer.Salary = input.Salary; jobOffer.City = input.City; jobOffer.OfficeAddress = input.OfficeAddress; jobOffer.JobSectorId = input.JobSectorId; jobOffer.JobLevelId = input.JobLevelId; var jobOfferSkillsIds = this.jobOfferSkillsRepository .AllAsNoTracking() .Where(jos => jos.JobOfferId == jobOffer.Id) .Select(jos => jos.SkillId) .ToList(); // Add new ones foreach (var skillId in input.SkillsIds) { if (!jobOfferSkillsIds.Contains(skillId)) { var jobOfferSkill = new JobOfferSkill { SkillId = skillId, JobOfferId = jobOffer.Id, CreatedOn = DateTime.UtcNow, }; await this.jobOfferSkillsRepository.AddAsync(jobOfferSkill); } } // Delete old ones foreach (var jobOfferSkillId in jobOfferSkillsIds) { if (!input.SkillsIds.Contains(jobOfferSkillId)) { var jobOfferSkill = this.jobOfferSkillsRepository .All() .Where(jos => jos.SkillId == jobOfferSkillId && jos.JobOfferId == jobOffer.Id) .FirstOrDefault(); this.jobOfferSkillsRepository.Delete(jobOfferSkill); } } var jobOfferLanguagesIds = this.jobOfferLanguagesRepository .AllAsNoTracking() .Where(jol => jol.JobOfferId == jobOffer.Id) .Select(jol => jol.LanguageId) .ToList(); // Add new ones foreach (var languageId in input.LanguagesIds) { if (!jobOfferLanguagesIds.Contains(languageId)) { var jobOfferLanguage = new JobOfferLanguage { LanguageId = languageId, JobOfferId = jobOffer.Id, CreatedOn = DateTime.UtcNow, }; await this.jobOfferLanguagesRepository.AddAsync(jobOfferLanguage); } } // Delete old ones foreach (var jobOfferLanguageId in jobOfferLanguagesIds) { if (!input.LanguagesIds.Contains(jobOfferLanguageId)) { var jobOfferLanguage = this.jobOfferLanguagesRepository .All() .Where(jos => jos.LanguageId == jobOfferLanguageId && jos.JobOfferId == jobOffer.Id) .FirstOrDefault(); this.jobOfferLanguagesRepository.Delete(jobOfferLanguage); } } var jobOfferTypesIds = this.jobOfferJobTypesRepository .AllAsNoTracking() .Where(jojt => jojt.JobOfferId == jobOffer.Id) .Select(jojt => jojt.JobTypeId) .ToList(); // Add new ones foreach (var jobTypeId in input.JobTypesIds) { if (!jobOfferTypesIds.Contains(jobTypeId)) { var jobOfferType = new JobOfferJobType { JobTypeId = jobTypeId, JobOfferId = jobOffer.Id, CreatedOn = DateTime.UtcNow, }; await this.jobOfferJobTypesRepository.AddAsync(jobOfferType); } } // Delete old ones foreach (var jobOfferTypeId in jobOfferTypesIds) { if (!input.JobTypesIds.Contains(jobOfferTypeId)) { var jobOfferJobType = this.jobOfferJobTypesRepository .All() .Where(jos => jos.JobTypeId == jobOfferTypeId && jos.JobOfferId == jobOffer.Id) .FirstOrDefault(); this.jobOfferJobTypesRepository.Delete(jobOfferJobType); } } try { this.jobOffersRepository.Update(jobOffer); await this.jobOffersRepository.SaveChangesAsync(); await this.jobOfferSkillsRepository.SaveChangesAsync(); await this.jobOfferLanguagesRepository.SaveChangesAsync(); await this.jobOfferJobTypesRepository.SaveChangesAsync(); return(jobOffer.Id); } catch (Exception) { return(null); } }