CatalogModels.java
package com.ecommerce.catalog.application.model;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import java.math.BigDecimal;
import java.util.List;
public final class CatalogModels {
private CatalogModels() {
}
public record CategoryView(
@JsonSerialize(using = ToStringSerializer.class) Long id,
@JsonSerialize(using = ToStringSerializer.class) Long parentId,
String name,
String slug,
int sortOrder
) {
}
public record BrandView(
@JsonSerialize(using = ToStringSerializer.class) Long id,
String name,
String slug
) {
}
public record SkuView(
@JsonSerialize(using = ToStringSerializer.class) Long id,
String skuCode,
String name,
String specJson,
BigDecimal salePrice,
BigDecimal marketPrice,
String status,
int version
) {
}
public record MediaView(
@JsonSerialize(using = ToStringSerializer.class) Long id,
@JsonSerialize(using = ToStringSerializer.class) Long skuId,
String objectKey,
String mimeType,
long sizeBytes,
int sortOrder,
String url
) {
}
public record ProductSummary(
@JsonSerialize(using = ToStringSerializer.class) Long id,
String title,
String subtitle,
CategoryView category,
BrandView brand,
BigDecimal minimumPrice,
String coverUrl
) {
}
public record ProductDetail(
@JsonSerialize(using = ToStringSerializer.class) Long id,
String title,
String subtitle,
String description,
String status,
int version,
CategoryView category,
BrandView brand,
List<SkuView> skus,
List<MediaView> media
) {
public ProductDetail {
skus = List.copyOf(skus);
media = List.copyOf(media);
}
}
public record CreateSkuCommand(
String skuCode,
String name,
String specJson,
BigDecimal salePrice,
BigDecimal marketPrice
) {
}
public record CreateProductCommand(
Long categoryId,
Long brandId,
String title,
String subtitle,
String description,
List<CreateSkuCommand> skus
) {
public CreateProductCommand {
skus = List.copyOf(skus);
}
}
public record UpdateProductCommand(
Long categoryId,
Long brandId,
String title,
String subtitle,
String description,
int expectedVersion
) {
}
public record UpdateSkuCommand(
String name,
String specJson,
BigDecimal salePrice,
BigDecimal marketPrice,
String status,
int expectedVersion
) {
}
public record UploadIntent(String objectKey, String uploadUrl, long expiresInSeconds) {
}
}