85 lines
2.1 KiB
C#
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
|
|
};
|
|
}
|
|
}
|