Ejemplo n.º 1
0
        public AdminModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
            : base(sessionProvider, eventDispatcher, "/api/admin")
        {
            Post["/clients/create"] = parameters =>
                {
                    var createCommand = this.Bind<CreateClientCommand>();

                    RavenSession.Advanced.UseOptimisticConcurrency = true;

                    var newClient = new Client
                        {
                            Name = createCommand.Name,
                        };

                    RavenSession.Store(newClient);
                    RavenSession.Store(new UniqueClientName
                        {
                            Id = createCommand.Name,
                        });

                    UncommitedEvents.Add(new ClientCreated
                        {
                            Id = newClient.Id,
                            Name = newClient.Name,
                        });

                    return HttpStatusCode.Processing;
                };

            Get["/clients/{clientId}"] = parameters =>
                {
                    var client = RavenSession.Load<Client>(string.Format("clients/{0}", parameters.clientId));
                    return Response.AsJson(new { client });
                };
        }
Ejemplo n.º 2
0
 public ActualEventStore(IDispatchEvents eventsDispatcher, ISerializeEvent eventSerializer, UserCredentials credentials)
 {
     _eventsDispatcher = eventsDispatcher;
     _eventSerializer  = eventSerializer;
     _connection       = EventStoreConnection.Create(new IPEndPoint(IPAddress.Loopback, 1113));
     _connection.ConnectAsync().GetAwaiter().GetResult();
     _credentials = credentials;
 }
Ejemplo n.º 3
0
 public AzureStreamDispatcher(
     IPullEventsForDispatching dispatching,
     IDispatchEvents events,
     IConfirmDispatchedEvents dispatched)
 {
     _dispatching = dispatching;
     _dispatched  = dispatched;
     _events      = events;
 }
Ejemplo n.º 4
0
        protected RavenModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher, string modulePath)
            : base(modulePath)
        {
            _eventDispatcher = eventDispatcher;
            this.RequiresAuthentication();
            this.RequiresAnyClaim(new[] { "SuperAdmin", "ClientAdmin", "ClientUser" });

            Before += ctx =>
                {
                    ClientId = string.Format("clients/{0}", ctx.Parameters["id"]);
                    UncommitedEvents = new List<EventBase>();

                    if (ctx.CurrentUser.Claims.Any(x => x == "ClientAdmin"))
                    {
                        var seerefineIdentity = ctx.CurrentUser as SeerefineIdentity;
                        if (seerefineIdentity == null)
                            return HttpStatusCode.Unauthorized;

                        if (seerefineIdentity.ClientId != ClientId)
                            return HttpStatusCode.Unauthorized;

                    }

                    RavenSession = sessionProvider.GetSession();
                    return null;
                };

            After += ctx =>
                {
                    if (RavenSession != null)
                    {
                        if(RavenSession.Advanced.HasChanges)
                            RavenSession.SaveChanges();

                        RavenSession.Dispose();

                        if (UncommitedEvents.Any())
                            _eventDispatcher.Dispatch(UncommitedEvents.ToArray());
                    }
                };

            OnError += (ctx, ex) =>
                {
                    Trace.TraceError(ex.ToString());

                    if (ex is ConcurrencyException)
                    {
                        return Response.Conflict(ex.Message);
                    }

                    return HttpStatusCode.InternalServerError;
                };
        }
Ejemplo n.º 5
0
        public SiteModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
            : base(sessionProvider, eventDispatcher, "/api/client/{id}/site")
        {
            Get["/"] = parameters =>
                {
                    var sites = RavenSession.Query<Site>()
                                            .Where(x => x.ClientId == ClientId)
                                            .ToList();

                    return Response.AsJson(sites);
                };
        }
Ejemplo n.º 6
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;
                };
        }
