public async Task Handle(MembershipCreatedEvent notification, CancellationToken cancellationToken) { var membership = new MembershipReadModel(); membership.ApplyEvent(notification); _readModelDbContext.Add(membership); await _readModelDbContext.SaveChangesAsync(); }
public void ConstructorSetsProperties() { // Arrange IFormsAuthentication formsAuth = new MockFormsAuthenticationService(); var membershipReadModel = new MembershipReadModel(); // Act var controller = new AccountController(formsAuth, new CommandServiceClient(), membershipReadModel); // Assert Assert.AreEqual(formsAuth, controller.FormsAuth, "FormsAuth property did not match."); Assert.AreEqual(membershipReadModel, controller.MembershipReadModel, "MembershipReadModel property did not match."); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); // NOTE: this must go at the end of Configure // ensure db is created var serviceScopeFactory = app.ApplicationServices.GetRequiredService <IServiceScopeFactory>(); using (var serviceScope = serviceScopeFactory.CreateScope()) { var eventStoreDbContext = serviceScope.ServiceProvider.GetService <SimpleEventStoreDbContext>(); eventStoreDbContext.Database.EnsureCreated(); // readonly initialization hack for sample purpose var readModelDbContext = serviceScope.ServiceProvider.GetService <ReadModelDbContext>(); readModelDbContext.Database.EnsureCreated(); var customerFactory = new GenericEntityFactory <Customer>(eventStoreDbContext); var customerEntities = customerFactory.GetAllEntitiesAsync().Result; var customerReadModels = customerEntities.Select(c => { var readModel = new CustomerReadModel(); readModel.FromAggregate(c); return(readModel); }); readModelDbContext.Customers.AddRange(customerReadModels); // As aggregate membership is a readmodel, we initialize it like this. var aggregateMembershipFactory = new GenericEntityFactory <Core.Membership>(eventStoreDbContext); var aggregateMembershipEntities = aggregateMembershipFactory.GetAllEntitiesAsync().Result; var aggregateMembershipReadModels = aggregateMembershipEntities.Select(am => { var model = new MembershipReadModel(); model.FromAggregate(am); return(model); }); readModelDbContext.Memberships.AddRange(aggregateMembershipReadModels); readModelDbContext.SaveChanges(); // reporting initialization //// readonly initialization hack for sample purpose //var reportingDbContext = serviceScope.ServiceProvider.GetService<ReportingReadModelDbContext>(); //reportingDbContext.Database.EnsureCreated(); //var reportingModelEventHandlers = new MembershipPointsReportingReadModelHandlers(reportingDbContext); //var customerregisteredEvents = eventStoreDbContext.FindEventsAsync<CustomerRegisteredEvent>().Result; //var membershipCreatedEvents = eventStoreDbContext.FindEventsAsync<MembershipCreatedEvent>().Result; //var membershipPointsEarnedEvents = eventStoreDbContext.FindEventsAsync<MembershipPointsEarnedEvent>().Result; //List<dynamic> dynamicCustomerRegistered = customerregisteredEvents // .Select(e => e.EntityJson.FromJson(Type.GetType(e.EntityType))) // .ToList(); //List<dynamic> dynamicMembershipCreated = membershipCreatedEvents // .Select(e => e.EntityJson.FromJson(Type.GetType(e.EntityType))) // .ToList(); //List<dynamic> dynamicMembershipPointsEarned = membershipPointsEarnedEvents // .Select(e => e.EntityJson.FromJson(Type.GetType(e.EntityType))) // .ToList(); //foreach(var @event in dynamicCustomerRegistered) //{ // reportingModelEventHandlers.Handle(@event); //} //foreach(var @event in dynamicMembershipCreated) //{ // reportingModelEventHandlers.Handle(@event); //} //foreach(var @event in dynamicMembershipPointsEarned) //{ // reportingModelEventHandlers.Handle(@event); //} } }
public ActionResult LogOnPostAssertion(string openid_openidAuthData) { IAuthenticationResponse response; if (!string.IsNullOrEmpty(openid_openidAuthData)) { var auth = new Uri(openid_openidAuthData); var headers = new WebHeaderCollection(); foreach (string header in Request.Headers) { headers[header] = Request.Headers[header]; } // Always say it's a GET since the payload is all in the URL, even the large ones. HttpRequestInfo clientResponseInfo = new HttpRequestInfo("GET", auth, auth.PathAndQuery, headers, null); response = RelyingParty.GetResponse(clientResponseInfo); } else { response = RelyingParty.GetResponse(); } if (response != null) { switch (response.Status) { case AuthenticationStatus.Authenticated: string alias = response.FriendlyIdentifierForDisplay; var sreg = response.GetExtension <ClaimsResponse>(); if (sreg != null && sreg.MailAddress != null) { alias = sreg.MailAddress.User; } if (sreg != null && !string.IsNullOrEmpty(sreg.FullName)) { alias = sreg.FullName; } var userId = new MembershipReadModel().GetUserIdByUserName(alias); FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, //version response.ClaimedIdentifier, // user name DateTime.Now, //creation DateTime.Now.AddMinutes(30), //Expiration false, //Persistent string.Join("|", alias, userId)); string encTicket = FormsAuthentication.Encrypt(authTicket); this.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); string returnUrl = Request.Form["returnUrl"]; if (!String.IsNullOrEmpty(returnUrl)) { return(Redirect(returnUrl)); } else { return(RedirectToAction("Index", "Home")); } case AuthenticationStatus.Canceled: ModelState.AddModelError("OpenID", "It looks like you canceled login at your OpenID Provider."); break; case AuthenticationStatus.Failed: ModelState.AddModelError("OpenID", response.Exception.Message); break; } } // If we're to this point, login didn't complete successfully. // Show the LogOn view again to show the user any errors and // give another chance to complete login. return(View("LogOn")); }