diff --git a/doc/article/article.html b/doc/article/article.html
index 63e4133..2003911 100644
--- a/doc/article/article.html
+++ b/doc/article/article.html
@@ -90,7 +90,8 @@
Creating Application From Template
Event Cloud Project
In this article, I will show key parts of the project and explain it. So,
please download the sample project, open in Visual Studio 2013+ and run
-migrations just like above before reading rest of the article. I will follow
+migrations just like above before reading rest of the article (Be sure that
+there is no database named EventCloud before running the migrations). I will follow
some DDD (Domain Driven Design) techniques to create
domain (business) layer and application layer.
Event Cloud is a free SaaS (multi-tenant) application. We can create a tenant
diff --git a/src/EventCloud.Application/EventCloud.Application.csproj b/src/EventCloud.Application/EventCloud.Application.csproj
index 1cec9ed..2c0b950 100644
--- a/src/EventCloud.Application/EventCloud.Application.csproj
+++ b/src/EventCloud.Application/EventCloud.Application.csproj
@@ -115,6 +115,8 @@
+
+
diff --git a/src/EventCloud.Application/Statistics/IStatisticsAppService.cs b/src/EventCloud.Application/Statistics/IStatisticsAppService.cs
new file mode 100644
index 0000000..232ba86
--- /dev/null
+++ b/src/EventCloud.Application/Statistics/IStatisticsAppService.cs
@@ -0,0 +1,11 @@
+using System.Threading.Tasks;
+using Abp.Application.Services;
+using Abp.Application.Services.Dto;
+
+namespace EventCloud.Statistics
+{
+ public interface IStatisticsAppService : IApplicationService
+ {
+ Task> GetStatistics();
+ }
+}
\ No newline at end of file
diff --git a/src/EventCloud.Application/Statistics/StatisticsAppService.cs b/src/EventCloud.Application/Statistics/StatisticsAppService.cs
new file mode 100644
index 0000000..fc4df96
--- /dev/null
+++ b/src/EventCloud.Application/Statistics/StatisticsAppService.cs
@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Abp.Application.Services.Dto;
+using Abp.Domain.Repositories;
+using Abp.Domain.Uow;
+using EventCloud.Events;
+using EventCloud.MultiTenancy;
+using EventCloud.Users;
+
+namespace EventCloud.Statistics
+{
+ public class StatisticsAppService : EventCloudAppServiceBase, IStatisticsAppService
+ {
+ private readonly IRepository _tenantRepository;
+ private readonly IRepository _userRepository;
+ private readonly IRepository _eventRepository;
+ private readonly IRepository _eventRegistrationRepository;
+
+ public StatisticsAppService(
+ IRepository tenantRepository,
+ IRepository userRepository,
+ IRepository eventRepository,
+ IRepository eventRegistrationRepository)
+ {
+ _tenantRepository = tenantRepository;
+ _userRepository = userRepository;
+ _eventRepository = eventRepository;
+ _eventRegistrationRepository = eventRegistrationRepository;
+ }
+
+ public async Task> GetStatistics()
+ {
+ //Disabled MayHaveTenant filter to access to all tenant's data, not for only current tenant.
+ using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.MayHaveTenant))
+ {
+ var statisticItems = new List
+ {
+ new NameValueDto(
+ "Tenants",
+ (await _tenantRepository.CountAsync()).ToString()
+ ),
+ new NameValueDto(
+ "Users",
+ (await _userRepository.CountAsync()).ToString()
+ ),
+ new NameValueDto(
+ "Events",
+ (await _eventRepository.CountAsync()).ToString()
+ ),
+ new NameValueDto(
+ "Registrations",
+ (await _eventRegistrationRepository.CountAsync()).ToString()
+ )
+ };
+
+ return new ListResultOutput(statisticItems);
+ }
+ }
+ }
+}
diff --git a/src/EventCloud.EntityFramework/EventCloud.EntityFramework.csproj b/src/EventCloud.EntityFramework/EventCloud.EntityFramework.csproj
index 3c35b7d..d9a85cb 100644
--- a/src/EventCloud.EntityFramework/EventCloud.EntityFramework.csproj
+++ b/src/EventCloud.EntityFramework/EventCloud.EntityFramework.csproj
@@ -136,6 +136,10 @@
201510210723116_Removed_BirthYear_From_User.cs
+
+
+ 201510231926262_UpgradeTo_ModuleZero_0_7_3.cs
+
@@ -174,6 +178,9 @@
201510210723116_Removed_BirthYear_From_User.cs
+
+ 201510231926262_UpgradeTo_ModuleZero_0_7_3.cs
+
diff --git a/src/EventCloud.EntityFramework/Migrations/201510231926262_UpgradeTo_ModuleZero_0_7_3.Designer.cs b/src/EventCloud.EntityFramework/Migrations/201510231926262_UpgradeTo_ModuleZero_0_7_3.Designer.cs
new file mode 100644
index 0000000..6134326
--- /dev/null
+++ b/src/EventCloud.EntityFramework/Migrations/201510231926262_UpgradeTo_ModuleZero_0_7_3.Designer.cs
@@ -0,0 +1,29 @@
+//
+namespace EventCloud.Migrations
+{
+ using System.CodeDom.Compiler;
+ using System.Data.Entity.Migrations;
+ using System.Data.Entity.Migrations.Infrastructure;
+ using System.Resources;
+
+ [GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
+ public sealed partial class UpgradeTo_ModuleZero_0_7_3 : IMigrationMetadata
+ {
+ private readonly ResourceManager Resources = new ResourceManager(typeof(UpgradeTo_ModuleZero_0_7_3));
+
+ string IMigrationMetadata.Id
+ {
+ get { return "201510231926262_UpgradeTo_ModuleZero_0_7_3"; }
+ }
+
+ string IMigrationMetadata.Source
+ {
+ get { return null; }
+ }
+
+ string IMigrationMetadata.Target
+ {
+ get { return Resources.GetString("Target"); }
+ }
+ }
+}
diff --git a/src/EventCloud.EntityFramework/Migrations/201510231926262_UpgradeTo_ModuleZero_0_7_3.cs b/src/EventCloud.EntityFramework/Migrations/201510231926262_UpgradeTo_ModuleZero_0_7_3.cs
new file mode 100644
index 0000000..751a6a3
--- /dev/null
+++ b/src/EventCloud.EntityFramework/Migrations/201510231926262_UpgradeTo_ModuleZero_0_7_3.cs
@@ -0,0 +1,70 @@
+namespace EventCloud.Migrations
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Data.Entity.Infrastructure.Annotations;
+ using System.Data.Entity.Migrations;
+
+ public partial class UpgradeTo_ModuleZero_0_7_3 : DbMigration
+ {
+ public override void Up()
+ {
+ CreateTable(
+ "dbo.AbpFeatures",
+ c => new
+ {
+ Id = c.Long(nullable: false, identity: true),
+ Name = c.String(nullable: false, maxLength: 128),
+ Value = c.String(nullable: false, maxLength: 2000),
+ CreationTime = c.DateTime(nullable: false),
+ CreatorUserId = c.Long(),
+ EditionId = c.Int(),
+ TenantId = c.Int(),
+ Discriminator = c.String(nullable: false, maxLength: 128),
+ })
+ .PrimaryKey(t => t.Id)
+ .ForeignKey("dbo.AbpEditions", t => t.EditionId)
+ .Index(t => t.EditionId);
+
+ CreateTable(
+ "dbo.AbpEditions",
+ c => new
+ {
+ Id = c.Int(nullable: false, identity: true),
+ Name = c.String(nullable: false, maxLength: 32),
+ DisplayName = c.String(nullable: false, maxLength: 64),
+ IsDeleted = c.Boolean(nullable: false),
+ DeleterUserId = c.Long(),
+ DeletionTime = c.DateTime(),
+ LastModificationTime = c.DateTime(),
+ LastModifierUserId = c.Long(),
+ CreationTime = c.DateTime(nullable: false),
+ CreatorUserId = c.Long(),
+ },
+ annotations: new Dictionary
+ {
+ { "DynamicFilter_Edition_SoftDelete", "EntityFramework.DynamicFilters.DynamicFilterDefinition" },
+ })
+ .PrimaryKey(t => t.Id);
+
+ AddColumn("dbo.AbpTenants", "EditionId", c => c.Int());
+ CreateIndex("dbo.AbpTenants", "EditionId");
+ AddForeignKey("dbo.AbpTenants", "EditionId", "dbo.AbpEditions", "Id");
+ }
+
+ public override void Down()
+ {
+ DropForeignKey("dbo.AbpTenants", "EditionId", "dbo.AbpEditions");
+ DropForeignKey("dbo.AbpFeatures", "EditionId", "dbo.AbpEditions");
+ DropIndex("dbo.AbpTenants", new[] { "EditionId" });
+ DropIndex("dbo.AbpFeatures", new[] { "EditionId" });
+ DropColumn("dbo.AbpTenants", "EditionId");
+ DropTable("dbo.AbpEditions",
+ removedAnnotations: new Dictionary
+ {
+ { "DynamicFilter_Edition_SoftDelete", "EntityFramework.DynamicFilters.DynamicFilterDefinition" },
+ });
+ DropTable("dbo.AbpFeatures");
+ }
+ }
+}
diff --git a/src/EventCloud.EntityFramework/Migrations/201510231926262_UpgradeTo_ModuleZero_0_7_3.resx b/src/EventCloud.EntityFramework/Migrations/201510231926262_UpgradeTo_ModuleZero_0_7_3.resx
new file mode 100644
index 0000000..04737ff
--- /dev/null
+++ b/src/EventCloud.EntityFramework/Migrations/201510231926262_UpgradeTo_ModuleZero_0_7_3.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ dbo
+
+
\ No newline at end of file
diff --git a/src/EventCloud.Web/App/Main/views/about/about.cshtml b/src/EventCloud.Web/App/Main/views/about/about.cshtml
index 0a7ac02..d41c06f 100644
--- a/src/EventCloud.Web/App/Main/views/about/about.cshtml
+++ b/src/EventCloud.Web/App/Main/views/about/about.cshtml
@@ -3,7 +3,21 @@
This is an example multi-tenant application built using ASP.NET Boilerplate framework.
- Links:
+
+ Some Statistics
+
+
+
+
+ {{statisticItem.value}}
+ {{statisticItem.name}}
+
+
+
+
+ Note: These statistics include all tenants, not only current tenant.
+
+ Links
- Source code of this application: github.com/aspnetboilerplate/eventcloud
- ASP.NET Boilerplate official web site: aspnetboilerplate.com
diff --git a/src/EventCloud.Web/App/Main/views/about/about.css b/src/EventCloud.Web/App/Main/views/about/about.css
new file mode 100644
index 0000000..b406e3c
--- /dev/null
+++ b/src/EventCloud.Web/App/Main/views/about/about.css
@@ -0,0 +1,21 @@
+.statistics-list {
+ margin-bottom: 20px;
+}
+.statistics-list .statistic-item {
+ background-color: #f1f1f1;
+ border-left: 4px solid #9954bb;
+ margin: 5px;
+ padding: 10px;
+}
+.statistics-list .statistic-item .statistic-value {
+ display: block;
+ text-align: center;
+ font-size: 2em;
+ margin-bottom: 15px;
+ color: #9954bb;
+}
+.statistics-list .statistic-item .statistic-name {
+ display: block;
+ text-align: center;
+}
+/*# sourceMappingURL=about.css.map */
\ No newline at end of file
diff --git a/src/EventCloud.Web/App/Main/views/about/about.css.map b/src/EventCloud.Web/App/Main/views/about/about.css.map
new file mode 100644
index 0000000..3692c2e
--- /dev/null
+++ b/src/EventCloud.Web/App/Main/views/about/about.css.map
@@ -0,0 +1 @@
+{"version":3,"file":"about.css","sources":["about.less"],"names":[],"mappings":"AAEA;EACI,mBAAA;;AADJ,gBAGI;EACI,yBAAA;EACA,8BAAA;EACA,WAAA;EACA,aAAA;;AAPR,gBAGI,gBAMI;EACI,cAAA;EACA,kBAAA;EACA,cAAA;EACA,mBAAA;EACA,cAAA;;AAdZ,gBAGI,gBAcI;EACI,cAAA;EACA,kBAAA"}
\ No newline at end of file
diff --git a/src/EventCloud.Web/App/Main/views/about/about.js b/src/EventCloud.Web/App/Main/views/about/about.js
index 03bd329..ef11801 100644
--- a/src/EventCloud.Web/App/Main/views/about/about.js
+++ b/src/EventCloud.Web/App/Main/views/about/about.js
@@ -1,9 +1,15 @@
(function () {
var controllerId = 'app.views.about';
angular.module('app').controller(controllerId, [
- '$scope', function ($scope) {
+ '$scope', 'abp.services.app.statistics',
+ function ($scope, statisticsService) {
var vm = this;
- //About logic...
+
+ vm.statisticItems = [];
+
+ statisticsService.getStatistics().success(function (result) {
+ vm.statisticItems = result.items;
+ });
}
]);
})();
\ No newline at end of file
diff --git a/src/EventCloud.Web/App/Main/views/about/about.less b/src/EventCloud.Web/App/Main/views/about/about.less
new file mode 100644
index 0000000..5a4e6a2
--- /dev/null
+++ b/src/EventCloud.Web/App/Main/views/about/about.less
@@ -0,0 +1,25 @@
+@import "../../colors.less";
+
+.statistics-list {
+ margin-bottom: 20px;
+
+ .statistic-item {
+ background-color: #f1f1f1;
+ border-left: 4px solid @primaryColor;
+ margin: 5px;
+ padding: 10px;
+
+ .statistic-value {
+ display: block;
+ text-align: center;
+ font-size: 2em;
+ margin-bottom: 15px;
+ color: @primaryColor;
+ }
+
+ .statistic-name {
+ display: block;
+ text-align: center;
+ }
+ }
+}
diff --git a/src/EventCloud.Web/App/Main/views/about/about.min.css b/src/EventCloud.Web/App/Main/views/about/about.min.css
new file mode 100644
index 0000000..93ecf7d
--- /dev/null
+++ b/src/EventCloud.Web/App/Main/views/about/about.min.css
@@ -0,0 +1 @@
+.statistics-list{margin-bottom:20px}.statistics-list .statistic-item{background-color:#f1f1f1;border-left:4px solid #9954bb;margin:5px;padding:10px}.statistics-list .statistic-item .statistic-value{display:block;text-align:center;font-size:2em;margin-bottom:15px;color:#9954bb}.statistics-list .statistic-item .statistic-name{display:block;text-align:center}
\ No newline at end of file
diff --git a/src/EventCloud.Web/EventCloud.Web.csproj b/src/EventCloud.Web/EventCloud.Web.csproj
index 79e61bc..76c6685 100644
--- a/src/EventCloud.Web/EventCloud.Web.csproj
+++ b/src/EventCloud.Web/EventCloud.Web.csproj
@@ -280,6 +280,12 @@
main.css
+
+ about.less
+
+
+ about.css
+
detail.less
@@ -436,6 +442,10 @@
+
+
+ about.css
+