Ejemplo n.º 7
0
        public ManageTeamsModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
            : base(sessionProvider, eventDispatcher, "/manage/clients/{id}/teams")
        {
            Get["/create"] = parameters => View["views/manage/_createTeam.html", new { ClientId }];

            Get["/list"] = parameters =>
                {
                    var teams = RavenSession.Query<Team>()
                                            .Where(x => x.ClientId == ClientId)
                                            .ToList();

                    var viewModel = new
                        {
                            data = teams.Select(x => new {title = x.Id, content = x.Name}),
                        };

                    return Response.AsJson(viewModel);
                };

            Post["/create"] = parameters =>
                {
                    var createTeam = this.Bind<CreateTeamCommand>();

                    var team = new Team
                        {
                            ClientId = ClientId,
                            Name = createTeam.Name,
                            Users = createTeam.Users,
                        };

                    RavenSession.Store(team);

                    foreach (var user in RavenSession.Load<User>(createTeam.Users))
                    {
                        user.TeamId = team.Id;
                        user.TeamName = team.Name;
                    }

                    return HttpStatusCode.NoContent;
                };
        }
Ejemplo n.º 8
0
        public OrderListViewModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
            : base(sessionProvider, eventDispatcher, "/manage/clients/{id}/orders")
        {
            Get["/{date}"] = parameters =>
                {
                    string date = parameters.date;

                    var orders = RavenSession.Query<OrderListView>()
                                             .Where(x => x.Date == date && x.ClientId == ClientId)
                                             .ToList();

                    return Response.AsJson(new
                    {
                        Date = date,
                        Orders = orders.OrderBy(x => x.OrderName).ThenBy(x => x.SiteName).ToList(),
                    });

                    /*return View["views/manage/OrderList.html", new
                        {
                            Date = date,
                            Orders = orders.OrderBy(x => x.OrderName).ThenBy(x => x.SiteName).ToList(),
                        }];*/
                };
        }
Ejemplo n.º 9
0
 public SchemaUpdater(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher, IProvideClientSettings clientSettings)
 {
     _sessionProvider = sessionProvider;
     _eventDispatcher = eventDispatcher;
     _clientSettings = clientSettings;
 }
Ejemplo n.º 10
0
        public ManageUsersModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
            : base(sessionProvider, eventDispatcher, "/manage/clients/{id}")
        {
            Get["/users/create"] = parameters => View["views/manage/_createUser.html", new {ClientId}];

            Get["/users/list"] = parameters =>
                {
                    var users = RavenSession.Query<User>()
                                            .Where(x => x.ClientId == ClientId)
                                            .ToList();

                    var viewModel = new
                        {
                            data = users.Select(x => new {title = x.Id, content = x.Name}),
                        };

                    return Response.AsJson(viewModel);
                };

            Get["/users/wihtoutteam"] = parameters =>
                {
                    var users = RavenSession.Query<User>()
                                            .Where(x => x.ClientId == ClientId && x.TeamId == null);

                    return Response.AsJson(users);
                };

            Post["/users/create"] = parameters =>
                {

                    var command = this.Bind<CreateLoginCommand>();

                    if (command.AuthenticationKey == Guid.Empty)
                        command.AuthenticationKey = Guid.NewGuid();

                    var login = new Login
                        {
                            AuthenticationKey = command.AuthenticationKey,
                            ClientId = ClientId,
                            Username = command.UserName,
                            Password = command.Password,
                            Roles = new List<Roles> {Roles.ClientUser},
                        };

                    RavenSession.Store(login);

                    var user = new User
                        {
                            ClientId = ClientId,
                            Name = Request.Form["Name"],
                            LoginId = login.Id,
                        };

                    RavenSession.Store(user);

                    RavenSession.Store(new UserNameAndPasswordIsUnique
                        {
                            Id = command.ToUniqueString(),
                            AuthenticationKey = command.AuthenticationKey,
                        });

                    RavenSession.SaveChanges();

                    return HttpStatusCode.NoContent;
                };
        }
Ejemplo n.º 11
0
 protected RavenModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
     : this(sessionProvider, eventDispatcher, null)
 {
 }
Ejemplo n.º 12
0
 public API(IDispatchRequests requests, IDispatchCommands commands, IDispatchEvents events)
 {
     _requests = requests;
     _commands = commands;
     _events   = events;
 }
