private async Task <bool> HasRun(IOneTimeJob job, CancellationToken cancellationToken)
        {
            var sql = "SELECT COUNT([Id]) AS Count FROM [dbo].[Datasweep] WHERE [Id] = @id";

            var count = await _dataSession.Sql(sql)
                        .Parameter("@id", job.Id)
                        .QueryValueAsync <int>(cancellationToken);

            return(count > 0);
        }
        private async Task MarkDone(IOneTimeJob job, CancellationToken cancellationToken)
        {
            var jobType = job.GetType().Name;

            var sql = "INSERT [dbo].[Datasweep] ([Id], [Description]) VALUES (@id, @description)";

            var result = await _dataSession.Sql(sql)
                         .Parameter("@id", job.Id)
                         .Parameter("@description", $"One-Time Job {jobType}")
                         .ExecuteAsync(cancellationToken);
        }
        private async Task ProcessAsync(IOneTimeJob job, CancellationToken cancellationToken)
        {
            if (await HasRun(job, cancellationToken))
            {
                return;
            }

            await job.ExecuteAsync(cancellationToken);

            await MarkDone(job, cancellationToken);
        }