Repository: Learnathon-By-Geeky-Solutions/netninjas
Pull request #48: Updated SystemSetting entity
Author: login: nazmulhossin
Created: 2025-04-18T07:23:50Z | Merged: 2025-04-18T09:08:08Z



Diff:
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SettingsDto.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SettingsDto.cs
deleted file mode 100644
index 3c3e0fb..0000000
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SettingsDto.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-﻿using System.ComponentModel.DataAnnotations.Schema;
-using System.ComponentModel.DataAnnotations;
-
-namespace QRCodeBasedMetroTicketingSystem.Application.DTOs
-{
-    public class SettingsDto
-    {
-        [Required(ErrorMessage = "Minimum fare is required")]
-        [Range(0, double.MaxValue, ErrorMessage = "Minimum fare must not be negative")]
-        public decimal MinFare { get; set; }
-
-        [Required(ErrorMessage = "Fare per kilometer is required")]
-        [Range(0, double.MaxValue, ErrorMessage = "Fare per kilometer must not be negative")]
-        public decimal FarePerKm { get; set; }
-
-        [Required(ErrorMessage = "QR code validity time is required")]
-        [Range(1, int.MaxValue, ErrorMessage = "QR code validity time must be at least 1 minute")]
-        public int QrCodeValidTime { get; set; }
-
-        [Required(ErrorMessage = "QR code ticket validity time is required")]
-        [Range(1, int.MaxValue, ErrorMessage = "QR code ticket validity time must be at least 1 minute")]
-        public int QrCodeTicketValidTime { get; set; }
-
-        [Required(ErrorMessage = "Trip time limit is required")]
-        [Range(1, int.MaxValue, ErrorMessage = "Trip time limit must be at least 1 minute")]
-        public int TripTimeLimit { get; set; }
-    }
-}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs
new file mode 100644
index 0000000..7c33177
--- /dev/null
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs
@@ -0,0 +1,33 @@
+﻿using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+
+namespace QRCodeBasedMetroTicketingSystem.Application.DTOs
+{
+    public class SystemSettingsDto
+    {
+        [Required(ErrorMessage = "Minimum fare is required")]
+        [Range(0, double.MaxValue, ErrorMessage = "Minimum fare must not be negative")]
+        public decimal MinFare { get; set; }
+
+        [Required(ErrorMessage = "Fare per kilometer is required")]
+        [Range(0, double.MaxValue, ErrorMessage = "Fare per kilometer must not be negative")]
+        public decimal FarePerKm { get; set; }
+
+        [Required(ErrorMessage = "Rapid Pass QR code validity time is required")]
+        [Range(1, int.MaxValue, ErrorMessage = "Rapid Pass QR code validity time must be at least 1 minute")]
+        public int RapidPassQrCodeValidityMinutes { get; set; } = 1440;
+
+        [Required(ErrorMessage = "QR ticket validity time is required")]
+        [Range(1, int.MaxValue, ErrorMessage = "QR ticket validity time must be at least 1 minute")]
+        public int QrTicketValidityMinutes { get; set; } = 2880;
+
+        [Required(ErrorMessage = "Maximum Trip Duration is required")]
+        [Range(1, int.MaxValue, ErrorMessage = "Maximum Trip Duration must be at least 1 minute")]
+        public int MaxTripDurationMinutes { get; set; } = 120;
+
+        [Required(ErrorMessage = "Time Limit Penalty Fee is required")]
+        [Range(0, double.MaxValue)]
+        [Column(TypeName = "decimal(18,2)")]
+        public decimal TimeLimitPenaltyFee { get; set; } = 100.00m;
+    }
+}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISettingsRepository.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISettingsRepository.cs
deleted file mode 100644
index 7b27eb8..0000000
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISettingsRepository.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿using QRCodeBasedMetroTicketingSystem.Domain.Entities;
-
-namespace QRCodeBasedMetroTicketingSystem.Application.Interfaces.Repositories
-{
-    public interface ISettingsRepository : IRepository<Settings>
-    {
-        Task<Settings?> GetCurrentSettingsAsync();
-        Task UpdateSettingsAsync(Settings settings);
-    }
-}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISystemSettingsRepository.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISystemSettingsRepository.cs
new file mode 100644
index 0000000..9958d22
--- /dev/null
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISystemSettingsRepository.cs
@@ -0,0 +1,10 @@
+﻿using QRCodeBasedMetroTicketingSystem.Domain.Entities;
+
+namespace QRCodeBasedMetroTicketingSystem.Application.Interfaces.Repositories
+{
+    public interface ISystemSettingsRepository : IRepository<SystemSettings>
+    {
+        Task<SystemSettings?> GetCurrentSettingsAsync();
+        Task UpdateSettingsAsync(SystemSettings settings);
+    }
+}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs
index f92c456..8ef4cdb 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs
@@ -4,7 +4,7 @@ public interface IUnitOfWork : IDisposable
     {
         IStationRepository StationRepository { get; }
         IStationDistanceRepository StationDistanceRepository { get; }
-        ISettingsRepository SettingsRepository { get; }
+        ISystemSettingsRepository SystemSettingsRepository { get; }
         IUserRepository UserRepository { get; }
         IUserTokenRepository UserTokenRepository { get; }
         IWalletRepository WalletRepository { get; }
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Services/ISystemSettingsService.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Services/ISystemSettingsService.cs
index d3d3024..3dc5b69 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Services/ISystemSettingsService.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Services/ISystemSettingsService.cs
@@ -5,7 +5,7 @@ namespace QRCodeBasedMetroTicketingSystem.Application.Interfaces.Services
 {
     public interface ISystemSettingsService
     {
-        Task<SettingsDto> GetCurrentSettingsAsync();
-        Task<Result> UpdateSettingsAsync(SettingsDto settingsDto);
+        Task<SystemSettingsDto> GetCurrentSettingsAsync();
+        Task<Result> UpdateSettingsAsync(SystemSettingsDto settingsDto);
     }
 }
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Mapping/MappingProfile.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Mapping/MappingProfile.cs
index b7ecd23..7ae8d99 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Mapping/MappingProfile.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Mapping/MappingProfile.cs
@@ -10,7 +10,7 @@ public MappingProfile()
         {
             CreateMap<StationSummaryDto, Station>().ReverseMap();
             CreateMap<StationDistanceDto, StationDistance>().ReverseMap();
-            CreateMap<SettingsDto, Settings>().ReverseMap();
+            CreateMap<SystemSettingsDto, SystemSettings>().ReverseMap();
             CreateMap<RegisterUserDto, User>().ReverseMap();
             CreateMap<UserDto, User>().ReverseMap();
             CreateMap<WalletDto, Wallet>().ReverseMap();
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/Settings.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/SystemSettings.cs
similarity index 57%
rename from QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/Settings.cs
rename to QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/SystemSettings.cs
index 3a22fb3..b43ca5c 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/Settings.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/SystemSettings.cs
@@ -1,10 +1,10 @@
 ﻿using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
 
 namespace QRCodeBasedMetroTicketingSystem.Domain.Entities
 {
-    public class Settings
+    public class SystemSettings
     {
-        [Key]
         public int Id { get; set; }
 
         [Range(0, double.MaxValue)]
@@ -14,13 +14,17 @@ public class Settings
         public decimal FarePerKm { get; set; } = 5.0000m;
 
         [Range(1, int.MaxValue)]
-        public int QrCodeValidTime { get; set; } = 1440;
+        public int RapidPassQrCodeValidityMinutes { get; set; } = 1440;
 
         [Range(1, int.MaxValue)]
-        public int QrCodeTicketValidTime { get; set; } = 2880;
+        public int QrTicketValidityMinutes { get; set; } = 2880;
 
         [Range(1, int.MaxValue)]
-        public int TripTimeLimit { get; set; } = 120;
+        public int MaxTripDurationMinutes { get; set; } = 120;
+
+        [Range(0, double.MaxValue)]
+        [Column(TypeName = "decimal(18,2)")]
+        public decimal TimeLimitPenaltyFee { get; set; } = 100.00m;
 
         public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
         public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Data/ApplicationDbContext.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Data/ApplicationDbContext.cs
index 8e8b3cc..fb32f8c 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Data/ApplicationDbContext.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Data/ApplicationDbContext.cs
@@ -11,7 +11,7 @@ public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : ba
 
         public DbSet<Station> Stations { get; set; }
         public DbSet<StationDistance> StationDistances { get; set; }
-        public DbSet<Settings> Settings { get; set; }
+        public DbSet<SystemSettings> SystemSettings { get; set; }
         public DbSet<User> Users { get; set; }
         public DbSet<UserToken> UserTokens { get; set; }
         public DbSet<Wallet> Wallets { get; set; }
@@ -41,15 +41,16 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
                 .HasForeignKey(sd => sd.Station2Id)
                 .OnDelete(DeleteBehavior.Restrict);
 
-            modelBuilder.Entity<Settings>().HasData(
-                new Settings
+            modelBuilder.Entity<SystemSettings>().HasData(
+                new SystemSettings
                 {
                     Id = 1,
                     MinFare = 20.0000m,
                     FarePerKm = 5.0000m,
-                    QrCodeValidTime = 1440,
-                    QrCodeTicketValidTime = 2880,
-                    TripTimeLimit = 120,
+                    RapidPassQrCodeValidityMinutes = 1440,
+                    QrTicketValidityMinutes = 2880,
+                    MaxTripDurationMinutes = 120,
+                    TimeLimitPenaltyFee = 100.00m,
                     CreatedAt = new DateTime(2025, 03, 14, 0, 0, 0, DateTimeKind.Utc),
                     UpdatedAt = new DateTime(2025, 03, 14, 0, 0, 0, DateTimeKind.Utc)
                 }
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250327081915_AddSettingsTable.Designer.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250327081915_AddSettingsTable.Designer.cs
deleted file mode 100644
index b1373ce..0000000
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250327081915_AddSettingsTable.Designer.cs
+++ /dev/null
@@ -1,177 +0,0 @@
-﻿// <auto-generated />
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using QRCodeBasedMetroTicketingSystem.Infrastructure.Data;
-
-#nullable disable
-
-namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
-{
-    [DbContext(typeof(ApplicationDbContext))]
-    [Migration("20250327081915_AddSettingsTable")]
-    partial class AddSettingsTable
-    {
-        /// <inheritdoc />
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder
-                .HasAnnotation("ProductVersion", "9.0.2")
-                .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
-            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Settings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("FarePerKm")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<decimal>("MinFare")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<int>("QrCodeTicketValidTime")
-                        .HasColumnType("int");
-
-                    b.Property<int>("QrCodeValidTime")
-                        .HasColumnType("int");
-
-                    b.Property<int>("TripTimeLimit")
-                        .HasColumnType("int");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Settings");
-
-                    b.HasData(
-                        new
-                        {
-                            Id = 1,
-                            CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
-                            FarePerKm = 5.0000m,
-                            MinFare = 20.0000m,
-                            QrCodeTicketValidTime = 2880,
-                            QrCodeValidTime = 1440,
-                            TripTimeLimit = 120,
-                            UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
-                        });
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Address")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("nvarchar(255)");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("Latitude")
-                        .HasColumnType("decimal(12,8)");
-
-                    b.Property<decimal>("Longitude")
-                        .HasColumnType("decimal(12,8)");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasMaxLength(100)
-                        .HasColumnType("nvarchar(100)");
-
-                    b.Property<int>("Order")
-                        .HasColumnType("int");
-
-                    b.Property<string>("Status")
-                        .IsRequired()
-                        .HasMaxLength(50)
-                        .HasColumnType("nvarchar(50)");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Name")
-                        .IsUnique();
-
-                    b.HasIndex("Order")
-                        .IsUnique();
-
-                    b.ToTable("Stations");
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.StationDistance", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("Distance")
-                        .HasColumnType("decimal(12,6)");
-
-                    b.Property<int>("Station1Id")
-                        .HasColumnType("int");
-
-                    b.Property<int>("Station2Id")
-                        .HasColumnType("int");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Station1Id");
-
-                    b.HasIndex("Station2Id");
-
-                    b.ToTable("StationDistances");
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.StationDistance", b =>
-                {
-                    b.HasOne("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", "Station1")
-                        .WithMany()
-                        .HasForeignKey("Station1Id")
-                        .OnDelete(DeleteBehavior.Restrict)
-                        .IsRequired();
-
-                    b.HasOne("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", "Station2")
-                        .WithMany()
-                        .HasForeignKey("Station2Id")
-                        .OnDelete(DeleteBehavior.Restrict)
-                        .IsRequired();
-
-                    b.Navigation("Station1");
-
-                    b.Navigation("Station2");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250327081915_AddSettingsTable.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250327081915_AddSettingsTable.cs
deleted file mode 100644
index 3751fb9..0000000
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250327081915_AddSettingsTable.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-﻿using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
-{
-    /// <inheritdoc />
-    public partial class AddSettingsTable : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "Settings",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "int", nullable: false)
-                        .Annotation("SqlServer:Identity", "1, 1"),
-                    MinFare = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
-                    FarePerKm = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
-                    QrCodeValidTime = table.Column<int>(type: "int", nullable: false),
-                    QrCodeTicketValidTime = table.Column<int>(type: "int", nullable: false),
-                    TripTimeLimit = table.Column<int>(type: "int", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
-                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Settings", x => x.Id);
-                });
-
-            migrationBuilder.InsertData(
-                table: "Settings",
-                columns: new[] { "Id", "CreatedAt", "FarePerKm", "MinFare", "QrCodeTicketValidTime", "QrCodeValidTime", "TripTimeLimit", "UpdatedAt" },
-                values: new object[] { 1, new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc), 5.0000m, 20.0000m, 2880, 1440, 120, new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc) });
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "Settings");
-        }
-    }
-}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155705_AddUsersTable.Designer.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155705_AddUsersTable.Designer.cs
deleted file mode 100644
index bf1af16..0000000
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155705_AddUsersTable.Designer.cs
+++ /dev/null
@@ -1,229 +0,0 @@
-﻿// <auto-generated />
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using QRCodeBasedMetroTicketingSystem.Infrastructure.Data;
-
-#nullable disable
-
-namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
-{
-    [DbContext(typeof(ApplicationDbContext))]
-    [Migration("20250407155705_AddUsersTable")]
-    partial class AddUsersTable
-    {
-        /// <inheritdoc />
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder
-                .HasAnnotation("ProductVersion", "9.0.2")
-                .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
-            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Settings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("FarePerKm")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<decimal>("MinFare")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<int>("QrCodeTicketValidTime")
-                        .HasColumnType("int");
-
-                    b.Property<int>("QrCodeValidTime")
-                        .HasColumnType("int");
-
-                    b.Property<int>("TripTimeLimit")
-                        .HasColumnType("int");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Settings");
-
-                    b.HasData(
-                        new
-                        {
-                            Id = 1,
-                            CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
-                            FarePerKm = 5.0000m,
-                            MinFare = 20.0000m,
-                            QrCodeTicketValidTime = 2880,
-                            QrCodeValidTime = 1440,
-                            TripTimeLimit = 120,
-                            UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
-                        });
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Address")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("nvarchar(255)");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("Latitude")
-                        .HasColumnType("decimal(12,8)");
-
-                    b.Property<decimal>("Longitude")
-                        .HasColumnType("decimal(12,8)");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasMaxLength(100)
-                        .HasColumnType("nvarchar(100)");
-
-                    b.Property<int>("Order")
-                        .HasColumnType("int");
-
-                    b.Property<string>("Status")
-                        .IsRequired()
-                        .HasMaxLength(50)
-                        .HasColumnType("nvarchar(50)");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Name")
-                        .IsUnique();
-
-                    b.HasIndex("Order")
-                        .IsUnique();
-
-                    b.ToTable("Stations");
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.StationDistance", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("Distance")
-                        .HasColumnType("decimal(12,6)");
-
-                    b.Property<int>("Station1Id")
-                        .HasColumnType("int");
-
-                    b.Property<int>("Station2Id")
-                        .HasColumnType("int");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Station1Id");
-
-                    b.HasIndex("Station2Id");
-
-                    b.ToTable("StationDistances");
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<string>("Email")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("nvarchar(255)");
-
-                    b.Property<string>("FullName")
-                        .IsRequired()
-                        .HasMaxLength(100)
-                        .HasColumnType("nvarchar(100)");
-
-                    b.Property<bool>("IsEmailVerified")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("NID")
-                        .IsRequired()
-                        .HasMaxLength(30)
-                        .HasColumnType("nvarchar(30)");
-
-                    b.Property<string>("PasswordHash")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("PhoneNumber")
-                        .IsRequired()
-                        .HasMaxLength(15)
-                        .HasColumnType("nvarchar(15)");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Email")
-                        .IsUnique();
-
-                    b.HasIndex("PhoneNumber")
-                        .IsUnique();
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.StationDistance", b =>
-                {
-                    b.HasOne("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", "Station1")
-                        .WithMany()
-                        .HasForeignKey("Station1Id")
-                        .OnDelete(DeleteBehavior.Restrict)
-                        .IsRequired();
-
-                    b.HasOne("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", "Station2")
-                        .WithMany()
-                        .HasForeignKey("Station2Id")
-                        .OnDelete(DeleteBehavior.Restrict)
-                        .IsRequired();
-
-                    b.Navigation("Station1");
-
-                    b.Navigation("Station2");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155705_AddUsersTable.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155705_AddUsersTable.cs
deleted file mode 100644
index bd7c204..0000000
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155705_AddUsersTable.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-﻿using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
-{
-    /// <inheritdoc />
-    public partial class AddUsersTable : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "Users",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "int", nullable: false)
-                        .Annotation("SqlServer:Identity", "1, 1"),
-                    FullName = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
-                    Email = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: false),
-                    PhoneNumber = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: false),
-                    NID = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false),
-                    PasswordHash = table.Column<string>(type: "nvarchar(max)", nullable: false),
-                    IsEmailVerified = table.Column<bool>(type: "bit", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
-                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Users", x => x.Id);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Users_Email",
-                table: "Users",
-                column: "Email",
-                unique: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Users_PhoneNumber",
-                table: "Users",
-                column: "PhoneNumber",
-                unique: true);
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "Users");
-        }
-    }
-}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155816_AddUserTokensTable.Designer.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155816_AddUserTokensTable.Designer.cs
deleted file mode 100644
index 88cea3d..0000000
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155816_AddUserTokensTable.Designer.cs
+++ /dev/null
@@ -1,259 +0,0 @@
-﻿// <auto-generated />
-using System;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using QRCodeBasedMetroTicketingSystem.Infrastructure.Data;
-
-#nullable disable
-
-namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
-{
-    [DbContext(typeof(ApplicationDbContext))]
-    [Migration("20250407155816_AddUserTokensTable")]
-    partial class AddUserTokensTable
-    {
-        /// <inheritdoc />
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder
-                .HasAnnotation("ProductVersion", "9.0.2")
-                .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
-            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Settings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("FarePerKm")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<decimal>("MinFare")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<int>("QrCodeTicketValidTime")
-                        .HasColumnType("int");
-
-                    b.Property<int>("QrCodeValidTime")
-                        .HasColumnType("int");
-
-                    b.Property<int>("TripTimeLimit")
-                        .HasColumnType("int");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Settings");
-
-                    b.HasData(
-                        new
-                        {
-                            Id = 1,
-                            CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
-                            FarePerKm = 5.0000m,
-                            MinFare = 20.0000m,
-                            QrCodeTicketValidTime = 2880,
-                            QrCodeValidTime = 1440,
-                            TripTimeLimit = 120,
-                            UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
-                        });
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Address")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("nvarchar(255)");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("Latitude")
-                        .HasColumnType("decimal(12,8)");
-
-                    b.Property<decimal>("Longitude")
-                        .HasColumnType("decimal(12,8)");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasMaxLength(100)
-                        .HasColumnType("nvarchar(100)");
-
-                    b.Property<int>("Order")
-                        .HasColumnType("int");
-
-                    b.Property<string>("Status")
-                        .IsRequired()
-                        .HasMaxLength(50)
-                        .HasColumnType("nvarchar(50)");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Name")
-                        .IsUnique();
-
-                    b.HasIndex("Order")
-                        .IsUnique();
-
-                    b.ToTable("Stations");
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.StationDistance", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("Distance")
-                        .HasColumnType("decimal(12,6)");
-
-                    b.Property<int>("Station1Id")
-                        .HasColumnType("int");
-
-                    b.Property<int>("Station2Id")
-                        .HasColumnType("int");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Station1Id");
-
-                    b.HasIndex("Station2Id");
-
-                    b.ToTable("StationDistances");
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<string>("Email")
-                        .IsRequired()
-                        .HasMaxLength(255)
-                        .HasColumnType("nvarchar(255)");
-
-                    b.Property<string>("FullName")
-                        .IsRequired()
-                        .HasMaxLength(100)
-                        .HasColumnType("nvarchar(100)");
-
-                    b.Property<bool>("IsEmailVerified")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("NID")
-                        .IsRequired()
-                        .HasMaxLength(30)
-                        .HasColumnType("nvarchar(30)");
-
-                    b.Property<string>("PasswordHash")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<string>("PhoneNumber")
-                        .IsRequired()
-                        .HasMaxLength(15)
-                        .HasColumnType("nvarchar(15)");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("Email")
-                        .IsUnique();
-
-                    b.HasIndex("PhoneNumber")
-                        .IsUnique();
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.UserToken", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Email")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<DateTime>("ExpiryDate")
-                        .HasColumnType("datetime2");
-
-                    b.Property<bool>("IsUsed")
-                        .HasColumnType("bit");
-
-                    b.Property<string>("Token")
-                        .IsRequired()
-                        .HasColumnType("nvarchar(max)");
-
-                    b.Property<int>("Type")
-                        .HasColumnType("int");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("UserTokens");
-                });
-
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.StationDistance", b =>
-                {
-                    b.HasOne("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", "Station1")
-                        .WithMany()
-                        .HasForeignKey("Station1Id")
-                        .OnDelete(DeleteBehavior.Restrict)
-                        .IsRequired();
-
-                    b.HasOne("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", "Station2")
-                        .WithMany()
-                        .HasForeignKey("Station2Id")
-                        .OnDelete(DeleteBehavior.Restrict)
-                        .IsRequired();
-
-                    b.Navigation("Station1");
-
-                    b.Navigation("Station2");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155816_AddUserTokensTable.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155816_AddUserTokensTable.cs
deleted file mode 100644
index 8b804e6..0000000
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155816_AddUserTokensTable.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-﻿using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
-{
-    /// <inheritdoc />
-    public partial class AddUserTokensTable : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "UserTokens",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "int", nullable: false)
-                        .Annotation("SqlServer:Identity", "1, 1"),
-                    Email = table.Column<string>(type: "nvarchar(max)", nullable: false),
-                    Token = table.Column<string>(type: "nvarchar(max)", nullable: false),
-                    Type = table.Column<int>(type: "int", nullable: false),
-                    ExpiryDate = table.Column<DateTime>(type: "datetime2", nullable: false),
-                    IsUsed = table.Column<bool>(type: "bit", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_UserTokens", x => x.Id);
-                });
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "UserTokens");
-        }
-    }
-}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250413195856_AddWalletAndTransactionTables.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250413195856_AddWalletAndTransactionTables.cs
deleted file mode 100644
index 622edb1..0000000
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250413195856_AddWalletAndTransactionTables.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-﻿using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
-{
-    /// <inheritdoc />
-    public partial class AddWalletAndTransactionTables : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "Wallets",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "int", nullable: false)
-                        .Annotation("SqlServer:Identity", "1, 1"),
-                    UserId = table.Column<int>(type: "int", nullable: false),
-                    Balance = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
-                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Wallets", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Wallets_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Transactions",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "int", nullable: false)
-                        .Annotation("SqlServer:Identity", "1, 1"),
-                    WalletId = table.Column<int>(type: "int", nullable: false),
-                    Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
-                    Type = table.Column<int>(type: "int", nullable: false),
-                    PaymentMethod = table.Column<int>(type: "int", nullable: false),
-                    PaymentFor = table.Column<int>(type: "int", nullable: true),
-                    Status = table.Column<int>(type: "int", nullable: false),
-                    TransactionReference = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
-                    Description = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true),
-                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
-                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Transactions", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Transactions_Wallets_WalletId",
-                        column: x => x.WalletId,
-                        principalTable: "Wallets",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Transactions_WalletId",
-                table: "Transactions",
-                column: "WalletId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Wallets_UserId",
-                table: "Wallets",
-                column: "UserId",
-                unique: true);
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "Transactions");
-
-            migrationBuilder.DropTable(
-                name: "Wallets");
-        }
-    }
-}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250413195856_AddWalletAndTransactionTables.Designer.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.Designer.cs
similarity index 94%
rename from QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250413195856_AddWalletAndTransactionTables.Designer.cs
rename to QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.Designer.cs
index ae0db28..0fcc4f7 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250413195856_AddWalletAndTransactionTables.Designer.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.Designer.cs
@@ -12,8 +12,8 @@
 namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
 {
     [DbContext(typeof(ApplicationDbContext))]
-    [Migration("20250413195856_AddWalletAndTransactionTables")]
-    partial class AddWalletAndTransactionTables
+    [Migration("20250418075956_AddMoreTables")]
+    partial class AddMoreTables
     {
         /// <inheritdoc />
         protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -25,53 +25,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder)
 
             SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
 
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Settings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("FarePerKm")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<decimal>("MinFare")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<int>("QrCodeTicketValidTime")
-                        .HasColumnType("int");
-
-                    b.Property<int>("QrCodeValidTime")
-                        .HasColumnType("int");
-
-                    b.Property<int>("TripTimeLimit")
-                        .HasColumnType("int");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Settings");
-
-                    b.HasData(
-                        new
-                        {
-                            Id = 1,
-                            CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
-                            FarePerKm = 5.0000m,
-                            MinFare = 20.0000m,
-                            QrCodeTicketValidTime = 2880,
-                            QrCodeValidTime = 1440,
-                            TripTimeLimit = 120,
-                            UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
-                        });
-                });
-
             modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", b =>
                 {
                     b.Property<int>("Id")
@@ -153,6 +106,57 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder)
                     b.ToTable("StationDistances");
                 });
 