Ejemplo n.º 13
0
 public ManageModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
     : base(sessionProvider, eventDispatcher, "/manage/clients/{id}")
 {
     Get["/"] = parameters => View["views/manage/Index.html", new { ClientId }];
 }
        public ManageSitesInfoSectionsModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
            : base(sessionProvider, eventDispatcher, "/manage/clients/{id}/sites/{siteId}/infosections")
        {
            Before += ctx =>
                {
                    if (string.IsNullOrEmpty(ctx.Parameters["siteId"]) == false)
                        SiteId = ClientId + "/" + string.Format("sites/{0}", ctx.Parameters["siteId"]);

                    if(string.IsNullOrWhiteSpace(ctx.Parameters.sectionId) == false)
                        SectionId = string.Format("{1}/infosections/{0}", ctx.Parameters.sectionId, SiteId);

                    return null;
                };

            Get["/list"] = parameters =>
                {
                    var query = RavenSession.Query<SiteInfoSection>()
                                            .Where(x => x.SiteId == SiteId);

                    string grouping = Request.Query.Grouping;

                    if (string.IsNullOrWhiteSpace(grouping) == false)
                        query = query.Where(x => x.Grouping == grouping);

                    var sections = query.ToList();

                    var viewModel = new
                        {
                            siteInfo = sections.Select(x => new
                                {
                                    title = x.Heading,
                                    content = x.Content,
                                    grouping = x.Grouping,
                                    id = x.Id,
                                }).ToArray(),
                        };

                    return Response.AsJson(viewModel);
                };

            Get["/create"] = parameters => View["views/manage/_createInfoSection.html", new {ClientId, SiteId}];

            Delete["/{sectionId}"] = parameters =>
                {
                    var section = RavenSession.Load<SiteInfoSection>(SectionId);

                    RavenSession.Delete(section);

                    UncommitedEvents.Add(new SiteSectionRemoved
                        {
                            SiteId = section.SiteId,
                            SiteName = section.SiteName,
                            SectionId = section.Id,
                            SectionName = section.Heading,
                            Grouping = section.Grouping,
                        });

                    return HttpStatusCode.NoContent;
                };

            Put["/{sectionId}"] = parameters =>
                {
                    var command = this.Bind<EditInfoSectionCommand>();

                    var section = RavenSession.Load<SiteInfoSection>(SectionId);

                    section.Heading = command.Title;
                    section.Content = command.Content;
                    section.Grouping = command.Grouping;

                    UncommitedEvents.Add(new SiteSectionChanged
                        {
                            SectionId = section.Id,
                            SiteId = section.SiteId,
                            Heading = command.Title,
                            Content = command.Content,
                            Grouping = command.Grouping,
                        });

                    return HttpStatusCode.NoContent;
                };

            Post["/create"] = parameters =>
                {
                    var command = this.Bind<CreateInfoSectionCommand>();

                    var site = RavenSession.Load<Site>(SiteId);

                    var section = new SiteInfoSection
                        {
                            ClientId = ClientId,
                            SiteId = SiteId,
                            SiteName = site.Name,
                            Heading = command.Title,
                            Content = command.Content,
                            Grouping = command.Grouping,
                        };

                    RavenSession.Store(section);

                    UncommitedEvents.Add(new SiteSectionCreated
                        {
                            SiteId = SiteId,
                            SectionId = section.Id,
                            Heading = section.Heading,
                            Content = section.Content,
                            Grouping = section.Grouping,
                        });

                    return HttpStatusCode.NoContent;
                };
        }
        public ManageSitesInfoSectionsDetailsModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
            : base(sessionProvider, eventDispatcher, "/manage/clients/{id}/sites/{siteId}/infosections/{sectionId}/details")
        {
            Before += ctx =>
                {
                    if (string.IsNullOrWhiteSpace(ctx.Parameters["sectionId"]) == false)
                        SectionId = ClientId + string.Format("/sites/{0}/infosections/{1}", ctx.Parameters["siteId"], ctx.Parameters["sectionId"]);

                    if(string.IsNullOrWhiteSpace(ctx.Parameters["sectionDetailId"]) == false)
                        SectionDetailId = string.Format("{0}/details/{1}", SectionId, ctx.Parameters.sectionDetailId);

                    return null;
                };

            Delete["/{sectionDetailId}"] = parameters =>
                {
                    var sectionDetail = RavenSession.Load<SectionDetail>(SectionDetailId);

                    RavenSession.Delete(sectionDetail);

                    return HttpStatusCode.NoContent;
                };

            Put["/{sectionDetailId}"] = parameters =>
                {
                    var command = this.Bind<UpdateSectionDetailCommand>();

                    var detail = RavenSession.Load<SectionDetail>(SectionDetailId);

                    detail.ItemIdentity = command.ItemId;
                    detail.ItemName = command.ItemName;
                    detail.Comments = command.Comments;
                    detail.VerificationQuestion = command.Reminders == null ? "" : string.Join(",", command.Reminders);
                    if (string.IsNullOrWhiteSpace(command.Grouping) == false)
                        detail.Grouping = command.Grouping;

                    UncommitedEvents.Add(new SectionDetailUpdated
                        {
                            SiteId = detail.SiteId,
                            SectionId = detail.SectionId,
                            SectionName = detail.SectionName,
                            SectionDetailId = detail.Id,
                            Grouping = detail.Grouping,
                            ItemIdentity = detail.ItemIdentity,
                            ItemName = detail.ItemName,
                            VerificationQuestion = detail.VerificationQuestion,
                            Comments = detail.Comments,
                        });

                    return HttpStatusCode.NoContent;
                };

            Post["/create"] = parameters =>
                {
                    var command = this.Bind<CreateSectionDetailCommand>();

                    var section = RavenSession.Load<SiteInfoSection>(SectionId);

                    var detail = new SectionDetail
                        {
                            ClientId = section.ClientId,
                            SiteId = section.SiteId,
                            SectionId = section.Id,
                            SectionName = section.Heading,
                            Grouping = command.Grouping,
                            ItemIdentity = command.ItemId,
                            ItemName = command.ItemName,
                            Comments = command.Comments,
                            VerificationQuestion = command.Reminders == null ? "" : string.Join(",", command.Reminders),
                        };

                    RavenSession.Store(detail);

                    UncommitedEvents.Add(new SectionDetailCreated
                        {
                            SiteId = detail.SiteId,
                            SectionId = detail.SectionId,
                            SectionName = detail.SectionName,
                            SectionDetailId = detail.Id,
                            Grouping = detail.Grouping,
                            ItemIdentity = detail.ItemIdentity,
                            ItemName = detail.ItemName,
                            VerificationQuestion = detail.VerificationQuestion,
                            Comments = detail.Comments,
                        });

                    return HttpStatusCode.NoContent;
                };

            Get["/list"] = parameters =>
                {
                    var details = RavenSession.Query<SectionDetail>()
                                              .Where(x => x.SectionId == SectionId)
                                              .ToList();

                    details.ForEach(x =>
                        {
                            if (string.IsNullOrWhiteSpace(x.Grouping))
                                x.Grouping = "Fake Zone";
                        });

                    var section = RavenSession.Load<SiteInfoSection>(SectionId);

                    var groupedDetailes = (from detail in details
                                           group detail by detail.Grouping
                                           into groupedDetails
                                           select new
                                               {
                                                   grouping = groupedDetails.Key,
                                                   title = section.Heading,
                                                   items = groupedDetails.Select(x => new
                                                       {
                                                           id = x.Id,
                                                           itemId = x.ItemIdentity,
                                                           itemName = x.ItemName,
                                                           verificationQuestions = x.VerificationQuestion.SplitToArray(","),
                                                           comments = x.Comments,
                                                       }).ToList(),
                                               }).ToList();

                    var viewModel = new
                        {
                           siteInfo = groupedDetailes,
                        };

                    return Response.AsJson(viewModel);
                };
        }
        public ProcessScheduleItemModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
            : base(sessionProvider, eventDispatcher, "process/clients/{id}/scheduleItems/{scheduleItemId}")
        {
            string ScheduleItemId = "";

            Before += ctx =>
                {
                    if (string.IsNullOrWhiteSpace(ctx.Parameters["scheduleItemId"]) == false)
                        ScheduleItemId = string.Format("{0}/scheduleItems/{1}", ClientId, ctx.Parameters["scheduleItemId"]);

                    return null;
                };

            Post["/checkin"] = parameters =>
                {
                    var scheduleItem = RavenSession.Load<ScheduleItem>(ScheduleItemId);

                    var @event = this.Bind<ScheduleItemCheckedIn>();
                    @event.ScheduleItemId = ScheduleItemId;
                    @event.UtcCheckInTime = DateTime.UtcNow;
                    @event.TeamId = scheduleItem.TeamId;
                    @event.TeamName = scheduleItem.TeamName;

                    eventDispatcher.Dispatch(@event);

                    return HttpStatusCode.NoContent;
                };

            Post["/checkout"] = parameters =>
                {
                    var scheduledItem = RavenSession.Load<ScheduleItem>(ScheduleItemId);

                    var @event = this.Bind<ScheduleItemCheckedOut>();
                    @event.ScheduleItemId = ScheduleItemId;
                    @event.UtcCheckOutTime = DateTime.UtcNow;
                    @event.TeamId = scheduledItem.TeamId;
                    @event.TeamName = scheduledItem.TeamName;
                    @event.SiteId = scheduledItem.SiteId;
                    @event.SiteName = scheduledItem.SiteName;

                    eventDispatcher.Dispatch(@event);

                    return HttpStatusCode.NoContent;
                };

            Post["/tickdetail"] = parameters =>
                {
                    var @event = this.Bind<TickDetail>();
                    @event.ScheduleItemId = ScheduleItemId;
                    @event.UtcTickTime = DateTime.UtcNow;

                    eventDispatcher.Dispatch(@event);

                    return HttpStatusCode.NoContent;
                };

            Post["/report"] = parameters =>
                {
                    var @event = this.Bind<ScheduleItemReport>();

                    @event.ScheduleItemId = ScheduleItemId;
                    @event.UtcReportTime = DateTime.UtcNow;

                    var scheduleItem = RavenSession.Load<ScheduleItem>(ScheduleItemId);
                    if (scheduleItem != null)
                    {
                        @event.ClientId = scheduleItem.ClientId;
                        var team = RavenSession.Load<Team>(scheduleItem.TeamId);
                        if (team != null)
                        {
                            @event.TeamId = team.Id;
                            @event.TeamName = team.Name;

                            var teamMembers = RavenSession.Load<User>(team.Users);
                            if (teamMembers != null)
                                @event.TeamMembers = teamMembers.Select(x => DomainReference<User>.Create(x.Id, x.Name));
                        }
                    }

                    eventDispatcher.Dispatch(@event);

                    return HttpStatusCode.NoContent;
                };

            Post["/orderItem"] = paramaters =>
                {
                    System.Diagnostics.Debug.WriteLine(new StreamReader(Request.Body).ReadToEnd());
                    var @event = this.Bind<DetailOrderAdded>();

                    @event.ScheduleItemId = ScheduleItemId;
                    @event.UtcDetaliNotesTime = DateTime.UtcNow;

                    eventDispatcher.Dispatch(@event);

                    return HttpStatusCode.NoContent;
                };

            Post["/detailnotes"] = paramaters =>
                {

                    var @event = this.Bind<DetailNotesAdded>();
                    @event.ScheduleItemId = ScheduleItemId;
                    @event.UtcDetaliNotesTime = DateTime.UtcNow;

                    eventDispatcher.Dispatch(@event);

                    return HttpStatusCode.NoContent;
                };
        }
