560 lines
22 KiB
C#
560 lines
22 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using QRCoder;
|
||
using System.Drawing;
|
||
using System.Drawing.Imaging;
|
||
using AyCode.Core.Enums;
|
||
using AyCode.Core.Extensions;
|
||
using TIAM.Database.DataLayers.Admins;
|
||
using TIAM.Entities.ServiceProviders;
|
||
using TIAM.Entities.Users;
|
||
using TIAMWebApp.Shared.Application.Models;
|
||
using Product = TIAM.Entities.Products.Product;
|
||
using TIAM.Entities.Addresses;
|
||
using TIAM.Entities.Profiles;
|
||
using AyCode.Core.Loggers;
|
||
using AyCode.Entities;
|
||
using AyCode.Services.SignalRs;
|
||
using AyCode.Utils.Extensions;
|
||
using TIAM.Entities.Drivers;
|
||
using TIAM.Services;
|
||
using TIAM.Entities.Products;
|
||
using TIAM.Models.Dtos.Products;
|
||
using TIAM.Models.Dtos.Users;
|
||
using TIAMWebApp.Shared.Application.Models.ClientSide;
|
||
|
||
namespace TIAMWebApp.Server.Controllers
|
||
{
|
||
[Authorize]
|
||
[ApiController]
|
||
[Route("api/v1/[controller]")]
|
||
public class ServiceProviderAPIController(AdminDal adminDal, IWebHostEnvironment env, IEnumerable<IAcLogWriterBase> logWriters) : ControllerBase
|
||
{
|
||
private readonly TIAM.Core.Loggers.Logger<ServiceProviderAPIController> _logger = new(logWriters.ToArray());
|
||
|
||
[NonAction]
|
||
[ApiExplorerSettings(IgnoreApi = true)]
|
||
private async Task<Company?> CompanyDataChanging(Company company, TrackingState trackingState)
|
||
{
|
||
var logText = $"[{trackingState.ToString().ToUpper()}] CompanyDataChanging called; Id: {company.Id}; OwnerId: {company.OwnerId}; Name: {company.Name}";
|
||
|
||
if (company.Name.IsNullOrEmpty())
|
||
{
|
||
_logger.Error(logText);
|
||
return null;
|
||
}
|
||
|
||
_logger.Info(logText);
|
||
|
||
switch (trackingState)
|
||
{
|
||
case TrackingState.Add:
|
||
if (company.Id.IsNullOrEmpty()) company.Id = Guid.NewGuid();
|
||
|
||
//if (company.OwnerId.IsNullOrEmpty()) company.OwnerId = Guid.Parse("540271F6-C604-4C16-8160-D5A7CAFEDF00"); //TESZT - J.
|
||
|
||
//company.SetProfile(new Profile(Guid.NewGuid(), company.Name));
|
||
//company.Profile.SetAddress(new Address(Guid.NewGuid(), "Controller AddCompanyAsync; address text..."));
|
||
|
||
return (await adminDal.AddCompanyAsync(company)) ? company : null;
|
||
|
||
case TrackingState.Update:
|
||
return await adminDal.UpdateCompanyAsync(company);
|
||
case TrackingState.Remove:
|
||
return (await adminDal.RemoveCompanyAsync(company.Id)) ? company : null;
|
||
|
||
case TrackingState.Get:
|
||
case TrackingState.GetAll:
|
||
default:
|
||
throw new ArgumentOutOfRangeException(nameof(trackingState), trackingState, null);
|
||
}
|
||
}
|
||
|
||
[NonAction]
|
||
[ApiExplorerSettings(IgnoreApi = true)]
|
||
[SignalR(SignalRTags.AddCompany)]
|
||
public async Task<string> AddCompanyAsync(Company company)
|
||
=> (await CompanyDataChanging(company, TrackingState.Add))?.ToJson() ?? string.Empty;
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.UpdateServiceProviderRouteName)]
|
||
[SignalR(SignalRTags.UpdateCompany)]
|
||
public async Task<string> UpdateServiceProvider(Company company)
|
||
=> (await CompanyDataChanging(company, TrackingState.Update))?.ToJson() ?? string.Empty;
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.RemoveServiceProviderRouteName)]
|
||
[SignalR(SignalRTags.RemoveCompany)]
|
||
public async Task<string> RemoveServiceProvider(Company company)
|
||
=> (await CompanyDataChanging(company, TrackingState.Remove))?.ToJson() ?? string.Empty;
|
||
|
||
//15.
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.CreateServiceProviderRouteName)]
|
||
[Tags("In-Progress", "ServiceProvider")]
|
||
[EndpointSummary("Create service provider")]
|
||
public async Task<string> CreateServiceProvider([FromBody] ServiceProviderModel serializedServiceProviderModel)
|
||
{
|
||
_logger.Info($"CreateServiceProvider called; Id: {serializedServiceProviderModel.Id}");
|
||
|
||
return await AddCompanyAsync(serializedServiceProviderModel.CreateMainEntity());
|
||
}
|
||
|
||
//16.
|
||
[AllowAnonymous]
|
||
[HttpGet]
|
||
[Route(APIUrls.GetServiceProvidersRouteName)]
|
||
[SignalR(SignalRTags.GetCompanies)]
|
||
public async Task<string> GetServiceProviders()
|
||
{
|
||
return await adminDal.GetCompaniesJsonAsync();
|
||
}
|
||
|
||
//18.
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetServiceProviderByIdRouteName)]
|
||
[SignalR(SignalRTags.GetCompany)]
|
||
public async Task<Company?> GetServiceProviderById([FromBody] Guid id)
|
||
{
|
||
_logger.Info($@"GetServiceProviderById called with id: {id}");
|
||
|
||
return await adminDal.GetCompanyByIdAsync(id);
|
||
}
|
||
|
||
[NonAction]
|
||
[ApiExplorerSettings(IgnoreApi = true)]
|
||
[SignalR(SignalRTags.GetCompaniesById)]
|
||
public async Task<List<Company>> GetServiceProvidersById(Guid id)
|
||
{
|
||
_logger.Info($@"GetServiceProvidersById called with id: {id}");
|
||
|
||
var company = await GetServiceProviderById(id);
|
||
return company == null ? [] : [company];
|
||
}
|
||
|
||
//17.
|
||
[Authorize]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetServiceProvidersByOwnerIdRouteName)]
|
||
[Tags("Finished", "ServiceProvider")]
|
||
[SignalR(SignalRTags.GetPropertiesByOwnerId)]
|
||
public async Task<Dictionary<Guid, string>> GetServiceProvidersByOwnerId([FromBody] Guid ownerId)
|
||
{
|
||
_logger.Info($@"GetServiceProvidersByOwnerId called with ownerId: {ownerId}");
|
||
|
||
var serviceProviders = await adminDal.GetCompaniesAsync();
|
||
|
||
//return serviceProviders.Where(x => x.OwnerId == ownerId).ToList();
|
||
var myServiceproviders = serviceProviders.Where(x => x.OwnerId == ownerId).ToDictionary(x => x.Id, x => x.Name);
|
||
//put Company id and name into a dictionary
|
||
|
||
return myServiceproviders;
|
||
}
|
||
|
||
[Authorize]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetCompaniesByContextIdRouteName)]
|
||
[Tags("Finished", "ServiceProvider")]
|
||
[SignalR(SignalRTags.GetCompaniesByContextId)]
|
||
public async Task<string> GetCompaniesByContextId([FromBody] Guid ownerId)
|
||
{
|
||
_logger.Info($@"GetServiceProvidersByOwnerId called with ownerId: {ownerId}");
|
||
|
||
var serviceProviders = await adminDal.GetCompaniesByOwnerIdAsync(ownerId);
|
||
|
||
//return serviceProviders.Where(x => x.OwnerId == ownerId).ToList();
|
||
//var myServiceproviders = serviceProviders.Where(x => x.OwnerId == ownerId).ToDictionary(x => x.Id, x => x.Name);
|
||
//put Company id and name into a dictionary
|
||
|
||
return serviceProviders.ToJson();
|
||
}
|
||
|
||
//22.
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.CreateUserProductMappingRouteName)]
|
||
[Tags("Finished", "ServiceProvider")]
|
||
[EndpointSummary("Create assigned user to product")]
|
||
[SignalR(SignalRTags.CreateUserProductMapping)]
|
||
public async Task<UserProductMapping?> CreateUserProductMapping(UserProductMapping userProductMapping)
|
||
{
|
||
_logger.Info($@"CreateUserProductMappings called with ownerId: {userProductMapping.ProductId}, {userProductMapping.UserId}");
|
||
|
||
if (userProductMapping.ProductId.IsNullOrEmpty() || userProductMapping.UserId.IsNullOrEmpty())
|
||
{
|
||
_logger.Error(@"CreateUserProductMappings; (userProductMapping.ProductId.IsNullOrEmpty() || userProductMapping.UserId.IsNullOrEmpty())");
|
||
return null;//BadRequest("Invalid request");
|
||
}
|
||
|
||
var result = await adminDal.AddUserProductMappingAsync(userProductMapping);
|
||
|
||
//TODO: A userProductMapping-nem include-olja be a User-t <20>s a Product-ot automatikusan, ez<65>rt kell <20>jra lek<65>rni! TransactionAsync T-t adjon vissza, ne csak bool-t... - J.
|
||
return result ? adminDal.GetUserProductMappingById(userProductMapping.Id) : null; //Ok(result);
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.UpdateUserProductMappingRouteName)]
|
||
[SignalR(SignalRTags.UpdateUserProductMapping)]
|
||
public async Task<string> UpdateUserProductMapping(UserProductMapping userProductMapping)
|
||
{
|
||
_logger.Info($"UpdateUserProductMapping called! + {userProductMapping.Id}");
|
||
|
||
var result = await adminDal.UpdateUserProductMappingAsync(userProductMapping);
|
||
|
||
//TODO: A userProductMapping-nem include-olja be a User-t <20>s a Product-ot automatikusan, ez<65>rt kell <20>jra lek<65>rni! TransactionAsync T-t adjon vissza, ne csak bool-t... - J.
|
||
return result == null ? string.Empty : adminDal.GetUserProductMappingById(userProductMapping.Id).ToJson();
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.DeleteUserProductMappingRouteName)]
|
||
[SignalR(SignalRTags.DeleteUserProductMapping)]
|
||
public async Task<string> DeleteUserProductMapping(UserProductMapping userProductMapping)
|
||
{
|
||
_logger.Info($"DeleteUserProductMapping called! + {userProductMapping.Id}");
|
||
|
||
var result = await adminDal.RemoveUserProductMappingAsync(userProductMapping.Id);
|
||
|
||
return result ? userProductMapping.ToJson() : string.Empty;
|
||
}
|
||
|
||
//23.
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetUserProductMappingsByProductIdRouteName)]
|
||
[SignalR(SignalRTags.GetUserProductMappingsByProductId)]
|
||
public async Task<List<UserProductMapping>> GetUserProductMappingsByProductId(Guid productId)
|
||
{
|
||
_logger.Info($@"GetUserProductMappingsByProductId called with serviceProviderId: {productId}");
|
||
|
||
return await adminDal.GetUserProductMappingsByProductIdAsync(productId);
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetUserProductMappingsByUserIdRouteName)]
|
||
[SignalR(SignalRTags.GetUserProductMappingsByUserId)]
|
||
public async Task<List<UserProductMapping>> GetUserProductMappingsByUserId(Guid userId)
|
||
{
|
||
_logger.Info($@"GetUserProductMappingsByUserId called with userId: {userId}");
|
||
|
||
return (await adminDal.GetUserProductMappingsByUserIdAsync(userId)).OrderBy(x => x.ProductId).ToList();
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetUserProductMappingByIdRouteName)]
|
||
[SignalR(SignalRTags.GetUserProductMappingById)]
|
||
public async Task<UserProductMapping?> GetUserProductMappingById(Guid id)
|
||
{
|
||
_logger.Info($@"GetUserProductMappingById called with userId: {id}");
|
||
|
||
var userproductMapping = await adminDal.GetUserProductMappingByIdAsync(id);
|
||
return userproductMapping;
|
||
}
|
||
|
||
[NonAction]
|
||
[ApiExplorerSettings(IgnoreApi = true)]
|
||
[SignalR(SignalRTags.GetUserProductMappingsById)]
|
||
public async Task<List<UserProductMapping>> GetUserProductMappingsById(Guid id)
|
||
{
|
||
_logger.Info($@"GetUserProductMappingsById called with userId: {id}");
|
||
|
||
var userproductMapping = await adminDal.GetUserProductMappingByIdAsync(id);
|
||
return userproductMapping == null ? [] : [userproductMapping];
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetAllUserProductMappingsRouteName)]
|
||
[SignalR(SignalRTags.GetAllUserProductMappings)]
|
||
public async Task<List<UserProductMapping>> GetAllUserProductMappings()
|
||
{
|
||
_logger.Info($@"GetAllUserProductMappings called");
|
||
|
||
var companyies = (await adminDal.GetAllUserProductMappingsAsync()).OrderBy(x => x.User.Profile.Name).ToList();
|
||
return companyies;
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpGet]
|
||
[Route(APIUrls.GetCarsForUserProductMappingRouteName + "/{userProductMappingId}")]
|
||
[SignalR(SignalRTags.GetCarsForUserProductMapping)]
|
||
public async Task<List<Car>> GetCarsForUserProductMapping(Guid userProductMappingId)
|
||
{
|
||
_logger.Info($@"GetCarsForUserProductMapping called with userProductMappingId: {userProductMappingId}");
|
||
|
||
var cars = await adminDal.GetCarsByUserProductMappingIdAsync(userProductMappingId);
|
||
return cars;
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpGet]
|
||
[Route(APIUrls.GetAllCarsRouteName)]
|
||
[SignalR(SignalRTags.GetAllCars)]
|
||
public async Task<List<Car>> GetAllCars()
|
||
{
|
||
_logger.Info($@"GetAllCars called");
|
||
|
||
var cars = await adminDal.GetAllCarsAsync();
|
||
return cars;
|
||
}
|
||
|
||
//[AllowAnonymous]
|
||
//[HttpGet]
|
||
//[Route(APIUrls.GetAllCarsRouteName)]
|
||
[NonAction]
|
||
[SignalR(SignalRTags.GetAllCarsByProductId)]
|
||
public async Task<List<Car>> GetAllCarsByProductId(Guid productId)
|
||
{
|
||
_logger.Debug($@"GetAllCarsByProductId called; productId: {productId}");
|
||
|
||
var cars = await adminDal.GetAllCarsbyProductIdAsync(productId);
|
||
return cars;
|
||
}
|
||
|
||
[NonAction]
|
||
[ApiExplorerSettings(IgnoreApi = true)]
|
||
private async Task<Car?> CarDataChanging(Car car, TrackingState trackingState)
|
||
{
|
||
var logText = $"[{trackingState.ToString().ToUpper()}] CarDataChanging called; Id: {car.Id}; OwnerId: {car.UserProductMappingId}; LicensePlate: {car.LicencePlate}";
|
||
|
||
if (car.UserProductMappingId.IsNullOrEmpty() || car.LicencePlate.IsNullOrWhiteSpace())
|
||
{
|
||
_logger.Error(logText);
|
||
return null;
|
||
}
|
||
|
||
_logger.Info(logText);
|
||
|
||
switch (trackingState)
|
||
{
|
||
case TrackingState.Add:
|
||
if (car.Id.IsNullOrEmpty()) car.Id = Guid.NewGuid();
|
||
|
||
return await adminDal.AddCarAsync(car) ? car : null;
|
||
case TrackingState.Update:
|
||
return await adminDal.UpdateCarAsync(car);
|
||
case TrackingState.Remove:
|
||
return await adminDal.RemoveCarAsync(car) ? car : null;
|
||
|
||
case TrackingState.Get:
|
||
case TrackingState.GetAll:
|
||
default:
|
||
throw new ArgumentOutOfRangeException(nameof(trackingState), trackingState, null);
|
||
}
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.CreateCarRouteName)]
|
||
[Tags("Finished", "Cars")]
|
||
[EndpointSummary("Create car")]
|
||
[SignalR(SignalRTags.CreateCar)]
|
||
public async Task<Car?> CreateCar(Car car) => await CarDataChanging(car, TrackingState.Add);
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.UpdateCarRouteName)]
|
||
[Tags("Finished", "Cars")]
|
||
[EndpointSummary("Update car")]
|
||
[SignalR(SignalRTags.UpdateCar)]
|
||
public async Task<Car?> UpdateCar(Car car) => await CarDataChanging(car, TrackingState.Update);
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.DeleteCarRouteName)]
|
||
[Tags("Finished", "Cars")]
|
||
[EndpointSummary("Delete car")]
|
||
[SignalR(SignalRTags.DeleteCar)]
|
||
public async Task<Car?> DeleteCar(Car car) => await CarDataChanging(car, TrackingState.Remove);
|
||
|
||
[HttpPost]
|
||
[Route(APIUrls.AddProductRouteName)]
|
||
[Tags("In-Progress", "Product")]
|
||
[SignalR(SignalRTags.AddProduct)]
|
||
public async Task<Product> AddProduct([FromBody] Product product)
|
||
{
|
||
_logger.Info(@"AddProduct called");
|
||
|
||
var result = await adminDal.AddProductAsync(product);
|
||
return product;
|
||
}
|
||
|
||
//[HttpPost]
|
||
//[Route(APIUrls.AddProductRouteName)]
|
||
//[Tags("In-Progress", "Product")]
|
||
[NonAction]
|
||
[SignalR(SignalRTags.UpdateProduct)]
|
||
public async Task<Product?> UpdateProduct([FromBody] Product product)
|
||
{
|
||
_logger.Info(@"UpdateProduct called");
|
||
|
||
return await adminDal.UpdateProductAsync(product);
|
||
;
|
||
//var result = await adminDal.UpdateProductAsync(product);
|
||
//return product;
|
||
}
|
||
|
||
//[HttpPost]
|
||
//[Route(APIUrls.AddProductRouteName)]
|
||
//[Tags("In-Progress", "Product")]
|
||
[NonAction]
|
||
[SignalR(SignalRTags.RemoveProduct)]
|
||
public async Task<Product> RemoveProduct([FromBody] Product product)
|
||
{
|
||
_logger.Info(@"RemoveProduct called");
|
||
|
||
var result = await adminDal.RemoveProductAsync(product.Id);
|
||
return product;
|
||
}
|
||
|
||
|
||
[NonAction]
|
||
[ApiExplorerSettings(IgnoreApi = true)]
|
||
public async Task<string> GetProductsByOwnerId(Guid serviceProviderId)
|
||
{
|
||
_logger.Info($@"GetProductsByServiceProviderId called with serviceProviderId: {serviceProviderId}");
|
||
|
||
if (serviceProviderId == Guid.Empty) return await Task.FromResult(string.Empty);
|
||
|
||
var products = adminDal.GetProductsJsonByServiceProviderId(serviceProviderId);
|
||
return await Task.FromResult(products);
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetProductsByServiceProviderIdRouteName)]
|
||
[Tags("In-Progress", "Product")]
|
||
[SignalR(SignalRTags.GetProductsByOwnerId)]
|
||
public async Task<string> GetProductsByServiceProviderId([FromBody] Guid serviceProviderId)
|
||
{
|
||
_logger.Info($@"GetProductsByServiceProviderId called with serviceProviderId: {serviceProviderId}");
|
||
|
||
if (serviceProviderId == Guid.Empty)
|
||
{
|
||
return await Task.FromResult("Invalid request");
|
||
}
|
||
|
||
var result = await GetProductsByOwnerId(serviceProviderId);
|
||
return result;
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpGet]
|
||
[Route(APIUrls.GetAllProductsRouteName)]
|
||
[Tags("In-Progress", "Product")]
|
||
[SignalR(SignalRTags.GetAllProducts)]
|
||
public async Task<string> GetAllProducts()
|
||
{
|
||
_logger.Info("GetAllProducts called");
|
||
|
||
var products = adminDal.GetProductsJson();
|
||
return products;
|
||
}
|
||
|
||
[NonAction]
|
||
[SignalR(SignalRTags.GetAllProductModelDtoNames)]
|
||
public async Task<List<ProductModelDtoName>> GetProductModelDtoNames()
|
||
{
|
||
_logger.Info("GetUserModelDtoEmails called");
|
||
return await adminDal.GetProductModelDtoNamesAsync();
|
||
}
|
||
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetProductByIdRouteName)]
|
||
[Tags("In-Progress", "Product")]
|
||
[SignalR(SignalRTags.GetProductById)]
|
||
public async Task<Product?> GetProductById(Guid productId)
|
||
{
|
||
_logger.Info("GetAllProducts called");
|
||
|
||
return await adminDal.GetProductByIdAsync(productId);
|
||
}
|
||
|
||
|
||
[NonAction]
|
||
[ApiExplorerSettings(IgnoreApi = true)]
|
||
[SignalR(SignalRTags.GetProductsById)]
|
||
public async Task<List<Product>> GetProductsById(Guid productId)
|
||
{
|
||
_logger.Info("GetAllProducts called");
|
||
|
||
var product = await GetProductById(productId);
|
||
return product == null ? [] : [product];
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetQrCodeByProductIdRouteName)]
|
||
[Tags("In-Progress", "Product")]
|
||
public async Task<IActionResult> GetQRCodeByProductId([FromBody] Guid productId)
|
||
{
|
||
_logger.Info(@"GetQRCode called");
|
||
|
||
if (productId == Guid.Empty)
|
||
{
|
||
return BadRequest("Product is required");
|
||
}
|
||
else
|
||
{
|
||
//var result = _serviceProviderDal.GetQRCodeAsync(productId);
|
||
|
||
var qrGenerator = new QRCodeGenerator();
|
||
var qrCodeData = qrGenerator.CreateQrCode($"https://touriam.com/{productId}", QRCodeGenerator.ECCLevel.Q);
|
||
var qrCode = new QRCode(qrCodeData);
|
||
//Bitmap qrCodeImage = qrCode.GetGraphic(20);
|
||
//var rootpath = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "assets");
|
||
var rootpath = System.IO.Path.Combine(env.WebRootPath, "assets");
|
||
var qrCodeImage = qrCode.GetGraphic(20, Color.DarkMagenta, Color.White, (Bitmap)Bitmap.FromFile(rootpath + "/myimage.png"));
|
||
_logger.Info($@"qrCodeLogo: {rootpath}/myimage.png");
|
||
var ms = new MemoryStream();
|
||
qrCodeImage.Save(ms, ImageFormat.Jpeg);
|
||
var byteImage = ms.ToArray();
|
||
|
||
var sigBase64 = Convert.ToBase64String(byteImage); // Get Base64
|
||
|
||
return Ok(sigBase64);
|
||
}
|
||
}
|
||
|
||
[AllowAnonymous]
|
||
[HttpPost]
|
||
[Route(APIUrls.GetQrCodeByProductIdAndOwnerAffiliateIdRouteName)]
|
||
public async Task<IActionResult> GetQrCodeByProductIdAndOwnerAffiliateId([FromBody] Guid[] Ids)
|
||
{
|
||
_logger.Info(@"GetQRCode called");
|
||
|
||
if (Ids[0].IsNullOrEmpty() || Ids[1].IsNullOrEmpty())
|
||
{
|
||
return BadRequest("Product is required");
|
||
}
|
||
else
|
||
{
|
||
|
||
var qrGenerator = new QRCodeGenerator();
|
||
var qrCodeData = qrGenerator.CreateQrCode($"{Setting.BaseUrl}/public/transfer/{Ids[0]}/{Ids[1]}", QRCodeGenerator.ECCLevel.Q);
|
||
var qrCode = new QRCode(qrCodeData);
|
||
//Bitmap qrCodeImage = qrCode.GetGraphic(20);
|
||
//var rootpath = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "assets");
|
||
var rootpath = System.IO.Path.Combine(env.WebRootPath, "assets");
|
||
var qrCodeImage = qrCode.GetGraphic(20, Color.DarkMagenta, Color.White, (Bitmap)Bitmap.FromFile(rootpath + "/myimage.png"));
|
||
_logger.Info($@"qrCodeLogo: {rootpath}/myimage.png");
|
||
var ms = new MemoryStream();
|
||
qrCodeImage.Save(ms, ImageFormat.Jpeg);
|
||
var byteImage = ms.ToArray();
|
||
|
||
var sigBase64 = Convert.ToBase64String(byteImage); // Get Base64
|
||
|
||
return Ok(sigBase64);
|
||
}
|
||
}
|
||
}
|
||
} |