Skip to content

Commit

Permalink
Implement new model types (#44)
Browse files Browse the repository at this point in the history
  • Loading branch information
ElanHasson authored Feb 12, 2022
1 parent 72125a3 commit de5852e
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,10 @@ public class SaveScheduledTask
/// </summary>
[Display(Name = "Enabled", Description = "Determines if the task is schedulable.", ShortName = "Enabled")]
public bool IsEnabled { get; set; }

public DateTime? LastRunAt { get; set; }
public DateTime? NextRunAt { get; set; }
public string CronExpression { get; set; } = "* * * * *";


}
6 changes: 6 additions & 0 deletions Source/WebScheduler.Api.Models/ViewModels/ScheduledTask.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,10 @@ public class ScheduledTask
/// </summary>
/// <example>/scheduledtask/1</example>
public Uri Url { get; set; } = default!;

public DateTime? LastRunAt { get; set; }
public DateTime? NextRunAt { get; set; }
public DateTime ModifiedAt{ get; set; }
public DateTime CreatedAt { get; set; }
public string CronExpression { get; set; } = "* * * * *";
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ public async Task<IActionResult> ExecuteAsync(Guid scheduledTaskId, Cancellation
var httpContext = this.actionContextAccessor.ActionContext!.HttpContext;
var ifModifiedSince = httpContext.Request.Headers.IfModifiedSince;
if (ifModifiedSince.Count > 0 &&
DateTimeOffset.TryParse(ifModifiedSince, out var ifModifiedSinceDateTime) &&
(ifModifiedSinceDateTime >= scheduledTask.Modified))
DateTime.TryParse(ifModifiedSince, out var ifModifiedSinceDateTime) &&
(ifModifiedSinceDateTime >= scheduledTask.ModifiedAt))
{
return new StatusCodeResult(StatusCodes.Status304NotModified);
}

var scheduledTaskViewModel = this.scheduledTaskMapper.Map(scheduledTask);
httpContext.Response.Headers.LastModified = scheduledTask.Modified.ToString("R", CultureInfo.InvariantCulture);
httpContext.Response.Headers.LastModified = scheduledTask.ModifiedAt.ToString("R", CultureInfo.InvariantCulture);

return new OkObjectResult(scheduledTaskViewModel);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public async Task<IActionResult> ExecuteAsync(PageOptions pageOptions, Cancellat
return new NotFoundResult();
}

var (startCursor, endCursor) = Cursor.GetFirstAndLastCursor(scheduledTasks, x => x.Created);
var (startCursor, endCursor) = Cursor.GetFirstAndLastCursor(scheduledTasks, x => x.CreatedAt);
var scheduledTaskViewModels = this.scheduledTaskMapper.MapList(scheduledTasks);