Ejemplo n.º 17
0
        public DailyReportsModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
            : base(sessionProvider, eventDispatcher, "/manage/clients/{id}/teams/{teamId}")
        {
            string TeamId = "";

            Before += ctx =>
                {
                    TeamId = string.Format("{0}/teams/{1}", ClientId, ctx.Parameters["teamId"]);
                    return null;
                };

            Get["/day/{date}"] = parameters =>
                {
                    string date = parameters.date;

                    var teamDailyReportViewModel = RavenSession.Query<TeamDailyReportViewModel>()
                                                               .FirstOrDefault(x => x.Date == date && x.Team.Id == TeamId);

                    return Response.AsJson(teamDailyReportViewModel);
                };

            Get["/day/{date}/todo"] = parameters =>
                {
                    string date = parameters.date;

                    var scheduleItems = RavenSession.Query<ScheduleItem>()
                                                    .Where(x => x.Date == date && x.TeamId == TeamId)
                                                    .ToList();

                    var viewModel = new TodoViewModel();

                    foreach (var scheduleItem in scheduleItems)
                    {
                        viewModel.Team = DomainReference<Team>.Create(scheduleItem.TeamId, scheduleItem.TeamName);
                        viewModel.Date = scheduleItem.Date;

                        var todo = new TodoViewModel.TodoSiteViewModel
                            {
                                Site = DomainReference<Site>.Create(scheduleItem.SiteId, scheduleItem.SiteName),
                                VisitStart = TimeOfDay.Create(scheduleItem.VisitStart),
                                VisitEnd = TimeOfDay.Create(scheduleItem.VisitEnd),
                            };

                        var sections = scheduleItem.Sections.Where(x => x.Grouping == "sections").ToList();
                        foreach (var sectionHeader in sections)
                        {
                            if(sectionHeader.Items == null)
                                continue;

                            foreach (var overviewSection in sectionHeader.Items)
                            {
                                if(overviewSection.Details == null)
                                    continue;

                                foreach (var detailHeader in overviewSection.Details)
                                {
                                    if(detailHeader.Items == null)
                                        continue;

                                    foreach (var detail in detailHeader.Items)
                                    {
                                        todo.Tasks.AddRange(detail.VerificationQuestions);
                                    }
                                }
                            }
                        }

                        viewModel.Sites.Add(todo);
                    }

                    return Response.AsJson(viewModel);
                };
        }
