From f1db228128afeba141369be2b3bb3cd40cd8ed34 Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Sat, 28 Jun 2025 11:36:17 -0700 Subject: [PATCH] Change backend for better image loading --- .../Controllers/ProductController.cs | 61 ++++++++----------- .../Entities/DatabaseObjects.cs | 1 - .../Services/DatabaseService/ProductImage.cs | 38 +++++++++++- 3 files changed, 63 insertions(+), 37 deletions(-) diff --git a/src/MistoxWebsite.Server/Controllers/ProductController.cs b/src/MistoxWebsite.Server/Controllers/ProductController.cs index 6a52eb1..ebc0c4c 100755 --- a/src/MistoxWebsite.Server/Controllers/ProductController.cs +++ b/src/MistoxWebsite.Server/Controllers/ProductController.cs @@ -2,6 +2,7 @@ using MistoxWebsite.Server.Services.DatabaseService; using MistoxWebsite.Server.Entities; using System.Security.Claims; +using System.Threading.Tasks; namespace MistoxWebsite.Server.Controllers { [ApiController] @@ -9,8 +10,6 @@ namespace MistoxWebsite.Server.Controllers { DatabaseService _databaseService; - public static Product[] CatalogItems = []; - public ProductController( DatabaseService databaseService ) { _databaseService = databaseService; } @@ -72,7 +71,6 @@ namespace MistoxWebsite.Server.Controllers { } obj.Images = building.ToArray(); await _databaseService.NewProduct(obj); - await UpdateStore(); return true; } catch { return false; @@ -84,7 +82,6 @@ namespace MistoxWebsite.Server.Controllers { public async Task> UpdateProduct( [FromBody] Product obj ) { try { await _databaseService.UpdateProduct( obj ); - await UpdateStore(); return true; } catch { return false; @@ -93,31 +90,45 @@ namespace MistoxWebsite.Server.Controllers { [Route( "api/product/get" )] [HttpPost] - public ActionResult GetProduct( [FromBody] Product product ) { + public async Task> GetProduct( [FromBody] int productID ) { try { - foreach( Product? prod in CatalogItems ) { - if( product.ID == prod.ID ) { - return prod; - } + Product? x = await _databaseService.GetProduct(productID); + if (x != null) { + return x; + } else { + return NotFound(); } - product.ID = -1; - return product; } catch { - return new Product(); + return NotFound(); } } [Route( "api/product/getall" )] [HttpPost] - public ActionResult GetAllProducts() { + public async Task GetAllProducts() { try { - return CatalogItems.ToArray(); + return await _databaseService.GetAllProducts(); } catch { - return new Product[0]; + return Array.Empty(); } } - [Route( "api/product/getowned" )] + [Route( "api/productimage/get" )] + [HttpGet] + public async Task GetProductImage( int ProductID, int ImageID ) { + try { + ProductImage? img = await _databaseService.GetImage(ProductID, ImageID); + if (img != null) { + return File(img.Image, "Image/*"); + } else { + return NotFound(); + } + } catch { + return NotFound(); + } + } + + [Route("api/product/getowned")] [HttpPost] public async Task> GetOwnedProduct() { try { @@ -180,24 +191,6 @@ namespace MistoxWebsite.Server.Controllers { } } - [Route( "api/product/hotreload" )] - [HttpPost] // Not implimented in admin panel - public async Task UpdateStore() { - await HotReload( _databaseService ); - } - - public static async Task HotReload( DatabaseService ds ) { - try { - CatalogItems = await ds.GetAllProducts(); - } catch { - CatalogItems = new Product[]{ - new Product() { ID = 0, Name = "offline prod1", Cost = 100, Description = "offline desc" }, - new Product() { ID = 1, Name = "offline prod2", Cost = 100, Description = "offline desc" }, - new Product() { ID = 2, Name = "offline prod3", Cost = 100, Description = "offline desc" } - }; - }; - } - } } diff --git a/src/MistoxWebsite.Server/Entities/DatabaseObjects.cs b/src/MistoxWebsite.Server/Entities/DatabaseObjects.cs index 495b317..d7fc70a 100755 --- a/src/MistoxWebsite.Server/Entities/DatabaseObjects.cs +++ b/src/MistoxWebsite.Server/Entities/DatabaseObjects.cs @@ -24,7 +24,6 @@ namespace MistoxWebsite.Server.Entities { public int ID { get; set; } // PK public string Name { get; set; } = ""; public string Description { get; set; } = ""; - public int CurShowingIMG = 0; public ProductImage[] Images { get; set; } = []; public int Cost { get; set; } public string URL { get; set; } = ""; diff --git a/src/MistoxWebsite.Server/Services/DatabaseService/ProductImage.cs b/src/MistoxWebsite.Server/Services/DatabaseService/ProductImage.cs index 09424f8..3d273f2 100644 --- a/src/MistoxWebsite.Server/Services/DatabaseService/ProductImage.cs +++ b/src/MistoxWebsite.Server/Services/DatabaseService/ProductImage.cs @@ -6,6 +6,42 @@ using System.Data.Common; namespace MistoxWebsite.Server.Services.DatabaseService { public partial class DatabaseService { + public async Task GetImage(int ProductID, int ImageID) { + ProductImage? item = null; + using (MySqlConnection connection = GetConnection()) { + connection.Open(); + string command = @" + SELECT * FROM ProductImage + WHERE ProductID = @ProductID AND ImageID = @ImageID; + "; + + MySqlCommand cmd = new MySqlCommand(command, connection); + cmd.Parameters.AddWithValue("@ProductID", ProductID); + cmd.Parameters.AddWithValue("@ImageID", ImageID); + + using (DbDataReader reader = await cmd.ExecuteReaderAsync()) { + while (await reader.ReadAsync()) { + if (reader == null) { + break; + } + int _ImageID = reader.GetInt32("ImageID"); + int _ProductID = reader.GetInt32("ProductID"); + byte[] _Image = (byte[])reader["Image"]; + string _Name = reader.GetString("Name"); + + item = new ProductImage() { + ImageID = _ImageID, + ProductID = _ProductID, + Image = _Image, + Name = _Name + }; + break; + } + } + } + return item; + } + public async Task GetAllImages(int ProductID) { List items = new List(); using (MySqlConnection connection = GetConnection()) { @@ -25,13 +61,11 @@ namespace MistoxWebsite.Server.Services.DatabaseService { } int _ImageID = reader.GetInt32("ImageID"); int _ProductID = reader.GetInt32("ProductID"); - byte[] _Image = (byte[])reader["Image"]; string _Name = reader.GetString("Name"); items.Add(new ProductImage() { ImageID = _ImageID, ProductID = _ProductID, - Image = _Image, Name = _Name }); }