This commit is contained in:
2025-12-20 23:53:12 +03:30
parent 1f57472d1a
commit 77dec2007f
+87 -16
View File
@@ -307,8 +307,8 @@ namespace xFileService.Providers
// //
// Retrieve Last Index ... // Retrieve Last Index ...
var referencesCount = await CountReferences(providedForId); var maxIndex = (await GetReferencingIndexes(providedForId)).Max();
if (forIndex > referencesCount - 1) if (forIndex > maxIndex)
{ {
XException.NotFound.Throw(); XException.NotFound.Throw();
} }
@@ -393,6 +393,7 @@ namespace xFileService.Providers
.AsQueryable() .AsQueryable()
.Where(te => te.References.Contains(identifier)) .Where(te => te.References.Contains(identifier))
.Select(te => te.References) .Select(te => te.References)
.ToList()
.SelectMany(tr => tr.ParseXReferenceList<TKey>()) .SelectMany(tr => tr.ParseXReferenceList<TKey>())
.Where(tr => tr.ProvidedFor == Provider && $"{tr.ReferencedTo}" == $"{providedForId}") .Where(tr => tr.ProvidedFor == Provider && $"{tr.ReferencedTo}" == $"{providedForId}")
.OrderBy(tr => tr.Index) .OrderBy(tr => tr.Index)
@@ -631,10 +632,12 @@ namespace xFileService.Providers
{ {
// //
// Validate ... // Validate ...
if (model.IsNull() || var result =
providedForId.IsNull() || !model.Id.IsNull() &&
model.Id.IsNull() || !providedForId.IsNull() &&
model.Id.IsDefaultGuid()) !model.IsNullOrDefault() &&
!model.Id.IsDefaultGuid();
if (!result)
{ {
XException.InvalidArgs.Throw(); XException.InvalidArgs.Throw();
} }
@@ -648,30 +651,98 @@ namespace xFileService.Providers
} }
// //
// Check Model Reference to ID ... // Reading Referencing Indexes ...
var isReferenced = model.References var indexes = await GetReferencingIndexes(providedForId);
.Any(r => r.ProvidedFor == Provider &&
r.ReferencedTo == $"{providedForId}");
// //
var result = false; // Check Model Reference to ID ...
if (isReferenced) var referencesCount = await CountReferences(providedForId);
result = referencesCount == 0;
if (result)
{ {
// //
// There is not any Reference to Remove ...
return result;
}
//
// Check Model is Trully Referenced to ProvidedForId or not ...
var reference = model.References
.FirstOrDefault(r => r.ProvidedFor == Provider &&
r.ReferencedTo == $"{providedForId}");
result = !model.IsNullOrDefault();
if (!result)
{
XException.ActionFailed.Throw();
}
//
// Remove Referenced Item from Model ...
model.References = model.References model.References = model.References
.Where(r => r.ProvidedFor != Provider || .Where(r => !(r.ProvidedFor == Provider &&
(r.ProvidedFor == Provider && r.ReferencedTo == $"{providedForId}"))
r.ReferencedTo != $"{providedForId}"))
.ToList(); .ToList();
// //
// Update DataBase ...
model = await FileProvider.Update( model = await FileProvider.Update(
item: model,
id: model.Id, id: model.Id,
item: model,
userInfo: userInfo, userInfo: userInfo,
connectionId: connectionId connectionId: connectionId
); );
//
result = !model.IsNullOrDefault(); result = !model.IsNullOrDefault();
if (!result)
{
XException.ActionFailed.Throw();
}
//
// Get Max Exists Indexes ...
var maxIndex = indexes.Max();
//
// Here We Have to Re Arrange Indexed ...
if (reference.Index < maxIndex)
{
//
var startIndex = reference.Index + 1;
for (int i = startIndex; i <= maxIndex; i++)
{
//
var dto = await GetReference(
forIndex: i,
providedForId: providedForId
);
if (!dto.IsNullOrDefault())
{
//
dto.References
.ToList()
.ForEach(iref =>
{
//
if (
iref.Index == i &&
iref.ProvidedFor == Provider &&
iref.ReferencedTo == reference.ReferencedTo
)
{
iref.Index = i - 1;
}
});
//
dto = await FileProvider.Update(
item: dto,
id: dto.Id,
userInfo: userInfo,
connectionId: connectionId
);
}
}
} }
// //