Browse Source

implemented full-text search

BE_dev
Dzenis Hadzifejzovic 2 years ago
parent
commit
0ddae2e5b6

+ 22
- 3
Diligent.WebAPI.Business/Services/FileEntityService.cs View File

@@ -46,21 +46,40 @@ namespace Diligent.WebAPI.Business.Services
return await _context.Files.ToListAsync();
}

public async Task<IEnumerable<FileEntity>> GetAllFilesBasedOnContent(String content)
{
using var connection = new SqlConnection(_configuration.GetConnectionString("WebApi"));

var sql = @"select * from Files inner join DocumentOrganizerDocStore on Files.DocumentId = DocumentOrganizerDocStore.stream_id
where contains(DocumentOrganizerDocStore.file_stream,@content)";

var files = await connection.QueryAsync<FileEntity>(sql,new {content=content});
return files.ToList();
}
public async Task<object> GetAllFiltered(FileFilter filters)
{
using var connection = new SqlConnection(_configuration.GetConnectionString("WebApi"));
var sql = @"SELECT Files.Id as FileId, stream_id, DocumentOrganizerDocStore.name as FileName, file_stream, file_type, cached_file_size, Title, Tags.Id as TagId, Tags.Name as TagName, Categories.Id as CategoryId, Categories.Name as CategoryName
FROM Files inner join FileEntityTag on Files.Id = FileEntityTag.FilesId
inner join Tags on FileEntityTag.TagsId = Tags.Id
inner join Categories on Files.CategoryId = Categories.Id
inner join DocumentOrganizerDocStore on DocumentOrganizerDocStore.stream_id = Files.DocumentId" +
(filters.Content is null ? "" : $" where contains(DocumentOrganizerDocStore.file_stream,@content);");

var files = await connection.QueryAsync<FileFilterReturnDto, TagResponse, CategoryResponse, FileFilterReturnDto>("SELECT Files.Id as FileId, stream_id, DocumentOrganizerDocStore.name as FileName, file_stream, file_type, cached_file_size, Title, Tags.Id as TagId, Tags.Name as TagName, Categories.Id as CategoryId, Categories.Name as CategoryName FROM Files inner join FileEntityTag on Files.Id = FileEntityTag.FilesId inner join Tags on FileEntityTag.TagsId = Tags.Id inner join DocumentOrganizerDocStore on DocumentOrganizerDocStore.stream_id = Files.DocumentId inner join Categories on Files.CategoryId = Categories.Id;", (file, tag, category) =>
var files = await connection.QueryAsync<FileFilterReturnDto, TagResponse, CategoryResponse, FileFilterReturnDto>(sql,(file, tag, category) =>
{
file.Tags.Add(tag);
file.Category = category;
return file;
}, splitOn: "TagId, CategoryId");
}, splitOn: "TagId, CategoryId",
param:new {content = filters.Content});

var filesList = files.ToList();

var filtered = filesList
.FilterFiles(filters);
.FilterFiles(filters)
.DistinctBy(x => x.stream_id).ToList();

return new
{

+ 1
- 0
Diligent.WebAPI.Business/Services/Interfaces/IFileEntityService.cs View File

@@ -13,6 +13,7 @@ namespace Diligent.WebAPI.Business.Services.Interfaces
Task<List<FileEntityResponse>> GetAllAsync();
Task UploadPdfAsync(FileEntity file);
Task<IEnumerable<FileEntity>> GetAll();
Task<IEnumerable<FileEntity>> GetAllFilesBasedOnContent(string content);
Task<object> GetAllFiltered(FileFilter filters);
}
}

+ 1
- 0
Diligent.WebAPI.Contracts/DTOs/Files/FileFilter.cs View File

@@ -7,5 +7,6 @@ namespace Diligent.WebAPI.Contracts.DTOs.Files
public string[]? Extensions { get; set; }
public string[]? Categories { get; set; }
public string[]? Tags { get; set; }
public string? Content { get; set; }
}
}

+ 3
- 0
Diligent.WebAPI.Host/Controllers/V1/FilesController.cs View File

@@ -27,6 +27,9 @@ namespace Diligent.WebAPI.Host.Controllers.V1
[HttpGet]
public async Task<IActionResult> GetAll() => Ok(await _fileEntityService.GetAll());

[HttpGet("filterByContent")]
public async Task<IActionResult> GetAllDocumentsByContent(string content) => Ok(await _fileEntityService.GetAllFilesBasedOnContent(content));

[HttpGet("filtered")]
public async Task<IActionResult> GetAllFiltered([FromQuery] FileFilter filters) => Ok(await _fileEntityService.GetAllFiltered(filters));


+ 1
- 1
Diligent.WebAPI.Host/appsettings.Development.json View File

@@ -24,7 +24,7 @@
"Enrich": [ "FromLogContext", "WithMachineName", "WtihThreadId", "WithExceptionDetails" ]
},
"ConnectionStrings": {
"WebApi": "Server=192.168.88.105;Database=DiligDocumentOrganizer;User Id=dzenis_hadzifejzovic;Password=;"
"WebApi": "Server=192.168.88.105;Database=DiligDocumentOrganizer;User Id=dzenis_hadzifejzovic;Password=dzenis123!;"
},
"Authorization": {
"JwtExpiredTime": "5",

+ 1
- 1
Diligent.WebAPI.Host/appsettings.json View File

@@ -28,7 +28,7 @@
"Enrich": [ "FromLogContext", "WithMachineName", "WtihThreadId", "WithExceptionDetails" ]
},
"ConnectionStrings": {
"WebApi": "Server=192.168.88.105;Database=DiligDocumentOrganizer;User Id=dzenis_hadzifejzovic;Password=;"
"WebApi": "Server=192.168.88.105;Database=DiligDocumentOrganizer;User Id=dzenis_hadzifejzovic;Password=dzenis123!;"
},
"Authorization": {
"JwtExpiredTime": "5",

+ 0
- 0
Diligent.WebAPI.Host/wwwroot/files/fileToUplo232312300.pdf View File


+ 0
- 0
Diligent.WebAPI.Host/wwwroot/files/fileToUplo232338719.pdf View File


+ 2
- 0
Diligent.WebAPI.Host/wwwroot/files/fileToUplo232350216.docx View File

@@ -0,0 +1,2 @@
Leather
V6

+ 2
- 0
Diligent.WebAPI.Host/wwwroot/files/fileToUplo232502833.docx View File

@@ -0,0 +1,2 @@
Leather
V6

Loading…
Cancel
Save