feat(dal): Модели и сервисы для работы с Task

This commit is contained in:
Mikhail Trubnikov
2026-03-17 16:50:49 +10:00
parent 547cb894be
commit 01c0200c6d
14 changed files with 294 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Context;
using PARR.DAL.Contracts;
using PARR.DAL.Models.Base;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models.Task
{
[Table("Tasks", Schema = DataContextSettings.Task)]
[Comment("Таблица заданий")]
public class Task : IBase
{
[Key]
public Guid Id { get; set; }
public DateTimeOffset DateCreated { get; set; }
public DateTimeOffset? DateModified { get; set; }
public TaskTypeEnum TypeCode { get; set; }
public TaskTaskStatusEnum StatusCode { get; set; }
public string? Payload { get; set; }
/// <summary>
/// Кол-во попыток
/// </summary>
public int RetryCount { get; set; }
/// <summary>
/// Дата завершения (устанавливается или когда Успех или когда Ошибка)
/// </summary>
public DateTimeOffset? ProcessedAt { get; set; }
[ForeignKey(nameof(TypeCode))]
public TaskType? TaskType { get; set; }
[ForeignKey(nameof(StatusCode))]
public TaskStatus? TaskStatus { get; set; }
public ICollection<TaskError> TaskErrors { get; set; } = new HashSet<TaskError>();
}
}

View File

@@ -0,0 +1,32 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Context;
using PARR.DAL.Models.Base;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models.Task
{
[Table("Errors", Schema = DataContextSettings.Task)]
[Comment("Таблица ошибок заданий")]
public class TaskError : IBase
{
[Key]
public Guid Id { get; set; }
public DateTimeOffset DateCreated { get; set; }
[NotMapped]
public DateTimeOffset? DateModified { get; set; }
public Guid TaskId { get; set; }
public int AttemptNumber { get; set; }
public required string ErrorMessage { get; set; }
public string? StackTrace { get; set; }
[ForeignKey(nameof(TaskId))]
public Task? Task { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Context;
using PARR.DAL.Contracts;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models.Task
{
[Table("Statuses", Schema = DataContextSettings.Task)]
[Comment("Таблица статусов заданий")]
public class TaskStatus
{
[Key]
public TaskTaskStatusEnum Code { get; set; }
public required string Name { get; set; }
public required string Description { get; set; }
public ICollection<Task> Tasks { get; set; } = new HashSet<Task>();
}
}

View File

@@ -0,0 +1,28 @@
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Context;
using PARR.DAL.Contracts;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models.Task
{
[Table("Types", Schema = DataContextSettings.Task)]
[Comment("Таблица типов заданий")]
public class TaskType
{
[Key]
public TaskTypeEnum Code { get; set; }
public required string Name { get; set; }
public required string Description { get; set; }
/// <summary>
/// Максимальное кол-во попыток
/// </summary>
public int MaxRetries { get; set; }
public ICollection<Task> Tasks { get; set; } = new HashSet<Task>();
}
}