Пример #1
0
        public async Task <IEnumerable <JobServiceModel> > GetJobsAsync(
            JobType?jobType,
            JobStatus?jobStatus,
            int?pageSize,
            string queryFrom,
            string queryTo)
        {
            var from = DateTimeOffsetExtension.Parse(queryFrom, DateTimeOffset.MinValue);
            var to   = DateTimeOffsetExtension.Parse(queryTo, DateTimeOffset.MaxValue);
            var data = await this.client.GetAllAsync(DEVICE_JOBS_COLLECTION_ID);

            var Coverteddata = data.Items.Select(CreatejobServiceModel);
            //var query = this.jobClient.CreateQuery(
            //    JobServiceModel.ToJobTypeAzureModel(jobType),
            //    JobServiceModel.ToJobStatusAzureModel(jobStatus),
            //    pageSize);

            var results = new List <JobServiceModel>();

            results.AddRange(Coverteddata
                             .Where(j => j.CreatedTimeUtc >= from && j.CreatedTimeUtc <= to &&
                                    (jobType == null || j.Type.ToString() == JobServiceModel.ToJobTypeAzureModel(jobType).ToString()) &&
                                    (jobStatus == null || j.Status.ToString() == JobServiceModel.ToJobStatusAzureModel(jobStatus).ToString()))
                             .Select(r => r));
            //while (query.HasMoreResults)
            //{
            //    var jobs = await query.GetNextAsJobResponseAsync();

            //}

            return(results);
        }
        public async Task <IEnumerable <JobServiceModel> > GetJobsAsync(
            JobType?jobType,
            JobStatus?jobStatus,
            int?pageSize,
            string queryFrom,
            string queryTo)
        {
            var from = DateTimeOffsetExtension.Parse(queryFrom, DateTimeOffset.MinValue);
            var to   = DateTimeOffsetExtension.Parse(queryTo, DateTimeOffset.MaxValue);

            var query = this.tenantConnectionHelper.GetJobClient().CreateQuery(
                JobServiceModel.ToJobTypeAzureModel(jobType),
                JobServiceModel.ToJobStatusAzureModel((Microsoft.Azure.Devices.JobStatus?)jobStatus),
                pageSize);

            var results = new List <JobServiceModel>();

            while (query.HasMoreResults)
            {
                var jobs = await query.GetNextAsJobResponseAsync();

                results.AddRange(jobs
                                 .Where(j => j.CreatedTimeUtc >= from && j.CreatedTimeUtc <= to)
                                 .Select(r => new JobServiceModel(r)));
            }

            return(results);
        }
Пример #3
0
        public async Task UpdateAsync_WithValidModel_WorksCorrectly()
        {
            // Arrange
            const string expectedResult = "TestJobTitle";

            var context = new JobFinderDbContext(new DbContextOptionsBuilder <JobFinderDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);

            var model = new Job()
            {
                Location    = "Test Location",
                Description = "Random description",
                EndDate     = DateTime.UtcNow,

                Company = new Company()
                {
                    CompanyName = "Test Company",
                    User        = new User()
                    {
                        UserName = "******"
                    },
                },
                Category = new Category()
                {
                    CategoryType = "NewCategory"
                },
                JobType = new JobType()
                {
                    Type = "NewType"
                }
            };

            await context.AddAsync(model);

            context.SaveChanges();

            var jobService = new JobService(new EfRepository <Company>(context),
                                            new EfRepository <Job>(context),
                                            new EfRepository <JobCandidate>(context),
                                            new EfRepository <User>(context),
                                            new EfRepository <JobSeeker>(context));

            var serviceModel = new JobServiceModel
            {
                Id          = model.Id,
                Title       = expectedResult,
                Location    = model.Location,
                Description = model.Description,
                EndDate     = model.EndDate
            };

            var result = await jobService.UpdateAsync(serviceModel);

            Assert.True(result);

            var actualResult = (await context.Jobs.SingleAsync(j => j.Id == model.Id)).Title;

            Assert.Equal(expectedResult, actualResult);
        }
Пример #4
0
        public async Task <int?> CreateAsync(JobServiceModel model)
        {
            if (!this.IsEntityStateValid(model))
            {
                return(null);
            }

            var company = await this.companyRepository.All()
                          .SingleOrDefaultAsync(c => c.User.UserName == model.Company.User.UserName);

            if (company == null)
            {
                return(null);
            }

            var job = Mapper.Map <Job>(model);

            job.Company = company;

            await this.jobsRepository.AddAsync(job);

            await this.jobsRepository.SaveChangesAsync();

            return(job.Id);
        }
