last ...
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
model.References = model.References
|
// There is not any Reference to Remove ...
|
||||||
.Where(r => r.ProvidedFor != Provider ||
|
return result;
|
||||||
(r.ProvidedFor == Provider &&
|
}
|
||||||
r.ReferencedTo != $"{providedForId}"))
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
.Where(r => !(r.ProvidedFor == Provider &&
|
||||||
|
r.ReferencedTo == $"{providedForId}"))
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Update DataBase ...
|
||||||
|
model = await FileProvider.Update(
|
||||||
|
id: model.Id,
|
||||||
|
item: model,
|
||||||
|
userInfo: userInfo,
|
||||||
|
connectionId: connectionId
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
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)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
model = await FileProvider.Update(
|
var startIndex = reference.Index + 1;
|
||||||
item: model,
|
for (int i = startIndex; i <= maxIndex; i++)
|
||||||
id: model.Id,
|
{
|
||||||
userInfo: userInfo,
|
//
|
||||||
connectionId: connectionId
|
var dto = await GetReference(
|
||||||
);
|
forIndex: i,
|
||||||
result = !model.IsNullOrDefault();
|
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
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user