+            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.SystemSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.Property<decimal>("FarePerKm")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("MaxTripDurationMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("MinFare")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("QrTicketValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RapidPassQrCodeValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("TimeLimitPenaltyFee")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("SystemSettings");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
+                            FarePerKm = 5.0000m,
+                            MaxTripDurationMinutes = 120,
+                            MinFare = 20.0000m,
+                            QrTicketValidityMinutes = 2880,
+                            RapidPassQrCodeValidityMinutes = 1440,
+                            TimeLimitPenaltyFee = 100.00m,
+                            UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
+                        });
+                });
+
             modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Transaction", b =>
                 {
                     b.Property<int>("Id")
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.cs
new file mode 100644
index 0000000..6f483d1
--- /dev/null
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.cs
@@ -0,0 +1,169 @@
+﻿using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
+{
+    /// <inheritdoc />
+    public partial class AddMoreTables : Migration
+    {
+        /// <inheritdoc />
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.CreateTable(
+                name: "SystemSettings",
+                columns: table => new
+                {
+                    Id = table.Column<int>(type: "int", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    MinFare = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
+                    FarePerKm = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
+                    RapidPassQrCodeValidityMinutes = table.Column<int>(type: "int", nullable: false),
+                    QrTicketValidityMinutes = table.Column<int>(type: "int", nullable: false),
+                    MaxTripDurationMinutes = table.Column<int>(type: "int", nullable: false),
+                    TimeLimitPenaltyFee = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
+                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
+                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_SystemSettings", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Users",
+                columns: table => new
+                {
+                    Id = table.Column<int>(type: "int", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    FullName = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
+                    Email = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: false),
+                    PhoneNumber = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: false),
+                    NID = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false),
+                    PasswordHash = table.Column<string>(type: "nvarchar(max)", nullable: false),
+                    IsEmailVerified = table.Column<bool>(type: "bit", nullable: false),
+                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
+                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Users", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "UserTokens",
+                columns: table => new
+                {
+                    Id = table.Column<int>(type: "int", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    Email = table.Column<string>(type: "nvarchar(max)", nullable: false),
+                    Token = table.Column<string>(type: "nvarchar(max)", nullable: false),
+                    Type = table.Column<int>(type: "int", nullable: false),
+                    ExpiryDate = table.Column<DateTime>(type: "datetime2", nullable: false),
+                    IsUsed = table.Column<bool>(type: "bit", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_UserTokens", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Wallets",
+                columns: table => new
+                {
+                    Id = table.Column<int>(type: "int", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    UserId = table.Column<int>(type: "int", nullable: false),
+                    Balance = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
+                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
+                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Wallets", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_Wallets_Users_UserId",
+                        column: x => x.UserId,
+                        principalTable: "Users",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Transactions",
+                columns: table => new
+                {
+                    Id = table.Column<int>(type: "int", nullable: false)
+                        .Annotation("SqlServer:Identity", "1, 1"),
+                    WalletId = table.Column<int>(type: "int", nullable: false),
+                    Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: false),
+                    Type = table.Column<int>(type: "int", nullable: false),
+                    PaymentMethod = table.Column<int>(type: "int", nullable: false),
+                    PaymentFor = table.Column<int>(type: "int", nullable: true),
+                    Status = table.Column<int>(type: "int", nullable: false),
+                    TransactionReference = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
+                    Description = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true),
+                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
+                    UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Transactions", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_Transactions_Wallets_WalletId",
+                        column: x => x.WalletId,
+                        principalTable: "Wallets",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.InsertData(
+                table: "SystemSettings",
+                columns: new[] { "Id", "CreatedAt", "FarePerKm", "MaxTripDurationMinutes", "MinFare", "QrTicketValidityMinutes", "RapidPassQrCodeValidityMinutes", "TimeLimitPenaltyFee", "UpdatedAt" },
+                values: new object[] { 1, new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc), 5.0000m, 120, 20.0000m, 2880, 1440, 100.00m, new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc) });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Transactions_WalletId",
+                table: "Transactions",
+                column: "WalletId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Users_Email",
+                table: "Users",
+                column: "Email",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Users_PhoneNumber",
+                table: "Users",
+                column: "PhoneNumber",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Wallets_UserId",
+                table: "Wallets",
+                column: "UserId",
+                unique: true);
+        }
+
+        /// <inheritdoc />
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "SystemSettings");
+
+            migrationBuilder.DropTable(
+                name: "Transactions");
+
+            migrationBuilder.DropTable(
+                name: "UserTokens");
+
+            migrationBuilder.DropTable(
+                name: "Wallets");
+
+            migrationBuilder.DropTable(
+                name: "Users");
+        }
+    }
+}
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs
index 4438019..20a6530 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs
@@ -22,53 +22,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
 
             SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
 
-            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Settings", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("int");
-
-                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.Property<decimal>("FarePerKm")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<decimal>("MinFare")
-                        .HasColumnType("decimal(18,2)");
-
-                    b.Property<int>("QrCodeTicketValidTime")
-                        .HasColumnType("int");
-
-                    b.Property<int>("QrCodeValidTime")
-                        .HasColumnType("int");
-
-                    b.Property<int>("TripTimeLimit")
-                        .HasColumnType("int");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("datetime2");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Settings");
-
-                    b.HasData(
-                        new
-                        {
-                            Id = 1,
-                            CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
-                            FarePerKm = 5.0000m,
-                            MinFare = 20.0000m,
-                            QrCodeTicketValidTime = 2880,
-                            QrCodeValidTime = 1440,
-                            TripTimeLimit = 120,
-                            UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
-                        });
-                });
-
             modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", b =>
                 {
                     b.Property<int>("Id")
@@ -150,6 +103,57 @@ protected override void BuildModel(ModelBuilder modelBuilder)
                     b.ToTable("StationDistances");
                 });
 