Ejemplo n.º 18
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;
                };
        }
Ejemplo n.º 19
0
        public AdminSchedulesModule(ISessionProvider sessionProvider, IDispatchEvents eventDispatcher)
            : base(sessionProvider, eventDispatcher, "/manage/clients/{id}/scheduleItems")
        {
            Put["/{scheduleItemId}/move"] = parameters =>
                {
                    string ScheduleItemId = string.Format("{0}/scheduleItems/{1}", ClientId, parameters.scheduleItemId);

                    var scheduleItem = RavenSession.Load<ScheduleItem>(ScheduleItemId);

                    var command = this.Bind<MoveScheduleItemCommand>();

                    scheduleItem.VisitStart = command.VisitStart;
                    scheduleItem.VisitEnd = command.VisitEnd;
                    scheduleItem.Date = command.Date;

                    UncommitedEvents.Add(new ScheduleItemMoved
                        {
                            ScheduleItemId = scheduleItem.Id,
                            Date = scheduleItem.Date,
                            TeamId = scheduleItem.TeamId,
                            TeamName = scheduleItem.TeamName,
                            SiteId = scheduleItem.SiteId,
                            SiteName = scheduleItem.SiteName,
                            VisitStart = scheduleItem.VisitStart,
                            VisitEnd = scheduleItem.VisitEnd,
                        });

                    return HttpStatusCode.NoContent;
                };

            Delete["/{scheduleItemId}"] = parameters =>
                {
                    string ScheduleItemId = string.Format("{0}/scheduleItems/{1}", ClientId, parameters.scheduleItemId);

                    var scheduleItem = RavenSession.Load<ScheduleItem>(ScheduleItemId);

                    UncommitedEvents.Add(new ScheduleItemDeleted
                    {
                        ScheduleItemId = scheduleItem.Id,
                        Date = scheduleItem.Date,
                        TeamId = scheduleItem.TeamId,
                        TeamName = scheduleItem.TeamName,
                        SiteId = scheduleItem.SiteId,
                        SiteName = scheduleItem.SiteName,
                    });

                    RavenSession.Delete(scheduleItem);

                    return HttpStatusCode.NoContent;
                };

            Post["/create"] = paramaters =>
                {
                    var command = this.Bind<CreateScheduleItemCommand>();

                    var team = RavenSession.Load<Team>(command.TeamId);

                    if (team == null)
                        return Response.ReferenceMissing(string.Format("Team with Id '{0}' not found.", command.TeamId));

                    var site = RavenSession.Load<Site>(command.SiteId);
                    if (site == null)
                        return Response.ReferenceMissing(string.Format("Site with Id '{0}' not found.", command.SiteId));

                    var scheduleItem = new ScheduleItem
                        {
                            ClientId = ClientId,
                            TeamId = command.TeamId,
                            TeamName = team.Name,
                            SiteId = command.SiteId,
                            SiteName = site.Name,
                            Date = command.Date,
                            VisitStart = command.VisitStart,
                            VisitEnd = command.VisitEnd,
                            SiteAddress = site.Address,
                            SiteCity = site.City,
                            SiteDescription = site.Description,
                            SitePostCode = site.PostCode,
                            SiteLatitude = site.Latitude,
                            SiteLongitude = site.Longitude,
                            SiteLocationUrl = site.Url,
                        };

                    var sections = RavenSession.Query<SiteInfoSection>()
                                               .Where(x => x.SiteId == site.Id)
                                               .ToList();

                    foreach (var section in sections)
                    {
                        scheduleItem.AddSection(section.Grouping, section.Id, section.Heading, section.Content, site.Id);
                    }

                    var sectionDetails = RavenSession.Query<SectionDetail>()
                                                     .Where(x => x.SiteId == site.Id)
                                                     .ToList();

                    foreach (var detail in sectionDetails)
                    {
                        scheduleItem.AddSectionDetail(detail.SectionId, detail.Grouping, detail.Id, detail.ItemName,
                                                      detail.ItemIdentity, detail.VerificationQuestion, detail.Comments);
                    }

                    RavenSession.Store(scheduleItem);

                    UncommitedEvents.Add(new ScheduleItemCreated
                        {
                            ScheduledItemId = scheduleItem.Id,
                            ClientId = scheduleItem.ClientId,
                            TeamId = scheduleItem.TeamId,
                            TeamName = scheduleItem.TeamName,
                            SiteLatitude = scheduleItem.SiteLatitude,
                            SiteLongitude = scheduleItem.SiteLongitude,
                            SiteId = scheduleItem.SiteId,
                            SiteName = scheduleItem.SiteName,
                            StartTime = scheduleItem.VisitStart,
                            EndTime = scheduleItem.VisitEnd,
                            Date = scheduleItem.Date,
                        });

                    return HttpStatusCode.NoContent;
                };

            Get[@"/{year}/{month}/{day}"] = parameters =>
                {
                    var teams = RavenSession.Query<Team>()
                                            .Customize(x => x.Include<Team>(o => o.Users))
                                            .Where(x => x.ClientId == ClientId)
                                            .ToArray();

                    string date = string.Format("{0}{1:00}{2:00}", (int)parameters.year, (int)parameters.month, (int)parameters.day);

                    var schedules = RavenSession.Query<ScheduleItem>()
                                                .Where(x => x.ClientId == ClientId && x.Date == date)
                                                .ToList();

                    var viewModel = new
                        {
                            schedules = teams.ToArray().Select(x =>
                                    new
                                        {
                                            clientId = x.ClientId,
                                            teamId = x.Id,
                                            team = x.Name,
                                            teamMembers = string.Join(", ", x.Users.Select(u => RavenSession.Load<User>(u).Name)),
                                            status = "onTime",
                                            statusDetail = "",
                                            date,
                                            tasks = schedules.Where(z => z.TeamId == x.Id & z.Date == date)
                                                             .Select(o => new
                                                                    {
                                                                        scheduleId = o.Id,
                                                                        siteId = o.SiteId,
                                                                        name = o.SiteName,
                                                                        status = "open",
                                                                        visitStart = (o.VisitStart.Length == 4) ? "0" + o.VisitStart : o.VisitStart,
                                                                        visitEnd = (o.VisitEnd.Length == 4) ? "0" + o.VisitEnd : o.VisitEnd,
                                                                    }),
                                        }),
                        };

                    return Response.AsJson(viewModel);
                };

            Get[@"/{year}/{month}/{day}/liveroute"] = parameters =>
                {
                    string date = string.Format("{0}{1:00}{2:00}", (int)parameters.year, (int)parameters.month, (int)parameters.day);

                    var routes = RavenSession.Query<DaylyRoute>()
                                             .Where(x => x.Date == date && x.ClientId == ClientId)
                                             .ToList();

                    var viewModel = new
                        {
                            Route = routes,
                        };

                    return viewModel;
                };
        }
Ejemplo n.º 20
0
 public ActualEventStore(IDispatchEvents eventsDispatcher)
 {
     _eventsDispatcher = eventsDispatcher;
     _connection       = EventStore.ClientAPI.EventStoreConnection.Create(new IPEndPoint(IPAddress.Loopback, 1113));
     _connection.ConnectAsync().GetAwaiter().GetResult();
 }
Ejemplo n.º 21
0
 public InMemoryEventStore(IDispatchEvents eventsDispatcher)
 {
     _eventsDispatcher = eventsDispatcher;
     store             = new Dictionary <int, EventStream>();
 }