public JobGroupController()
 {
     this.repo = new JobGroupRepository();
 }
        public IHttpActionResult UserProfile(long id, string data)
        {
            try
            {
                UserRepository userRepo = new UserRepository();
                Applicant app = userRepo.GetApplicant(id);
                JobRepository jobRepo = new JobRepository();

                UserCollectionsViewModel model = new UserCollectionsViewModel();

                switch (data)
                {
                    case "educ":
                        model.educ = userRepo.GetListEducationalInfo(id);
                        break;

                    case "basic":
                        model.basicInfo = userRepo.GetBasicInfo(id);
                        break;

                    case "saved":
                        model.savedJobs = jobRepo.GetSavedJobs(id);
                        break;

                    case "exp":
                        model.exp = userRepo.GetExperience(userRepo.GetApplicant(id).resume_id);
                        break;

                    default:
                        model.initialInfo = userRepo.GetInitialInfo(id);
                        break;
                }

                SelectRepository selectRepo = new SelectRepository();

                model.jobSearch = new JobFilterCollectionViewModel();
                model.jobSearch.workbases = selectRepo.Workbases();
                model.jobSearch.specializations = selectRepo.Specializations();

                ContentRepository contentRepo = new ContentRepository();

                model.news = contentRepo.GetLatest("news", 2);
                model.partners = contentRepo.GetLatest("partners", 6);

                SettingsRepository settingsRepo = new SettingsRepository();
                model.fb = JsonConvert.DeserializeObject<FacebookViewModel>(settingsRepo.GetSetting("fb").value);

                model.hotJobs = jobRepo.GetHotJobs();
                model.recommendedJobs = jobRepo.GetRecommendedJobs(app);
                model.savedJobsCount = jobRepo.GetSavedJobs(app.id).Count;

                JobGroupRepository groupRepo = new JobGroupRepository();
                List<JobGroupViewModel> groups = groupRepo.GetList(string.Empty, "sequence_asc", true);

                foreach (var g in groups)
                {
                    g.jobs = jobRepo.GetByGroup(g.id);
                    model.jobGroups.Add(g);
                }

                model.promotions = userRepo.GetPromotions(app.resume_id);
                model.initialInfo = userRepo.GetInitialInfo(id);
                model.photo = app.photo;

                model.interview = userRepo.GetInterviewStatus(app.role_id);

                return Ok(model);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }
        public IHttpActionResult SingleJobWithOptions(long id)
        {
            try
            {
                JobRepository repo = new JobRepository();
                JobGroupRepository groupRepo = new JobGroupRepository();
                SelectRepository selectRepo = new SelectRepository();

                JobViewModel model = repo.GetSingle(id);

                if (model.id == 0)
                {
                    throw new Exception(Error.CONTENT_NOT_FOUND);
                }

                model.workbases = selectRepo.Workbases();
                model.groups = groupRepo.GetList(string.Empty, string.Empty, null);

                return Ok(model);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }
        public IHttpActionResult JobSearch(string sort, string title, string group, long? specialization, string workbase, bool? entryLevel, bool? hot)
        {
            try
            {
                JobRepository jobRepo = new JobRepository();
                JobGroupRepository groupRepo = new JobGroupRepository();
                SelectRepository selectRepo = new SelectRepository();

                JobFilterCollectionViewModel model = new JobFilterCollectionViewModel();

                model.specializations = selectRepo.Specializations();
                model.workbases = selectRepo.Workbases();
                model.groups = groupRepo.GetList("", "", null);
                model.jobs = jobRepo.GetList(sort, title, string.Empty, group, specialization, workbase, entryLevel, hot);

                return Ok(model);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }
        public IHttpActionResult Home()
        {
            try
            {
                SelectRepository selectRepo = new SelectRepository();
                SlideRepository slideRepo = new SlideRepository();
                JobGroupRepository groupRepo = new JobGroupRepository();
                JobRepository jobRepo = new JobRepository();

                HomeCollectionViewModel model = new HomeCollectionViewModel();

                model.specializations = selectRepo.Specializations();
                model.suffixes = selectRepo.Suffixes();
                model.workbases = selectRepo.Workbases();

                model.slides = slideRepo.GetList();

                List<JobGroupViewModel> groups = groupRepo.GetList(string.Empty, "sequence_asc", true);

                foreach (var g in groups)
                {
                    g.jobs = jobRepo.GetByGroup(g.id);
                    model.jobGroups.Add(g);
                }

                return Ok(model);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }
        public IHttpActionResult GroupWorkbase()
        {
            try
            {
                SelectRepository selectRepo = new SelectRepository();
                JobGroupRepository groupRepo = new JobGroupRepository();

                GroupWorkbaseViewModel model = new GroupWorkbaseViewModel();

                model.workbases = selectRepo.Workbases();
                model.groups = groupRepo.GetList(string.Empty, string.Empty, null);

                return Ok(model);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }