FlashSaleModels.java

package com.ecommerce.marketing.application.model;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

import java.math.BigDecimal;
import java.time.Instant;

public final class FlashSaleModels {

    private FlashSaleModels() {
    }

    public record CreateFlashSaleCommand(
            String name,
            Long productId,
            Long skuId,
            BigDecimal salePrice,
            int admissionLimit,
            Instant startsAt,
            Instant endsAt
    ) {
    }

    public record FlashSaleActivityView(
            String activityNo,
            String name,
            @JsonSerialize(using = ToStringSerializer.class)
            Long productId,
            @JsonSerialize(using = ToStringSerializer.class)
            Long skuId,
            BigDecimal salePrice,
            int admissionLimit,
            String status,
            Instant startsAt,
            Instant endsAt,
            int version
    ) {
    }

    public record FlashSaleAdmissionView(
            String requestToken,
            String activityNo,
            @JsonSerialize(using = ToStringSerializer.class)
            Long userId,
            String status,
            Integer remainingAdmissions,
            Instant acceptedAt,
            String orderNo,
            String failureCode,
            Instant completedAt
    ) {
    }

    public record FlashSaleOrderResultCommand(
            String eventId,
            String eventType,
            String requestToken,
            String activityNo,
            Long userId,
            String orderNo,
            String failureCode,
            Instant completedAt
    ) {
    }
}