Commit ba89bf71 authored by Eric Dieckman's avatar Eric Dieckman
Browse files

Access domain API actions working

parent 95446997
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
using Cals.Visor.Models;
using Cals.Visor.Models.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Metadata;

namespace Cals.Visor.Infrastructure.Contexts;

@@ -32,6 +34,22 @@ public class ApplicationDbContext : DbContext
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);

        foreach (IMutableEntityType entityType in modelBuilder.Model.GetEntityTypes())
        {
            // mark this to have the value generated on add (in the database)
            if (typeof(ICreatedAt).IsAssignableFrom(entityType.ClrType))
            {
                modelBuilder.Entity(entityType.ClrType).Property(nameof(ICreatedAt.CreatedAt))
                                    .ValueGeneratedOnAddOrUpdate();
            }

            if (typeof(IUpdatedAt).IsAssignableFrom(entityType.ClrType))
            {
                modelBuilder.Entity(entityType.ClrType).Property(nameof(IUpdatedAt.UpdatedAt))
                    .ValueGeneratedOnAdd();
            }
        }
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
@@ -39,4 +57,30 @@ public class ApplicationDbContext : DbContext
        optionsBuilder
            .UseSnakeCaseNamingConvention();
    }

    public override int SaveChanges(bool acceptAllChangesOnSuccess)
    {
        UpdateTimestamps();
        return base.SaveChanges(acceptAllChangesOnSuccess);
    }

    public override async Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
    {
        UpdateTimestamps();
        return await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
    }

    /// <summary>
    /// Updates all UpdatedAt with UTCNow
    /// </summary>
    private void UpdateTimestamps()
    {
        IEnumerable<EntityEntry<IUpdatedAt>> entries = ChangeTracker.Entries<IUpdatedAt>()
            .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified);

        foreach (EntityEntry<IUpdatedAt> entry in entries)
        {
            entry.Entity.UpdatedAt = DateTime.UtcNow;
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ internal sealed class ColumnNames
        internal const string AccessDomainId = "pa_access_domain_id";
        internal const string FirewallVlanId = "pa_firewall_vlan_id";
        internal const string AccessDomainFirewallId = "pa_access_domains_pa_firewalls_id";
        internal const string AccessDomainVsysId = "pa_access_domain_id";
        internal const string AccessDomainVsysId = "pa_access_domains_pa_vsyses_id";
    }

    internal sealed class Infoblox
+7 −5
Original line number Diff line number Diff line
@@ -27,13 +27,12 @@ public class LocationEntityTypeConfiguration : IEntityTypeConfiguration<Location
            .HasMany(l => l.Vlans)
            .WithMany() // You can add .WithMany(v => v.Locations) if you add a Locations collection to Vlan
            .UsingEntity<LocationVlan>(
                TableNames.LocationVlans,
                j => j
                    .HasOne<Vlan>()
                    .HasOne(e => e.Vlan)
                    .WithMany()
                    .HasForeignKey(e => e.VlanId),
                j => j
                    .HasOne<Location>()
                    .HasOne(e => e.Location)
                    .WithMany()
                    .HasForeignKey(e => e.LocationId),
                j =>
@@ -42,10 +41,13 @@ public class LocationEntityTypeConfiguration : IEntityTypeConfiguration<Location

                    j.HasKey(e => e.LocationVlanId);

                    j.Property(e => e.Vlan)
                    j.Property(e => e.LocationVlanId)
                        .HasColumnName(ColumnNames.LocationVlanId);

                    j.Property(e => e.VlanId)
                        .HasColumnName(ColumnNames.VlanId);

                    j.Property(e => e.Location)
                    j.Property(e => e.LocationId)
                        .HasColumnName(ColumnNames.LocationId);
                }
            );
+8 −11
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ public class PaloAltoAccessDomainEntityTypeConfiguration : IEntityTypeConfigurat
        builder.HasKey(e => e.AccessDomainId);

        builder.Property(e => e.AccessDomainId)
            .HasColumnName(ColumnNames.PaloAlto.AccessDomainId));
            .HasColumnName(ColumnNames.PaloAlto.AccessDomainId);

        builder.Property(e => e.Name)
            .HasMaxLength(100);
@@ -28,20 +28,19 @@ public class PaloAltoAccessDomainEntityTypeConfiguration : IEntityTypeConfigurat
        builder.HasMany(e => e.Vsyses)
            .WithMany()
            .UsingEntity<PaloAltoAccessDomainVsys>(
                TableNames.PaloAltoAccessDomainsToVsyses,
                j => j
                    .HasOne<PaloAltoVsys>()
                    .HasOne(e => e.Vsys)
                    .WithMany()
                    .HasForeignKey(e => e.VsysId),
                j => j
                    .HasOne<PaloAltoAccessDomain>()
                    .HasOne(e => e.AccessDomain)
                    .WithMany()
                    .HasForeignKey(e => e.AccessDomainId),
                j =>
                {
                    j.ToTable(TableNames.PaloAltoAccessDomainsToVsyses);

                    j.HasKey(ColumnNames.PaloAlto.AccessDomainVsysId);
                    j.HasKey(e => e.AccessDomainVsysId);

                    j.Property(e => e.AccessDomainVsysId)
                        .HasColumnName(ColumnNames.PaloAlto.AccessDomainVsysId);
@@ -57,20 +56,19 @@ public class PaloAltoAccessDomainEntityTypeConfiguration : IEntityTypeConfigurat
        builder.HasMany(e => e.Firewalls)
            .WithMany()
            .UsingEntity<PaloAltoAccessDomainFirewall>(
                TableNames.PaloAltoAccessDomainsToFirewalls,
                j => j
                    .HasOne<PaloAltoFirewall>()
                    .HasOne(e => e.Firewall)
                    .WithMany()
                    .HasForeignKey(e => e.FirewallId),
                j => j
                    .HasOne<PaloAltoAccessDomain>()
                    .HasOne(e => e.AccessDomain)
                    .WithMany()
                    .HasForeignKey(e => e.AccessDomainId),
                j =>
                {
                    j.ToTable(TableNames.PaloAltoAccessDomainsToVsyses);
                    j.ToTable(TableNames.PaloAltoAccessDomainsToFirewalls);

                    j.HasKey(ColumnNames.PaloAlto.AccessDomainFirewallId);
                    j.HasKey(e => e.AccessDomainFirewallId);

                    j.Property(e => e.AccessDomainFirewallId)
                        .HasColumnName(ColumnNames.PaloAlto.AccessDomainFirewallId);
@@ -78,7 +76,6 @@ public class PaloAltoAccessDomainEntityTypeConfiguration : IEntityTypeConfigurat
                    j.Property(e => e.FirewallId)
                        .HasColumnName(ColumnNames.PaloAlto.FirewallId);


                    j.Property(e => e.AccessDomainId)
                        .HasColumnName(ColumnNames.PaloAlto.AccessDomainId);
                }
+7 −0
Original line number Diff line number Diff line
namespace Cals.Visor.Models;

public interface ICreatedAt
{
    DateTime? CreatedAt { get; set; }
}
Loading