source: src/FinkiChattery/FinkiChattery.Api/Services/RegisterServices.cs@ 95d80e4

dev
Last change on this file since 95d80e4 was 95d80e4, checked in by Стојков Марко <mst@…>, 3 years ago

Added unit of work pattern

  • Property mode set to 100644
File size: 5.7 KB
Line 
1using FinkiChattery.Api.ApplicationServices.Authentication;
2using FinkiChattery.Api.Services;
3using FinkiChattery.Commands.Questioning;
4using FinkiChattery.Common.Mediator;
5using FinkiChattery.Common.Mediator.Interfaces;
6using FinkiChattery.Common.User;
7using FinkiChattery.Common.Validation;
8using FinkiChattery.Persistence.Context;
9using FinkiChattery.Persistence.Models;
10using FinkiChattery.Persistence.Repositories;
11using FinkiChattery.Persistence.UnitOfWork;
12using FinkiChattery.Queries.Questioning;
13using Hangfire;
14using Hangfire.SqlServer;
15using MediatR;
16using Microsoft.AspNetCore.Authentication.JwtBearer;
17using Microsoft.AspNetCore.Authorization;
18using Microsoft.AspNetCore.Http;
19using Microsoft.AspNetCore.Identity;
20using Microsoft.Extensions.Configuration;
21using Microsoft.Extensions.DependencyInjection;
22using System;
23
24namespace FinkiChattery.Api.Server
25{
26 public static class RegisterServices
27 {
28 public static void AddMediator(this IServiceCollection services)
29 {
30 services.AddScoped<IMediatorService, MediatorService>();
31 services.AddScoped<IEventService, EventService>();
32 services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
33 services.AddMediatR(typeof(AskQuestionCommand), typeof(GetQuestionStateQuery));
34 }
35
36 public static void AddHangfireService(this IServiceCollection services, IConfiguration configuration)
37 {
38 services.AddHangfire(x =>
39 {
40 x.UseSqlServerStorage(configuration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions
41 {
42 CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
43 SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
44 QueuePollInterval = TimeSpan.Zero,
45 UseRecommendedIsolationLevel = true,
46 DisableGlobalLocks = true
47 });
48 x.UseMediatR();
49 });
50 services.AddHangfireServer();
51 }
52
53 public static void AddSingletonServices(this IServiceCollection services)
54 {
55 services.AddSingleton<AppSettings, AppSettings>();
56 }
57
58 public static void AddIdentityService(this IServiceCollection services, IConfiguration configuration)
59 {
60 var appSettings = new AppSettings(configuration);
61
62 services.AddIdentity<ApplicationUser, ApplicationRole>(o =>
63 {
64 o.User.RequireUniqueEmail = true;
65 })
66 .AddEntityFrameworkStores<ApplicationDbContext>()
67 .AddDefaultTokenProviders();
68
69 services.AddAuthentication(options =>
70 {
71 options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
72 options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
73 }).AddJwtBearer(o =>
74 {
75 o.Authority = appSettings.IdentitySettings.Authority;
76 o.Audience = appSettings.IdentitySettings.Audience;
77 o.RequireHttpsMetadata = appSettings.IdentitySettings.RequireHttpsMetadata;
78 });
79
80 services.AddScoped<IAuthorizationHandler, CurrentUserIsOfRoleRequirementHandler>();
81
82 services.AddAuthorization(options =>
83 {
84 options.AddPolicy(AuthenticationPolicy.Student, policy => policy.Requirements.Add(new StudentRequirement()));
85
86 });
87 }
88
89 public static void AddEmailService(this IServiceCollection services)
90 {
91 // TODO: Add email service
92 // services.AddScoped<IEmailService, EmailService>();
93 }
94
95 public static void AddCurrentUser(this IServiceCollection services)
96 {
97 services.AddScoped(x =>
98 {
99 var httpContext = x.GetRequiredService<IHttpContextAccessor>();
100 return CurrentUser.GetCurrentUser(httpContext);
101 });
102 }
103
104 public static void AddUnitOfWork(this IServiceCollection services)
105 {
106 services.AddScoped<IUnitOfWork, UnitOfWork>();
107 }
108
109 public static void AddOriginUrlSettings(this IServiceCollection services)
110 {
111 // TODO: ADD ORIGIN URLS
112 /*services.AddScoped<IOriginUrlSettings>(provider =>
113 {
114 var httpContextAccessor = provider.GetService<IHttpContextAccessor>();
115
116 string originUrl = string.Empty;
117 if (httpContextAccessor.HttpContext != null && httpContextAccessor.HttpContext.Request.Headers.TryGetValue("Origin", out StringValues headerValues))
118 {
119 if (headerValues.FirstOrDefault() != null)
120 {
121 originUrl = headerValues.FirstOrDefault();
122 }
123 }
124
125 return new OriginUrlSettings(originUrl);
126 });*/
127 }
128
129 public static void AddAwsClient(this IServiceCollection services, IConfiguration configuration)
130 {
131 // ADD AWS FOR MAILS AND S3 AND CDN
132 /* var appSettings = new AppSettings(configuration);
133
134 services.AddAWSService<IAmazonS3>();
135 services.AddSingleton<IAmazonS3>(provider =>
136 {
137 return new AmazonS3Client(
138 appSettings.AwsStorageSettings.AccessKey,
139 appSettings.AwsStorageSettings.SecretKey,
140 Amazon.RegionEndpoint.GetBySystemName(appSettings.AwsStorageSettings.StorageServerRegion));
141 });
142 services.AddScoped<IStorageService, AwsStorageService>();*/
143 }
144 }
145
146}
Note: See TracBrowser for help on using the repository browser.