Пример #5
0
        private JobServiceModel CreatejobServiceModel(ValueApiModel input)
        {
            JobServiceModel output = JsonConvert.DeserializeObject <JobServiceModel>(input.Data);

            output.JobId = input.objectid;
            return(output);
        }
Пример #6
0
        public async Task <bool> ApplyToJob(JobServiceModel jobServiceModel, string userName)
        {
            if (userName == null || jobServiceModel == null)
            {
                return(false);
            }

            var user = await this.usersRepository.All().SingleOrDefaultAsync(u => u.UserName == userName);

            if (user == null)
            {
                return(false);
            }

            var jobSeeker = (await this.candidatesRepository.All().Include(j => j.UserJobs)
                             .SingleOrDefaultAsync(j => j.User.UserName == userName));

            if (jobSeeker == null)
            {
                return(false);
            }

            var jobCandidate = new JobCandidate
            {
                JobSeekerId = jobSeeker.Id,
                JobId       = jobServiceModel.Id,
            };

            await this.jobCandidatesRepository.AddAsync(jobCandidate);

            await this.jobCandidatesRepository.SaveChangesAsync();

            return(true);
        }
Пример #7
0
        public async Task <bool> UpdateAsync(JobServiceModel model)
        {
            if (!this.IsEntityStateValid(model))
            {
                return(false);
            }

            var job = await this.jobsRepository.All().SingleOrDefaultAsync(c => c.Id == model.Id);

            if (job == null)
            {
                return(false);
            }

            job.Title            = model.Title;
            job.Location         = model.Location;
            job.CategoryId       = model.CategoryId;
            job.JobTypeId        = model.JobTypeId;
            job.Description      = model.Description;
            job.Responsibilities = model.Responsibilities;
            job.Benefits         = model.Benefits;
            job.Education        = model.Education;
            job.EndDate          = model.EndDate;
            job.Qualification    = model.Qualification;

            this.jobsRepository.Update(job);
            await this.jobsRepository.SaveChangesAsync();

            return(true);
        }
Пример #8
0
        public async Task CreateAsync_WithValidModel_WorksCorrectly()
        {
            var context = new JobFinderDbContext(new DbContextOptionsBuilder <JobFinderDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);

            var companyModel = new Company()
            {
                CompanyName = "Test Company Name",
                User        = new User()
                {
                    UserName = "******"
                }
            };

            await context.AddAsync(companyModel);

            context.SaveChanges();

            var serviceModel = new JobServiceModel()
            {
                Title       = "Test title",
                Location    = "Test Location",
                Description = "Random description",
                EndDate     = DateTime.UtcNow,

                Company = new CompanyServiceModel()
                {
                    User = new UserServiceModel()
                    {
                        UserName = companyModel.User.UserName
                    },
                }
            };

            var jobService = new JobService(new EfRepository <Company>(context),
                                            new EfRepository <Job>(context),
                                            new EfRepository <JobCandidate>(context),
                                            new EfRepository <User>(context),
                                            new EfRepository <JobSeeker>(context));

            var result = await jobService.CreateAsync(serviceModel);

            var dbModel = context.Jobs.SingleOrDefault();

            Assert.NotNull(dbModel);

            Assert.Equal(result, dbModel.Id);
        }
Пример #9
0
        public async Task <JobServiceModel> ScheduleDeviceMethodAsync(
            string jobId,
            string queryCondition,
            MethodParameterServiceModel parameter,
            DateTimeOffset startTimeUtc,
            long maxExecutionTimeInSeconds)
        {
            //var result = await this.jobClient.ScheduleDeviceMethodAsync(
            //    jobId, queryCondition,
            //    parameter.ToAzureModel(),
            //    startTimeUtc.DateTime,
            //    maxExecutionTimeInSeconds);
            var devicelistString = queryCondition.Replace("deviceId in", "").Trim();
            var devicelist       = JsonConvert.DeserializeObject <List <dynamic> >(devicelistString);
            List <DeviceJobServiceModel> devicemodellist = new List <DeviceJobServiceModel>();

            foreach (var item in devicelist)
            {
                DeviceJobServiceModel data = new DeviceJobServiceModel();
                data.DeviceId           = item;
                data.Status             = DeviceJobStatus.Scheduled;
                data.CreatedDateTimeUtc = DateTime.UtcNow;
                devicemodellist.Add(data);
            }
            var             devicecount = devicemodellist.Count();
            JobServiceModel json        = new JobServiceModel();

            json.CreatedTimeUtc  = DateTime.UtcNow;
            json.Devices         = devicemodellist.ToList();
            json.Status          = JobStatus.Scheduled;
            json.MethodParameter = parameter;
            json.Type            = JobType.ScheduleUpdateTwin;
            JobStatistics ResultStatistics = new JobStatistics();

            ResultStatistics.DeviceCount    = devicecount;
            ResultStatistics.SucceededCount = 0;
            ResultStatistics.FailedCount    = 0;
            ResultStatistics.PendingCount   = 0;
            ResultStatistics.RunningCount   = 0;
            json.ResultStatistics           = ResultStatistics;
            var value = JsonConvert.SerializeObject(json, Formatting.Indented, new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            });
            var result = await this.client.CreateAsync(DEVICE_JOBS_COLLECTION_ID, value);

            var Job = this.CreatejobServiceModel(result);

            return(Job);
        }
