57 lines
1.8 KiB
C#
57 lines
1.8 KiB
C#
using System.Linq;
|
||
using System.Threading;
|
||
using Pf2e.Database;
|
||
using Slugify;
|
||
|
||
namespace Pf2e.Scrapper.Helpers;
|
||
|
||
/// <summary>
|
||
/// Класс предоставляет методы для работы с базой данных.
|
||
/// </summary>
|
||
public class DatabaseHelper
|
||
{
|
||
/// <summary>
|
||
/// Context для доступа к базе данных.
|
||
/// </summary>
|
||
public Pf2eDbContext Context { get; } = new();
|
||
|
||
/// <summary>
|
||
/// Сервис для работы с URL-Slug. Используется для преобразования названий в URL-friendly формат.
|
||
/// </summary>
|
||
public SlugHelper Slugger { get; }
|
||
|
||
/// <summary>
|
||
/// Последний найденный идентификатор сущности.
|
||
/// Используется для генерации новых ID сущностей.
|
||
/// </summary>
|
||
private int _id;
|
||
|
||
/// <summary>
|
||
/// Генерирует новый уникальный идентификатор сущности. и возвращает его.
|
||
/// </summary>
|
||
public int NextEntityId => ++_id;
|
||
|
||
/// <summary>
|
||
/// Блокировщик для генерации идентификаторов сущностей.
|
||
/// </summary>
|
||
public Lock IdLock { get; } = new();
|
||
|
||
/// <summary>
|
||
/// Конструктор класса <see cref="DatabaseHelper"/>
|
||
/// </summary>
|
||
/// <param name="slugHelper">[DI] Сервис для работы с URL-Slug</param>
|
||
public DatabaseHelper(SlugHelper slugHelper)
|
||
{
|
||
Slugger = slugHelper;
|
||
_id = Context.Entities.Any() ? Context.Entities.Max(e => e.Id) : 0;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Генерирует slug из названия.
|
||
/// </summary>
|
||
public string GenerateSlug(string name)
|
||
{
|
||
return Slugger.GenerateSlug(name);
|
||
}
|
||
}
|