Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }