using Govor.API.Services.AdminsStuff.Interfaces; using Govor.API.Services.Authentication.Interfaces; using Govor.Application.Infrastructure.Extensions; using Govor.Application.Infrastructure.Validators; using Govor.Application.Interfaces; using Govor.Application.Interfaces.AdminsStuff; using Govor.Application.Interfaces.Authentication; using Govor.Application.Interfaces.Infrastructure.Extensions; using Govor.Application.Interfaces.Messages; using Govor.Application.Services; using Govor.Core.Infrastructure.Extensions; using Govor.Core.Infrastructure.Validators; using Govor.Core.Models; using Govor.Core.Repositories.Admins; using Govor.Core.Repositories.Friendships; using Govor.Core.Repositories.Groups; using Govor.Core.Repositories.Invaites; using Govor.Core.Repositories.MediasAttachments; using Govor.Core.Repositories.Messages; using Govor.Core.Repositories.PrivateChats; using Govor.Core.Repositories.Users; using Govor.Data; using Govor.Data.Repositories; using Microsoft.EntityFrameworkCore; namespace Govor.API.Extensions; public static class ConfigurationProgramExtensions { public static void AddServices(this IServiceCollection services) { services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(sp => { var env = sp.GetRequiredService(); return new LocalStorageService(env.ContentRootPath); }); services.AddHttpContextAccessor(); // it's very important for CurrentUserService services.AddScoped(); services.AddMemoryCache(); services.AddScoped(); services.AddScoped(); services.AddScoped(); } public static void AddRepositories(this IServiceCollection services) { services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); } public static void AddValidators(this IServiceCollection services) { services.AddScoped, UserValidator>(); services.AddScoped, MessageValidator>(); services.AddScoped, MediaAttachmentsValidator>(); services.AddScoped, AdminValidator>(); services.AddScoped, InvitationValidator>(); services.AddScoped, FriendshipValidator>(); services.AddScoped, PrivateChatValidator>(); services.AddScoped, ChatGroupValidator>(); } public static void AddGovorDbContext(this IServiceCollection services, IConfiguration configuration) { var useMySql = configuration.GetValue("UseMySql"); if (useMySql) { services.AddDbContext(options => { options .UseMySql( configuration.GetConnectionString(nameof(GovorDbContext)), new MySqlServerVersion(new Version(8, 0, 21)) ); options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); }); } else { services.AddDbContext(options => { options.UseNpgsql(configuration.GetConnectionString(nameof(GovorDbContext))); options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); }); } } }