Files
2025-10-27 17:39:18 -04:00

85 lines
2.1 KiB
C#

using Prefab.Catalog.Domain.Events;
using Prefab.Domain.Common;
namespace Prefab.Catalog.Domain.Entities;
public enum AttributeDataType
{
Text = 1,
Number = 3,
Boolean = 4,
Enum = 5
}
public class AttributeDefinition : EntityWithAuditAndStatus<Guid>
{
private AttributeDefinition()
{
}
public string Name { get; private set; } = string.Empty;
public AttributeDataType DataType { get; private set; }
public string? Unit { get; private set; }
public static AttributeDefinition Create(string name, AttributeDataType dataType, string? unit = null)
{
ArgumentException.ThrowIfNullOrWhiteSpace(name);
var definition = new AttributeDefinition
{
Id = Guid.NewGuid(),
Name = name.Trim(),
DataType = dataType,
Unit = string.IsNullOrWhiteSpace(unit) ? null : unit.Trim()
};
definition.AddEvent(new AttributeDefinitionCreated(definition.Id, definition.Name, definition.DataType));
return definition;
}
}
public class ProductAttributeValue : EntityWithAuditAndStatus<Guid>
{
private ProductAttributeValue()
{
}
public Guid ProductId { get; internal set; }
public Product Product { get; internal set; } = null!;
public Guid AttributeDefinitionId { get; internal set; }
public AttributeDefinition AttributeDefinition { get; internal set; } = null!;
public string? Value { get; internal set; }
public decimal? NumericValue { get; internal set; }
public string? UnitCode { get; internal set; }
public string? EnumCode { get; internal set; }
internal static ProductAttributeValue Create(
Guid productId,
Guid attributeDefinitionId,
string? value,
decimal? numericValue,
string? unitCode,
string? enumCode)
{
return new ProductAttributeValue
{
Id = Guid.NewGuid(),
ProductId = productId,
AttributeDefinitionId = attributeDefinitionId,
Value = value,
NumericValue = numericValue,
UnitCode = unitCode,
EnumCode = enumCode
};
}
}