From 474bc561a5353619b7d9971edce58ff7e8051458 Mon Sep 17 00:00:00 2001 From: kittyegg Date: Thu, 14 May 2026 13:07:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=B0=D1=82=D1=83=20=D0=B8=20=D0=B2=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ShortUrlController.cs | 2 + ...260514100330_AddUpdateDateTime.Designer.cs | 119 ++++++++++++++++++ .../20260514100330_AddUpdateDateTime.cs | 30 +++++ .../Migrations/AppDbContextModelSnapshot.cs | 3 + URL-Shortener/Models/ShortUrl.cs | 1 + 5 files changed, 155 insertions(+) create mode 100644 URL-Shortener/Migrations/20260514100330_AddUpdateDateTime.Designer.cs create mode 100644 URL-Shortener/Migrations/20260514100330_AddUpdateDateTime.cs diff --git a/URL-Shortener/Controllers/ShortUrlController.cs b/URL-Shortener/Controllers/ShortUrlController.cs index ad58ccc..876a657 100644 --- a/URL-Shortener/Controllers/ShortUrlController.cs +++ b/URL-Shortener/Controllers/ShortUrlController.cs @@ -70,6 +70,8 @@ namespace URL_Shortener.Controllers if (dto.ResetExpirationDateTime) shortUrl.ExpirationDateTime = null; + shortUrl.UpdateDateTime = DateTime.UtcNow; + await _db.SaveChangesAsync(); return Ok(shortUrl); diff --git a/URL-Shortener/Migrations/20260514100330_AddUpdateDateTime.Designer.cs b/URL-Shortener/Migrations/20260514100330_AddUpdateDateTime.Designer.cs new file mode 100644 index 0000000..15f162c --- /dev/null +++ b/URL-Shortener/Migrations/20260514100330_AddUpdateDateTime.Designer.cs @@ -0,0 +1,119 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using URL_Shortener; + +#nullable disable + +namespace URL_Shortener.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260514100330_AddUpdateDateTime")] + partial class AddUpdateDateTime + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.7") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("URL_Shortener.Models.ClickInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClickDateTime") + .HasColumnType("timestamp with time zone"); + + b.Property("ShortUrlId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("ClickInfos"); + }); + + modelBuilder.Entity("URL_Shortener.Models.ShortUrl", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClickLimit") + .HasColumnType("integer"); + + b.Property("CreationDateTime") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpirationDateTime") + .HasColumnType("timestamp with time zone"); + + b.Property("OriginalUrl") + .IsRequired() + .HasColumnType("text"); + + b.Property("ShortCode") + .IsRequired() + .HasColumnType("text"); + + b.Property("TotalClickCount") + .HasColumnType("integer"); + + b.Property("UpdateDateTime") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("ShortUrls"); + }); + + modelBuilder.Entity("URL_Shortener.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Email") + .IsRequired() + .HasColumnType("text"); + + b.Property("HashedPassword") + .IsRequired() + .HasColumnType("text"); + + b.Property("LastLoginDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("RegisterDate") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/URL-Shortener/Migrations/20260514100330_AddUpdateDateTime.cs b/URL-Shortener/Migrations/20260514100330_AddUpdateDateTime.cs new file mode 100644 index 0000000..b3235c5 --- /dev/null +++ b/URL-Shortener/Migrations/20260514100330_AddUpdateDateTime.cs @@ -0,0 +1,30 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace URL_Shortener.Migrations +{ + /// + public partial class AddUpdateDateTime : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "UpdateDateTime", + table: "ShortUrls", + type: "timestamp with time zone", + nullable: false, + defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "UpdateDateTime", + table: "ShortUrls"); + } + } +} diff --git a/URL-Shortener/Migrations/AppDbContextModelSnapshot.cs b/URL-Shortener/Migrations/AppDbContextModelSnapshot.cs index 960df17..aee394e 100644 --- a/URL-Shortener/Migrations/AppDbContextModelSnapshot.cs +++ b/URL-Shortener/Migrations/AppDbContextModelSnapshot.cs @@ -69,6 +69,9 @@ namespace URL_Shortener.Migrations b.Property("TotalClickCount") .HasColumnType("integer"); + b.Property("UpdateDateTime") + .HasColumnType("timestamp with time zone"); + b.Property("UserId") .HasColumnType("integer"); diff --git a/URL-Shortener/Models/ShortUrl.cs b/URL-Shortener/Models/ShortUrl.cs index a9acb15..5036b7e 100644 --- a/URL-Shortener/Models/ShortUrl.cs +++ b/URL-Shortener/Models/ShortUrl.cs @@ -8,6 +8,7 @@ public string ShortCode { get; set; } = string.Empty; public int TotalClickCount { get; set; } public DateTime CreationDateTime { get; set; } = DateTime.UtcNow; + public DateTime UpdateDateTime { get; set; } = DateTime.UtcNow; public DateTime? ExpirationDateTime { get; set; } = null; public int ClickLimit { get; set; } = 0; }