Ignore:
Timestamp:
04/28/26 14:53:32 (2 months ago)
Author:
kikisrbinoska <srbinoskakristina07@…>
Branches:
main
Children:
b373fea
Parents:
dc383dd
Message:

Added transactions and pooling

Location:
ChapterX.Infrastructure
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • ChapterX.Infrastructure/Data/DataContext/ApplicationDbContext.cs

    rdc383dd rd300631  
    22using ChapterX.Domain.Entities;
    33using Microsoft.EntityFrameworkCore;
     4using Microsoft.EntityFrameworkCore.Storage;
    45
    56namespace ChapterX.Infrastructure.Data.DataContext
     
    3132        public DbSet<PermissionLevel> PermissionLevels { get; init; }
    3233
     34        public Task<IDbContextTransaction> BeginTransactionAsync(CancellationToken cancellationToken = default)
     35            => Database.BeginTransactionAsync(cancellationToken);
     36
    3337        protected override void OnModelCreating(ModelBuilder modelBuilder)
    3438        {
     
    4347                e.Property(x => x.Username).HasColumnName("username");
    4448                e.Property(x => x.Email).HasColumnName("email");
    45                 e.Property(x => x.Name).HasColumnName("name");
     49                e.Property(x => x.Name).HasColumnName("user_name");
    4650                e.Property(x => x.Surname).HasColumnName("surname");
    4751                e.Property(x => x.Password).HasColumnName("password");
    48                 e.Property(x => x.CreatedAt).HasColumnName("created_at");
    49                 e.Property(x => x.UpdatedAt).HasColumnName("updated_at");
     52                e.Property(x => x.CreatedAt).HasColumnName("user_created_at");
     53                e.Property(x => x.UpdatedAt).HasColumnName("user_updated_at");
    5054            });
    5155
     
    8690                e.Property(x => x.ShortDescription).HasColumnName("short_description");
    8791                e.Property(x => x.Image).HasColumnName("image");
    88                 e.Property(x => x.Content).HasColumnName("content");
    89                 e.Property(x => x.UserId).HasColumnName("user_id");
    90                 e.Property(x => x.CreatedAt).HasColumnName("created_at");
    91                 e.Property(x => x.UpdatedAt).HasColumnName("updated_at");
     92                e.Property(x => x.Content).HasColumnName("story_content");
     93                e.Property(x => x.UserId).HasColumnName("user_id");
     94                e.Property(x => x.CreatedAt).HasColumnName("story_created_at");
     95                e.Property(x => x.UpdatedAt).HasColumnName("story_updated_at");
    9296                e.HasOne(x => x.Writer).WithMany(w => w.Stories).HasForeignKey(x => x.UserId);
    9397            });
     
    113117                e.Property(x => x.Name).HasColumnName("chapter_name");
    114118                e.Property(x => x.Title).HasColumnName("title");
    115                 e.Property(x => x.Content).HasColumnName("content");
     119                e.Property(x => x.Content).HasColumnName("chapter_content");
    116120                e.Property(x => x.WordCount).HasColumnName("word_count");
    117121                e.Property(x => x.Rating).HasColumnName("rating");
     
    119123                e.Property(x => x.ViewCount).HasColumnName("view_count");
    120124                e.Property(x => x.StoryId).HasColumnName("story_id");
    121                 e.Property(x => x.CreatedAt).HasColumnName("created_at");
    122                 e.Property(x => x.UpdatedAt).HasColumnName("updated_at");
     125                e.Property(x => x.CreatedAt).HasColumnName("chapter_created_at");
     126                e.Property(x => x.UpdatedAt).HasColumnName("chapter_updated_at");
    123127                e.HasOne(x => x.Story).WithMany(s => s.Chapters).HasForeignKey(x => x.StoryId);
    124128            });
     
    130134                e.HasKey(x => x.Id);
    131135                e.Property(x => x.Id).HasColumnName("genre_id");
    132                 e.Property(x => x.Name).HasColumnName("name");
     136                e.Property(x => x.Name).HasColumnName("genre_name");
    133137            });
    134138
     
    153157                e.Property(x => x.UserId).HasColumnName("user_id");
    154158                e.Property(x => x.StoryId).HasColumnName("story_id");
    155                 e.Property(x => x.CreatedAt).HasColumnName("created_at");
     159                e.Property(x => x.CreatedAt).HasColumnName("like_created_at");
    156160                e.HasOne(x => x.User).WithMany(u => u.Likes).HasForeignKey(x => x.UserId);
    157161                e.HasOne(x => x.Story).WithMany(s => s.Likes).HasForeignKey(x => x.StoryId);
     
    164168                e.HasKey(x => x.Id);
    165169                e.Property(x => x.Id).HasColumnName("comment_id");
    166                 e.Property(x => x.Content).HasColumnName("content");
    167                 e.Property(x => x.UserId).HasColumnName("user_id");
    168                 e.Property(x => x.StoryId).HasColumnName("story_id");
    169                 e.Property(x => x.CreatedAt).HasColumnName("created_at");
    170                 e.Property(x => x.UpdatedAt).HasColumnName("updated_at");
     170                e.Property(x => x.Content).HasColumnName("comment_content");
     171                e.Property(x => x.UserId).HasColumnName("user_id");
     172                e.Property(x => x.StoryId).HasColumnName("story_id");
     173                e.Property(x => x.CreatedAt).HasColumnName("comment_created_at");
     174                e.Property(x => x.UpdatedAt).HasColumnName("comment_updated_at");
    171175                e.HasOne(x => x.User).WithMany(u => u.Comments).HasForeignKey(x => x.UserId);
    172176                e.HasOne(x => x.Story).WithMany(s => s.Comments).HasForeignKey(x => x.StoryId);
     
    179183                e.HasKey(x => x.Id);
    180184                e.Property(x => x.Id).HasColumnName("list_id");
    181                 e.Property(x => x.Name).HasColumnName("name");
    182                 e.Property(x => x.Content).HasColumnName("content");
     185                e.Property(x => x.Name).HasColumnName("list_name");
     186                e.Property(x => x.Content).HasColumnName("list_content");
    183187                e.Property(x => x.IsPublic).HasColumnName("is_public");
    184188                e.Property(x => x.UserId).HasColumnName("user_id");
     
    207211                e.HasKey(x => x.Id);
    208212                e.Property(x => x.Id).HasColumnName("notification_id");
    209                 e.Property(x => x.Content).HasColumnName("content");
     213                e.Property(x => x.Content).HasColumnName("notification_content");
    210214                e.Property(x => x.IsRead).HasColumnName("is_read");
    211                 e.Property(x => x.CreatedAt).HasColumnName("created_at");
     215                e.Property(x => x.CreatedAt).HasColumnName("notification_created_at");
    212216                e.Property(x => x.RecipientUserId).HasColumnName("recipient_user_id");
    213217                e.Property(x => x.Type).HasColumnName("type");
     
    249253                e.Property(x => x.SuggestedText).HasColumnName("suggested_text");
    250254                e.Property(x => x.Accepted).HasColumnName("accepted");
    251                 e.Property(x => x.CreatedAt).HasColumnName("created_at");
     255                e.Property(x => x.CreatedAt).HasColumnName("suggestion_created_at");
    252256                e.Property(x => x.AppliedAt).HasColumnName("applied_at");
    253257                e.Property(x => x.StoryId).HasColumnName("story_id");
     
    288292                e.Property(x => x.UserId).HasColumnName("user_id");
    289293                e.Property(x => x.StoryId).HasColumnName("story_id");
    290                 e.Property(x => x.CreatedAt).HasColumnName("created_at");
     294                e.Property(x => x.CreatedAt).HasColumnName("collab_created_at");
    291295                e.HasOne(x => x.User).WithMany(u => u.Collaborations).HasForeignKey(x => x.UserId);
    292296                e.HasOne(x => x.Story).WithMany(s => s.Collaborations).HasForeignKey(x => x.StoryId);
  • ChapterX.Infrastructure/DependencyInjection.cs

    rdc383dd rd300631  
    1515        public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration)
    1616        {
    17             services.AddDbContext<ApplicationDbContext>(options =>
    18                 options.UseNpgsql(configuration.GetConnectionString("Database")));
     17            var poolSection = configuration.GetSection("ConnectionPool");
     18            var minPoolSize = poolSection.GetValue<int>("MinPoolSize", 1);
     19            var maxPoolSize = poolSection.GetValue<int>("MaxPoolSize", 20);
     20            var idleLifetime = poolSection.GetValue<int>("ConnectionIdleLifetime", 300);
     21            var pruningInterval = poolSection.GetValue<int>("ConnectionPruningInterval", 10);
     22            var commandTimeout = poolSection.GetValue<int>("CommandTimeout", 30);
     23            var connectionTimeout = poolSection.GetValue<int>("Timeout", 15);
     24
     25            var baseConnectionString = configuration.GetConnectionString("Database")!;
     26            var connectionString =
     27                $"{baseConnectionString};Minimum Pool Size={minPoolSize};Maximum Pool Size={maxPoolSize};" +
     28                $"Connection Idle Lifetime={idleLifetime};Connection Pruning Interval={pruningInterval};" +
     29                $"Command Timeout={commandTimeout};Timeout={connectionTimeout}";
     30
     31            services.AddDbContextPool<ApplicationDbContext>(options =>
     32                options.UseNpgsql(connectionString));
    1933
    2034            services.AddScoped<IApplicationDbContext>(sp => sp.GetRequiredService<ApplicationDbContext>());
Note: See TracChangeset for help on using the changeset viewer.