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 xExceptions.Constants;
using xFileService.Interfaces; using xFileService.Interfaces;
using xFileService.Models.Dtos; using xFileService.Models.Dtos;
using xFileService.Models.Entities;
using xIdentityModels.Models; using xIdentityModels.Models;
using xModels.Dtos; using xModels.Dtos;
using XFileDto = xFileService.Models.Dtos.XFileDto; using XFileDto = xFileService.Models.Dtos.XFileDto;
@@ -45,14 +44,6 @@ namespace xFileService.Providers
} }
#endregion #endregion
//
#region Identifier ...
public async Task<int> LastIndex(TKey providedForId)
{
return await Task.FromResult(GetLastIndex(providedForId));
}
#endregion
// //
#region Tools ... #region Tools ...
/// <summary> /// <summary>
@@ -189,14 +180,6 @@ namespace xFileService.Providers
isValid = !dtos.IsNull() && dtos.HasChild(); isValid = !dtos.IsNull() && dtos.HasChild();
if (isValid) if (isValid)
{ {
//
// Preparing Index ...
int index = GetLastIndex(providedForId);
if (index >= 0)
{
index++;
}
// //
var isReferenced = false; var isReferenced = false;
foreach (var dto in dtos) foreach (var dto in dtos)
@@ -205,15 +188,10 @@ namespace xFileService.Providers
// Try to Add Reference to Specified DTO ... // Try to Add Reference to Specified DTO ...
isReferenced = await AddReference( isReferenced = await AddReference(
model: dto, model: dto,
forIndex: index,
userInfo: userInfo, userInfo: userInfo,
connectionId: connectionId, connectionId: connectionId,
providedForId: providedForId providedForId: providedForId
); );
if (isReferenced)
{
index++;
}
} }
} }
@@ -329,8 +307,8 @@ namespace xFileService.Providers
// //
// Retrieve Last Index ... // Retrieve Last Index ...
var lastIndex = GetLastIndex(providedForId); var referencesCount = await CountReferences(providedForId);
if (forIndex > lastIndex) if (forIndex > referencesCount - 1)
{ {
XException.NotFound.Throw(); XException.NotFound.Throw();
} }
@@ -391,6 +369,31 @@ namespace xFileService.Providers
return await Task.FromResult(result); 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> /// <summary>
/// Retrieve References of Specific Provided ID as Query ... /// Retrieve References of Specific Provided ID as Query ...
/// </summary> /// </summary>
@@ -484,7 +487,6 @@ namespace xFileService.Providers
public async Task<bool> AddReference( public async Task<bool> AddReference(
XFileDto model, XFileDto model,
TKey providedForId, TKey providedForId,
int forIndex = 0,
string connectionId = null, string connectionId = null,
XUserClaimsInfoDto userInfo = null XUserClaimsInfoDto userInfo = null
) )
@@ -517,33 +519,13 @@ namespace xFileService.Providers
model = await FileProvider.Get(model.Id); model = await FileProvider.Get(model.Id);
// //
var lastIndex = GetLastIndex(providedForId); int forIndex = await CountReferences(providedForId);
if (lastIndex == -1) model.References.Add(new XReference<string>
{ {
// Index = forIndex,
// This Means there isnot any Reference ... ProvidedFor = Provider,
forIndex = 0; ReferencedTo = $"{providedForId}"
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}"
});
}
// //
// Update Data Base ... // Update Data Base ...
@@ -609,7 +591,6 @@ namespace xFileService.Providers
public async Task<bool> RemoveReference( public async Task<bool> RemoveReference(
XFileDto model, XFileDto model,
TKey providedForId, TKey providedForId,
int? forIndex = null,
string connectionId = null, string connectionId = null,
XUserClaimsInfoDto userInfo = null XUserClaimsInfoDto userInfo = null
) )
@@ -636,8 +617,7 @@ namespace xFileService.Providers
// Check Model Reference to ID ... // Check Model Reference to ID ...
var isReferenced = model.References var isReferenced = model.References
.Any(r => r.ProvidedFor == Provider && .Any(r => r.ProvidedFor == Provider &&
r.ReferencedTo == $"{providedForId}" && r.ReferencedTo == $"{providedForId}");
(!forIndex.HasValue || r.Index == forIndex.Value));
// //
var result = false; var result = false;
@@ -647,8 +627,7 @@ namespace xFileService.Providers
model.References = model.References model.References = model.References
.Where(r => r.ProvidedFor != Provider || .Where(r => r.ProvidedFor != Provider ||
(r.ProvidedFor == Provider && (r.ProvidedFor == Provider &&
r.ReferencedTo != $"{providedForId}" && r.ReferencedTo != $"{providedForId}"))
(!forIndex.HasValue || r.Index == forIndex.Value)))
.ToList(); .ToList();
// //
@@ -693,7 +672,6 @@ namespace xFileService.Providers
var result = await RemoveReference( var result = await RemoveReference(
model: model, model: model,
userInfo: userInfo, userInfo: userInfo,
forIndex: reference.Index,
connectionId: connectionId, connectionId: connectionId,
providedForId: reference.ReferencedTo providedForId: reference.ReferencedTo
); );
@@ -788,54 +766,6 @@ namespace xFileService.Providers
return result; 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> /// <summary>
/// Check Specified Dto is Has Reference to Provider ... /// Check Specified Dto is Has Reference to Provider ...
/// </summary> /// </summary>