* Created AzureDataModel

* Created Hangfire API
This commit is contained in:
2025-02-12 20:29:10 +01:00
parent 6800781fdb
commit e7342abadd
16 changed files with 414 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
<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="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_Azure.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,40 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using TaskScheduler = AzureDataModel.Entities.TaskScheduler;
namespace AzureDataModel;
public class AzureDbContext : DbContext
{
public AzureDbContext(DbContextOptions<AzureDbContext> options)
: base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var connectionString = configuration.GetConnectionString("AzureConnection");
optionsBuilder.UseAzureSql(connectionString, options => options.CommandTimeout(300));
}
public DbSet<TaskScheduler> TaskSchedulers { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<TaskScheduler>()
.HasKey(e => e.Id);
modelBuilder.Entity<TaskScheduler>()
.Property(e => e.RowPointer)
.HasDefaultValueSql("newid()");
modelBuilder.Entity<TaskScheduler>()
.Property(e => e.CreateDate)
.HasDefaultValueSql("getdate()");
}
}

View File

@@ -0,0 +1,10 @@
namespace AzureDataModel.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; }
}

View File

@@ -0,0 +1,11 @@
namespace AzureDataModel.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; }
}

View File

@@ -0,0 +1,12 @@
using AutoMapper;
using AzureDataModel.Dtos;
namespace AzureDataModel;
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<TaskScheduler, TaskSchedulerDto>().ReverseMap();
}
}

View File

@@ -0,0 +1,8 @@
using AzureDataModel.Dtos;
namespace AzureDataModel.Services;
public interface ITaskSchedulerService
{
Task<IEnumerable<TaskSchedulerDto>> GetTaskSchedulers();
}

View File

@@ -0,0 +1,53 @@
using AutoMapper;
using AzureDataModel.Dtos;
using Microsoft.EntityFrameworkCore;
using TaskScheduler = AzureDataModel.Entities.TaskScheduler;
namespace AzureDataModel.Services;
public class TaskSchedulerService(AzureDbContext context, IMapper mapper) : ITaskSchedulerService
{
public async Task<IEnumerable<TaskSchedulerDto>> GetTaskSchedulers()
{
return await context.TaskSchedulers.Select(x => mapper.Map<TaskSchedulerDto>(x)).ToListAsync();
}
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();
}
}

View File

@@ -0,0 +1,5 @@
{
"ConnectionStrings": {
"AzureConnection": "Server=tcp:fakrosno-hangfire.database.windows.net,1433;Initial Catalog=FaKrosnoHangfire;Persist Security Info=False;User ID=fakrosno_hangfire@trentblaugranagmail.onmicrosoft.com;Password=juhrot-zigQuz-6jydpu;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Authentication=\"Active Directory Password\";"
}
}