123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- using System.Collections.Generic;
- using Luticate2.Utils.Business;
- using Luticate2.Utils.DataAccess.Npgsql;
- using Luticate2.Utils.Dbo.Basic;
- using Luticate2.Utils.Dbo.Filter;
- using Luticate2.Utils.Dbo.OrderBy;
- using Luticate2.Utils.Dbo.PaginatedRequest;
- using Luticate2.Utils.Dbo.Result;
- using Luticate2.Utils.Hubs;
- using Luticate2.Utils.Middlewares;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.EntityFrameworkCore.Query.ExpressionTranslators.Internal;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.DependencyInjection.Extensions;
- using Newtonsoft.Json;
-
- namespace Luticate2.Utils.Controllers
- {
- public static class LuUtilsExtensions
- {
- public delegate void LuOptionsDelegate(LuOptionsDbo options);
-
- public static LuOptionsDbo Options { get; private set; }
-
- public static IServiceCollection AddLuticateUtils(this IServiceCollection services, LuOptionsDelegate optionsDelegate)
- {
- var settings = new JsonSerializerSettings();
- settings.ContractResolver = new SignalRContractResolver();
-
- var serializer = JsonSerializer.Create(settings);
- services.Add(new ServiceDescriptor(typeof(JsonSerializer),
- provider => serializer,
- ServiceLifetime.Transient));
-
- services.AddSignalR(options =>
- {
- options.Hubs.EnableDetailedErrors = true;
- });
-
- services.AddSingleton<LuHubConnectionTracker>();
- services.AddSingleton<LuNotificationsBusiness>();
- Options = new LuOptionsDbo();
- optionsDelegate(Options);
- return services;
- }
-
- public static IServiceCollection AddEntityFrameworkNpgsqlLuticate(this IServiceCollection services)
- {
- services.TryAdd(new ServiceCollection()
- .AddScoped<NpgsqlCompositeMethodCallTranslator, NpgsqlCompositeMethodCallTranslatorLuticate>());
- return services;
- }
-
- public static IMvcBuilder AddLuticateUtils(this IMvcBuilder builder)
- {
- builder.Services.Configure<MvcOptions>(
- options =>
- {
- options.ModelBinderProviders.Insert(0, new LuOrderByBinderProvider());
- options.ModelBinderProviders.Insert(0, new LuFilterBinderProvider());
- options.ModelBinderProviders.Insert(0, new LuPaginatedRequestBinderProvider());
- options.Filters.Add(typeof(LuModelStateFilter));
- });
- return builder;
- }
-
- public static IApplicationBuilder UseLuticateUtils(this IApplicationBuilder app)
- {
- app.UseMiddleware<LuExceptionMiddleware>();
-
- app.UseWebSockets();
- app.UseSignalR();
-
- return app;
- }
-
- public static int GetHttpCode<T>(this LuResult<T> result)
- {
- if (result.Status == LuStatus.Success)
- {
- return 200;
- }
- if (result.Status == LuStatus.InputError)
- {
- return 400;
- }
- if (result.Status == LuStatus.LoginError)
- {
- return 401;
- }
- if (result.Status == LuStatus.PermissionError)
- {
- return 403;
- }
- if (result.Status == LuStatus.NotFound)
- {
- return 404;
- }
- if (result.Status == LuStatus.DbError)
- {
- return 500;
- }
- if (result.Status == LuStatus.InternalError)
- {
- return 500;
- }
- return 418;
- }
-
- public static string GetHttpString<T>(this LuResult<T> result)
- {
- if (result.Status == LuStatus.Success)
- {
- return "Success";
- }
- if (result.Status == LuStatus.InputError)
- {
- return "Bad User Input";
- }
- if (result.Status == LuStatus.LoginError)
- {
- return "Login Error";
- }
- if (result.Status == LuStatus.PermissionError)
- {
- return "Permission Error";
- }
- if (result.Status == LuStatus.NotFound)
- {
- return "Not Found";
- }
- if (result.Status == LuStatus.DbError)
- {
- return "Internal Error";
- }
- if (result.Status == LuStatus.InternalError)
- {
- return "Internal Error";
- }
- return "I'm a teapot";
- }
-
- public static IDictionary<object, object> GetLuItems(this HttpContext context)
- {
- return (IDictionary<object, object>) context.Items["luticateItems"];
- }
- }
- }
|