http-api/src/Persistence/PostgreSql/Configurations/TicketConfiguration.cs
2025-05-20 20:39:09 +03:00

106 lines
3.4 KiB
C#

using cuqmbr.TravelGuide.Domain.Entities;
using cuqmbr.TravelGuide.Domain.Enums;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace cuqmbr.TravelGuide.Persistence.PostgreSql.Configurations;
public class TicketConfiguration : BaseConfiguration<Ticket>
{
public override void Configure(EntityTypeBuilder<Ticket> builder)
{
builder
.Property(t => t.Currency)
.HasColumnName("currency")
.IsRequired(true);
builder
.ToTable(
"tickets",
ve => ve.HasCheckConstraint(
"ck_" +
$"{builder.Metadata.GetTableName()}_" +
$"{builder.Property(ve => ve.Currency)
.Metadata.GetColumnName()}",
$"{builder.Property(ve => ve.Currency)
.Metadata.GetColumnName()} IN ('{String
.Join("', '", Currency.Enumerations
.Values.Select(v => v.Name))}')"));
base.Configure(builder);
builder
.Property(t => t.DepartureRouteAddressId)
.HasColumnName("departure_route_address_id")
.HasColumnType("bigint")
.IsRequired(true);
builder
.Property(t => t.ArrivalRouteAddressId)
.HasColumnName("arrival_route_address_id")
.HasColumnType("bigint")
.IsRequired(true);
builder
.Property(t => t.Order)
.HasColumnName("order")
.HasColumnType("smallint")
.IsRequired(true);
builder
.Property(t => t.Cost)
.HasColumnName("cost")
.HasColumnType("numeric(24,12)")
.IsRequired(true);
builder
.Property(t => t.TicketGroupId)
.HasColumnName("ticket_group_id")
.HasColumnType("bigint")
.IsRequired(true);
builder
.HasOne(t => t.TicketGroup)
.WithMany(tg => tg.Tickets)
.HasForeignKey(t => t.TicketGroupId)
.HasConstraintName(
"fk_" +
$"{builder.Metadata.GetTableName()}_" +
$"{builder.Property(t => t.TicketGroupId).Metadata.GetColumnName()}")
.OnDelete(DeleteBehavior.Cascade);
builder
.HasIndex(t => t.TicketGroupId)
.HasDatabaseName(
"ix_" +
$"{builder.Metadata.GetTableName()}_" +
$"{builder.Property(t => t.TicketGroupId).Metadata.GetColumnName()}");
builder
.Property(t => t.VehicleEnrollmentId)
.HasColumnName("vehicle_enrollment_id")
.HasColumnType("bigint")
.IsRequired(true);
builder
.HasOne(t => t.VehicleEnrollment)
.WithMany(ve => ve.Tickets)
.HasForeignKey(t => t.VehicleEnrollmentId)
.HasConstraintName(
"fk_" +
$"{builder.Metadata.GetTableName()}_" +
$"{builder.Property(t => t.VehicleEnrollmentId).Metadata.GetColumnName()}")
.OnDelete(DeleteBehavior.Cascade);
builder
.HasIndex(t => t.VehicleEnrollmentId)
.HasDatabaseName(
"ix_" +
$"{builder.Metadata.GetTableName()}_" +
$"{builder.Property(t => t.VehicleEnrollmentId).Metadata.GetColumnName()}");
}
}