This commit is contained in:
pavelbannov 2023-01-30 16:55:02 +03:00
parent 07ad44edd7
commit 683b1ecd83
5 changed files with 43 additions and 26 deletions

View File

@ -120,6 +120,11 @@ public class AbstractDao
await filesDbContext.SaveChangesAsync();
}
protected ValueTask<object> MappingIDAsync(object id)
{
return MappingIDAsync(id, false);
}
protected ValueTask<object> MappingIDAsync(object id, bool saveIfNotExist = false)
{
@ -138,6 +143,16 @@ public class AbstractDao
return InternalMappingIDAsync(id, saveIfNotExist);
}
protected int MappingIDAsync(int id)
{
return MappingIDAsync(id, false);
}
protected int MappingIDAsync(int id, bool saveIfNotExist = false)
{
return id;
}
private async ValueTask<object> InternalMappingIDAsync(object id, bool saveIfNotExist = false)
{
object result;
@ -178,11 +193,6 @@ public class AbstractDao
return result;
}
protected ValueTask<object> MappingIDAsync(object id)
{
return MappingIDAsync(id, false);
}
internal static IQueryable<T> BuildSearch<T>(IQueryable<T> query, string text, SearhTypeEnum searhTypeEnum) where T : IDbSearch
{
var lowerText = GetSearchText(text);

View File

@ -73,15 +73,22 @@ internal class SecurityDao<T> : AbstractDao, ISecurityDao<T>
foreach (var record in records)
{
var query = await filesDbContext.Security
List<DbFilesSecurity> toDelete = new();
var query = filesDbContext.Security
.Where(r => r.TenantId == record.TenantId)
.Where(r => r.EntryType == record.EntryType)
.Where(r => r.Subject == record.Subject)
.AsAsyncEnumerable()
.WhereAwait(async r => r.EntryId == (await MappingIDAsync(record.EntryId)).ToString())
.ToListAsync();
.AsAsyncEnumerable();
filesDbContext.RemoveRange(query);
await foreach (var r in query)
{
r.EntryId = (await MappingIDAsync(r.EntryId)).ToString();
toDelete.Add(r);
}
filesDbContext.RemoveRange(toDelete);
}
await tx.CommitAsync();
@ -90,7 +97,7 @@ internal class SecurityDao<T> : AbstractDao, ISecurityDao<T>
public async Task<bool> IsSharedAsync(T entryId, FileEntryType type)
{
var mappedId = (await MappingIDAsync(entryId)).ToString();
var mappedId = (entryId is int fid ? MappingIDAsync(fid) : await MappingIDAsync(entryId)).ToString();
using var filesDbContext = _dbContextFactory.CreateDbContext();
return await Query(filesDbContext.Security)
@ -101,7 +108,7 @@ internal class SecurityDao<T> : AbstractDao, ISecurityDao<T>
{
if (r.Share == FileShare.None)
{
var entryId = (await MappingIDAsync(r.EntryId) ?? "").ToString();
var entryId = (r.EntryId is int fid ? MappingIDAsync(fid) : (await MappingIDAsync(r.EntryId) ?? "")).ToString();
if (string.IsNullOrEmpty(entryId))
{
return;
@ -283,7 +290,7 @@ internal class SecurityDao<T> : AbstractDao, ISecurityDao<T>
T folderId;
if (entry.FileEntryType == FileEntryType.File)
{
var fileId = await MappingIDAsync(entry.Id);
var fileId = entry.Id is int entryId ? MappingIDAsync(entryId) : await MappingIDAsync(entry.Id);
folderId = ((File<T>)entry).ParentId;
if (!files.Contains(fileId.ToString()))
{
@ -300,7 +307,7 @@ internal class SecurityDao<T> : AbstractDao, ISecurityDao<T>
foldersInt.Add(folderIdInt);
}
var mappedId = await MappingIDAsync(folderId);
var mappedId = folderId is int fid ? MappingIDAsync(fid) : await MappingIDAsync(folderId);
if (folders != null)
{
folders.Add(mappedId.ToString());

View File

@ -68,7 +68,7 @@ internal abstract class BaseTagDao<T> : AbstractDao
foreach (var f in fileEntries)
{
var idObj = await MappingIDAsync(f.Id);
var idObj = f.Id is int fid ? MappingIDAsync(fid) : await MappingIDAsync(f.Id);
var id = idObj.ToString();
if (f.FileEntryType == FileEntryType.File)
{
@ -116,7 +116,7 @@ internal abstract class BaseTagDao<T> : AbstractDao
foreach (var f in fileEntries)
{
var idObj = await MappingIDAsync(f.Id);
var idObj = f.Id is int fid ? MappingIDAsync(fid) : await MappingIDAsync(f.Id);
var id = idObj.ToString();
if (f.FileEntryType == FileEntryType.File)
{
@ -149,7 +149,7 @@ internal abstract class BaseTagDao<T> : AbstractDao
await foreach (var f in fileEntries)
{
var idObj = await MappingIDAsync(f.Id);
var idObj = f.Id is int fid ? MappingIDAsync(fid) : await MappingIDAsync(f.Id);
var id = idObj.ToString();
if (f.FileEntryType == FileEntryType.File)
{
@ -181,7 +181,7 @@ internal abstract class BaseTagDao<T> : AbstractDao
public async IAsyncEnumerable<Tag> GetTagsAsync(T entryID, FileEntryType entryType, TagType tagType)
{
var mappedId = (await MappingIDAsync(entryID)).ToString();
var mappedId = (entryID is int fid ? MappingIDAsync(fid) : await MappingIDAsync(entryID)).ToString();
var filesDbContext = _dbContextFactory.CreateDbContext();
var q = Query(filesDbContext.Tag)
@ -598,7 +598,7 @@ internal abstract class BaseTagDao<T> : AbstractDao
public async Task RemoveTagsAsync(FileEntry<T> entry, IEnumerable<int> tagsIds)
{
var entryId = (await MappingIDAsync(entry.Id)).ToString();
var entryId = (entry.Id is int fid ? MappingIDAsync(fid) : await MappingIDAsync(entry.Id)).ToString();
using var filesDbContext = _dbContextFactory.CreateDbContext();
var toDelete = await Query(filesDbContext.TagLink)
@ -657,7 +657,7 @@ internal abstract class BaseTagDao<T> : AbstractDao
if (id != 0)
{
var entryId = (await MappingIDAsync(tag.EntryId)).ToString();
var entryId = (tag.EntryId is int fid ? MappingIDAsync(fid) : await MappingIDAsync(tag.EntryId)).ToString();
var toDelete = await Query(filesDbContext.TagLink)
.Where(r => r.TagId == id &&
r.EntryId == entryId &&
@ -902,7 +902,7 @@ internal abstract class BaseTagDao<T> : AbstractDao
foreach (var r in fileEntries)
{
var idObj = await MappingIDAsync(r.Id);
var idObj = r.Id is int fid ? MappingIDAsync(fid) : await MappingIDAsync(r.Id);
var id = idObj.ToString();
var entryType = (r.FileEntryType == FileEntryType.File) ? FileEntryType.File : FileEntryType.Folder;

View File

@ -54,7 +54,7 @@ public class CustomTagsService
private IDictionary<string, StringValues> Headers => _httpContextAccessor?.HttpContext?.Request?.Headers;
public async Task<object> CreateTagAsync<T>(string name)
public async Task<string> CreateTagAsync(string name)
{
if (_userManager.IsUser(_authContext.CurrentAccount.ID))
{
@ -63,7 +63,7 @@ public class CustomTagsService
ArgumentNullOrEmptyException.ThrowIfNullOrEmpty(name);
var tagDao = _daoFactory.GetTagDao<T>();
var tagDao = _daoFactory.GetTagDao<int>();
var tags = await tagDao.GetTagsInfoAsync(name, TagType.Custom, true).ToListAsync();
if (tags.Any())

View File

@ -681,7 +681,7 @@ public class VirtualRoomsCommonController : ApiControllerBase
var filterValue = _apiContext.FilterValue;
var content = await _fileStorageService.GetFolderItemsAsync(parentId, startIndex, count, filter, false, subjectId, filterValue,
searchInContent ?? false, withSubfolders ?? false, orderBy, searchArea ?? SearchArea.Active, withoutTags ?? false, tagNames, excludeSubject ?? false,
searchInContent ?? false, withSubfolders ?? false, orderBy, searchArea ?? SearchArea.Active, withoutTags ?? false, tagNames, excludeSubject ?? false,
provider ?? ProviderFilter.None, subjectFilter ?? SubjectFilter.Owner);
var dto = await _folderContentDtoHelper.GetAsync(content, startIndex);
@ -702,11 +702,11 @@ public class VirtualRoomsCommonController : ApiControllerBase
/// Tag name
/// </returns>
[HttpPost("tags")]
public async Task<object> CreateTagAsync(CreateTagRequestDto inDto)
public async Task<string> CreateTagAsync(CreateTagRequestDto inDto)
{
ErrorIfNotDocSpace();
return await _customTagsService.CreateTagAsync<int>(inDto.Name);
return await _customTagsService.CreateTagAsync(inDto.Name);
}
/// <summary>