Пример #10
0
        public async Task CreateAsync_WithInvalidModel_ReturnsFalse()
        {
            var context = new JobFinderDbContext(new DbContextOptionsBuilder <JobFinderDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);

            var companyModel = new Company()
            {
                CompanyName = "Test Company Name",
                User        = new User()
                {
                    UserName = "******"
                }
            };

            await context.AddAsync(companyModel);

            context.SaveChanges();

            var serviceModel = new JobServiceModel()
            {
                Location    = "Test Location",
                Description = "Random description",
                EndDate     = DateTime.UtcNow,

                Company = new CompanyServiceModel()
                {
                    User = new UserServiceModel()
                    {
                        UserName = companyModel.User.UserName
                    },
                }
            };

            var jobService = new JobService(new EfRepository <Company>(context),
                                            new EfRepository <Job>(context),
                                            new EfRepository <JobCandidate>(context),
                                            new EfRepository <User>(context),
                                            new EfRepository <JobSeeker>(context));

            var result = await jobService.CreateAsync(serviceModel);

            Assert.Null(result);

            var dbModel = await context.JobSeekers.AnyAsync();

            Assert.False(dbModel);
        }
Пример #11
0
        public async Task UpdateAsync_WithNonExistentJob_WorksCorrectly()
        {
            var context = new JobFinderDbContext(new DbContextOptionsBuilder <JobFinderDbContext>()
                                                 .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                                 .Options);

            var model = new Job()
            {
                Location    = "Test Location",
                Description = "Random description",
                EndDate     = DateTime.UtcNow,

                Company = new Company()
                {
                    CompanyName = "Test Company",
                    User        = new User()
                    {
                        UserName = "******"
                    },
                },
                Category = new Category()
                {
                    CategoryType = "NewCategory"
                },
                JobType = new JobType()
                {
                    Type = "NewType"
                }
            };

            var jobService = new JobService(new EfRepository <Company>(context),
                                            new EfRepository <Job>(context),
                                            new EfRepository <JobCandidate>(context),
                                            new EfRepository <User>(context),
                                            new EfRepository <JobSeeker>(context));

            var serviceModel = new JobServiceModel
            {
                Id          = model.Id,
                Location    = model.Location,
                Description = model.Description,
                EndDate     = model.EndDate
            };

            var result = await jobService.UpdateAsync(serviceModel);

            Assert.False(result);
        }
Пример #12
0
        public async Task <bool> UpdateEmployeeJob(JobServiceModel job, SalaryServiceModel model)
        {
            try
            {
                _unitOfWork.BeginTransaction();

                var jobModel    = _mapper.Map <Job>(job);
                var updateModel = _mapper.Map <Salary>(model);

                var salaryHistoryRepo = _unitOfWork.GetRepository <SalaryHistory>();
                var employeeRepo      = _unitOfWork.GetRepository <Employee>();

                var employee = employeeRepo.GetById(updateModel.Employee.Id);
                employee.Job = jobModel;

                var salaryHistory = await PrepareSalaryHistory(model);

                var jobHistory = new JobHistory
                {
                    DateChanged     = salaryHistory.DateChanged,
                    EmployeeId      = employee.Id,
                    FromDate        = salaryHistory.FromDate,
                    ToDate          = salaryHistory.ToDate,
                    Job             = jobModel,
                    SalaryHistoryId = salaryHistory.SalaryId
                };

                await _unitOfWork.GetRepository <Salary>().UpdateAsync(updateModel);

                await salaryHistoryRepo.AddItemAsync(salaryHistory);

                await employeeRepo.UpdateAsync(employee);

                await _unitOfWork.GetRepository <JobHistory>().AddItemAsync(jobHistory);

                await _unitOfWork.CommitAsync();

                return(true);
            }
            catch
            {
                await _unitOfWork.RollbackAsync();

                throw;
            }
        }
