* Maintain FaKrosno api to handle Hangfire
* Added checking of missing EdiCo based on EdiCoTranslate and send email every 30 minutes * Added Admin Scheduler view
This commit is contained in:
16
OrdersManagementDataModel/Dtos/TaskSchedulerDto.cs
Normal file
16
OrdersManagementDataModel/Dtos/TaskSchedulerDto.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using Hangfire.Storage;
|
||||
|
||||
namespace OrdersManagementDataModel.Dtos;
|
||||
|
||||
public class TaskSchedulerDto
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Path { get; set; }
|
||||
public string CronOptions { get; set; }
|
||||
public DateTime CreateDate { get; set; }
|
||||
public DateTime ActiveFrom { get; set; }
|
||||
public DateTime? ActiveUntil { get; set; }
|
||||
|
||||
public JobData? JobDetails { get; set; }
|
||||
}
|
||||
13
OrdersManagementDataModel/Entities/TaskScheduler.cs
Normal file
13
OrdersManagementDataModel/Entities/TaskScheduler.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
namespace OrdersManagementDataModel.Entities;
|
||||
|
||||
public class TaskScheduler
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public Guid RowPointer { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Path { get; set; }
|
||||
public string CronOptions { get; set; }
|
||||
public DateTime CreateDate { get; set; }
|
||||
public DateTime ActiveFrom { get; set; }
|
||||
public DateTime? ActiveUntil { get; set; }
|
||||
}
|
||||
12
OrdersManagementDataModel/MappingProfile.cs
Normal file
12
OrdersManagementDataModel/MappingProfile.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using AutoMapper;
|
||||
using OrdersManagementDataModel.Dtos;
|
||||
|
||||
namespace OrdersManagementDataModel;
|
||||
|
||||
public class MappingProfile : Profile
|
||||
{
|
||||
public MappingProfile()
|
||||
{
|
||||
CreateMap<TaskScheduler, TaskSchedulerDto>().ReverseMap();
|
||||
}
|
||||
}
|
||||
32
OrdersManagementDataModel/OrdersManagementDataModel.csproj
Normal file
32
OrdersManagementDataModel/OrdersManagementDataModel.csproj
Normal file
@@ -0,0 +1,32 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
||||
<PackageReference Include="Hangfire.Core" Version="1.8.17" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="appsettings_OrdersManagement.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
38
OrdersManagementDataModel/OrdersManagementDbContext.cs
Normal file
38
OrdersManagementDataModel/OrdersManagementDbContext.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using TaskScheduler = OrdersManagementDataModel.Entities.TaskScheduler;
|
||||
|
||||
namespace OrdersManagementDataModel;
|
||||
|
||||
public class OrdersManagementDbContext : DbContext
|
||||
{
|
||||
public OrdersManagementDbContext(DbContextOptions<OrdersManagementDbContext> options)
|
||||
: base(options)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
var configuration = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile("appsettings.json")
|
||||
.Build();
|
||||
|
||||
var connectionString = configuration.GetConnectionString("OrdersManagementConnection");
|
||||
optionsBuilder.UseSqlServer(connectionString, options => options.CommandTimeout(300));
|
||||
}
|
||||
|
||||
public DbSet<TaskScheduler> TaskSchedulers { get; set; }
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<TaskScheduler>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id);
|
||||
entity.ToTable("TaskScheduler");
|
||||
entity.Property(e => e.RowPointer).HasDefaultValueSql("newid()");
|
||||
entity.Property(e => e.CreateDate).HasDefaultValueSql("getdate()");
|
||||
entity.Property(e => e.ActiveFrom).HasDefaultValueSql("getdate()");
|
||||
entity.Property(e => e.ActiveUntil).IsRequired(false); });
|
||||
}
|
||||
}
|
||||
19
OrdersManagementDataModel/Queries/OrdersManagementQueries.cs
Normal file
19
OrdersManagementDataModel/Queries/OrdersManagementQueries.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using OrdersManagementDataModel.Dtos;
|
||||
|
||||
namespace OrdersManagementDataModel.Queries;
|
||||
|
||||
public static class OrdersManagementQueries
|
||||
{
|
||||
public static readonly Func<OrdersManagementDbContext, IEnumerable<TaskSchedulerDto>> GetSchedulers =
|
||||
EF.CompileQuery((OrdersManagementDbContext context) => context.TaskSchedulers.Select(x => new TaskSchedulerDto
|
||||
{
|
||||
Id = x.Id,
|
||||
Name = x.Name,
|
||||
Path = x.Path,
|
||||
CronOptions = x.CronOptions,
|
||||
CreateDate = x.CreateDate,
|
||||
ActiveFrom = x.ActiveFrom,
|
||||
ActiveUntil = x.ActiveUntil
|
||||
}));
|
||||
}
|
||||
12
OrdersManagementDataModel/Services/ITaskSchedulerService.cs
Normal file
12
OrdersManagementDataModel/Services/ITaskSchedulerService.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using OrdersManagementDataModel.Dtos;
|
||||
|
||||
namespace OrdersManagementDataModel.Services;
|
||||
|
||||
public interface ITaskSchedulerService
|
||||
{
|
||||
Task<IEnumerable<TaskSchedulerDto>> GetTaskSchedulers();
|
||||
Task<TaskSchedulerDto?> GetTaskSchedulerByTaskName(string taskName);
|
||||
Task<int> AddTaskScheduler(TaskSchedulerDto taskSchedulerDto);
|
||||
Task<int> UpdateTaskScheduler(TaskSchedulerDto taskSchedulerDto);
|
||||
Task<int> DeleteTaskScheduler(Guid id);
|
||||
}
|
||||
57
OrdersManagementDataModel/Services/TaskSchedulerService.cs
Normal file
57
OrdersManagementDataModel/Services/TaskSchedulerService.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using AutoMapper;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using OrdersManagementDataModel.Dtos;
|
||||
using OrdersManagementDataModel.Queries;
|
||||
using TaskScheduler = OrdersManagementDataModel.Entities.TaskScheduler;
|
||||
|
||||
namespace OrdersManagementDataModel.Services;
|
||||
|
||||
public class TaskSchedulerService(OrdersManagementDbContext context, IMapper mapper) : ITaskSchedulerService
|
||||
{
|
||||
public async Task<IEnumerable<TaskSchedulerDto>> GetTaskSchedulers()
|
||||
{
|
||||
List<TaskSchedulerDto> taskSchedulers =
|
||||
(await Task.FromResult(OrdersManagementQueries.GetSchedulers(context))).ToList();
|
||||
|
||||
return taskSchedulers;
|
||||
}
|
||||
|
||||
public async Task<TaskSchedulerDto?> GetTaskSchedulerById(Guid id)
|
||||
{
|
||||
TaskSchedulerDto? taskScheduler = await context.TaskSchedulers.Where(x => x.RowPointer == id)
|
||||
.Select(x => mapper.Map<TaskSchedulerDto>(x)).FirstOrDefaultAsync();
|
||||
return taskScheduler;
|
||||
}
|
||||
|
||||
public async Task<TaskSchedulerDto?> GetTaskSchedulerByTaskName(string taskName)
|
||||
{
|
||||
TaskSchedulerDto? taskScheduler = await context.TaskSchedulers.Where(x => x.Name == taskName)
|
||||
.Select(x => mapper.Map<TaskSchedulerDto>(x)).FirstOrDefaultAsync();
|
||||
return taskScheduler;
|
||||
}
|
||||
|
||||
public async Task<int> AddTaskScheduler(TaskSchedulerDto taskSchedulerDto)
|
||||
{
|
||||
TaskScheduler taskScheduler = mapper.Map<TaskScheduler>(taskSchedulerDto);
|
||||
context.TaskSchedulers.Add(taskScheduler);
|
||||
return await context.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public async Task<int> UpdateTaskScheduler(TaskSchedulerDto taskSchedulerDto)
|
||||
{
|
||||
TaskScheduler taskScheduler = mapper.Map<TaskScheduler>(taskSchedulerDto);
|
||||
context.TaskSchedulers.Update(taskScheduler);
|
||||
return await context.SaveChangesAsync();
|
||||
}
|
||||
|
||||
public async Task<int> DeleteTaskScheduler(Guid id)
|
||||
{
|
||||
TaskScheduler? taskScheduler =
|
||||
await context.TaskSchedulers.Where(x => x.RowPointer == id).FirstOrDefaultAsync() ?? null;
|
||||
|
||||
if (taskScheduler == null) return 0;
|
||||
|
||||
context.TaskSchedulers.Remove(taskScheduler);
|
||||
return await context.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"OrdersManagementConnection": "\"OrdersManagementConnection\": \"Server=192.168.0.7;Database=OrdersManagement;User Id=sa;Password=Tetum#2021!;TrustServerCertificate=true\";"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user