diff --git a/Providers/XBaseFileProvider.cs b/Providers/XBaseFileProvider.cs index 93387d7..e60ea71 100644 --- a/Providers/XBaseFileProvider.cs +++ b/Providers/XBaseFileProvider.cs @@ -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 LastIndex(TKey providedForId) - { - return await Task.FromResult(GetLastIndex(providedForId)); - } - #endregion - // #region Tools ... /// @@ -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); } + /// + /// Count References ... + /// + /// + /// + public async Task 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); + } + /// /// Retrieve References of Specific Provided ID as Query ... /// @@ -484,7 +487,6 @@ namespace xFileService.Providers public async Task 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) + int forIndex = await CountReferences(providedForId); + model.References.Add(new XReference { - // - // This Means there isnot any Reference ... - forIndex = 0; - model.References.Add(new XReference - { - Index = forIndex, - ProvidedFor = Provider, - ReferencedTo = $"{providedForId}" - }); - } - else - { - // - forIndex = lastIndex + 1; - - // - // Add New Reference ... - model.References.Add(new XReference - { - Index = forIndex, - ProvidedFor = Provider, - ReferencedTo = $"{providedForId}" - }); - } + Index = forIndex, + ProvidedFor = Provider, + ReferencedTo = $"{providedForId}" + }); // // Update Data Base ... @@ -609,7 +591,6 @@ namespace xFileService.Providers public async Task 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()) - .OrderByDescending(r => r.Index) - .ToList(); - if (!references.IsNull() && references.HasChild()) - { - result = references[0].Index; - } - else - { - result = -1; - } - } - - // - return result; - } - /// /// Check Specified Dto is Has Reference to Provider ... ///