I need to retrieve the logo that is uploaded under a company to use in a digital card creation.
Obviously with multiple Companies there can be multiple file uploads.
How do I retrieve the file from the db and use it like this:
If uploaded logo is present for company use uploaded logo else use default logo.
If i need to provide more clarity I am happy to do so
FileService.cs
using ERaf.Interfaces.Repositories;
using ERaf.Interfaces.Services;
using ERaf.Models;
using ERaf.Services.Helpers;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using File = ERaf.Models.EntityModels.File;
namespace ERaf.Services
{
public class FileService : IFileService
{
private readonly IFileRepository fileRepository;
private readonly string fileStorageLocation;
private static readonly IEnumerable<string> allowedMimeTypes = new string[] { ".bmp", ".jpg", ".png", ".pdf", ".xlsx" };
public FileService(IFileRepository fileRepository, IOptions<AppSettings> appSettings)
{
this.fileRepository = fileRepository;
this.fileStorageLocation = appSettings.Value.FileStorageLocation;
}
//CREATE
public async Task<int> Create(IFormFile fileToSave, bool ignoreTypeRestriction)
{
var file = new ERaf.Models.EntityModels.File
{
GuidA = Guid.NewGuid(),
GuidB = Guid.NewGuid(),
Mime = System.IO.Path.GetExtension(fileToSave.FileName)
};
if (ignoreTypeRestriction == false)
await CheckAllowedMimeTypes(file.Mime);
var filePath = System.IO.Path.Combine(fileStorageLocation, file.GuidA.ToString() + file.GuidB.ToString() + file.Mime);
using (var stream = System.IO.File.Create(filePath))
{
await fileToSave.CopyToAsync(stream);
}
if (file.Mime == ".pdf")
await ValidatePdfByRecreation(filePath);
return await fileRepository.Create(file);
}
public async Task<int> Create(Stream fileStream, string fileName)
{
var file = new ERaf.Models.EntityModels.File
{
GuidA = Guid.NewGuid(),
GuidB = Guid.NewGuid(),
Mime = System.IO.Path.GetExtension(fileName)
};
var filePath = System.IO.Path.Combine(fileStorageLocation, file.GuidA.ToString() + file.GuidB.ToString() + file.Mime);
using (var stream = System.IO.File.Create(filePath))
{
await fileStream.CopyToAsync(stream);
}
return await fileRepository.Create(file);
}
public async Task<File> Create(File entity)
{
var file = new ERaf.Models.EntityModels.File
{
GuidA = entity.GuidA,
GuidB = entity.GuidA,
Mime = entity.Mime
};
var entityId = await fileRepository.Create(file);
return await GetOne(entityId);
}
//READ
public Task<IEnumerable<File>> GetAll()
{
throw new NotImplementedException();
}
public async Task<File> GetOne(int entityId)
{
return await fileRepository.Get()
.Where(x => x.Id == entityId)
.FirstOrDefaultAsync();
}
public IQueryable<string> GetFileLink(int fileId)
{
var files = fileRepository.Get();
return files
.Where(x => x.Id == fileId)
.Select(x => "t/" + x.Mime + "/" + x.GuidA + "/" + x.GuidB + "/file");
}
//UPDATE
public Task<File> Update(File entity)
{
throw new NotImplementedException();
}
//DELETE
public Task Delete(int entityId)
{
throw new NotImplementedException();
}
//UTILITY
private async Task CheckAllowedMimeTypes(string mime)
{
if (!allowedMimeTypes.Contains(mime.ToLower()))
throw new ReadableException("Only the following file types are allowed: " + String.Join(", ", allowedMimeTypes));
}
private async Task ValidatePdfByRecreation(string filePath)
{
var pdfBuilder = new PdfBuilder();
try
{
pdfBuilder.AddPdf(filePath);
pdfBuilder.SaveFile(filePath);
}
catch (Exception e)
{
throw new ReadableException("The provided pdf file isn't compatible with this system. Try re-printing the file as pdf from your web browser, this can help fix irregularities, then re-upload.");
}
}
}
}
AccisureCustomerCardImage.cs
using ERaf.Models.PdfGeneratorModels;
using QuestPDF.Drawing;
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
using System;
using System.Collections.Generic;
namespace ERaf.Services.Helpers.PdfGenerators
{
public class AccisureCustomerCardImage : IDocument
{
private static readonly int[] cS = new int[] { 15, 50, 40, 20 };
private TextStyle baseStyle = TextStyle.Default.FontType("Arial").Size(16).Color("#496479");
private TextStyle titleStyle = TextStyle.Default.FontType("Arial").Size(18).Color("#496479").SemiBold();
private TextStyle tableHeaderStyle = TextStyle.Default.FontType("Arial").Size(16).Color("#496479").SemiBold();
private TextStyle numberStyle = TextStyle.Default.FontType("Consolas").Size(18).Color("#496479");
private IEnumerable<AccisureCustomerCardLineDto> accisureCustomerCardDto;
public AccisureCustomerCardImage(IEnumerable<AccisureCustomerCardLineDto> accisureCustomerCardDto)
{
this.accisureCustomerCardDto = accisureCustomerCardDto;
}
public DocumentMetadata GetMetadata() => DocumentMetadata.Default;
public void Compose(IDocumentContainer container)
{
container
.Page(page =>
{
page.MarginLeft(5);
page.MarginRight(2);
page.Size(new PageSize(810, 540).Landscape());
page.Content().Padding(0).Element(ComposeContent);
});
}
void ComposeContent(IContainer container)
{
//container;
var width = 799;
var minHeight = ((int)(5.3 / 8.5 * width));
container.Background(Colors.White).Padding(0).Box().PaddingTop(20).Width(width).MinHeight(minHeight).Border(1).BorderColor("#496479").Stack(stack =>
{
//header
stack.Item().PaddingHorizontal(4).PaddingTop(4).Stack(s =>
{
s.Item().AlignLeft().Text("ACCISURE MEMBERSHIP CARD", titleStyle);
s.Item().AlignLeft().Text("This card will be used as your unique identifier when in an emergency.", baseStyle.Italic(true));
s.Item().AlignLeft().Text("Always keep this card info close when commuting as a passenger.", baseStyle.Italic(true));
//s.Item().Text(" ", baseStyle);
});
//table
var paddingh = 2;
var paddingv = 2;
stack.Item().PaddingHorizontal(4).PaddingTop(4).PaddingBottom(160).Decoration(decoration =>
{
// header
decoration.Header().Row(row =>
{
row.RelativeColumn(cS[0]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text("TYPE", tableHeaderStyle);
row.RelativeColumn(cS[1]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text("MEMBER", tableHeaderStyle);
row.RelativeColumn(cS[2]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text("IDENTIFICATION NO", tableHeaderStyle);
row.RelativeColumn(cS[3]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text("CARD NO", tableHeaderStyle);
});
// content
decoration.Content().Stack(tableStack =>
{
var rowCount = 0;
foreach (var x in accisureCustomerCardDto)
{
tableStack.Item().ShowEntire().Row(row =>
{
row.RelativeColumn(cS[0]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text(x.Type, baseStyle);
row.RelativeColumn(cS[1]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text(x.FullName, baseStyle);
row.RelativeColumn(cS[2]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text(x.IdentificationNo, baseStyle);
row.RelativeColumn(cS[3]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text(x.CardNo, baseStyle);
});
rowCount += 1;
}
while (rowCount < 6)
{
tableStack.Item().ShowEntire().Row(row =>
{
row.RelativeColumn(cS[0]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text("", baseStyle);
row.RelativeColumn(cS[1]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text("", baseStyle);
row.RelativeColumn(cS[2]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text("", baseStyle);
row.RelativeColumn(cS[3]).PaddingHorizontal(paddingh).PaddingVertical(paddingv).Text("", baseStyle);
});
rowCount += 1;
}
});
});
//footer
stack.Item().PaddingHorizontal(4).PaddingTop(4).PaddingBottom(4).Stack(s =>
{
s.Item().Row(r =>
{
r.RelativeColumn(4).AlignMiddle().Stack(istack =>
{
//istack.Item().Text(" ", baseStyle);
istack.Item().Text("Emergency line:", baseStyle);
istack.Item().Text("Website:", baseStyle);
istack.Item().Text("General enquiries:", baseStyle);
});
r.RelativeColumn(8).AlignMiddle().AlignLeft().Stack(istack =>
{
//istack.Item().Text(" ", baseStyle);
istack.Item().Text("0861-ACCISURE (0861-22247873)", baseStyle);
istack.Item().Text("www.accisure.co.za", baseStyle);
istack.Item().Text("[email protected]", baseStyle);
});
r.RelativeColumn(2).AlignRight().AlignBottom().Stack(istack =>
{
istack.Item().Image(ImageAssets.AccisureLogoByteArray, ImageScaling.FitArea);
});
});
});
});
}
}
}```
I have tried fetching the file but I am not sure how to do this. I also tried Chat GPT but it doesnt seem to understand what I need done.