var collection = new PageResults<ScheduledTask>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ public void Map(GuidIdWrapper<ScheduledTaskMetadata> source, Models.ScheduledTas
destination.IsEnabled = source.Value.IsEnabled;
destination.Description = source.Value.Description;
destination.Name = source.Value.Name;
destination.CreatedAt = source.Value.CreatedAt;
destination.ModifiedAt = source.Value.ModifiedAt;
destination.CronExpression = source.Value.CronExpression;
destination.NextRunAt = source.Value.NextRunAt;
destination.LastRunAt = source.Value.LastRunAt;
destination.Url = new Uri(this.linkGenerator.GetUriByRouteValues(
this.httpContextAccessor.HttpContext!,
ScheduledTasksControllerRoute.GetScheduledTask,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public void Map(Models.ScheduledTask source, SaveScheduledTask destination)
destination.IsEnabled = source.IsEnabled;
destination.Description = source.Description;
destination.Name = source.Name;
destination.CronExpression = source.CronExpression;
}

public void Map(SaveScheduledTask source, Models.ScheduledTask destination)
Expand All @@ -27,13 +28,13 @@ public void Map(SaveScheduledTask source, Models.ScheduledTask destination)

var now = this.clockService.UtcNow;

if (destination.Created == DateTimeOffset.MinValue)
if (destination.CreatedAt == DateTime.MinValue)
{
destination.Created = now;
destination.CreatedAt = now;
}
destination.IsEnabled = source.IsEnabled;
destination.Description = source.Description;
destination.Name = source.Name;
destination.Modified = now;
destination.CronExpression = source.CronExpression;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ public void Map(Models.ScheduledTask source, ScheduledTask destination)
destination.IsEnabled = source.IsEnabled;
destination.Description = source.Description;
destination.Name = source.Name;
destination.CreatedAt= source.CreatedAt;
destination.ModifiedAt = source.ModifiedAt;
destination.CronExpression = source.CronExpression;
destination.NextRunAt = source.NextRunAt;
destination.LastRunAt = source.LastRunAt;
destination.Url = new Uri(this.linkGenerator.GetUriByRouteValues(
this.httpContextAccessor.HttpContext!,
ScheduledTasksControllerRoute.GetScheduledTask,
Expand Down
7 changes: 5 additions & 2 deletions Source/WebScheduler.Api/Models/ScheduledTask.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ public class ScheduledTask
{
public Guid ScheduledTaskId { get; set; }

public DateTimeOffset Created { get; set; }
public DateTime CreatedAt { get; set; }

public DateTimeOffset Modified { get; set; }
public DateTime ModifiedAt { get; set; }
/// <summary>
/// The name of the scheduled task.
/// </summary>
Expand All @@ -29,4 +29,7 @@ public class ScheduledTask
/// </summary>
/// <example>/scheduledtask/1</example>
public Uri Url { get; set; } = default!;
public DateTime? LastRunAt { get; set; }
public DateTime? NextRunAt { get; set; }
public string CronExpression { get; set; } = "* * * * *";
}
21 changes: 15 additions & 6 deletions Source/WebScheduler.Api/Repositories/ScheduledTaskRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,11 @@ public async Task<ScheduledTask> AddAsync(ScheduledTask scheduledTask, Cancellat
Description = scheduledTask.Description,
IsEnabled = scheduledTask.IsEnabled,
Name = scheduledTask.Name,
Created = scheduledTask.Created,
Modified = scheduledTask.Modified,
CreatedAt = scheduledTask.CreatedAt,
ModifiedAt = scheduledTask.ModifiedAt,
LastRunAt = scheduledTask.LastRunAt,
NextRunAt = scheduledTask.NextRunAt,
CronExpression = scheduledTask.CronExpression,
}).ConfigureAwait(false);

return scheduledTask;
Expand All @@ -50,12 +53,15 @@ public async Task<ScheduledTask> GetAsync(Guid scheduledTaskId, CancellationToke
var result = await this.clusterClient.GetGrain<IScheduledTaskGrain>(scheduledTaskId.ToString()).GetAsync().ConfigureAwait(false);
return new()
{
Created = result.Created,
Modified = result.Modified,
CreatedAt = result.CreatedAt,
ModifiedAt = result.ModifiedAt,
Description = result.Description,
Name = result.Name,
IsEnabled = result.IsEnabled,
ScheduledTaskId = scheduledTaskId,
LastRunAt = result.LastRunAt,
NextRunAt = result.NextRunAt,
CronExpression = result.CronExpression,
};
}

Expand Down Expand Up @@ -95,11 +101,14 @@ Created varchar(100) PATH '$.created' DEFAULT '0' ON EMPTY
}
buffer.Add(new()
{
Created = result.Created,
Modified = result.Modified,
CreatedAt = result.CreatedAt,
ModifiedAt = result.ModifiedAt,
Description = result.Description,
Name = result.Name,
IsEnabled = result.IsEnabled,
LastRunAt = result.LastRunAt,
NextRunAt = result.NextRunAt,
CronExpression = result.CronExpression,
ScheduledTaskId = reader.GetGuid(0),
});
}
Expand Down
2 changes: 1 addition & 1 deletion Source/WebScheduler.Api/WebScheduler.Api.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="6.0.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="6.2.3" />
<PackageReference Include="WebScheduler.Abstractions" Version="0.1.10" />
<PackageReference Include="WebScheduler.Abstractions" Version="0.1.12" />
<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />
<PackageReference Include="Serilog.Enrichers.Environment" Version="2.2.0" />
Expand Down

0 comments on commit de5852e

Please sign in to comment.