Files
xDataService/Providers/XGuidKeyGenerator.cs
2026-05-09 22:21:40 +03:30

56 lines
1.5 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using xCommons.Extensions;
using xDataService.Interfaces;
using xModels.Base;
namespace xDataService.Providers
{
/// <summary>
/// Default Guid Key Generator ...
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public class XGuidKeyGenerator<TEntity> : XKeyGenerator<TEntity, Guid>, IXKeyGenerator<TEntity, Guid>
where TEntity : XBaseEntity<Guid>
{
private readonly IXSequentialGuid sequentialGuid;
public XGuidKeyGenerator(
IXSequentialGuid sequentialGuid = null
)
{
this.sequentialGuid = sequentialGuid;
}
public override async Task<Guid> GenerateKey(
IXBaseRepository<TEntity, Guid> repository,
CancellationToken cancellationToken = default
)
{
//
return await Task.Run(() =>
{
//
// Check if provided SequentialGuid ...
if (sequentialGuid.IsNull())
{
return Guid.NewGuid();
}
else
{
return sequentialGuid.Next();
}
}, cancellationToken: cancellationToken);
}
public override bool IsEmpty(Guid id)
{
//
var result = id.IsNull() || id.IsDefaultGuid();
//
return result;
}
}
}