| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using Azure.Core;
- using Dapper;
- using Diligent.WebAPI.Contracts.DTOs.Categories;
- using Diligent.WebAPI.Contracts.DTOs.Document;
- using Diligent.WebAPI.Contracts.DTOs.File;
- using Diligent.WebAPI.Contracts.DTOs.Files;
- using Diligent.WebAPI.Contracts.DTOs.Tags;
- using Microsoft.Extensions.Configuration;
- using System;
- using System.Collections.Generic;
- using System.Data.SqlClient;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using static System.Net.Mime.MediaTypeNames;
-
- namespace Diligent.WebAPI.Business.Services
- {
- public class FileEntityService : IFileEntityService
- {
- private readonly ILogger<FileEntityService> _logger;
- private readonly DatabaseContext _context;
- private readonly IMapper _mapper;
- private readonly IConfiguration _configuration;
-
- public FileEntityService(DatabaseContext context, ILogger<FileEntityService> logger, IMapper mapper, IConfiguration configuration)
- {
- _context = context;
- _logger = logger;
- _mapper = mapper;
- _configuration = configuration;
- }
-
- public async Task<List<FileEntityResponse>> GetAllAsync() =>
- _mapper.Map<List<FileEntityResponse>>(await _context.Files.Include(x => x.Tags).ToListAsync());
-
- public async Task UploadPdfAsync(FileEntity file)
- {
- await _context.Files.AddAsync(file);
-
- await _context.SaveChangesAsync();
- }
-
- public async Task<IEnumerable<FileEntity>> GetAll()
- {
- return await _context.Files.ToListAsync();
- }
-
- public async Task<object> GetAllFiltered(FileFilter filters)
- {
- using var connection = new SqlConnection(_configuration.GetConnectionString("WebApi"));
-
- 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, 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) =>
- {
- file.Tags.Add(tag);
- file.Category = category;
- return file;
- }, splitOn: "TagId, CategoryId");
-
- var filesList = files.ToList();
-
- var filtered = filesList
- .FilterFiles(filters);
-
- return new
- {
- Data = filtered.ApplyPagging(filters)
- .Select(n => new { n.stream_id, n.FileName, n.cached_file_size, n.file_type }),
- Total = filtered.Count
- };
- }
- }
- }
|