public IdentityApi(IEventPublisher eventPublisher, IUserIdentitiesRepository userIdentitiesRepository, ISessionsRepository sessionsRepository) : base("/api/identity") { Post("/userIdentities/register", _ => Execute(eventPublisher, this.Bind <RegisterUser>())); Post("/userIdentities/{id}/logIn", _ => Execute(eventPublisher, userIdentitiesRepository, new LogInUser { UserId = new UserId(_.Id) })); Delete("/sessions/{id}", _ => Execute(eventPublisher, sessionsRepository, new LogOutUser { SessionId = new SessionId(_.Id) })); }
private object Execute(IEventPublisher eventPublisher, IUserIdentitiesRepository userIdentitiesRepository, LogInUser command) { var userIdentity = userIdentitiesRepository.GetUserIdentity(command.UserId); var sessionId = userIdentity.LogIn(eventPublisher); return(Negotiate.WithStatusCode(HttpStatusCode.Created).WithModel(new { Id = sessionId, Url = "/api/identity/sessions/" + Uri.EscapeUriString(sessionId.ToString()) })); }