diff --git a/.idea/.idea.Unitagram/.idea/efCoreCommonOptions.xml b/.idea/.idea.Unitagram/.idea/efCoreCommonOptions.xml index 8400ccf..de998a3 100644 --- a/.idea/.idea.Unitagram/.idea/efCoreCommonOptions.xml +++ b/.idea/.idea.Unitagram/.idea/efCoreCommonOptions.xml @@ -3,7 +3,7 @@ diff --git a/Unitagram.Domain/OtpConfirmation.cs b/Unitagram.Domain/OtpConfirmation.cs new file mode 100644 index 0000000..8db0fca --- /dev/null +++ b/Unitagram.Domain/OtpConfirmation.cs @@ -0,0 +1,10 @@ +namespace Unitagram.Domain; + +public class OtpConfirmation +{ + public Guid UserId { get; set; } + public string Name { get; set; } = string.Empty; + public string Value { get; set; } = string.Empty; + public int RetryCount { get; set; } + public DateTime? RetryDateTime { get; set; } +} \ No newline at end of file diff --git a/Unitagram.Persistence/Configurations/OtpConfirmationConfiguration.cs b/Unitagram.Persistence/Configurations/OtpConfirmationConfiguration.cs new file mode 100644 index 0000000..3c94af9 --- /dev/null +++ b/Unitagram.Persistence/Configurations/OtpConfirmationConfiguration.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using Unitagram.Domain; + +namespace Unitagram.Persistence.Configurations; + +public class OtpConfirmationConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(o => new { o.UserId, o.Name}); + + builder.Property(o => o.Name) + .HasMaxLength(50); + + builder.Property(o => o.RetryCount) + .HasColumnType("tinyint") + .HasDefaultValue((byte)0) + .IsRequired(); + + builder.Property(o => o.Value) + .IsRequired() + .HasMaxLength(10); + + builder.Property(o => o.RetryDateTime) + .IsRequired(false); + } +} \ No newline at end of file diff --git a/Unitagram.Persistence/DatabaseContext/UnitagramDatabaseContext.cs b/Unitagram.Persistence/DatabaseContext/UnitagramDatabaseContext.cs index 2b4258a..77d084c 100644 --- a/Unitagram.Persistence/DatabaseContext/UnitagramDatabaseContext.cs +++ b/Unitagram.Persistence/DatabaseContext/UnitagramDatabaseContext.cs @@ -17,6 +17,7 @@ protected UnitagramDatabaseContext() public DbSet University { get; set; } public DbSet UniversityUser { get; set; } + public DbSet OtpConfirmation { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { diff --git a/Unitagram.Persistence/Migrations/20230910144223_AddOtpConfirmation.Designer.cs b/Unitagram.Persistence/Migrations/20230910144223_AddOtpConfirmation.Designer.cs new file mode 100644 index 0000000..1d22711 --- /dev/null +++ b/Unitagram.Persistence/Migrations/20230910144223_AddOtpConfirmation.Designer.cs @@ -0,0 +1,106 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Unitagram.Persistence.DatabaseContext; + +#nullable disable + +namespace Unitagram.Persistence.Migrations +{ + [DbContext(typeof(UnitagramDatabaseContext))] + [Migration("20230910144223_AddOtpConfirmation")] + partial class AddOtpConfirmation + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Unitagram.Domain.OtpConfirmation", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("RetryCount") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint") + .HasDefaultValue((byte)0); + + b.Property("RetryDateTime") + .HasColumnType("datetime2"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("UserId", "Name"); + + b.ToTable("OtpConfirmation"); + }); + + modelBuilder.Entity("Unitagram.Domain.University", b => + { + b.Property("UniversityId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedOnUtc") + .HasColumnType("datetime2"); + + b.Property("Domain") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOnUtc") + .HasColumnType("datetime2"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Province") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("UniversityId"); + + b.ToTable("University"); + }); + + modelBuilder.Entity("Unitagram.Domain.UniversityUser", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("UniversityId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId"); + + b.HasIndex("UniversityId") + .HasDatabaseName("IX_UniversityUser_UniversityId"); + + b.ToTable("UniversityUser"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Unitagram.Persistence/Migrations/20230910144223_AddOtpConfirmation.cs b/Unitagram.Persistence/Migrations/20230910144223_AddOtpConfirmation.cs new file mode 100644 index 0000000..3f6d0c5 --- /dev/null +++ b/Unitagram.Persistence/Migrations/20230910144223_AddOtpConfirmation.cs @@ -0,0 +1,37 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Unitagram.Persistence.Migrations +{ + /// + public partial class AddOtpConfirmation : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "OtpConfirmation", + columns: table => new + { + UserId = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Value = table.Column(type: "nvarchar(10)", maxLength: 10, nullable: false), + RetryCount = table.Column(type: "tinyint", nullable: false, defaultValue: (byte)0), + RetryDateTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_OtpConfirmation", x => new { x.UserId, x.Name }); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "OtpConfirmation"); + } + } +} diff --git a/Unitagram.Persistence/Migrations/UnitagramDatabaseContextModelSnapshot.cs b/Unitagram.Persistence/Migrations/UnitagramDatabaseContextModelSnapshot.cs index d0a0c4e..b27a968 100644 --- a/Unitagram.Persistence/Migrations/UnitagramDatabaseContextModelSnapshot.cs +++ b/Unitagram.Persistence/Migrations/UnitagramDatabaseContextModelSnapshot.cs @@ -22,6 +22,33 @@ protected override void BuildModel(ModelBuilder modelBuilder) SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + modelBuilder.Entity("Unitagram.Domain.OtpConfirmation", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("RetryCount") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint") + .HasDefaultValue((byte)0); + + b.Property("RetryDateTime") + .HasColumnType("datetime2"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("UserId", "Name"); + + b.ToTable("OtpConfirmation"); + }); + modelBuilder.Entity("Unitagram.Domain.University", b => { b.Property("UniversityId")