public EventsDispatcher(ISessionProvider sessionProvider, IProvideClientSettings clientSettings) { _sessionProvider = sessionProvider; _clientSettings = clientSettings; _eventConsumers = new Dictionary<Type, List<Type>>(); var consumerTypes = (from type in GetType().Assembly.GetTypes() where type.GetInterfaces().Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IConsumerOf<>)) select type).ToArray(); foreach (var consumerType in consumerTypes) { foreach (var interfaceType in consumerType.GetInterfaces()) { if(interfaceType.IsGenericType == false) continue; if(interfaceType.GetGenericTypeDefinition() == typeof(IConsumerOf<>) == false) continue; if(_eventConsumers.ContainsKey(interfaceType) == false) _eventConsumers.Add(interfaceType, new List<Type>()); if(_eventConsumers[interfaceType].Contains(consumerType)) continue; _eventConsumers[interfaceType].Add(consumerType); } } }
public ProcessSchemaModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher, IProvideClientSettings clientSettings) : base(sessionProvider, eventDispatcher, "/process/clients/{id}/teams/{teamId}") { _clientSettings = clientSettings; string TeamId = ""; Before += ctx => { if (string.IsNullOrWhiteSpace(ctx.Parameters["teamId"]) == false) TeamId = string.Format("{0}/teams/{1}", ClientId, ctx.Parameters["teamId"]); return null; }; Get["/today"] = parameter => { var date = _clientSettings.Now(ClientId).ToString("yyyyMMdd"); var schemas = RavenSession.Query<ScheduleItem>() .Where(x => x.TeamId == TeamId && x.Date == date) .ToList(); var response = Response.AsJson(schemas); return response; }; Get["/{date}"] = parameter => { string date = parameter.date; var schemas = RavenSession.Query<ScheduleItem>() .Where(x => x.TeamId == TeamId && x.Date == date) .ToList(); var response = Response.AsJson(schemas); return response; }; Post["/dayreport"] = parameters => { var team = RavenSession.Load<Team>(TeamId); var members = RavenSession.Load<User>(team.Users); var @event = this.Bind<TeamDayReport>(); @event.TeamId = TeamId; @event.TeamName = team.Name; @event.Members = members.ToDictionary(user => user.Id, user => user.Name); @event.ServerTimestampUtc = DateTime.UtcNow; UncommitedEvents.Add(@event); return HttpStatusCode.NoContent; }; }
public SchedulesHub(ISessionProvider sessionProvider, IProvideClientSettings clientSettings) { _sessionProvider = sessionProvider; _clientSettings = clientSettings; }
public SchemaUpdater(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher, IProvideClientSettings clientSettings) { _sessionProvider = sessionProvider; _eventDispatcher = eventDispatcher; _clientSettings = clientSettings; }
public ManageSitesModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher, IProvideClientSettings clientSettings) : base(sessionProvider, eventDispatcher, "/manage/clients/{id}/sites") { _clientSettings = clientSettings; Before += ctx => { if (string.IsNullOrEmpty(ctx.Parameters["siteId"]) == false) SiteId = string.Format("{1}/sites/{0}", ctx.Parameters["siteId"], ClientId); return null; }; Get["/autoCompleteList"] = parameters => { var sites = RavenSession.Query<Site>() .Where(x => x.ClientId == ClientId) .ToList(); var viewModel = new { data = sites.OrderBy(x => x.Name).Select(x => new { value = x.Id, label = x.Name, }).ToList(), }; return Response.AsJson(viewModel); }; Get["/list"] = parameters => { int startIndex = Request.Query.skip.HasValue ? Request.Query.skip : 0; int size = Request.Query.take.HasValue ? Request.Query.take : 20; RavenQueryStatistics stats; var sites = RavenSession.Query<Site>() .Statistics(out stats) .Where(x => x.ClientId == ClientId) .OrderBy(x => x.Name) .Skip(startIndex) .Take(size) .ToList(); var viewModel = new { data = sites.OrderBy(x => x.Name).Select(x => new {x.Id, title = x.Id, content = x.Name, heading = ""}), totalCount = stats.TotalResults, }; return Response.AsJson(viewModel); }; Get["/{siteId}"] = parameters => { var site = RavenSession.Load<Site>(SiteId); var viewModel = new { site = new { siteId = site.Id, name = site.Name, address = site.Address, postCode = site.PostCode, city = site.City, country = site.Country, description = site.Description, content = site.Content, url = site.Url, estimatedMinutesToService = site.EstimatedMinutesToService, minuteToServiceFactor = site.MinuteToServiceFactor, } }; return Response.AsJson(viewModel); }; Get["/{siteId}/edit"] = parameters => View["views/manage/_editSite.html", new {ClientId}]; Put["/{siteId}"] = parameters => { var site = RavenSession.Load<Site>(SiteId); var serviceUnitsChanged = new ServiceUnitsChanged { EstimatedMinutesToService = site.EstimatedMinutesToService, MinuteToServiceFactor = site.MinuteToServiceFactor, ClientId = ClientId, Site = DomainReference<Site>.Create(site.Id, site.Name), }; this.BindTo(site, "Id"); UncommitedEvents.Add(new SiteUpdated { ClientId = ClientId, SiteId = SiteId, Name = site.Name, Description = site.Description, Address = site.Address, PostCode = site.PostCode, City = site.City, Content = site.Content, Country = site.Country, EndTime = site.EndTime, StartTime = site.StartTime, Latitude = site.Latitude, Longitude = site.Longitude, }); if (serviceUnitsChanged.AreEqual(site) == false) { serviceUnitsChanged.MinuteToServiceFactor = site.MinuteToServiceFactor; serviceUnitsChanged.EstimatedMinutesToService = site.EstimatedMinutesToService; UncommitedEvents.Add(serviceUnitsChanged); } return HttpStatusCode.Created; }; Get["/create"] = parameters => View["views/manage/_createSite.html", new {ClientId}]; Post["/create"] = parameters => { var site = new Site { ClientId = ClientId, Name = Request.Form["Name"], Description = Request.Form["Description"], }; var defaultServiceUnits = _clientSettings.DefaultServiceUnits(ClientId); site.EstimatedMinutesToService = defaultServiceUnits.EstimatedMinutesToService; site.MinuteToServiceFactor = defaultServiceUnits.MinuteToServiceFactor; RavenSession.Store(site); UncommitedEvents.Add(new SiteCreated { SiteId = site.Id, Name = site.Name, Description = site.Description, }); return HttpStatusCode.NoContent; }; }