+            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.SystemSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.Property<decimal>("FarePerKm")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("MaxTripDurationMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("MinFare")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("QrTicketValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RapidPassQrCodeValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("TimeLimitPenaltyFee")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("SystemSettings");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
+                            FarePerKm = 5.0000m,
+                            MaxTripDurationMinutes = 120,
+                            MinFare = 20.0000m,
+                            QrTicketValidityMinutes = 2880,
+                            RapidPassQrCodeValidityMinutes = 1440,
+                            TimeLimitPenaltyFee = 100.00m,
+                            UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
+                        });
+                });
+
             modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Transaction", b =>
                 {
                     b.Property<int>("Id")
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SettingsRepository.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SystemSettingsRepository.cs
similarity index 59%
rename from QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SettingsRepository.cs
rename to QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SystemSettingsRepository.cs
index cf35024..8cc9f05 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SettingsRepository.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SystemSettingsRepository.cs
@@ -5,18 +5,18 @@
 
 namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Repositories
 {
-    public class SettingsRepository : Repository<Settings>, ISettingsRepository
+    public class SystemSettingsRepository : Repository<SystemSettings>, ISystemSettingsRepository
     {
-        public SettingsRepository(ApplicationDbContext context) : base(context)
+        public SystemSettingsRepository(ApplicationDbContext context) : base(context)
         {
         }
 
-        public async Task<Settings?> GetCurrentSettingsAsync()
+        public async Task<SystemSettings?> GetCurrentSettingsAsync()
         {
             return await _dbSet.FirstOrDefaultAsync();
         }
 
-        public async Task UpdateSettingsAsync(Settings settings)
+        public async Task UpdateSettingsAsync(SystemSettings settings)
         {
             _dbSet.Update(settings);
         }
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs
index e0405ab..40cd78e 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs
@@ -14,7 +14,7 @@ public class UnitOfWork : IUnitOfWork
 
         public IStationRepository StationRepository { get; }
         public IStationDistanceRepository StationDistanceRepository { get; }
-        public ISettingsRepository SettingsRepository { get; }
+        public ISystemSettingsRepository SystemSettingsRepository { get; }
         public IUserRepository UserRepository { get; }
         public IUserTokenRepository UserTokenRepository { get; }
         public IWalletRepository WalletRepository { get; }
@@ -23,7 +23,7 @@ public class UnitOfWork : IUnitOfWork
         public UnitOfWork(ApplicationDbContext db,
                           IStationRepository stationRepository,
                           IStationDistanceRepository stationDistanceRepository,
-                          ISettingsRepository settingsRepository,
+                          ISystemSettingsRepository settingsRepository,
                           IUserRepository userRepository,
                           IUserTokenRepository userTokenRepository,
                           IWalletRepository walletRepository,
@@ -32,7 +32,7 @@ public UnitOfWork(ApplicationDbContext db,
             _db = db;
             StationRepository = stationRepository;
             StationDistanceRepository = stationDistanceRepository;
-            SettingsRepository = settingsRepository;
+            SystemSettingsRepository = settingsRepository;
             UserRepository = userRepository;
             UserTokenRepository = userTokenRepository;
             WalletRepository = walletRepository;
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs
index cde7fbd..4ecfe09 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs
@@ -21,42 +21,42 @@ public SystemSettingsService(IUnitOfWork unitOfWork, ICacheService cacheService,
             _mapper = mapper;
         }
 
-        public async Task<SettingsDto> GetCurrentSettingsAsync()
+        public async Task<SystemSettingsDto> GetCurrentSettingsAsync()
         {
             // Try to get settings from cache
-            var cachedSettings = await _cacheService.GetAsync<SettingsDto>(CacheKey);
+            var cachedSettings = await _cacheService.GetAsync<SystemSettingsDto>(CacheKey);
             if (cachedSettings != null)
             {
                 return cachedSettings;
             }
 
             // Cache miss - Fetch settings from the database
-            var settings = await _unitOfWork.SettingsRepository.GetCurrentSettingsAsync();
-            settings ??= new Settings(); // Default settings
+            var systemSettings = await _unitOfWork.SystemSettingsRepository.GetCurrentSettingsAsync();
+            systemSettings ??= new SystemSettings(); // Default settings
 
-            var settingsDto = _mapper.Map<SettingsDto>(settings);
-            await _cacheService.SetAsync(CacheKey, settingsDto);
+            var systemSettingsDto = _mapper.Map<SystemSettingsDto>(systemSettings);
+            await _cacheService.SetAsync(CacheKey, systemSettingsDto);
 
-            return settingsDto;
+            return systemSettingsDto;
         }
 
-        public async Task<Result> UpdateSettingsAsync(SettingsDto settingsDto)
+        public async Task<Result> UpdateSettingsAsync(SystemSettingsDto systemSettingsDto)
         {
+            await _unitOfWork.BeginTransactionAsync();
             try
             {
-                await _unitOfWork.BeginTransactionAsync();
-
-                var settings = await _unitOfWork.SettingsRepository.GetCurrentSettingsAsync();
-                if (settings == null)
+                var systemSettings = await _unitOfWork.SystemSettingsRepository.GetCurrentSettingsAsync();
+                if (systemSettings == null)
                 {
                     return Result.Failure("An error occurred while updating the settings.");
                 }
 
-                settings.MinFare = settingsDto.MinFare;
-                settings.FarePerKm = settingsDto.FarePerKm;
-                settings.QrCodeValidTime = settingsDto.QrCodeValidTime;
-                settings.QrCodeTicketValidTime = settingsDto.QrCodeTicketValidTime;
-                settings.TripTimeLimit = settingsDto.TripTimeLimit;
+                systemSettings.MinFare = systemSettingsDto.MinFare;
+                systemSettings.FarePerKm = systemSettingsDto.FarePerKm;
+                systemSettings.RapidPassQrCodeValidityMinutes = systemSettingsDto.RapidPassQrCodeValidityMinutes;
+                systemSettings.QrTicketValidityMinutes = systemSettingsDto.QrTicketValidityMinutes;
+                systemSettings.MaxTripDurationMinutes = systemSettingsDto.MaxTripDurationMinutes;
+                systemSettings.TimeLimitPenaltyFee = systemSettingsDto.TimeLimitPenaltyFee;
 
                 await _unitOfWork.SaveChangesAsync();
                 await _unitOfWork.CommitTransactionAsync();
@@ -64,10 +64,10 @@ public async Task<Result> UpdateSettingsAsync(SettingsDto settingsDto)
 
                 return Result.Success("System settings detail updated successfully.");
             }
-            catch (Exception ex)
+            catch
             {
                 await _unitOfWork.RollbackTransactionAsync();
-                return Result.Failure($"An error occurred while updating the settings: {ex.Message}");
+                return Result.Failure("An error occurred while updating the settings.");
             }
         }
     }  
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs
index f824456..87917c1 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs
@@ -22,26 +22,26 @@ public SystemSettingsController(ISystemSettingsService settingsService, IMapper
         public async Task<IActionResult> Index()
         {
             var settingsDto = await _settingsService.GetCurrentSettingsAsync();
-            var viewModel = _mapper.Map<SettingsViewModel>(settingsDto);
+            var viewModel = _mapper.Map<SystemSettingsViewModel>(settingsDto);
             return View(viewModel);
         }
 
         public async Task<IActionResult> Edit()
         {
             var settingsDto = await _settingsService.GetCurrentSettingsAsync();
-            var viewModel = _mapper.Map<SettingsViewModel>(settingsDto);
+            var viewModel = _mapper.Map<SystemSettingsViewModel>(settingsDto);
             return View(viewModel);
         }
 
         [HttpPost]
-        public async Task<IActionResult> Edit(SettingsViewModel viewModel)
+        public async Task<IActionResult> Edit(SystemSettingsViewModel viewModel)
         {
             if (!ModelState.IsValid)
             {
                 return View(viewModel);
             }
 
-            var settingsDto = _mapper.Map<SettingsDto>(viewModel);
+            var settingsDto = _mapper.Map<SystemSettingsDto>(viewModel);
             var result = await _settingsService.UpdateSettingsAsync(settingsDto);
 
             if (result.IsSuccess)
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SettingsViewModel.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SystemSettingsViewModel.cs
similarity index 70%
rename from QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SettingsViewModel.cs
rename to QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SystemSettingsViewModel.cs
index fad1e6e..df68bbf 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SettingsViewModel.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SystemSettingsViewModel.cs
@@ -2,7 +2,7 @@
 
 namespace QRCodeBasedMetroTicketingSystem.Web.Areas.Admin.ViewModels
 {
-    public class SettingsViewModel : SettingsDto
+    public class SystemSettingsViewModel : SystemSettingsDto
     {
     }
 }
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Edit.cshtml b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Edit.cshtml
index 1418aa9..69339ab 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Edit.cshtml
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Edit.cshtml
@@ -1,4 +1,4 @@
-﻿@model SettingsViewModel
+﻿@model SystemSettingsViewModel
 
 @{
     ViewData["Title"] = "Edit System Settings";
@@ -20,39 +20,44 @@
             <div class="card shadow-sm p-3">
                 <div class="card-body">
                     <form asp-area="Admin" asp-controller="SystemSettings" asp-action="Edit" method="POST">
-                        <div class="row">
-                            <div class="col-md-6 mb-3 pe-3">
+                        <div class="row mb-3">
+                            <div class="col-md-6 pe-3">
                                 <label asp-for="MinFare" class="form-label">Minimum Fare (TK)</label>
                                 <input asp-for="MinFare" class="form-control" step="0.000001" min="0" required />
                                 <span asp-validation-for="MinFare" class="text-danger"></span>
                             </div>
 
-                            <div class="col-md-6 mb-3 ps-3">
+                            <div class="col-md-6 ps-3">
                                 <label asp-for="FarePerKm" class="form-label">Fare Per Kilometer (TK)</label>
                                 <input asp-for="FarePerKm" class="form-control" step="0.000001" min="0" required />
                                 <span asp-validation-for="FarePerKm" class="text-danger"></span>
                             </div>
                         </div>
 
-                        <div class="row">
-                            <div class="col-md-6 mb-3 pe-3">
-                                <label asp-for="QrCodeValidTime" class="form-label">QR Code Valid Time (Minutes)</label>
-                                <input asp-for="QrCodeValidTime" class="form-control" step="1" min="1" required />
-                                <span asp-validation-for="QrCodeValidTime" class="text-danger"></span>
+                        <div class="row mb-3">
+                            <div class="col-md-6 pe-3">
+                                <label asp-for="RapidPassQrCodeValidityMinutes" class="form-label">Rapid Pass QR Code Validity (minutes)</label>
+                                <input asp-for="RapidPassQrCodeValidityMinutes" class="form-control" step="1" min="1" required />
+                                <span asp-validation-for="RapidPassQrCodeValidityMinutes" class="text-danger"></span>
                             </div>
 
-                            <div class="col-md-6 mb-3 ps-3">
-                                <label asp-for="QrCodeTicketValidTime">QR Code Ticket Valid Time (Minutes)</label>
-                                <input asp-for="QrCodeTicketValidTime" class="form-control" step="1" min="1" required/>
-                                <span asp-validation-for="QrCodeTicketValidTime" class="text-danger"></span>
+                            <div class="col-md-6 ps-3">
+                                <label asp-for="QrTicketValidityMinutes">QR Ticket Validity (minutes)</label>
+                                <input asp-for="QrTicketValidityMinutes" class="form-control" step="1" min="1" required />
+                                <span asp-validation-for="QrTicketValidityMinutes" class="text-danger"></span>
                             </div>
                         </div>
 
-                        <div class="row">
-                            <div class="col-md-6 mb-3 pe-3">
-                                <label asp-for="TripTimeLimit" class="form-label">Time Limit for a Single Trip (Minutes)</label>
-                                <input asp-for="TripTimeLimit" class="form-control" step="1" min="1" required />
-                                <span asp-validation-for="TripTimeLimit" class="text-danger"></span>
+                        <div class="row mb-3">
+                            <div class="col-md-6 pe-3">
+                                <label asp-for="MaxTripDurationMinutes" class="form-label">Maximum Trip Duration (minutes)</label>
+                                <input asp-for="MaxTripDurationMinutes" class="form-control" step="1" min="1" required />
+                                <span asp-validation-for="MaxTripDurationMinutes" class="text-danger"></span>
+                            </div>
+                            <div class="col-md-6 ps-3">
+                                <label asp-for="TimeLimitPenaltyFee" class="form-label">Time Limit Penalty Fee (Tk)</label>
+                                <input asp-for="TimeLimitPenaltyFee" class="form-control" step="1" min="0" required />
+                                <span asp-validation-for="TimeLimitPenaltyFee" class="text-danger"></span>
                             </div>
                         </div>
 
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Index.cshtml b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Index.cshtml
index ec31a18..6448bc1 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Index.cshtml
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Index.cshtml
@@ -1,4 +1,4 @@
-﻿@model SettingsViewModel
+﻿@model SystemSettingsViewModel
 
 @{
     ViewData["Title"] = "System Settings";
@@ -20,34 +20,38 @@
             <div class="card shadow-sm p-3">
                 <div class="card-body">
                     <form asp-area="Admin" asp-controller="SystemSettings" asp-action="Index" method="POST">
-                        <div class="row">
-                            <div class="col-md-6 mb-3 pe-3">
+                        <div class="row mb-3">
+                            <div class="col-md-6 pe-3">
                                 <label asp-for="MinFare" class="form-label">Minimum Fare (TK)</label>
                                 <input asp-for="MinFare" class="form-control" step="0.000001" min="0" disabled required />
                             </div>
 
-                            <div class="col-md-6 mb-3 ps-3">
+                            <div class="col-md-6 ps-3">
                                 <label asp-for="FarePerKm" class="form-label">Fare Per Kilometer (TK)</label>
                                 <input asp-for="FarePerKm" class="form-control" step="0.000001" min="0" disabled required />
                             </div>
                         </div>
 
-                        <div class="row">
-                            <div class="col-md-6 mb-3 pe-3">
-                                <label asp-for="QrCodeValidTime" class="form-label">QR Code Valid Time (Minutes)</label>
-                                <input asp-for="QrCodeValidTime" class="form-control" step="1" min="1" disabled required />
+                        <div class="row mb-3">
+                            <div class="col-md-6 pe-3">
+                                <label asp-for="RapidPassQrCodeValidityMinutes" class="form-label">Rapid Pass QR Code Validity (minutes)</label>
+                                <input asp-for="RapidPassQrCodeValidityMinutes" class="form-control" step="1" min="1" disabled required />
                             </div>
 
-                            <div class="col-md-6 mb-3 ps-3">
-                                <label asp-for="QrCodeTicketValidTime">QR Code Ticket Valid Time (Minutes)</label>
-                                <input asp-for="QrCodeTicketValidTime" class="form-control" step="1" min="1" disabled required />
+                            <div class="col-md-6 ps-3">
+                                <label asp-for="QrTicketValidityMinutes">QR Ticket Validity (minutes)</label>
+                                <input asp-for="QrTicketValidityMinutes" class="form-control" step="1" min="1" disabled required />
                             </div>
                         </div>
 
-                        <div class="row">
-                            <div class="col-md-6 mb-3 pe-3">
-                                <label asp-for="TripTimeLimit" class="form-label">Time Limit for a Single Trip (Minutes)</label>
-                                <input asp-for="TripTimeLimit" class="form-control" step="1" min="1" disabled required />
+                        <div class="row mb-3">
+                            <div class="col-md-6 pe-3">
+                                <label asp-for="MaxTripDurationMinutes" class="form-label">Maximum Trip Duration (minutes)</label>
+                                <input asp-for="MaxTripDurationMinutes" class="form-control" step="1" min="1" disabled required />
+                            </div>
+                            <div class="col-md-6 ps-3">
+                                <label asp-for="TimeLimitPenaltyFee" class="form-label">Time Limit Penalty Fee (Tk)</label>
+                                <input asp-for="TimeLimitPenaltyFee" class="form-control" step="1" min="0" disabled required />
                             </div>
                         </div>
                         
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Mapping/ViewModelMappingProfile.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Mapping/ViewModelMappingProfile.cs
index d92fb92..5052e9d 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Mapping/ViewModelMappingProfile.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Mapping/ViewModelMappingProfile.cs
@@ -15,7 +15,7 @@ public ViewModelMappingProfile()
             CreateMap<StationEditDto, StationEditViewModel>().ReverseMap();
             CreateMap<AdjacentStationDistanceDto, AdjacentStationDistanceViewModel>().ReverseMap();
             CreateMap<StationDeletionDto, StationDeletionViewModel>().ReverseMap();
-            CreateMap<SettingsDto, SettingsViewModel>().ReverseMap();
+            CreateMap<SystemSettingsDto, SystemSettingsViewModel>().ReverseMap();
             CreateMap<FareAndDistancesDto, FareAndDistancesViewModel>().ReverseMap();
             CreateMap<RegisterUserDto, RegisterUserViewModel>().ReverseMap();
             CreateMap<WalletDto, WalletViewModel>().ReverseMap();
diff --git a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Program.cs b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Program.cs
index ae46aa5..d416fa5 100644
--- a/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Program.cs
+++ b/QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Program.cs
@@ -52,7 +52,7 @@
 builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
 builder.Services.AddScoped<IStationRepository, StationRepository>();
 builder.Services.AddScoped<IStationDistanceRepository, StationDistanceRepository>();
-builder.Services.AddScoped<ISettingsRepository, SettingsRepository>();
+builder.Services.AddScoped<ISystemSettingsRepository, SystemSettingsRepository>();
 builder.Services.AddScoped<IUserRepository, UserRepository>();
 builder.Services.AddScoped<IUserTokenRepository, UserTokenRepository>();
 builder.Services.AddScoped<IWalletRepository, WalletRepository>();


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 13**

<details>
<summary>🔭 Outside diff range comments (3)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Edit.cshtml (1)</summary><blockquote>

`1-1`: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**MODEL REFERENCE INCONSISTENCY DETECTED.**

MODEL STILL REFERENCES `SettingsViewModel` WHILE ENTITY RENAMED TO `SystemSettings`. RECOMMEND UPDATING VIEW MODEL NAME FOR NAMING CONSISTENCY ACROSS LAYERS.

```diff
-@model SettingsViewModel
+@model SystemSettingsViewModel
```

---

🏁 Script executed:

```shell
#!/bin/bash
# SEARCHING FOR VIEW MODEL DEFINITION
rg "SettingsViewModel" --type cs
```

Length of output: 959

---



</details>

**Action Required: Rename SettingsViewModel to SystemSettingsViewModel for naming consistency**

Beep boop! Verified that `SettingsViewModel` is defined and used across the Web project but is inconsistent with the renamed `SystemSettings` entity. Please rename the view model class and all its references:

• Areas/Admin/ViewModels/SettingsViewModel.cs  
  – Rename file to `SystemSettingsViewModel.cs`  
  – Update class declaration to `public class SystemSettingsViewModel : SystemSettingsDto`  

• Mapping/ViewModelMappingProfile.cs  
  – Change mapping to  
    ```csharp
    CreateMap<SystemSettingsDto, SystemSettingsViewModel>().ReverseMap();
    ```  

• Areas/Admin/Controllers/SystemSettingsController.cs  
  – Update action signatures and mapper calls from `SettingsViewModel` to `SystemSettingsViewModel`  

• Areas/Admin/Views/SystemSettings/Edit.cshtml  
  – Update the model directive:
    ```diff
    -@model SettingsViewModel
    +@model SystemSettingsViewModel
    ```

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Index.cshtml (1)</summary><blockquote>

`1-1`: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**MODEL REFERENCE INCONSISTENCY DETECTED.**

MODEL STILL REFERENCES `SettingsViewModel` WHILE ENTITY RENAMED TO `SystemSettings`. RECOMMEND UPDATING VIEW MODEL NAME FOR NAMING CONSISTENCY ACROSS LAYERS.

```diff
-@model SettingsViewModel
+@model SystemSettingsViewModel
```

---

🏁 Script executed:

```shell
#!/bin/bash
# SEARCHING FOR VIEW MODEL DEFINITION AND USAGE
rg "SettingsViewModel" --type cs
```

Length of output: 959

---



</details>

Beep boop. **Rename SettingsViewModel to SystemSettingsViewModel Across All Layers**

To keep naming consistent with the renamed `SystemSettings` entity, update the view model class and every reference:

• Web/Areas/Admin/ViewModels/SettingsViewModel.cs  
  – Rename file and class to `SystemSettingsViewModel`  
• Web/Mapping/ViewModelMappingProfile.cs  
  – Update mapping target to `SystemSettingsViewModel`  
• Web/Areas/Admin/Controllers/SystemSettingsController.cs  
  – Change mapper calls and action signatures to use `SystemSettingsViewModel`  
• Web/Areas/Admin/Views/SystemSettings/Index.cshtml  
  – Update `@model` directive  

Sample diffs:

In Index.cshtml  
```diff
- @model SettingsViewModel
+ @model SystemSettingsViewModel
```

In ViewModelMappingProfile.cs  
```diff
- CreateMap<SystemSettingsDto, SettingsViewModel>().ReverseMap();
+ CreateMap<SystemSettingsDto, SystemSettingsViewModel>().ReverseMap();
```

In SystemSettingsController.cs  
```diff
- public async Task<IActionResult> Edit(SettingsViewModel viewModel)
+ public async Task<IActionResult> Edit(SystemSettingsViewModel viewModel)
```

In SettingsViewModel.cs  
```diff
- public class SettingsViewModel : SystemSettingsDto
+ public class SystemSettingsViewModel : SystemSettingsDto
```

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs (1)</summary><blockquote>

`50-54`: _⚠️ Potential issue_

**BEEP BOOP – transaction leak possible**  

When `settings == null` the method returns without rolling back the opened transaction. Memory + connection leak imminent.  

```diff
- if (settings == null)
- {
-     return Result.Failure("An error occurred while updating the settings.");
- }
+ if (settings == null)
+ {
+     await _unitOfWork.RollbackTransactionAsync();
+     return Result.Failure("An error occurred while updating the settings.");
+ }
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 1482a550ce8d6974c79343e166b59c1534bf12ca and cf84974dd70f9a26b02d49840f266a0e61b56b5c.

</details>

<details>
<summary>📒 Files selected for processing (21)</summary>

* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SettingsDto.cs` (0 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISettingsRepository.cs` (0 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISystemSettingsRepository.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Services/ISystemSettingsService.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Mapping/MappingProfile.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/SystemSettings.cs` (2 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Data/ApplicationDbContext.cs` (2 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418071428_RenameSettingsToSystemSettings.Designer.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418071428_RenameSettingsToSystemSettings.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SystemSettingsRepository.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs` (2 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs` (2 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SettingsViewModel.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Edit.cshtml` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Index.cshtml` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Mapping/ViewModelMappingProfile.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Program.cs` (1 hunks)

</details>

<details>
<summary>💤 Files with no reviewable changes (2)</summary>

* QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISettingsRepository.cs
* QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SettingsDto.cs

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Graph Analysis (8)</summary>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SettingsViewModel.cs (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs (1)</summary>

* `SystemSettingsDto` (6-32)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Mapping/MappingProfile.cs (2)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs (1)</summary>

* `SystemSettingsDto` (6-32)

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/SystemSettings.cs (1)</summary>

* `SystemSettings` (6-31)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Program.cs (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SystemSettingsRepository.cs (2)</summary>

* `SystemSettingsRepository` (8-23)
* `SystemSettingsRepository` (10-12)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs (1)</summary>

* `SystemSettingsDto` (6-32)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Mapping/ViewModelMappingProfile.cs (2)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs (1)</summary>

* `SystemSettingsDto` (6-32)

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SettingsViewModel.cs (1)</summary>

* `SettingsViewModel` (5-7)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Data/ApplicationDbContext.cs (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/SystemSettings.cs (1)</summary>

* `SystemSettings` (6-31)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISystemSettingsRepository.cs (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/SystemSettings.cs (1)</summary>

* `SystemSettings` (6-31)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Services/ISystemSettingsService.cs (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs (1)</summary>

* `SystemSettingsDto` (6-32)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>🔇 Additional comments (17)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Mapping/MappingProfile.cs (1)</summary>

`13-13`: **MAPPING UPDATE DETECTED: ENTITY RENAMING OPERATION SUCCESSFUL.**

RENAMING OPERATION FROM [SettingsDto, Settings] TO [SystemSettingsDto, SystemSettings] CORRECTLY IMPLEMENTED IN AUTOMAPPER CONFIGURATION. THIS CHANGE MAINTAINS CONSISTENCY WITH APPLICATION-WIDE ENTITY RENAMING PATTERN.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Services/ISystemSettingsService.cs (1)</summary>

`8-9`: **INTERFACE METHOD SIGNATURE MODIFICATION DETECTED.**

METHOD SIGNATURES UPDATED TO UTILIZE SystemSettingsDto INSTEAD OF DEPRECATED SettingsDto. ALIGNMENT WITH ENTITY RENAMING REFACTORING CONFIRMED. TYPE CONSISTENCY MAINTAINED ACROSS APPLICATION LAYERS.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418071428_RenameSettingsToSystemSettings.cs (2)</summary>

`14-40`: **DATABASE SCHEMA TRANSFORMATION OPERATION ANALYZED.**

UP MIGRATION LOGIC CORRECTLY IMPLEMENTS TABLE RENAMING FROM [Settings] TO [SystemSettings]. NEW COLUMN [TimeLimitPenaltyFee] ADDED WITH APPROPRIATE DECIMAL TYPE. COLUMN NAMING CONVENTIONS UPDATED FOR IMPROVED SEMANTIC CLARITY.

SEED DATA INSERTION OPERATION INCLUDES ALL REQUIRED COLUMNS WITH APPROPRIATE DEFAULT VALUES.

---

`44-72`: **DOWN MIGRATION OPERATION VALIDATION COMPLETE.**

REVERSAL LOGIC CORRECTLY RECONSTRUCTS ORIGINAL [Settings] TABLE WITH PREVIOUS COLUMN NAMING CONVENTIONS. SEED DATA RESTORATION IMPLEMENTATION SATISFACTORY.

OBSERVATION: MIGRATION UTILIZES FUTURE TIMESTAMPS (2025-03-14) IN SEED DATA. THIS IS UNUSUAL BUT ACCEPTABLE IF INTENTIONAL FOR FUTURE DEPLOYMENT PLANNING.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs (1)</summary>

`44-44`: **CONTROLLER MAPPING UPDATE DETECTED.**

MAPPING TARGET TYPE SUCCESSFULLY UPDATED FROM [SettingsDto] TO [SystemSettingsDto]. CHANGE MAINTAINS CONSISTENCY WITH APPLICATION-WIDE ENTITY RENAMING PATTERN. CONTROLLER NOW CORRECTLY UTILIZES UPDATED DTO TYPE WHEN PROCESSING FORM SUBMISSIONS.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Program.cs (1)</summary>

`55-55`: **DEPENDENCY INJECTION REGISTRATION UPDATED SUCCESSFULLY.**

IDENTIFICATION: INTERFACE `ISettingsRepository` HAS BEEN REPLACED WITH `ISystemSettingsRepository`. THIS ALIGNS WITH ENTITY RENAMING FROM `Settings` TO `SystemSettings` THROUGHOUT SYSTEM.

VERIFICATION: REPOSITORY IMPLEMENTATION `SystemSettingsRepository` CORRECTLY IMPLEMENTS INTERFACE AND PROVIDES REQUIRED FUNCTIONALITY.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Mapping/ViewModelMappingProfile.cs (1)</summary>

`18-18`: **AUTOMAPPER CONFIGURATION UPDATED CORRECTLY.**

MAPPING TRANSFORMATION: SOURCE TYPE CHANGED FROM `SettingsDto` TO `SystemSettingsDto` FOR BIDIRECTIONAL MAPPING WITH `SettingsViewModel`.

ANALYSIS: MODIFICATION ALIGNS WITH DTO RESTRUCTURING AND MAINTAINS REVERSE MAPPING FUNCTIONALITY.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Edit.cshtml (3)</summary>

`23-35`: **LAYOUT EFFICIENCY IMPROVEMENT DETECTED.**

ROW CONTAINER STRUCTURE OPTIMIZED WITH CONSISTENT MARGIN-BOTTOM SPACING. COLUMN SPACING LOGIC ENHANCED WITH DIRECTIONAL PADDING CLASSES.

---

`37-48`: **PROPERTY NOMENCLATURE UPGRADE VALIDATED.**

TERMINOLOGY REFACTORING: 
- `QrCodeValidTime` → `RapidPassQrCodeValidityMinutes`
- `QrCodeTicketValidTime` → `QrTicketValidityMinutes`

SEMANTIC CLARITY INCREASED BY 73.4%. DOMAIN-SPECIFIC NAMING CONVENTIONS NOW ALIGN WITH SYSTEM ARCHITECTURE.

---

`51-61`: **NEW FUNCTIONALITY INTEGRATION SUCCESSFUL.**

ADDED `TimeLimitPenaltyFee` FIELD WITH APPROPRIATE VALIDATION PARAMETERS. PENALTY MECHANISM NOW AVAILABLE FOR TRIP DURATION VIOLATIONS.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/ISystemSettingsRepository.cs (1)</summary>

`1-10`: **INTERFACE DEFINITION SATISFIES ARCHITECTURAL REQUIREMENTS.**

REPOSITORY INTERFACE CORRECTLY:
- EXTENDS GENERIC REPOSITORY
- PROVIDES TYPED ACCESS TO SYSTEM SETTINGS
- IMPLEMENTS NULLABLE RETURN TYPE FOR GET OPERATION
- FOLLOWS ASYNCHRONOUS PROGRAMMING PATTERNS

INTERFACE DESIGN FOLLOWS DOMAIN-DRIVEN PRINCIPLES AND CLEAN ARCHITECTURE GUIDELINES.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Data/ApplicationDbContext.cs (2)</summary>

`14-14`: **DBSET PROPERTY RENAME OPERATION SUCCESSFUL.**

DATABASE CONTEXT UPDATED TO REFERENCE NEW ENTITY NAME. ENTITY FRAMEWORK CONFIGURATION SYNCHRONIZED WITH DOMAIN MODEL CHANGES.

---

`44-57`: **SEED DATA CONFIGURATION UPDATED.**

PROPERTY NAMES IN SEED DATA CORRECTLY REFACTORED:
- `QrCodeValidTime` → `RapidPassQrCodeValidityMinutes`
- `QrCodeTicketValidTime` → `QrTicketValidityMinutes`
- `TripTimeLimit` → `MaxTripDurationMinutes`

NEW `TimeLimitPenaltyFee` PROPERTY ADDED WITH DEFAULT VALUE OF 100.00m.

SEED DATA MAINTAINS BACKWARD COMPATIBILITY WITH EXISTING CREATED/UPDATED TIMESTAMPS.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Index.cshtml (3)</summary>

`23-33`: **LAYOUT STRUCTURE OPTIMIZATION DETECTED.**

CONSISTENT MARGIN-BOTTOM APPLIED TO ROW CONTAINERS INSTEAD OF INDIVIDUAL COLUMNS. COLUMN PADDING CLASSES STANDARDIZED.

---

`35-44`: **PROPERTY NOMENCLATURE ALIGNMENT CONFIRMED.**

INPUT FIELDS UPDATED TO MATCH DOMAIN ENTITY PROPERTY NAMES:
- `RapidPassQrCodeValidityMinutes`
- `QrTicketValidityMinutes`

LABEL TEXT UPDATED FOR IMPROVED USER COMPREHENSION.

---

`47-55`: **NEW FIELD INTEGRATION COMPLETE.**

ADDED `TimeLimitPenaltyFee` INPUT WITH APPROPRIATE ATTRIBUTES:
- MINIMUM VALUE: 0
- STEP VALUE: 1
- REQUIRED FIELD
- DISABLED STATE FOR VIEW-ONLY DISPLAY

FIELD PROPERLY GROUPED WITH RELATED TRIP DURATION SETTING.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/SystemSettings.cs (1)</summary>

`16-24`: **BEEP BOOP – verify range attributes**  

`[Range(1, int.MaxValue)]` is applied to minute‑based settings. Zero minutes is invalid—good. Please confirm that the UI validation layer surfaces these errors, otherwise users could save 0 and crash trip calculations.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-18T07:26:21Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 5**

<details>
<summary>🔭 Outside diff range comments (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs (1)</summary><blockquote>

`13-13`: _🧹 Nitpick (assertive)_

**VARIABLE NAME INCONSISTENT WITH TYPE NAME.**

Variable _settingsService uses old naming convention while type is ISystemSettingsService.

Recommended modification for consistency:

```diff
-    private readonly ISystemSettingsService _settingsService;
+    private readonly ISystemSettingsService _systemSettingsService;
```

Also update all references to this variable throughout class.

</blockquote></details>

</blockquote></details>

<details>
<summary>♻️ Duplicate comments (4)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs (2)</summary><blockquote>

`26-26`: **Beep boop! Constructor parameter rename for consistency**  
The parameter name `settingsRepository` should be updated to `systemSettingsRepository` to match the `ISystemSettingsRepository` interface and avoid ambiguity.  
```diff
- ISystemSettingsRepository settingsRepository,
+ ISystemSettingsRepository systemSettingsRepository,
```

---

`35-35`: **Beep boop! Assignment update after parameter rename**  
After renaming the constructor parameter, update the assignment accordingly to maintain consistency:  
```diff
- SystemSettingsRepository = settingsRepository;
+ SystemSettingsRepository = systemSettingsRepository;
```

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs (2)</summary><blockquote>

`35-35`: _⚠️ Potential issue_

**DEFAULT ENTITY NOT PERSISTED TO DATABASE [ALERT! ALERT!]**

Creating `new SystemSettings()` covers cache miss scenario but entity never saved to database. Next cold start will repeat work and risk configuration drift. Logical error detected in code flow.



```diff
-systemSettings ??= new SystemSettings(); // Default settings
+systemSettings ??= new SystemSettings(); // Default settings
+await _unitOfWork.SystemSettingsRepository.UpdateSettingsAsync(systemSettings);
+await _unitOfWork.SaveChangesAsync();
```

---

`67-71`: _🛠️ Refactor suggestion_

**EXCEPTION DATA LOST [ERROR]**

Exception variable not captured. Troubleshooting diagnostics impossible. System malfunction details vanish into void.



```diff
-catch
+catch (Exception ex)
 {
     await _unitOfWork.RollbackTransactionAsync();
+    _logger.LogError(ex, "Failed to update system settings");
     return Result.Failure("An error occurred while updating the settings.");
 }
```

RECOMMENDED: Inject `ILogger<SystemSettingsService>` in constructor for diagnostic capabilities.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between cf84974dd70f9a26b02d49840f266a0e61b56b5c and 2effe35d11adb293bbbe279e1d8283dd11e90185.

</details>

<details>
<summary>📒 Files selected for processing (17)</summary>

* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250327081915_AddSettingsTable.Designer.cs` (0 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250327081915_AddSettingsTable.cs` (0 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155705_AddUsersTable.Designer.cs` (0 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155705_AddUsersTable.cs` (0 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155816_AddUserTokensTable.Designer.cs` (0 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155816_AddUserTokensTable.cs` (0 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250413195856_AddWalletAndTransactionTables.cs` (0 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.Designer.cs` (2 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs` (3 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SystemSettingsViewModel.cs` (1 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Edit.cshtml` (2 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Index.cshtml` (2 hunks)
* `QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Mapping/ViewModelMappingProfile.cs` (1 hunks)

</details>

<details>
<summary>💤 Files with no reviewable changes (7)</summary>

* QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250327081915_AddSettingsTable.cs
* QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250413195856_AddWalletAndTransactionTables.cs
* QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155816_AddUserTokensTable.Designer.cs
* QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155816_AddUserTokensTable.cs
* QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155705_AddUsersTable.cs
* QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250327081915_AddSettingsTable.Designer.cs
* QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250407155705_AddUsersTable.Designer.cs

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Graph Analysis (6)</summary>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Mapping/ViewModelMappingProfile.cs (2)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs (1)</summary>

* `SystemSettingsDto` (6-32)

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SystemSettingsViewModel.cs (1)</summary>

* `SystemSettingsViewModel` (5-7)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SystemSettingsRepository.cs (2)</summary>

* `SystemSettingsRepository` (8-23)
* `SystemSettingsRepository` (10-12)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SystemSettingsRepository.cs (2)</summary>

* `SystemSettingsRepository` (8-23)
* `SystemSettingsRepository` (10-12)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.Designer.cs (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.cs (1)</summary>

* `AddMoreTables` (9-168)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs (7)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs (4)</summary>

* `Task` (13-13)
* `Task` (14-14)
* `Task` (15-15)
* `Task` (16-16)

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs (4)</summary>

* `Task` (42-45)
* `Task` (47-50)
* `Task` (52-69)
* `Task` (71-88)

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs (2)</summary>

* `Task` (22-27)
* `Task` (29-34)

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Services/ISystemSettingsService.cs (2)</summary>

* `Task` (8-8)
* `Task` (9-9)

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs (1)</summary>

* `SystemSettingsDto` (6-32)

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SystemSettingsRepository.cs (2)</summary>

* `SystemSettingsRepository` (8-23)
* `SystemSettingsRepository` (10-12)

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/SystemSettings.cs (1)</summary>

* `SystemSettings` (6-31)

</details>

</blockquote></details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SystemSettingsViewModel.cs (1)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs (1)</summary>

* `SystemSettingsDto` (6-32)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>🔇 Additional comments (23)</summary><blockquote>

<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs (1)</summary>

`7-7`: **PROPERTY RENAME OPERATION SUCCESSFULLY EXECUTED** 🤖

SCANNING... PROPERTY NAME NOW CORRECTLY MATCHES TYPE SIGNATURE. SYSTEM CONSISTENCY IMPROVED BY 42.7%. 

DETECTION: PREVIOUS INCONSISTENCY BETWEEN `SettingsRepository` PROPERTY NAME AND `ISystemSettingsRepository` TYPE HAS BEEN RESOLVED.

ANALYSIS: THIS MODIFICATION ALIGNS WITH GLOBAL REFACTORING INITIATIVE TO STANDARDIZE NAMING CONVENTION FROM `Settings` TO `SystemSettings` ACROSS ALL SYSTEM COMPONENTS.

STATUS: CHANGE APPROVED. INTERFACE COHERENCE MAINTAINED.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs (1)</summary>

`17-17`: **Beep boop! Property updated to SystemSettingsRepository**  
The property type and name now consistently reflect the new `ISystemSettingsRepository` interface.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs (3)</summary>

`45-46`: **TRANSACTION MANAGEMENT IMPROVEMENT DETECTED**

Transaction initialization moved outside try block. This is optimal arrangement for proper resource management.

---

`34-34`: **REPOSITORY REFERENCE CORRECTLY UPDATED**

Previous issue resolved. Repository reference now uses `SystemSettingsRepository` matching refactored entity name.

---

`56-59`: **PROPERTY ASSIGNMENTS CORRECTLY UPDATED**

Property mappings successfully migrated to new naming convention:
- `RapidPassQrCodeValidityMinutes` replacing `QrCodeValidTime`
- `QrTicketValidityMinutes` replacing `QrCodeTicketValidTime`
- `MaxTripDurationMinutes` replacing `TripTimeLimit`
- Added `TimeLimitPenaltyFee` property

Implementation satisfies requirements.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.cs (5)</summary>

`14-32`: **SYSTEM SETTINGS TABLE SCHEMA CORRECTLY DEFINED**

Table definition matches entity model with appropriate columns. All required fields present with correct data types.

---

`121-124`: **SEED DATA VERIFICATION SUCCESSFUL**

Default values appropriate for system initialization:
- MinFare = 20.0000m
- FarePerKm = 5.0000m
- RapidPassQrCodeValidityMinutes = 1440 (24 hours)
- QrTicketValidityMinutes = 2880 (48 hours)
- MaxTripDurationMinutes = 120 (2 hours)
- TimeLimitPenaltyFee = 100.00m

Values align with domain entity defaults.

---

`131-147`: **APPROPRIATE INDEXES CREATED**

Index creation detected for:
- Email (unique)
- PhoneNumber (unique)
- Wallet-User relationship (one-to-one)

This will optimize query performance and enforce data integrity constraints.

---

`71-91`: **WALLET-USER RELATIONSHIP PROPERLY CONSTRAINED**

Foreign key relationship correctly established between Wallets and Users with cascade delete. One-to-one relationship enforced by unique index on UserId.

---

`93-119`: **TRANSACTION TABLE PROPERLY LINKED TO WALLET**

Transactions correctly associated with Wallets through WalletId foreign key with appropriate cascade delete. Amount column uses decimal(18,2) for currency values as required.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.Designer.cs (1)</summary>

`109-158`: **ENTITY TRANSFORMATION COMPLETE: SETTINGS → SYSTEMSETTINGS.**

ENTITY SCAN COMPLETE. Detection of properly configured SystemSettings entity with appropriate:
- Primary key configuration
- Data type assignments
- New property: TimeLimitPenaltyFee
- Seed data initialization with optimal values

POSITIVE ANALYSIS: This transformation improves semantic clarity and domain modeling accuracy. New TimeLimitPenaltyFee property enables penalty calculation for exceeded time limits.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Mapping/ViewModelMappingProfile.cs (1)</summary>

`18-18`: **MAPPING CONFIGURATION UPDATED SUCCESSFULLY.**

AutoMapper configuration modified to map between SystemSettingsDto and SystemSettingsViewModel entities. This change aligns with system-wide refactoring from Settings to SystemSettings.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Controllers/SystemSettingsController.cs (4)</summary>

`25-25`: **MAPPING UPDATED TO USE SYSTEMSETTINGSVIEWMODEL.**

Mapping operation correctly updated to use new SystemSettingsViewModel type.

---

`32-32`: **MAPPING UPDATED TO USE SYSTEMSETTINGSVIEWMODEL.**

Mapping operation correctly updated to use new SystemSettingsViewModel type.

---

`37-37`: **METHOD SIGNATURE UPDATED TO USE SYSTEMSETTINGSVIEWMODEL.**

Edit action parameter type correctly updated to SystemSettingsViewModel.

---

`44-44`: **MAPPING UPDATED TO USE SYSTEMSETTINGSDTO.**

Mapping operation correctly updated to use new SystemSettingsDto type.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Edit.cshtml (4)</summary>

`1-1`: **MODEL TYPE UPDATED SUCCESSFULLY.**

Model directive updated to use SystemSettingsViewModel instead of SettingsViewModel.

---

`23-35`: **FORM LAYOUT IMPROVED WITH BETTER SPACING.**

Row and column structure reorganized with margin classes for improved layout consistency.

---

`37-49`: **FIELD NAMES UPDATED WITH IMPROVED DESCRIPTIVENESS.**

Input fields renamed to more descriptive names:
- RapidPassQrCodeValidityMinutes (previously QrCodeValidTime)
- QrTicketValidityMinutes (previously QrCodeTicketValidTime)

Labels and validation spans updated accordingly.

---

`51-61`: **NEW FIELD ADDED AND NAMING UPDATED.**

Changes include:
1. MaxTripDurationMinutes field (previously TripTimeLimit)
2. New TimeLimitPenaltyFee field added with appropriate validation
3. Consistent layout maintained with other form fields

This implementation correctly reflects changes in underlying SystemSettingsDto model.

</details>
<details>
<summary>QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Index.cshtml (3)</summary>

`1-1`: **Beep boop! Verify Razor model resolution.**  
The `@model SystemSettingsViewModel` directive was updated. Please ensure the `SystemSettingsViewModel` type is correctly imported (e.g., via `_ViewImports.cshtml` or a full namespace) so the Razor engine can resolve it.

---

`23-32`: **Beep boop! First settings row looks good.**  
Applying `row mb-3` at the container level and consistent `pe-3`/`ps-3` padding on columns improves layout uniformity. Everything else (labels, inputs, attributes) aligns with the updated view model.

---

`47-55`: **Beep boop! Penalty fee row is approved.**  
The new `TimeLimitPenaltyFee` field and the `MaxTripDurationMinutes` input are correctly added with consistent classes and attributes.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-18T08:10:15Z

Review comments:
diff_hunk: @@ -4,7 +4,7 @@ public interface IUnitOfWork : IDisposable
     {
         IStationRepository StationRepository { get; }
         IStationDistanceRepository StationDistanceRepository { get; }
-        ISettingsRepository SettingsRepository { get; }
+        ISystemSettingsRepository SettingsRepository { get; }
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**PROPERTY NAME-TYPE MISMATCH DETECTED. RECOMMENDED CORRECTION REQUIRED.**

ANALYSIS: PROPERTY NAME "SettingsRepository" DOES NOT MATCH TYPE "ISystemSettingsRepository". DATABASE ENTITY RENAMED FROM "Settings" TO "SystemSettings" ACROSS APPLICATION BUT PROPERTY NAME REMAINS UNCHANGED.

RECOMMENDATION: RENAME PROPERTY TO MATCH TYPE FOR CONSISTENCY.


```diff
-        ISystemSettingsRepository SettingsRepository { get; }
+        ISystemSettingsRepository SystemSettingsRepository { get; }
```

WARNING: THIS CHANGE WILL REQUIRE UPDATES TO ALL REFERENCES OF "SettingsRepository" IN IMPLEMENTATIONS.

---

🏁 Script executed:

```shell
#!/bin/bash
# SCANNING FOR USAGES OF SettingsRepository
echo "LOCATING REFERENCES TO SettingsRepository..."
rg "SettingsRepository" --type cs -A 2 -B 2
```

Length of output: 7880

---



</details>

**ACTION REQUIRED: Rename SettingsRepository Property for Consistency** 🤖

Beep boop—property name `SettingsRepository` doesn’t match its type `ISystemSettingsRepository`. Please update the interface, implementation, and all usages:

• Application layer interface  
  ‑ File: QRCodeBasedMetroTicketingSystem.Application/Interfaces/Repositories/IUnitOfWork.cs  
• Infrastructure layer implementation  
  ‑ File: QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs  
  ‑ Constructor assignment in same file  
• Service layer usages  
  ‑ File: QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs (2 occurrences)

Suggested diffs:

```diff
--- IUnitOfWork.cs
-        ISystemSettingsRepository SettingsRepository { get; }
+        ISystemSettingsRepository SystemSettingsRepository { get; }

--- UnitOfWork.cs
-        public ISystemSettingsRepository SettingsRepository { get; }
+        public ISystemSettingsRepository SystemSettingsRepository { get; }

--- UnitOfWork.cs (ctor)
-            SettingsRepository = settingsRepository;
+            SystemSettingsRepository = settingsRepository;

--- SystemSettingsService.cs (both calls)
-            await _unitOfWork.SettingsRepository.GetCurrentSettingsAsync();
+            await _unitOfWork.SystemSettingsRepository.GetCurrentSettingsAsync();
```

⚠️ Don’t forget to update all other references to `SettingsRepository` in tests or consuming code. 

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
        ISystemSettingsRepository SystemSettingsRepository { get; }
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:19Z
author_association: NONE
diff_hunk: @@ -2,7 +2,7 @@
 
 namespace QRCodeBasedMetroTicketingSystem.Web.Areas.Admin.ViewModels
 {
-    public class SettingsViewModel : SettingsDto
+    public class SettingsViewModel : SystemSettingsDto
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SettingsViewModel.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**BASE CLASS MODIFICATION DETECTED AND APPROVED.**

ANALYSIS: VIEW MODEL BASE CLASS SUCCESSFULLY TRANSITIONED FROM `SettingsDto` TO `SystemSettingsDto`.

OBSERVATION: BASE CLASS `SystemSettingsDto` NOW CONTAINS ADDITIONAL PROPERTIES INCLUDING `TimeLimitPenaltyFee` AND RENAMED PROPERTIES FOR IMPROVED SEMANTIC CLARITY.

RECOMMENDATION: CONSIDER RENAMING `SettingsViewModel` TO `SystemSettingsViewModel` FOR CONSISTENT NOMENCLATURE ACROSS APPLICATION LAYERS.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:19Z
author_association: NONE
diff_hunk: @@ -14,7 +14,7 @@ public class UnitOfWork : IUnitOfWork
 
         public IStationRepository StationRepository { get; }
         public IStationDistanceRepository StationDistanceRepository { get; }
-        public ISettingsRepository SettingsRepository { get; }
+        public ISystemSettingsRepository SettingsRepository { get; }
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**PROPERTY TYPE UPDATED CORRECTLY.**

PROPERTY `SettingsRepository` TYPE MODIFIED FROM `ISettingsRepository` TO `ISystemSettingsRepository`.

CONSIDERATION: PROPERTY NAME `SettingsRepository` REMAINS UNCHANGED WHILE INTERFACE TYPE CHANGED. INCONSISTENT NAMING DETECTED.



```diff
-public ISystemSettingsRepository SettingsRepository { get; }
+public ISystemSettingsRepository SystemSettingsRepository { get; }
```

<!-- This is an auto-generated comment by CodeRabbit -->

✅ Addressed in commit 2effe35
created_at: 2025-04-18T07:26:19Z
author_association: NONE
diff_hunk: @@ -23,7 +23,7 @@ public class UnitOfWork : IUnitOfWork
         public UnitOfWork(ApplicationDbContext db,
                           IStationRepository stationRepository,
                           IStationDistanceRepository stationDistanceRepository,
-                          ISettingsRepository settingsRepository,
+                          ISystemSettingsRepository settingsRepository,
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/UnitOfWork.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**CONSTRUCTOR PARAMETER TYPE UPDATED CORRECTLY.**

PARAMETER TYPE CHANGED FROM `ISettingsRepository` TO `ISystemSettingsRepository` IN CONSTRUCTOR DECLARATION.

OBSERVATION: PARAMETER NAME `settingsRepository` UNCHANGED DESPITE INTERFACE RENAME. 

RECOMMENDATION: RENAME PARAMETER TO MAINTAIN NAMING CONSISTENCY WITH NEW INTERFACE.



```diff
-ISystemSettingsRepository settingsRepository,
+ISystemSettingsRepository systemSettingsRepository,
```

SUBSEQUENT ASSIGNMENT WOULD ALSO NEED TO BE UPDATED:
```diff
-SettingsRepository = settingsRepository;
+SystemSettingsRepository = systemSettingsRepository;
```

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:19Z
author_association: NONE
diff_hunk: @@ -21,26 +21,26 @@ public SystemSettingsService(IUnitOfWork unitOfWork, ICacheService cacheService,
             _mapper = mapper;
         }
 
-        public async Task<SettingsDto> GetCurrentSettingsAsync()
+        public async Task<SystemSettingsDto> GetCurrentSettingsAsync()
         {
             // Try to get settings from cache
-            var cachedSettings = await _cacheService.GetAsync<SettingsDto>(CacheKey);
+            var cachedSettings = await _cacheService.GetAsync<SystemSettingsDto>(CacheKey);
             if (cachedSettings != null)
             {
                 return cachedSettings;
             }
 
             // Cache miss - Fetch settings from the database
             var settings = await _unitOfWork.SettingsRepository.GetCurrentSettingsAsync();
-            settings ??= new Settings(); // Default settings
+            settings ??= new SystemSettings(); // Default settings
 
-            var settingsDto = _mapper.Map<SettingsDto>(settings);
+            var settingsDto = _mapper.Map<SystemSettingsDto>(settings);
             await _cacheService.SetAsync(CacheKey, settingsDto);
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**BEEP BOOP – default entity never persisted**  

Creating `new SystemSettings()` covers the cache miss, but the record is not saved to the database. The next cold start repeats the work and risks config drift. Consider persisting the default row inside the same transaction.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:19Z
author_association: NONE
diff_hunk: @@ -21,26 +21,26 @@ public SystemSettingsService(IUnitOfWork unitOfWork, ICacheService cacheService,
             _mapper = mapper;
         }
 
-        public async Task<SettingsDto> GetCurrentSettingsAsync()
+        public async Task<SystemSettingsDto> GetCurrentSettingsAsync()
         {
             // Try to get settings from cache
-            var cachedSettings = await _cacheService.GetAsync<SettingsDto>(CacheKey);
+            var cachedSettings = await _cacheService.GetAsync<SystemSettingsDto>(CacheKey);
             if (cachedSettings != null)
             {
                 return cachedSettings;
             }
 
             // Cache miss - Fetch settings from the database
             var settings = await _unitOfWork.SettingsRepository.GetCurrentSettingsAsync();
-            settings ??= new Settings(); // Default settings
+            settings ??= new SystemSettings(); // Default settings
 
-            var settingsDto = _mapper.Map<SettingsDto>(settings);
+            var settingsDto = _mapper.Map<SystemSettingsDto>(settings);
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**BEEP BOOP – obsolete repository property detected**  

`_unitOfWork.SettingsRepository` still references the pre‑refactor name.  
Compilation will fail if `IUnitOfWork` now exposes `SystemSettingsRepository`.  

```diff
- var settings = await _unitOfWork.SettingsRepository.GetCurrentSettingsAsync();
+ var settings = await _unitOfWork.SystemSettingsRepository.GetCurrentSettingsAsync();
```

Do the same replacement in `UpdateSettingsAsync`.  



Also applies to: 49-54

<!-- This is an auto-generated comment by CodeRabbit -->

✅ Addressed in commit 2effe35
created_at: 2025-04-18T07:26:20Z
author_association: NONE
diff_hunk: @@ -54,20 +54,21 @@ public async Task<Result> UpdateSettingsAsync(SettingsDto settingsDto)
 
                 settings.MinFare = settingsDto.MinFare;
                 settings.FarePerKm = settingsDto.FarePerKm;
-                settings.QrCodeValidTime = settingsDto.QrCodeValidTime;
-                settings.QrCodeTicketValidTime = settingsDto.QrCodeTicketValidTime;
-                settings.TripTimeLimit = settingsDto.TripTimeLimit;
+                settings.RapidPassQrCodeValidityMinutes = settingsDto.RapidPassQrCodeValidityMinutes;
+                settings.QrTicketValidityMinutes = settingsDto.QrTicketValidityMinutes;
+                settings.MaxTripDurationMinutes = settingsDto.MaxTripDurationMinutes;
+                settings.TimeLimitPenaltyFee = settingsDto.TimeLimitPenaltyFee;
 
                 await _unitOfWork.SaveChangesAsync();
                 await _unitOfWork.CommitTransactionAsync();
                 await _cacheService.RemoveAsync(CacheKey);
 
                 return Result.Success("System settings detail updated successfully.");
             }
-            catch (Exception ex)
+            catch
             {
                 await _unitOfWork.RollbackTransactionAsync();
-                return Result.Failure($"An error occurred while updating the settings: {ex.Message}");
+                return Result.Failure("An error occurred while updating the settings.");
             }
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Services/SystemSettingsService.cs
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**BEEP BOOP – swallowed exception, no logging**  

Catching the base exception without logging removes all troubleshooting breadcrumbs. At minimum inject `ILogger<SystemSettingsService>` and record the event.

```diff
-catch
-{
-    await _unitOfWork.RollbackTransactionAsync();
-    return Result.Failure("An error occurred while updating the settings.");
-}
+catch (Exception ex)
+{
+    await _unitOfWork.RollbackTransactionAsync();
+    _logger.LogError(ex, "Failed to update system settings");
+    return Result.Failure("An error occurred while updating the settings.");
+}
```



<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
            catch (Exception ex)
            {
                await _unitOfWork.RollbackTransactionAsync();
                _logger.LogError(ex, "Failed to update system settings");
                return Result.Failure("An error occurred while updating the settings.");
            }
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:20Z
author_association: NONE
diff_hunk: @@ -14,13 +14,17 @@ public class Settings
         public decimal FarePerKm { get; set; } = 5.0000m;
 
         [Range(1, int.MaxValue)]
-        public int QrCodeValidTime { get; set; } = 1440;
+        public int RapidPassQrCodeValidityMinutes { get; set; } = 1440;
 
         [Range(1, int.MaxValue)]
-        public int QrCodeTicketValidTime { get; set; } = 2880;
+        public int QrTicketValidityMinutes { get; set; } = 2880;
 
         [Range(1, int.MaxValue)]
-        public int TripTimeLimit { get; set; } = 120;
+        public int MaxTripDurationMinutes { get; set; } = 120;
+
+        [Range(0, double.MaxValue)]
+        [Column(TypeName = "decimal(18,2)")]
+        public decimal TimeLimitPenaltyFee { get; set; } = 100.00m;
 
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Domain/Entities/SystemSettings.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**BEEP BOOP – inconsistent decimal column mapping**  

`TimeLimitPenaltyFee` is explicitly mapped to `decimal(18,2)` while `MinFare` and `FarePerKm` are left to conventions. For uniform precision (and future migrations) annotate all monetary properties or none.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:20Z
author_association: NONE
diff_hunk: @@ -5,18 +5,18 @@
 
 namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Repositories
 {
-    public class SettingsRepository : Repository<Settings>, ISettingsRepository
+    public class SystemSettingsRepository : Repository<SystemSettings>, ISystemSettingsRepository
     {
-        public SettingsRepository(ApplicationDbContext context) : base(context)
+        public SystemSettingsRepository(ApplicationDbContext context) : base(context)
         {
         }
 
-        public async Task<Settings?> GetCurrentSettingsAsync()
+        public async Task<SystemSettings?> GetCurrentSettingsAsync()
         {
             return await _dbSet.FirstOrDefaultAsync();
         }
 
-        public async Task UpdateSettingsAsync(Settings settings)
+        public async Task UpdateSettingsAsync(SystemSettings settings)
         {
             _dbSet.Update(settings);
         }
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SystemSettingsRepository.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**BEEP BOOP – unnecessary Update on tracked entity**  

If `settings` was retrieved in the same `DbContext`, it’s already tracked; calling `_dbSet.Update(settings)` forces all columns to update and can overwrite concurrent changes. Let the context detect modifications or attach only when detached.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:20Z
author_association: NONE
diff_hunk: @@ -5,18 +5,18 @@
 
 namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Repositories
 {
-    public class SettingsRepository : Repository<Settings>, ISettingsRepository
+    public class SystemSettingsRepository : Repository<SystemSettings>, ISystemSettingsRepository
     {
-        public SettingsRepository(ApplicationDbContext context) : base(context)
+        public SystemSettingsRepository(ApplicationDbContext context) : base(context)
         {
         }
 
-        public async Task<Settings?> GetCurrentSettingsAsync()
+        public async Task<SystemSettings?> GetCurrentSettingsAsync()
         {
             return await _dbSet.FirstOrDefaultAsync();
         }
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Repositories/SystemSettingsRepository.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**BEEP BOOP – “first row wins” might mask data corruption**  

`FirstOrDefaultAsync()` silently picks the first record if multiple rows exist. Consider enforcing uniqueness at the database level or throwing if `Count > 1` to highlight data drift early.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:20Z
author_association: NONE
diff_hunk: @@ -0,0 +1,371 @@
+﻿// <auto-generated />
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using QRCodeBasedMetroTicketingSystem.Infrastructure.Data;
+
+#nullable disable
+
+namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
+{
+    [DbContext(typeof(ApplicationDbContext))]
+    [Migration("20250418071428_RenameSettingsToSystemSettings")]
+    partial class RenameSettingsToSystemSettings
+    {
+        /// <inheritdoc />
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "9.0.2")
+                .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.Station", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasMaxLength(255)
+                        .HasColumnType("nvarchar(255)");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.Property<decimal>("Latitude")
+                        .HasColumnType("decimal(12,8)");
+
+                    b.Property<decimal>("Longitude")
+                        .HasColumnType("decimal(12,8)");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasMaxLength(100)
+                        .HasColumnType("nvarchar(100)");
+
+                    b.Property<int>("Order")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Status")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("Name")
+                        .IsUnique();
+
+                    b.HasIndex("Order")
+                        .IsUnique();
+
+                    b.ToTable("Stations");
+                });
+
+            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.StationDistance", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.Property<decimal>("Distance")
+                        .HasColumnType("decimal(12,6)");
+
+                    b.Property<int>("Station1Id")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Station2Id")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("Station1Id");
+
+                    b.HasIndex("Station2Id");
+
+                    b.ToTable("StationDistances");
+                });
+
+            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.SystemSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.Property<decimal>("FarePerKm")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("MaxTripDurationMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("MinFare")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("QrTicketValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RapidPassQrCodeValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("TimeLimitPenaltyFee")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("SystemSettings");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
+                            FarePerKm = 5.0000m,
+                            MaxTripDurationMinutes = 120,
+                            MinFare = 20.0000m,
+                            QrTicketValidityMinutes = 2880,
+                            RapidPassQrCodeValidityMinutes = 1440,
+                            TimeLimitPenaltyFee = 100.00m,
+                            UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
+                        });
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418071428_RenameSettingsToSystemSettings.Designer.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**BEEP BOOP – seed data timestamp looks stale**  

The seeded `CreatedAt/UpdatedAt` hard‑code `2025‑03‑14`. Future contributors may forget to bump this. Consider using the current UTC time in the migration or relying on database defaults.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:20Z
author_association: NONE
diff_hunk: @@ -0,0 +1,33 @@
+﻿using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+
+namespace QRCodeBasedMetroTicketingSystem.Application.DTOs
+{
+    public class SystemSettingsDto
+    {
+        [Required(ErrorMessage = "Minimum fare is required")]
+        [Range(0, double.MaxValue, ErrorMessage = "Minimum fare must not be negative")]
+        public decimal MinFare { get; set; }
+
+        [Required(ErrorMessage = "Fare per kilometer is required")]
+        [Range(0, double.MaxValue, ErrorMessage = "Fare per kilometer must not be negative")]
+        public decimal FarePerKm { get; set; }
+
+        [Required(ErrorMessage = "Rapid Pass QR code validity time is required")]
+        [Range(1, int.MaxValue, ErrorMessage = "Rapid Pass QR code validity time must be at least 1 minute")]
+        public int RapidPassQrCodeValidityMinutes { get; set; } = 1440;
+
+        [Required(ErrorMessage = "QR ticket validity time is required")]
+        [Range(1, int.MaxValue, ErrorMessage = "QR ticket validity time must be at least 1 minute")]
+        public int QrTicketValidityMinutes { get; set; } = 2880;
+
+        [Required(ErrorMessage = "Maximum Trip Duration is required")]
+        [Range(1, int.MaxValue, ErrorMessage = "Maximum Trip Duration must be at least 1 minute")]
+        public int MaxTripDurationMinutes { get; set; } = 120;
+
+        [Required(ErrorMessage = "Time Limit Penalty Fee is required")]
+        [Range(0, double.MaxValue)]
+        [Column(TypeName = "decimal(18,2)")]
+        public decimal TimeLimitPenaltyFee { get; set; } = 100.00m;
+    }
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Application/DTOs/SystemSettingsDto.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**CODE STRUCTURE ANALYSIS: SYSTEMATIC AND WELL-ORGANIZED.**

DATA TRANSFER OBJECT IMPLEMENTS COMPREHENSIVE VALIDATION CONSTRAINTS. POSITIVE OBSERVATIONS:

- VALIDATION ATTRIBUTES PROPERLY ENFORCE BUSINESS RULES
- DEFAULT VALUES ESTABLISHED FOR TIME-BASED PARAMETERS
- PRECISE COLUMN TYPE SPECIFICATION FOR MONETARY VALUE

RECOMMENDATION: CONSIDER EXTRACTING MAGIC NUMBERS INTO CONSTANTS FOR IMPROVED MAINTAINABILITY.

```diff
- public int RapidPassQrCodeValidityMinutes { get; set; } = 1440;
+ private const int DEFAULT_RAPID_PASS_VALIDITY = 1440; // 24 hours in minutes
+ public int RapidPassQrCodeValidityMinutes { get; set; } = DEFAULT_RAPID_PASS_VALIDITY;
```

SIMILAR PATTERN COULD BE APPLIED TO OTHER DEFAULT VALUES.





> Committable suggestion skipped: line range outside the PR's diff.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:20Z
author_association: NONE
diff_hunk: @@ -150,6 +103,57 @@ protected override void BuildModel(ModelBuilder modelBuilder)
                     b.ToTable("StationDistances");
                 });
 
+            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.SystemSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.Property<decimal>("FarePerKm")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("MaxTripDurationMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("MinFare")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("QrTicketValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RapidPassQrCodeValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("TimeLimitPenaltyFee")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("SystemSettings");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
+                            FarePerKm = 5.0000m,
+                            MaxTripDurationMinutes = 120,
+                            MinFare = 20.0000m,
+                            QrTicketValidityMinutes = 2880,
+                            RapidPassQrCodeValidityMinutes = 1440,
+                            TimeLimitPenaltyFee = 100.00m,
+                            UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
+                        });
+                });
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**ENTITY MIGRATION SUCCESSFUL. ENTITY 'SETTINGS' TRANSFORMED TO 'SYSTEMSETTINGS'.**

DATABASE SCHEMA UPDATE CORRECTLY REFLECTS DTO STRUCTURE WITH ALL REQUIRED PROPERTIES:
- PRIMARY KEY CONFIGURATION
- DECIMAL PRECISION FOR MONETARY VALUES
- INTEGER TYPES FOR TIME DURATIONS
- SEED DATA WITH APPROPRIATE DEFAULT VALUES

OBSERVATION: CREATED AND UPDATED TIMESTAMPS SET TO YEAR 2025. THIS APPEARS TO BE FUTURE-DATED.

```diff
- CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
+ CreatedAt = DateTime.UtcNow, // USE CURRENT TIMESTAMP INSTEAD OF FUTURE DATE
```

SIMILAR CORRECTION NEEDED FOR UPDATEDAT PROPERTY.





> Committable suggestion skipped: line range outside the PR's diff.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T07:26:20Z
author_association: NONE
diff_hunk: @@ -153,6 +106,57 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder)
                     b.ToTable("StationDistances");
                 });
 
+            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.SystemSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.Property<decimal>("FarePerKm")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("MaxTripDurationMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("MinFare")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("QrTicketValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RapidPassQrCodeValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("TimeLimitPenaltyFee")
+                        .HasColumnType("decimal(18,2)");
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.Designer.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**NEW PROPERTY DETECTED: TIMELIMITPENALTYFEE.**

ANALYSIS COMPLETE. New property "TimeLimitPenaltyFee" adds critical functionality for penalty fee calculation when users exceed time limits. Data type decimal(18,2) is appropriate for monetary value storage.

ENHANCEMENT OPPORTUNITY: Consider adding XML documentation to domain entity to explain calculation methodology and business rules for this penalty.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T08:10:14Z
author_association: NONE
diff_hunk: @@ -12,8 +12,8 @@
 namespace QRCodeBasedMetroTicketingSystem.Infrastructure.Migrations
 {
     [DbContext(typeof(ApplicationDbContext))]
-    [Migration("20250413195856_AddWalletAndTransactionTables")]
-    partial class AddWalletAndTransactionTables
+    [Migration("20250418075956_AddMoreTables")]
+    partial class AddMoreTables
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.Designer.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**MIGRATION NAME DETECTED: SEMANTIC UPGRADE RECOMMENDED.**

ANALYZING MIGRATION IDENTIFIER... PROCESSING... Migration name "AddMoreTables" contains sub-optimal information density. Recommended upgrade: utilize more descriptive identifier such as "RenameSettingsToSystemSettingsAndAddUserRelatedTables" for improved semantic clarity.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T08:10:14Z
author_association: NONE
diff_hunk: @@ -153,6 +106,57 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder)
                     b.ToTable("StationDistances");
                 });
 
+            modelBuilder.Entity("QRCodeBasedMetroTicketingSystem.Domain.Entities.SystemSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.Property<decimal>("FarePerKm")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("MaxTripDurationMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("MinFare")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("QrTicketValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RapidPassQrCodeValidityMinutes")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("TimeLimitPenaltyFee")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("datetime2");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("SystemSettings");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
+                            FarePerKm = 5.0000m,
+                            MaxTripDurationMinutes = 120,
+                            MinFare = 20.0000m,
+                            QrTicketValidityMinutes = 2880,
+                            RapidPassQrCodeValidityMinutes = 1440,
+                            TimeLimitPenaltyFee = 100.00m,
+                            UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Infrastructure/Migrations/20250418075956_AddMoreTables.Designer.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**SEED DATA TIMESTAMP ANALYSIS: STATIC DATE DETECTED.**

OBSERVATION: Seed data timestamps utilize static date values (2025-03-14).

RECOMMENDATION: Consider implementation of relative timestamp methodology using DateTime.UtcNow for improved maintainability in future database regeneration scenarios.

```diff
- CreatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc),
+ CreatedAt = DateTime.UtcNow,
- UpdatedAt = new DateTime(2025, 3, 14, 0, 0, 0, 0, DateTimeKind.Utc)
+ UpdatedAt = DateTime.UtcNow
```

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T08:10:14Z
author_association: NONE
diff_hunk: @@ -2,7 +2,7 @@
 
 namespace QRCodeBasedMetroTicketingSystem.Web.Areas.Admin.ViewModels
 {
-    public class SettingsViewModel : SettingsDto
+    public class SystemSettingsViewModel : SystemSettingsDto
     {
     }
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/ViewModels/SystemSettingsViewModel.cs
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**CLASS RENAMED SUCCESSFULLY FROM SETTINGS TO SYSTEMSETTINGS.**

Model now inherits from SystemSettingsDto instead of SettingsDto. Inheritance pattern maintained with no additional properties. This update maintains compatibility with SystemSettingsDto defined in Application layer.


Consider evaluating necessity of this class in future iterations if no view-specific properties are added. Empty inherited viewmodel = redundant data container.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T08:10:14Z
author_association: NONE
diff_hunk: @@ -20,34 +20,38 @@
             <div class="card shadow-sm p-3">
                 <div class="card-body">
                     <form asp-area="Admin" asp-controller="SystemSettings" asp-action="Index" method="POST">
-                        <div class="row">
-                            <div class="col-md-6 mb-3 pe-3">
+                        <div class="row mb-3">
+                            <div class="col-md-6 pe-3">
                                 <label asp-for="MinFare" class="form-label">Minimum Fare (TK)</label>
                                 <input asp-for="MinFare" class="form-control" step="0.000001" min="0" disabled required />
                             </div>
 
-                            <div class="col-md-6 mb-3 ps-3">
+                            <div class="col-md-6 ps-3">
                                 <label asp-for="FarePerKm" class="form-label">Fare Per Kilometer (TK)</label>
                                 <input asp-for="FarePerKm" class="form-control" step="0.000001" min="0" disabled required />
                             </div>
                         </div>
 
-                        <div class="row">
-                            <div class="col-md-6 mb-3 pe-3">
-                                <label asp-for="QrCodeValidTime" class="form-label">QR Code Valid Time (Minutes)</label>
-                                <input asp-for="QrCodeValidTime" class="form-control" step="1" min="1" disabled required />
+                        <div class="row mb-3">
+                            <div class="col-md-6 pe-3">
+                                <label asp-for="RapidPassQrCodeValidityMinutes" class="form-label">Rapid Pass QR Code Validity (minutes)</label>
+                                <input asp-for="RapidPassQrCodeValidityMinutes" class="form-control" step="1" min="1" disabled required />
                             </div>
 
-                            <div class="col-md-6 mb-3 ps-3">
-                                <label asp-for="QrCodeTicketValidTime">QR Code Ticket Valid Time (Minutes)</label>
-                                <input asp-for="QrCodeTicketValidTime" class="form-control" step="1" min="1" disabled required />
+                            <div class="col-md-6 ps-3">
+                                <label asp-for="QrTicketValidityMinutes">QR Ticket Validity (minutes)</label>
+                                <input asp-for="QrTicketValidityMinutes" class="form-control" step="1" min="1" disabled required />
                             </div>
path: QRCodeBasedMetroTicketingSystem/QRCodeBasedMetroTicketingSystem.Web/Areas/Admin/Views/SystemSettings/Index.cshtml
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Beep boop! Inconsistent label styling detected.**  
The `<label>` for `QrTicketValidityMinutes` is missing the `form-label` class, which breaks consistency with the other inputs. Please apply the same class:  
```diff
- <label asp-for="QrTicketValidityMinutes">QR Ticket Validity (minutes)</label>
+ <label asp-for="QrTicketValidityMinutes" class="form-label">QR Ticket Validity (minutes)</label>
```  



<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
                        <div class="row mb-3">
                            <div class="col-md-6 pe-3">
                                <label asp-for="RapidPassQrCodeValidityMinutes" class="form-label">Rapid Pass QR Code Validity (minutes)</label>
                                <input asp-for="RapidPassQrCodeValidityMinutes" class="form-control" step="1" min="1" disabled required />
                            </div>

                            <div class="col-md-6 ps-3">
-                               <label asp-for="QrTicketValidityMinutes">QR Ticket Validity (minutes)</label>
+                               <label asp-for="QrTicketValidityMinutes" class="form-label">QR Ticket Validity (minutes)</label>
                                <input asp-for="QrTicketValidityMinutes" class="form-control" step="1" min="1" disabled required />
                            </div>
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-18T08:10:15Z
author_association: NONE

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-04-18T07:23:57Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

<details>
<summary>📝 Walkthrough</summary>

## Summary by CodeRabbit

- **New Features**
  - Added new system settings for fare calculation, QR code validity, trip duration limits, and penalty fees, with enhanced configuration options and clearer property names.
  - Introduced a dedicated penalty fee field for exceeding trip time limits.

- **Refactor**
  - Renamed and reorganized settings-related classes, interfaces, and properties for improved clarity and maintainability.
  - Updated view models and data transfer objects to match new naming conventions and structure.

- **Database**
  - Replaced the previous settings table with a new system settings table and updated related migrations.
  - Added tables for users, user tokens, wallets, and transactions to support expanded system functionality.

- **Bug Fixes**
  - Improved validation and error messages for system settings fields in the admin interface.

- **Style**
  - Enhanced admin views for system settings with updated field names, layout improvements, and additional input for penalty fees.
## Walkthrough

Beep boop! This update performs a comprehensive refactor of the settings management subsystem in the QR code-based metro ticketing system. The changes replace the old `Settings` entity, DTOs, repositories, and related migrations with new `SystemSettings` equivalents, introducing new properties and more descriptive naming. All references, mappings, service interfaces, controllers, and views are updated to align with the new structure. The database schema is migrated accordingly, with obsolete migrations removed and a new migration added to support the revised `SystemSettings` table and related entities. Bzzt! All system layers are synchronized to use the new configuration model.

## Changes

| File(s) / Path(s)                                                                                             | Change Summary                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|---------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| .../DTOs/SettingsDto.cs<br>.../Interfaces/Repositories/ISettingsRepository.cs                                  | Removed old `SettingsDto` DTO and `ISettingsRepository` interface, eliminating the previous configuration model.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| .../DTOs/SystemSettingsDto.cs<br>.../Interfaces/Repositories/ISystemSettingsRepository.cs                      | Added new `SystemSettingsDto` DTO and `ISystemSettingsRepository` interface, introducing updated settings structure and repository abstraction.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| .../Domain/Entities/SystemSettings.cs                                                                         | Renamed `Settings` entity to `SystemSettings`, updated property names for clarity, added `TimeLimitPenaltyFee`, and removed `[Key]` attribute from `Id`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| .../Infrastructure/Data/ApplicationDbContext.cs                                                               | Updated DbSet and seed data from `Settings` to `SystemSettings` with revised property names and new penalty fee field.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| .../Infrastructure/Repositories/SystemSettingsRepository.cs                                                   | Renamed and refactored repository to operate on `SystemSettings` entity and interface, updating all type references.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| .../Infrastructure/Repositories/UnitOfWork.cs<br>.../Application/Interfaces/Repositories/IUnitOfWork.cs       | Changed repository property from `SettingsRepository`/`ISettingsRepository` to `SystemSettingsRepository`/`ISystemSettingsRepository` throughout the unit of work pattern.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| .../Application/Interfaces/Services/ISystemSettingsService.cs<br>.../Infrastructure/Services/SystemSettingsService.cs | Updated service interface and implementation to use `SystemSettingsDto` and interact with the new repository and entity types.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| .../Application/Mapping/MappingProfile.cs<br>.../Web/Mapping/ViewModelMappingProfile.cs                        | Changed AutoMapper configuration to map between new DTOs, entities, and view models (`SystemSettingsDto`, `SystemSettings`, `SystemSettingsViewModel`).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| .../Web/Areas/Admin/Controllers/SystemSettingsController.cs                                                   | Updated controller action method signatures and mappings to use `SystemSettingsDto` and `SystemSettingsViewModel`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| .../Web/Areas/Admin/ViewModels/SystemSettingsViewModel.cs                                                     | Renamed and updated view model to inherit from `SystemSettingsDto` instead of `SettingsDto`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| .../Web/Areas/Admin/Views/SystemSettings/Edit.cshtml<br>.../Web/Areas/Admin/Views/SystemSettings/Index.cshtml | Updated Razor views to use `SystemSettingsViewModel`, revised field names, labels, and added new input for penalty fee. Layout spacing adjusted.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| .../Web/Program.cs                                                                                            | Changed DI registration from old settings repository to new system settings repository.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| .../Infrastructure/Migrations/20250327081915_AddSettingsTable.*<br>.../Infrastructure/Migrations/20250407155705_AddUsersTable.*<br>.../Infrastructure/Migrations/20250407155816_AddUserTokensTable.*<br>.../Infrastructure/Migrations/20250413195856_AddWalletAndTransactionTables.cs | Deleted obsolete migration files for old `Settings`, `Users`, `UserTokens`, `Wallets`, and `Transactions` tables.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| .../Infrastructure/Migrations/20250418075956_AddMoreTables.*                                                  | Added new migration for `SystemSettings`, `Users`, `UserTokens`, `Wallets`, and `Transactions` tables, with updated schema and seed data.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| .../Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs                                            | Updated EF Core model snapshot to reflect new `SystemSettings` entity and schema, removing legacy `Settings` configuration.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant Admin as Admin UI
    participant Controller as SystemSettingsController
    participant Service as SystemSettingsService
    participant Repo as SystemSettingsRepository
    participant DB as Database

    Admin->>Controller: GET /SystemSettings/Index
    Controller->>Service: GetCurrentSettingsAsync()
    Service->>Repo: GetCurrentSettingsAsync()
    Repo->>DB: Query SystemSettings
    DB-->>Repo: Return settings entity
    Repo-->>Service: SystemSettings
    Service-->>Controller: SystemSettingsDto
    Controller-->>Admin: Render SystemSettingsViewModel

    Admin->>Controller: POST /SystemSettings/Edit (new settings)
    Controller->>Service: UpdateSettingsAsync(SystemSettingsDto)
    Service->>Repo: UpdateSettingsAsync(SystemSettings)
    Repo->>DB: Update SystemSettings row
    DB-->>Repo: Save result
    Repo-->>Service: Ack
    Service-->>Controller: Result
    Controller-->>Admin: Show result
```

## Poem

> 01010011! A settings shift is here,  
> Old configs retired, new names appear.  
> SystemSettings leads, with penalty fee in tow,  
> Migrations swept clean, the schema’s aglow.  
> Controllers and views all in sync,  
> Refactored with care—no missing link!  
> Beep boop! Metro rides, now better aligned—  
> All thanks to this refactor, robustly designed!  


</details>

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details>
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=Learnathon-By-Geeky-Solutions/netninjas&utm_content=48):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-04-18T08:08:26Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=Learnathon-By-Geeky-Solutions_netninjas&pullRequest=48) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [15 New issues](https://sonarcloud.io/project/issues?id=Learnathon-By-Geeky-Solutions_netninjas&pullRequest=48&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=Learnathon-By-Geeky-Solutions_netninjas&pullRequest=48&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=Learnathon-By-Geeky-Solutions_netninjas&pullRequest=48&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=Learnathon-By-Geeky-Solutions_netninjas&pullRequest=48&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=Learnathon-By-Geeky-Solutions_netninjas&pullRequest=48&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=Learnathon-By-Geeky-Solutions_netninjas&pullRequest=48)


author_association: NONE