ProductService tested and stable
This commit is contained in:
@@ -64,17 +64,22 @@ public sealed class ProductService(IDbContextFactory<MidrandBooksDbContext> cont
|
||||
|
||||
var query = context.Products.AsQueryable();
|
||||
|
||||
var cultureInfo = CultureInfo.InvariantCulture;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.Name))
|
||||
query = query.Where(p => EF.Functions.ILike(p.Name!, $"%{filter.Name}%"));
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.Title))
|
||||
query = query.Where(p => p.Name!.Contains(filter.Title));
|
||||
query = query.Where(p => EF.Functions.ILike(p.Name!, $"%{filter.Title}%"));
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.Category))
|
||||
query = query.Where(p => p.Categories!.Any(c => c == filter.Category));
|
||||
query = query.Where(p => p.Categories.Contains(filter.Category));
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.Manufacturer))
|
||||
query = query.Where(p => p.Metadata!.Manufacturer == filter.Manufacturer);
|
||||
query = query.Where(p => EF.Functions.ILike(p.Metadata!.Manufacturer!, $"%{filter.Manufacturer}%"));
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(filter.SerialNumber))
|
||||
query = query.Where(p => p.Metadata!.SerialNumber == filter.SerialNumber);
|
||||
query = query.Where(p => EF.Functions.ILike(p.Metadata!.SerialNumber!, $"%{filter.SerialNumber}%"));
|
||||
|
||||
if (filter.MinPrice > 0)
|
||||
query = query.Where(p => p.Prices!.Any(pr => pr.Amount >= filter.MinPrice && pr.Amount <= filter.MaxPrice));
|
||||
@@ -165,7 +170,7 @@ public sealed class ProductService(IDbContextFactory<MidrandBooksDbContext> cont
|
||||
}
|
||||
}
|
||||
|
||||
public async ValueTask<Result<ProductPrice[]>> GetProductPriceAsync(long productId, CancellationToken cancellationToken = default)
|
||||
public async ValueTask<Result<ProductPrice>> GetProductPriceAsync(long productId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -175,16 +180,16 @@ public sealed class ProductService(IDbContextFactory<MidrandBooksDbContext> cont
|
||||
.AsNoTracking()
|
||||
.OrderByDescending(p => p.CreatedAt)
|
||||
.ThenBy(p => p.UpdatedAt)
|
||||
.FirstOrDefaultAsync(p => p.ProductId == productId, cancellationToken);
|
||||
.FirstOrDefaultAsync(p => p.ProductId == productId && p.Enabled, cancellationToken);
|
||||
|
||||
return product is not null
|
||||
? Result.Ok(new[] { product.ToModel() })
|
||||
: Result.Fail<ProductPrice[]>(new Error($"No price found for product with ID {productId}"));
|
||||
? Result.Ok(product.ToModel())
|
||||
: Result.Fail<ProductPrice>(new Error($"No price found for product with ID {productId}"));
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return Result.Fail<ProductPrice[]>(new Error(ex.Message).CausedBy(ex));
|
||||
return Result.Fail<ProductPrice>(new Error(ex.Message).CausedBy(ex));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user