3 Commits

Author SHA1 Message Date
khwezi 6f3a8aa968 Merge pull request 'products' (#22) from products into master
Reviewed-on: #22
2026-05-20 21:19:27 +02:00
Khwezi Mngoma 0d3bd52581 Moved CreateProductModel to shared Features library
continuous-integration/drone/pr Build is passing
2026-05-20 21:18:41 +02:00
Khwezi Mngoma 2e59f4d8ed Fixed input model attributes 2026-05-20 17:47:53 +02:00
3 changed files with 3 additions and 35 deletions
+1
View File
@@ -93,6 +93,7 @@
<label class="console-field-label">Primary Cover</label>
<div class="book-cover-dropzone">
<InputFile OnChange="HandleMainImageUpload" accept=".png,.jpg,.jpeg,.webp" class="hidden-file-input" id="main-image-file" />
<ValidationMessage For="@(() => ProductModel.ImageUrl)" style="color: #ff5722; font-size: 0.75rem;" />
@if (string.IsNullOrEmpty(ProductModel.ImageUrl))
{
+1 -34
View File
@@ -1,4 +1,5 @@
using LiteCharms.Features.S3.Abstractions;
using LiteCharms.Features.Shop.Products.Models;
using static LiteCharms.Features.S3.Constants;
namespace ShopAdmin.Components;
@@ -8,7 +9,6 @@ public partial class CreateProduct([FromKeyedServices(BookshopBucketName)] IS3Se
private bool isCalendarOpen = false;
private DateTime calendarViewingMonth = DateTime.Today;
private List<DateTime?> calendarDays = new();
private string currentCalendarMonthYearText => calendarViewingMonth.ToString("MMMM yyyy");
private readonly CancellationTokenSource cancellationTokenSource = new();
private CancellationToken cancellationToken;
@@ -186,36 +186,3 @@ public partial class CreateProduct([FromKeyedServices(BookshopBucketName)] IS3Se
StateHasChanged();
}
}
public class CreateProductModel
{
[Required(ErrorMessage = "Product name is required.")]
public string? Name { get; set; }
[Required(ErrorMessage = "Summary is required.")]
public string? Summary { get; set; }
[Required(ErrorMessage = "Description is required.")]
public string? Description { get; set; }
[Range(0.01, double.MaxValue, ErrorMessage = "Price must be greater than zero.")]
public decimal Price { get; set; }
[Required(ErrorMessage = "Author metadata is required.")]
public string? Author { get; set; }
[Required(ErrorMessage = "Publication Date is required.")]
public DateTime PublishDate { get; set; } = DateTime.Today;
[Required(ErrorMessage = "Copyright Information field is required.")]
public string? CopyrightInfo { get; set; }
[Required(ErrorMessage = "ISBN code is required.")]
[RegularExpression(@"^(?=(?:\D*\d){10}(?:(?:\D*\d){3})?$)[\d-]+$", ErrorMessage = "Please enter a valid ISBN-10 or ISBN-13 string.")]
public string? Isbn { get; set; }
[Required(ErrorMessage = "Primary image is required.")]
public string? ImageUrl { get; set; }
public List<string> Thumbnails { get; set; } = [];
}
+1 -1
View File
@@ -16,7 +16,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="LiteCharms.Features" Version="1.40.0" />
<PackageReference Include="LiteCharms.Features" Version="1.41.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.QuickGrid" Version="10.0.8" />
<PackageReference Include="Polly" Version="8.6.6" />
</ItemGroup>