Files
AIPS/dotnet/AipsCore/Infrastructure/Persistence/Shape/ShapeMappers.cs
2026-02-09 21:21:17 +01:00

205 lines
6.6 KiB
C#

using AipsCore.Domain.Models.Shape.Enums;
using AipsCore.Domain.Models.Shape.Sub.Arrow;
using AipsCore.Domain.Models.Shape.Sub.Line;
using AipsCore.Domain.Models.Shape.Sub.Rectangle;
using AipsCore.Domain.Models.Shape.Sub.TextShape;
namespace AipsCore.Infrastructure.Persistence.Shape;
public static class ShapeMappers
{
#region FROM_ENTITY
public static Domain.Models.Shape.Shape EntityToModel(Shape shape)
{
return shape.Type switch
{
ShapeType.Rectangle => EntityToRectangle(shape),
ShapeType.Line => EntityToLine(shape),
ShapeType.Arrow => EntityToArrow(shape),
ShapeType.Text => EntityToTextShape(shape),
_ => throw new ArgumentOutOfRangeException()
};
}
public static Rectangle EntityToRectangle(Shape shape)
{
return Rectangle.Create(
shape.Id.ToString(),
shape.WhiteboardId.ToString(),
shape.PositionX, shape.PositionY,
shape.Color,
shape.EndPositionX!.Value, shape.EndPositionY!.Value,
shape.Thickness!.Value);
}
public static Line EntityToLine(Shape shape)
{
return Line.Create(
shape.Id.ToString(),
shape.WhiteboardId.ToString(),
shape.PositionX, shape.PositionY,
shape.Color,
shape.EndPositionX!.Value, shape.EndPositionY!.Value,
shape.Thickness!.Value);
}
public static Arrow EntityToArrow(Shape shape)
{
return Arrow.Create(
shape.Id.ToString(),
shape.WhiteboardId.ToString(),
shape.PositionX, shape.PositionY,
shape.Color,
shape.EndPositionX!.Value, shape.EndPositionY!.Value,
shape.Thickness!.Value);
}
public static TextShape EntityToTextShape(Shape shape)
{
return TextShape.Create(
shape.Id.ToString(),
shape.WhiteboardId.ToString(),
shape.PositionX, shape.PositionY,
shape.Color,
shape.TextValue!, shape.TextSize!.Value);
}
#endregion
#region TO_ENTITY
public static Shape ModelToEntity(Domain.Models.Shape.Shape model)
{
return model.ShapeType switch
{
ShapeType.Rectangle => RectangleToEntity((Rectangle)model),
ShapeType.Line => LineToEntity((Line)model),
ShapeType.Arrow => ArrowToEntity((Arrow)model),
ShapeType.Text => TextShapeToEntity((TextShape)model),
_ => throw new ArgumentOutOfRangeException()
};
}
public static Shape RectangleToEntity(Rectangle rectangle)
{
return new Shape()
{
Id = new Guid(rectangle.Id.Value),
Type = rectangle.ShapeType,
WhiteboardId = new Guid(rectangle.WhiteboardId.IdValue),
PositionX = rectangle.Position.X,
PositionY = rectangle.Position.Y,
Color = rectangle.Color.Value,
//SPECIFIC
EndPositionX = rectangle.EndPosition.X,
EndPositionY = rectangle.EndPosition.Y,
Thickness = rectangle.BorderThickness.Value,
};
}
public static Shape LineToEntity(Line line)
{
return new Shape()
{
Id = new Guid(line.Id.Value),
Type = line.ShapeType,
WhiteboardId = new Guid(line.WhiteboardId.IdValue),
PositionX = line.Position.X,
PositionY = line.Position.Y,
Color = line.Color.Value,
//SPECIFIC
EndPositionX = line.EndPosition.X,
EndPositionY = line.EndPosition.Y,
Thickness = line.Thickness.Value,
};
}
public static Shape ArrowToEntity(Arrow arrow)
{
return new Shape()
{
Id = new Guid(arrow.Id.Value),
Type = arrow.ShapeType,
WhiteboardId = new Guid(arrow.WhiteboardId.IdValue),
PositionX = arrow.Position.X,
PositionY = arrow.Position.Y,
Color = arrow.Color.Value,
//SPECIFIC
EndPositionX = arrow.EndPosition.X,
EndPositionY = arrow.EndPosition.Y,
Thickness = arrow.Thickness.Value,
};
}
public static Shape TextShapeToEntity(TextShape textShape)
{
return new Shape()
{
Id = new Guid(textShape.Id.Value),
Type = textShape.ShapeType,
WhiteboardId = new Guid(textShape.WhiteboardId.IdValue),
PositionX = textShape.Position.X,
PositionY = textShape.Position.Y,
Color = textShape.Color.Value,
//SPECIFIC
TextValue = textShape.TextShapeValue.Text,
TextSize = textShape.TextShapeSize.Size,
};
}
#endregion
#region UPDATE_ENTITY
public static void UpdateEntity(Shape entity, Domain.Models.Shape.Shape model)
{
entity.WhiteboardId = new Guid(model.WhiteboardId.IdValue);
entity.PositionX = model.Position.X;
entity.PositionY = model.Position.Y;
entity.Color = model.Color.Value;
switch (model.ShapeType)
{
case ShapeType.Rectangle:
UpdateEntityFromRectangle(entity, (Rectangle)model);
break;
case ShapeType.Line:
UpdateEntityFromLine(entity, (Line)model);
break;
case ShapeType.Arrow:
UpdateEntityFromArrow(entity, (Arrow)model);
break;
case ShapeType.Text:
UpdateEntityFromTextShape(entity, (TextShape)model);
break;
};
}
public static void UpdateEntityFromRectangle(Shape entity, Rectangle rectangle)
{
entity.EndPositionX = rectangle.EndPosition.X;
entity.EndPositionY = rectangle.EndPosition.Y;
entity.Thickness = rectangle.BorderThickness.Value;
}
public static void UpdateEntityFromLine(Shape entity, Line line)
{
entity.EndPositionX = line.EndPosition.X;
entity.EndPositionY = line.EndPosition.Y;
entity.Thickness = line.Thickness.Value;
}
public static void UpdateEntityFromArrow(Shape entity, Arrow arrow)
{
entity.EndPositionX = arrow.EndPosition.X;
entity.EndPositionY = arrow.EndPosition.Y;
entity.Thickness = arrow.Thickness.Value;
}
public static void UpdateEntityFromTextShape(Shape entity, TextShape textShape)
{
entity.TextValue = textShape.TextShapeValue.Text;
entity.TextSize = textShape.TextShapeSize.Size;
}
#endregion
}