/// <inheritdoc />
        /// <summary>
        /// Removes the specified job from the repository.
        /// </summary>
        /// <param name="id">The id of the job to remove.</param>
        /// <returns></returns>
        public async Task Remove(string id)
        {
            JobInstanceEntity entity = await _context.JobInstances.FirstAsync(t => t.Id.Equals(id));

            _context.JobInstances.Remove(entity);

            await _context.SaveChangesAsync();
        }
        /// <inheritdoc />
        /// <summary>
        /// Adds the specified job instance.
        /// </summary>
        /// <param name="jobInstance">The job instance.</param>
        /// <returns></returns>
        public async Task <JobInstanceEntity> Add(JobInstanceEntity jobInstance)
        {
            await _context.JobInstances.AddAsync(jobInstance);

            await _context.SaveChangesAsync();

            return(jobInstance);
        }
        /// <inheritdoc />
        /// <summary>
        /// Updates the specified job instance.
        /// </summary>
        /// <param name="entity">The entity.</param>
        /// <returns></returns>
        public async Task <JobInstanceEntity> Update(JobInstanceEntity entity)
        {
            JobInstanceEntity currentEntity = await Find(entity.Id);

            _context.JobInstances.Update(currentEntity);

            await _context.SaveChangesAsync();

            return(entity);
        }
        /// <inheritdoc />
        /// <summary>
        /// Gets the first job instance available.
        /// </summary>
        /// <param name="agentId">The agent identifier.</param>
        /// <returns>
        /// <see cref="T:YellowJacket.Dashboard.Entities.JobInstanceEntity" />.
        /// </returns>
        public async Task <JobInstanceEntity> GetFirstAvailable(string agentId)
        {
            using (await _lock.LockAsync())
            {
                JobInstanceEntity entity = await _context.JobInstances
                                           .OrderBy(x => x.CreatedOn)
                                           .FirstOrDefaultAsync(x => x.Status == JobInstanceStatus.New.ToString());

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

                entity.AgentId = agentId;

                entity.Status = JobInstanceStatus.InProgress.ToString();

                await Update(entity);

                return(entity);
            }
        }