コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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;
                };
        }
コード例 #3
0
ファイル: SchedulesHub.cs プロジェクト: henrikrtfm/Seerefine
 public SchedulesHub(ISessionProvider sessionProvider, IProvideClientSettings clientSettings)
 {
     _sessionProvider = sessionProvider;
     _clientSettings = clientSettings;
 }
コード例 #4
0
ファイル: SchemaUpdater.cs プロジェクト: henrikrtfm/Seerefine
 public SchemaUpdater(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher, IProvideClientSettings clientSettings)
 {
     _sessionProvider = sessionProvider;
     _eventDispatcher = eventDispatcher;
     _clientSettings = clientSettings;
 }
コード例 #5
0
        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;
                };
        }