last ...
This commit is contained in:
+35
-105
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user