last ...
This commit is contained in:
+30
-100
@@ -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)
|
||||
{
|
||||
//
|
||||
// This Means there isnot any Reference ...
|
||||
forIndex = 0;
|
||||
int forIndex = await CountReferences(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 ...
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user