Skip to content

Commit

Permalink
Implemented File Service
Browse files Browse the repository at this point in the history
  • Loading branch information
mazumdes committed Jan 28, 2022
1 parent ba2625f commit dd232b0
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 11 deletions.
4 changes: 2 additions & 2 deletions Library.Encyclopedia.API/Controllers/EncylopediaController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ public class EncylopediaController : ControllerBase
/// </summary>
/// <param name="logger"></param>
/// <param name="dbContext"></param>
public EncylopediaController(ILogger<EncylopediaController> logger, IApplicationDbContext dbContext, IConfiguration configuration)
public EncylopediaController(ILogger<EncylopediaController> logger, IApplicationDbContext dbContext, IConfiguration configuration, IFilesAdapter filesAdapter)
{
_logger = logger;
this.mainDataAccess = new MainDataAccess(dbContext, configuration);
this.mainDataAccess = new MainDataAccess(dbContext, configuration, filesAdapter);
}

[HttpGet("Login")]
Expand Down
29 changes: 28 additions & 1 deletion Library.Encyclopedia.API/Controllers/FilesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public async Task<IActionResult> Post(Guid id, IFormFile file, string descriptio
MainId = id,
FileName = file.FileName,
FilePath = $@"/{id}/{file.FileName}",
FileSize = file.Length,
FileType = file.ContentType,
FileDescription = description
};
Expand Down Expand Up @@ -85,10 +86,36 @@ public async Task<IActionResult> Post(Guid id, IFormFile file, string descriptio
/// <returns></returns>
[HttpGet("{id}")]
[Authorize(Roles = @"EncyclopediaAdministrators")]
public async Task<IActionResult> Get(Guid id, string directory)
public IActionResult Get(string id, string name, string contentType)
{
try
{
var stream = this.filesAdapter.DownloadFile(id, name);
return File(stream, contentType);
}
catch (Exception ex)
{
_logger.LogError(ex, $"an error has occured {ex.Message}");
throw;
}
}

/// <summary>
/// Delete File
/// </summary>
/// <param name="query"></param>
/// <param name="offset"></param>
/// <param name="size"></param>
/// <param name="asc"></param>
/// <returns></returns>
[HttpDelete("{id}")]
[Authorize(Roles = @"EncyclopediaAdministrators")]
public async Task<IActionResult> Delete(string id, string fileName, string fileId)
{
try
{
this.filesAdapter.DeleteFile(id, fileName);
await filesDataAccess.RemoveFiles(new List<Guid> { Guid.Parse(fileId) });
return Ok();
}
catch (Exception ex)
Expand Down
41 changes: 36 additions & 5 deletions Library.Encyclopedia.DataAccess/DataAccess/MainDataAccess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ namespace Library.Encyclopedia.DataAccess.DataAccess
public class MainDataAccess : IMainDataAccess
{
private IApplicationDbContext _dbcontext;
private readonly IFilesAdapter filesAdapter;
private string APP_BASE_URL;

public MainDataAccess(IApplicationDbContext dbcontext, IConfiguration configuration)
public MainDataAccess(IApplicationDbContext dbcontext, IConfiguration configuration, IFilesAdapter filesAdapter)
{
APP_BASE_URL = configuration.GetSection("App-Base-Url").Value;
_dbcontext = dbcontext;
this.filesAdapter = filesAdapter;
}

#region GET
Expand Down Expand Up @@ -86,7 +88,31 @@ async Task<MainMinimizedExternalCollection> IMainDataAccess.GetByCategoryAsync(s

return result;
}
else return new MainMinimizedExternalCollection();
else
{
IEnumerable<Main> data;
if (ascending)
data = await _dbcontext.Main.Where(s => s.Category == null)
.OrderBy(s => s.Title.ToLower())
.ThenBy(s => s.RawDescription.ToLower())
.Skip(offset)
.Take(pagesize)
.ToListAsync();
else
data = await _dbcontext.Main.Where(s => s.Category == null)

.OrderByDescending(s => s.Title.ToLower())
.ThenByDescending(s => s.RawDescription.ToLower())
.Skip(offset)
.Take(pagesize)
.ToListAsync();

var total = await _dbcontext.Main.CountAsync(s => s.Category == null);

MainMinimizedExternalCollection result = new MainMinimizedExternalCollection(data.Minimize(previewSize), total);

return result;
}
}

async Task<MainMinimizedExternalCollection> IMainDataAccess.GetByAlphabetAsync(char startingAlphabet, int offset, int pagesize, int previewSize, bool ascending)
Expand Down Expand Up @@ -145,7 +171,7 @@ async Task<MainMinimizedExternalCollection> IMainDataAccess.GetByAlphabetAsync(c

async Task<Main> IMainDataAccess.GetAsync(Guid id)
{
Main item = await _dbcontext.Main.Include(s => s.Files).Include(s => s.Links).FirstOrDefaultAsync(s => s.Id == id);
Main item = await _dbcontext.Main.Include(s => s.Files).Include(s => s.Links).Include(s => s.Files).FirstOrDefaultAsync(s => s.Id == id);

if (item != null)
{
Expand Down Expand Up @@ -331,7 +357,7 @@ private Main ReplaceInternalLinks(Main model, bool isUpdate = false)
public async Task<Main> UpdateAsync(Guid id, MainUpdateModel model)
{
// find the entry
var entry = await _dbcontext.Main.Include(s => s.Links).FirstOrDefaultAsync(s => s.Id == id);
var entry = await _dbcontext.Main.Include(s => s.Links).Include(s => s.Files).FirstOrDefaultAsync(s => s.Id == id);

if (entry != null)
{
Expand Down Expand Up @@ -386,11 +412,16 @@ public async Task<Main> UpdateAsync(Guid id, MainUpdateModel model)
public async Task DeleteAsync(Guid id)
{
// find the entry
var entry = await _dbcontext.Main.Include(s => s.Links).FirstOrDefaultAsync(s => s.Id == id);
var entry = await _dbcontext.Main.Include(s => s.Links).Include(s => s.Files).FirstOrDefaultAsync(s => s.Id == id);

if (entry != null)
{
if (entry.Links != null && entry.Links.Any()) _dbcontext.Links.RemoveRange(entry.Links);
if (entry.Files != null && entry.Files.Any())
{
_dbcontext.Files.RemoveRange(entry.Files);
this.filesAdapter.DeleteFiles(entry.Id.ToString());
}
_dbcontext.Main.Remove(entry);
await _dbcontext.SaveChanges();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,24 @@ public WindowsFileSaveAdapter(string networkPath)
{
this.networkPath = networkPath;
}
public bool DownloadFile(Files file, string directory)

public void DeleteFile(string id, string name)
{
File.Delete(Path.Combine(networkPath, id, name));
}

public void DeleteFiles(string id)
{
foreach (var file in Directory.GetFiles(Path.Combine(networkPath, id)))
{
File.Delete(file);
}
Directory.Delete(Path.Combine(networkPath, id));
}

public FileStream DownloadFile(string id, string name)
{
throw new NotImplementedException();
return File.OpenRead(Path.Combine(networkPath, id, name));
}

public async Task<bool> UploadFile(Guid id, IFormFile file)
Expand Down
5 changes: 4 additions & 1 deletion Library.Encyclopedia.Entity/Interfaces/IFilesAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

namespace Library.Encyclopedia.Entity.Interfaces
{
public interface IFilesAdapter
{
public Task<bool> UploadFile(Guid id, IFormFile file);
bool DownloadFile(Files file, string directory);
FileStream DownloadFile(string id, string name);
public void DeleteFiles(string id);
public void DeleteFile(string id, string name);
}
}
2 changes: 2 additions & 0 deletions Library.Encyclopedia.Entity/Models/Files.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ public class Files
public string FileName { get; set; }
[Required]
public string FileType { get; set; }
[Required]
public long FileSize { get; set; }
public string FileDescription { get; set; }
[Required]
public string FilePath { get; set; }
Expand Down

0 comments on commit dd232b0

Please sign in to comment.