This commit is contained in:
2025-12-19 04:02:12 +03:30
parent 0349ceb322
commit 59b8adc181
+35 -105
View File
@@ -10,7 +10,6 @@ using xDataService.Models;
using xExceptions.Constants;
using xFileService.Interfaces;
using xFileService.Models.Dtos;
using xFileService.Models.Entities;
using xIdentityModels.Models;
using xModels.Dtos;
using XFileDto = xFileService.Models.Dtos.XFileDto;
@@ -45,14 +44,6 @@ namespace xFileService.Providers
}
#endregion
//
#region Identifier ...
public async Task<int> LastIndex(TKey providedForId)
{
return await Task.FromResult(GetLastIndex(providedForId));
}
#endregion
//
#region Tools ...
/// <summary>
@@ -189,14 +180,6 @@ namespace xFileService.Providers
isValid = !dtos.IsNull() && dtos.HasChild();
if (isValid)
{
//
// Preparing Index ...
int index = GetLastIndex(providedForId);
if (index >= 0)
{
index++;
}
//
var isReferenced = false;
foreach (var dto in dtos)
@@ -205,15 +188,10 @@ namespace xFileService.Providers
// Try to Add Reference to Specified DTO ...
isReferenced = await AddReference(
model: dto,
forIndex: index,
userInfo: userInfo,
connectionId: connectionId,
providedForId: providedForId
);
if (isReferenced)
{
index++;
}
}
}
@@ -329,8 +307,8 @@ namespace xFileService.Providers
//
// Retrieve Last Index ...
var lastIndex = GetLastIndex(providedForId);
if (forIndex > lastIndex)
var referencesCount = await CountReferences(providedForId);
if (forIndex > referencesCount - 1)
{
XException.NotFound.Throw();
}
@@ -391,6 +369,31 @@ namespace xFileService.Providers
return await Task.FromResult(result);
}
/// <summary>
/// Count References ...
/// </summary>
/// <param name="providedForId"></param>
/// <returns></returns>
public async Task<int> CountReferences(TKey providedForId)
{
//
// Validate ...
if (providedForId.IsNull())
{
XException.InvalidArgs.Throw();
}
//
var identifier = GetProvidedID(providedForId);
var result = FileProvider.FileRepository
.AsQueryable()
.Where(t => t.References.Contains(identifier))
.Count();
//
return await Task.FromResult(result);
}
/// <summary>
/// Retrieve References of Specific Provided ID as Query ...
/// </summary>
@@ -484,7 +487,6 @@ namespace xFileService.Providers
public async Task<bool> AddReference(
XFileDto model,
TKey providedForId,
int forIndex = 0,
string connectionId = null,
XUserClaimsInfoDto userInfo = null
)
@@ -517,33 +519,13 @@ namespace xFileService.Providers
model = await FileProvider.Get(model.Id);
//
var lastIndex = GetLastIndex(providedForId);
if (lastIndex == -1)
int forIndex = await CountReferences(providedForId);
model.References.Add(new XReference<string>
{
//
// This Means there isnot any Reference ...
forIndex = 0;
model.References.Add(new XReference<string>
{
Index = forIndex,
ProvidedFor = Provider,
ReferencedTo = $"{providedForId}"
});
}
else
{
//
forIndex = lastIndex + 1;
//
// Add New Reference ...
model.References.Add(new XReference<string>
{
Index = forIndex,
ProvidedFor = Provider,
ReferencedTo = $"{providedForId}"
});
}
Index = forIndex,
ProvidedFor = Provider,
ReferencedTo = $"{providedForId}"
});
//
// Update Data Base ...
@@ -609,7 +591,6 @@ namespace xFileService.Providers
public async Task<bool> RemoveReference(
XFileDto model,
TKey providedForId,
int? forIndex = null,
string connectionId = null,
XUserClaimsInfoDto userInfo = null
)
@@ -636,8 +617,7 @@ namespace xFileService.Providers
// Check Model Reference to ID ...
var isReferenced = model.References
.Any(r => r.ProvidedFor == Provider &&
r.ReferencedTo == $"{providedForId}" &&
(!forIndex.HasValue || r.Index == forIndex.Value));
r.ReferencedTo == $"{providedForId}");
//
var result = false;
@@ -647,8 +627,7 @@ namespace xFileService.Providers
model.References = model.References
.Where(r => r.ProvidedFor != Provider ||
(r.ProvidedFor == Provider &&
r.ReferencedTo != $"{providedForId}" &&
(!forIndex.HasValue || r.Index == forIndex.Value)))
r.ReferencedTo != $"{providedForId}"))
.ToList();
//
@@ -693,7 +672,6 @@ namespace xFileService.Providers
var result = await RemoveReference(
model: model,
userInfo: userInfo,
forIndex: reference.Index,
connectionId: connectionId,
providedForId: reference.ReferencedTo
);
@@ -788,54 +766,6 @@ namespace xFileService.Providers
return result;
}
private int GetLastIndex(TKey providedForId)
{
//
var result = -1;
//
// Validate ...
var isValid = !providedForId.IsNull();
if (!isValid)
{
XException.InvalidArgs.Throw();
}
//
var identifier = GetProvidedID(providedForId);
//
var all = FileProvider.FileRepository
.AsQueryable()
.Where(t => t.References
.Contains(identifier))
.Select(t => t.References)
.AsEnumerable();
if (all.IsNull() || !all.HasChild())
{
result = -1;
}
else
{
//
var references = all
.SelectMany(a => a.ParseXReferenceList<TKey>())
.OrderByDescending(r => r.Index)
.ToList();
if (!references.IsNull() && references.HasChild())
{
result = references[0].Index;
}
else
{
result = -1;
}
}
//
return result;
}
/// <summary>
/// Check Specified Dto is Has Reference to Provider ...
/// </summary>