Пример #13
0
 public JobApiModel(JobServiceModel serviceModel)
 {
     if (serviceModel != null)
     {
         this.JobId                     = serviceModel.JobId;
         this.QueryCondition            = serviceModel.QueryCondition;
         this.CreatedTimeUtc            = serviceModel.CreatedTimeUtc;
         this.StartTimeUtc              = serviceModel.StartTimeUtc;
         this.EndTimeUtc                = serviceModel.EndTimeUtc;
         this.MaxExecutionTimeInSeconds = serviceModel.MaxExecutionTimeInSeconds;
         this.Type             = serviceModel.Type;
         this.Status           = serviceModel.Status;
         this.MethodParameter  = serviceModel.MethodParameter == null ? null : new MethodParameterApiModel(serviceModel.MethodParameter);
         this.UpdateTwin       = serviceModel.UpdateTwin == null ? null : new JobUpdateTwinApiModel(null, serviceModel.UpdateTwin);
         this.FailureReason    = serviceModel.FailureReason;
         this.StatusMessage    = serviceModel.StatusMessage;
         this.ResultStatistics = serviceModel.ResultStatistics;
         this.Devices          = serviceModel.Devices?.Select(j => new DeviceJobApiModel(j));
     }
 }
Пример #14
0
        public async Task <bool> CreateJob(JobServiceModel model)
        {
            try
            {
                _unitOfWork.BeginTransaction();
                var createModel = _mapper.Map <Job>(model);

                await _unitOfWork.GetRepository <Job>().AddItemAsync(createModel);

                await _unitOfWork.CommitAsync();

                return(true);
            }
            catch
            {
                await _unitOfWork.RollbackAsync();

                throw;
            }
        }
Пример #15
0
        public async Task <JobServiceModel> ScheduleTwinUpdateAsync(
            string jobId,
            string queryCondition,
            TwinServiceModel twin,
            DateTimeOffset startTimeUtc,
            long maxExecutionTimeInSeconds)
        {
            //var result = await this.jobClient.ScheduleTwinUpdateAsync(
            //    jobId,
            //    queryCondition,
            //    twin.ToAzureModel(),
            //    startTimeUtc.DateTime,
            //    maxExecutionTimeInSeconds);


            var devicelistString = queryCondition.Replace("deviceId in", "").Trim();
            var devicelist       = JsonConvert.DeserializeObject <List <dynamic> >(devicelistString);
            List <DeviceJobServiceModel> devicemodellist = new List <DeviceJobServiceModel>();

            foreach (var item in devicelist)
            {
                DeviceJobServiceModel data = new DeviceJobServiceModel();
                data.DeviceId           = item;
                data.Status             = DeviceJobStatus.Scheduled;
                data.CreatedDateTimeUtc = DateTime.UtcNow;
                devicemodellist.Add(data);
            }
            var             devicecount = devicemodellist.Count();
            JobServiceModel json        = new JobServiceModel();

            json.CreatedTimeUtc = DateTime.UtcNow;
            json.Devices        = devicemodellist.ToList();
            json.Status         = JobStatus.Scheduled;
            json.UpdateTwin     = twin;
            json.Type           = JobType.ScheduleUpdateTwin;
            JobStatistics ResultStatistics = new JobStatistics();

            ResultStatistics.DeviceCount    = devicecount;
            ResultStatistics.SucceededCount = 0;
            ResultStatistics.FailedCount    = 0;
            ResultStatistics.PendingCount   = 0;
            ResultStatistics.RunningCount   = 0;
            json.ResultStatistics           = ResultStatistics;
            var value = JsonConvert.SerializeObject(json, Formatting.Indented, new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            });
            var result = await this.client.CreateAsync(DEVICE_JOBS_COLLECTION_ID, value);

            var Job = this.CreatejobServiceModel(result);
            // Update the deviceProperties cache, no need to wait
            var model = new DevicePropertyServiceModel();

            var tagRoot = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(twin.Tags)) as JToken;

            if (tagRoot != null)
            {
                model.Tags = new HashSet <string>(tagRoot.GetAllLeavesPath());
            }

            var reportedRoot = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(twin.ReportedProperties)) as JToken;

            if (reportedRoot != null)
            {
                model.Reported = new HashSet <string>(reportedRoot.GetAllLeavesPath());
            }
            var unused = deviceProperties.UpdateListAsync(model);

            return(Job);
        }
Пример #16
0
 public bool HasUserApplied(JobServiceModel jobServiceModel, string userName)
 {
     return(userName != null && jobServiceModel.JobCandidates.Any(j => j.JobSeeker.User.UserName == userName));
 }