Browse Source

Merge branch 'dev' into source-code-download

pull/1822/head
Yunus Emre Kalkan 7 years ago
parent
commit
88587bac37
  1. 31
      docs/es/Index.md
  2. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs
  3. 30
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs
  4. 1
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj
  5. 27
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentitySettingDefinitionProvider.cs
  6. 140
      npm/ng-packs/angular.json
  7. 12
      npm/ng-packs/package.json
  8. 1
      npm/ng-packs/packages/account-config/README.md
  9. 32
      npm/ng-packs/packages/account-config/karma.conf.js
  10. 7
      npm/ng-packs/packages/account-config/ng-package.json
  11. 7
      npm/ng-packs/packages/account-config/package.json
  12. 37
      npm/ng-packs/packages/account-config/src/lib/account-config.module.ts
  13. 21
      npm/ng-packs/packages/account-config/src/lib/services/account-config.service.ts
  14. 2
      npm/ng-packs/packages/account-config/src/public-api.ts
  15. 21
      npm/ng-packs/packages/account-config/src/test.ts
  16. 26
      npm/ng-packs/packages/account-config/tsconfig.lib.json
  17. 17
      npm/ng-packs/packages/account-config/tsconfig.spec.json
  18. 17
      npm/ng-packs/packages/account-config/tslint.json
  19. 4
      npm/ng-packs/packages/account/src/lib/account.module.ts
  20. 4
      npm/ng-packs/packages/account/src/lib/constants/routes.ts
  21. 3
      npm/ng-packs/packages/core/src/lib/enums/common.ts
  22. 4
      npm/ng-packs/packages/core/src/lib/models/common.ts
  23. 18
      npm/ng-packs/packages/core/src/lib/plugins/config/config.plugin.ts
  24. 1
      npm/ng-packs/packages/identity-config/README.md
  25. 32
      npm/ng-packs/packages/identity-config/karma.conf.js
  26. 7
      npm/ng-packs/packages/identity-config/ng-package.json
  27. 7
      npm/ng-packs/packages/identity-config/package.json
  28. 8
      npm/ng-packs/packages/identity-config/src/lib/identity-config.module.ts
  29. 32
      npm/ng-packs/packages/identity-config/src/lib/services/identity-config.service.ts
  30. 2
      npm/ng-packs/packages/identity-config/src/public-api.ts
  31. 21
      npm/ng-packs/packages/identity-config/src/test.ts
  32. 26
      npm/ng-packs/packages/identity-config/tsconfig.lib.json
  33. 17
      npm/ng-packs/packages/identity-config/tsconfig.spec.json
  34. 17
      npm/ng-packs/packages/identity-config/tslint.json
  35. 2
      npm/ng-packs/packages/identity/ng-package.json
  36. 4
      npm/ng-packs/packages/identity/package.json
  37. 4
      npm/ng-packs/packages/identity/src/lib/constants/routes.ts
  38. 19
      npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts
  39. 4
      npm/ng-packs/packages/identity/src/lib/identity.module.ts
  40. 24
      npm/ng-packs/packages/setting-management-config/README.md
  41. 32
      npm/ng-packs/packages/setting-management-config/karma.conf.js
  42. 7
      npm/ng-packs/packages/setting-management-config/ng-package.json
  43. 7
      npm/ng-packs/packages/setting-management-config/package.json
  44. 18
      npm/ng-packs/packages/setting-management-config/src/lib/services/setting-management-config.service.ts
  45. 8
      npm/ng-packs/packages/setting-management-config/src/lib/setting-management-config.module.ts
  46. 1
      npm/ng-packs/packages/setting-management-config/src/public-api.ts
  47. 21
      npm/ng-packs/packages/setting-management-config/src/test.ts
  48. 26
      npm/ng-packs/packages/setting-management-config/tsconfig.lib.json
  49. 17
      npm/ng-packs/packages/setting-management-config/tsconfig.spec.json
  50. 17
      npm/ng-packs/packages/setting-management-config/tslint.json
  51. 2
      npm/ng-packs/packages/setting-management/ng-package.json
  52. 3
      npm/ng-packs/packages/setting-management/package.json
  53. 29
      npm/ng-packs/packages/setting-management/src/lib/components/setting-layout.component.ts
  54. 23
      npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html
  55. 28
      npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts
  56. 1
      npm/ng-packs/packages/setting-management/src/lib/constants/index.ts
  57. 14
      npm/ng-packs/packages/setting-management/src/lib/constants/routes.ts
  58. 61
      npm/ng-packs/packages/setting-management/src/lib/services/setting-management.service.ts
  59. 10
      npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts
  60. 7
      npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts
  61. 3
      npm/ng-packs/packages/setting-management/src/public-api.ts
  62. 1
      npm/ng-packs/packages/tenant-management-config/README.md
  63. 32
      npm/ng-packs/packages/tenant-management-config/karma.conf.js
  64. 7
      npm/ng-packs/packages/tenant-management-config/ng-package.json
  65. 7
      npm/ng-packs/packages/tenant-management-config/package.json
  66. 25
      npm/ng-packs/packages/tenant-management-config/src/lib/services/tenant-management-config.service.ts
  67. 8
      npm/ng-packs/packages/tenant-management-config/src/lib/tenant-management-config.module.ts
  68. 2
      npm/ng-packs/packages/tenant-management-config/src/public-api.ts
  69. 21
      npm/ng-packs/packages/tenant-management-config/src/test.ts
  70. 26
      npm/ng-packs/packages/tenant-management-config/tsconfig.lib.json
  71. 17
      npm/ng-packs/packages/tenant-management-config/tsconfig.spec.json
  72. 17
      npm/ng-packs/packages/tenant-management-config/tslint.json
  73. 6
      npm/ng-packs/packages/tenant-management/ng-package.json
  74. 3
      npm/ng-packs/packages/tenant-management/package.json
  75. 4
      npm/ng-packs/packages/tenant-management/src/lib/constants/routes.ts
  76. 4
      npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts
  77. 6
      npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts
  78. 6
      npm/ng-packs/packages/theme-shared/src/lib/models/setting-management.ts
  79. 8
      samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj
  80. 2
      samples/BookStore/src/Acme.BookStore.Application.Contracts/IBookAppService.cs
  81. 10
      samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj
  82. 2
      samples/BookStore/src/Acme.BookStore.Application/BookAppService.cs
  83. 11
      samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj
  84. 16
      samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj
  85. 20
      samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj
  86. 9
      samples/BookStore/src/Acme.BookStore.Domain/Book.cs
  87. 6
      samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj
  88. 1743
      samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20190924133131_Upgraded_To_Abp_0_21.Designer.cs
  89. 79
      samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20190924133131_Upgraded_To_Abp_0_21.cs
  90. 780
      samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/BookStoreMigrationsDbContextModelSnapshot.cs
  91. 20
      samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj
  92. 10
      samples/BookStore/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj
  93. 10
      samples/BookStore/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj
  94. 28
      samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj
  95. 22
      samples/BookStore/src/Acme.BookStore.Web/BookStoreWebModule.cs
  96. 3
      samples/BookStore/src/Acme.BookStore.Web/Startup.cs
  97. 4
      samples/BookStore/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj
  98. 4
      samples/BookStore/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj
  99. 8
      samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj
  100. 4
      samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj

31
docs/es/Index.md

@ -0,0 +1,31 @@
# Documentación de ABP
ABP es un **marco de desarrollo de código abierto** enfocado en el desarrollo de aplicaciones web basadas en ASP.NET Core, pero tambien soporta el desarrollo de otro tipo de aplicaciones.
Explora el menú de navegación de la izquierda para profundizar en la documentación.
## Estado del proyecto
ABP es la **próxima generación** del marco de desarrollo de código abierto [ASP.NET Boilerplate](https://aspnetboilerplate.com/). Actualmente se encuentra en una fase preliminar y no está listo para su uso en producción. La documentación todavía está en progreso y se encuentra lejos de estar completa.
Para aplicaciones en fase de producción o que lo vayan a estar en el corto plazo, se sugiere usar el marco de desarrollo [ASP.NET Boilerplate](https://aspnetboilerplate.com/) el cual tiene un completo conjunto de funciones, es maduro, mantenido y actualizado activamente.
## Primeros pasos
La manera más facil para iniciar un proyecto con ABP es usar las plantillas de inicio:
* [Plantilla ASP.NET Core MVC (Razor Pages) UI](Getting-Started-AspNetCore-MVC-Template.md)
* [Plantilla Angular UI](Getting-Started-Angular-Template.md)
Si quieres iniciar desde cero (con un proyecto vacío), entonces instala manualmente el marco de desarrollo ABP y usa los siguientes tutoriales:
* [Aplicación de Consola](Getting-Started-Console-Application.md)
* [Aplicación web con ASP.NET Core](Getting-Started-AspNetCore-Application.md)
## Código fuente
ABP está hospedado en GitHub. Mira el [código fuente](https://github.com/abpframework/abp).
## ¿Quieres contribuir?
ABP es un proyecto de código abierto impulsado por la comunidad. Mira la [guía de contribución](Contribution/Index.md) si quieres formar parte de este proyecto.

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs

@ -227,17 +227,17 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form
if (string.IsNullOrEmpty(TagHelper.Label)) if (string.IsNullOrEmpty(TagHelper.Label))
{ {
return await GetLabelAsHtmlUsingTagHelperAsync(context, output, isCheckbox) + GetRequiredSymbol(context, output, inputTag); return await GetLabelAsHtmlUsingTagHelperAsync(context, output, isCheckbox) + GetRequiredSymbol(context, output);
} }
var checkboxClass = isCheckbox ? "class=\"custom-control-label\" " : ""; var checkboxClass = isCheckbox ? "class=\"custom-control-label\" " : "";
return "<label " + checkboxClass + GetIdAttributeAsString(inputTag) + ">" return "<label " + checkboxClass + GetIdAttributeAsString(inputTag) + ">"
+ TagHelper.Label + + TagHelper.Label +
"</label>" + GetRequiredSymbol(context, output, inputTag); "</label>" + GetRequiredSymbol(context, output);
} }
protected virtual string GetRequiredSymbol(TagHelperContext context, TagHelperOutput output, TagHelperOutput inputTag) protected virtual string GetRequiredSymbol(TagHelperContext context, TagHelperOutput output)
{ {
if (!TagHelper.DisplayRequiredSymbol) if (!TagHelper.DisplayRequiredSymbol)
{ {

30
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs

@ -83,8 +83,11 @@ namespace Volo.Abp.Cli.ProjectModification
public static string[] GetProjectFiles(string solutionFile) public static string[] GetProjectFiles(string solutionFile)
{ {
var baseProjectFolder = GetBaseProjectFolder(solutionFile); return GetBaseProjectFolders(solutionFile)
return Directory.GetFiles(baseProjectFolder, "*.csproj", SearchOption.AllDirectories); .Select(baseProjectFolder =>
Directory.GetFiles(baseProjectFolder, "*.csproj", SearchOption.AllDirectories))
.SelectMany(files => files)
.ToArray();
} }
public static string[] GetAssemblyNames(string[] projectFiles) public static string[] GetAssemblyNames(string[] projectFiles)
@ -118,16 +121,33 @@ namespace Volo.Abp.Cli.ProjectModification
return null; return null;
} }
private static string GetBaseProjectFolder(string solutionFile) private static string[] GetBaseProjectFolders(string solutionFile)
{ {
var projectFolders = new List<string>();
var baseFolder = Path.GetDirectoryName(solutionFile); var baseFolder = Path.GetDirectoryName(solutionFile);
if (baseFolder == null)
{
return projectFolders.ToArray();
}
var srcFolder = Path.Combine(baseFolder, "src"); var srcFolder = Path.Combine(baseFolder, "src");
if (Directory.Exists(srcFolder)) if (Directory.Exists(srcFolder))
{ {
baseFolder = srcFolder; projectFolders.Add(srcFolder);
}
var testFolder = Path.Combine(baseFolder, "test");
if (Directory.Exists(testFolder))
{
projectFolders.Add(testFolder);
}
if (!projectFolders.Any())
{
projectFolders.Add(baseFolder);
} }
return baseFolder; return projectFolders.ToArray();
} }
} }
} }

1
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj

@ -4,6 +4,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<PreserveCompilationReferences>true</PreserveCompilationReferences>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

27
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentitySettingDefinitionProvider.cs

@ -8,23 +8,22 @@ namespace Volo.Abp.Identity
public override void Define(ISettingDefinitionContext context) public override void Define(ISettingDefinitionContext context)
{ {
context.Add( context.Add(
new SettingDefinition(IdentitySettingNames.Password.RequiredLength, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Password.RequiredUniqueChars, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Password.RequireNonAlphanumeric, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Password.RequireLowercase, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Password.RequireUppercase, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Password.RequireDigit, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Password.RequiredLength), new SettingDefinition(IdentitySettingNames.Lockout.AllowedForNewUsers, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Password.RequiredUniqueChars), new SettingDefinition(IdentitySettingNames.Lockout.LockoutDuration, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Password.RequireNonAlphanumeric), new SettingDefinition(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Password.RequireLowercase),
new SettingDefinition(IdentitySettingNames.Password.RequireUppercase),
new SettingDefinition(IdentitySettingNames.Password.RequireDigit),
new SettingDefinition(IdentitySettingNames.Lockout.AllowedForNewUsers), new SettingDefinition(IdentitySettingNames.SignIn.RequireConfirmedEmail, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Lockout.LockoutDuration), new SettingDefinition(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, null, null, null, true),
new SettingDefinition(IdentitySettingNames.Lockout.MaxFailedAccessAttempts),
new SettingDefinition(IdentitySettingNames.SignIn.RequireConfirmedEmail), new SettingDefinition(IdentitySettingNames.User.IsUserNameUpdateEnabled, "true", null, null, true),
new SettingDefinition(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber), new SettingDefinition(IdentitySettingNames.User.IsEmailUpdateEnabled, "true", null, null, true)
new SettingDefinition(IdentitySettingNames.User.IsUserNameUpdateEnabled, "true"),
new SettingDefinition(IdentitySettingNames.User.IsEmailUpdateEnabled, "true")
); );
} }

140
npm/ng-packs/angular.json

@ -288,6 +288,146 @@
} }
} }
} }
},
"setting-management-config": {
"projectType": "library",
"root": "packages/setting-management-config",
"sourceRoot": "packages/setting-management-config/src",
"prefix": "abp",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "packages/setting-management-config/tsconfig.lib.json",
"project": "packages/setting-management-config/ng-package.json"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "packages/setting-management-config/src/test.ts",
"tsConfig": "packages/setting-management-config/tsconfig.spec.json",
"karmaConfig": "packages/setting-management-config/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"packages/setting-management-config/tsconfig.lib.json",
"packages/setting-management-config/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
"identity-config": {
"projectType": "library",
"root": "packages/identity-config",
"sourceRoot": "packages/identity-config/src",
"prefix": "abp",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "packages/identity-config/tsconfig.lib.json",
"project": "packages/identity-config/ng-package.json"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "packages/identity-config/src/test.ts",
"tsConfig": "packages/identity-config/tsconfig.spec.json",
"karmaConfig": "packages/identity-config/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"packages/identity-config/tsconfig.lib.json",
"packages/identity-config/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
"account-config": {
"projectType": "library",
"root": "packages/account-config",
"sourceRoot": "packages/account-config/src",
"prefix": "abp",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "packages/account-config/tsconfig.lib.json",
"project": "packages/account-config/ng-package.json"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "packages/account-config/src/test.ts",
"tsConfig": "packages/account-config/tsconfig.spec.json",
"karmaConfig": "packages/account-config/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"packages/account-config/tsconfig.lib.json",
"packages/account-config/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
"tenant-management-config": {
"projectType": "library",
"root": "packages/tenant-management-config",
"sourceRoot": "packages/tenant-management-config/src",
"prefix": "abp",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
"options": {
"tsConfig": "packages/tenant-management-config/tsconfig.lib.json",
"project": "packages/tenant-management-config/ng-package.json"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "packages/tenant-management-config/src/test.ts",
"tsConfig": "packages/tenant-management-config/tsconfig.spec.json",
"karmaConfig": "packages/tenant-management-config/karma.conf.js"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"packages/tenant-management-config/tsconfig.lib.json",
"packages/tenant-management-config/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
} }
}, },
"defaultProject": "core" "defaultProject": "core"

12
npm/ng-packs/package.json

@ -5,10 +5,10 @@
"abpng": "abpng" "abpng": "abpng"
}, },
"devDependencies": { "devDependencies": {
"@abp/ng.core": "^0.8.3", "@abp/ng.core": "^0.9.0",
"@abp/ng.feature-management": "^0.8.3", "@abp/ng.feature-management": "^0.9.0",
"@abp/ng.permission-management": "^0.8.3", "@abp/ng.permission-management": "^0.9.0",
"@abp/ng.theme.shared": "^0.8.3", "@abp/ng.theme.shared": "^0.9.0",
"@angular-devkit/build-angular": "~0.803.5", "@angular-devkit/build-angular": "~0.803.5",
"@angular-devkit/build-ng-packagr": "~0.803.5", "@angular-devkit/build-ng-packagr": "~0.803.5",
"@angular/animations": "~8.2.7", "@angular/animations": "~8.2.7",
@ -55,9 +55,11 @@
"symlink-manager": "^1.3.0", "symlink-manager": "^1.3.0",
"ts-node": "~7.0.0", "ts-node": "~7.0.0",
"tsickle": "^0.35.0", "tsickle": "^0.35.0",
"tslib": "^1.9.0",
"tslint": "~5.15.0", "tslint": "~5.15.0",
"typescript": "~3.5.3", "typescript": "~3.5.3",
"zone.js": "~0.9.1" "zone.js": "~0.9.1"
},
"dependencies": {
"tslib": "^1.10.0"
} }
} }

1
npm/ng-packs/packages/account-config/README.md

@ -0,0 +1 @@
# @abp/ng.account.config

32
npm/ng-packs/packages/account-config/karma.conf.js

@ -0,0 +1,32 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../coverage/account-config'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};

7
npm/ng-packs/packages/account-config/ng-package.json

@ -0,0 +1,7 @@
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/account-config",
"lib": {
"entryFile": "src/public-api.ts"
}
}

7
npm/ng-packs/packages/account-config/package.json

@ -0,0 +1,7 @@
{
"name": "@abp/ng.account.config",
"version": "0.0.1",
"publishConfig": {
"access": "public"
}
}

37
npm/ng-packs/packages/account-config/src/lib/account-config.module.ts

@ -0,0 +1,37 @@
import { CoreModule, noop } from '@abp/ng.core';
import { ThemeSharedModule } from '@abp/ng.theme.shared';
import { APP_INITIALIZER, InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';
import { AccountConfigService } from './services/account-config.service';
export interface AccountConfigOptions {
redirectUrl?: string;
}
export function accountOptionsFactory(options: AccountConfigOptions) {
return {
redirectUrl: '/',
...options,
};
}
export const ACCOUNT_OPTIONS = new InjectionToken('ACCOUNT_OPTIONS');
@NgModule({
imports: [CoreModule, ThemeSharedModule],
providers: [{ provide: APP_INITIALIZER, multi: true, deps: [AccountConfigService], useFactory: noop }],
})
export class AccountConfigModule {
static forRoot(options = {} as AccountConfigOptions): ModuleWithProviders {
return {
ngModule: AccountConfigModule,
providers: [
{ provide: ACCOUNT_OPTIONS, useValue: options },
{
provide: 'ACCOUNT_OPTIONS',
useFactory: accountOptionsFactory,
deps: [ACCOUNT_OPTIONS],
},
],
};
}
}

21
npm/ng-packs/packages/account-config/src/lib/services/account-config.service.ts

@ -0,0 +1,21 @@
import { ABP_ROUTES, eLayoutType, RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
@Injectable({
providedIn: 'root',
})
export class AccountConfigService {
constructor(private router: Router, private restService: RestService) {
ABP_ROUTES.push({
name: 'AbpAccount::Menu:Account',
path: 'account',
invisible: true,
layout: eLayoutType.application,
children: [
{ path: 'login', name: 'AbpAccount::Login', order: 1 },
{ path: 'register', name: 'AbpAccount::Register', order: 2 },
],
});
}
}

2
npm/ng-packs/packages/account-config/src/public-api.ts

@ -0,0 +1,2 @@
export * from './lib/services/account-config.service';
export * from './lib/account-config.module';

21
npm/ng-packs/packages/account-config/src/test.ts

@ -0,0 +1,21 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

26
npm/ng-packs/packages/account-config/tsconfig.lib.json

@ -0,0 +1,26 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

17
npm/ng-packs/packages/account-config/tsconfig.spec.json

@ -0,0 +1,17 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

17
npm/ng-packs/packages/account-config/tslint.json

@ -0,0 +1,17 @@
{
"extends": "../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"abp",
"camelCase"
],
"component-selector": [
true,
"element",
"abp",
"kebab-case"
]
}
}

4
npm/ng-packs/packages/account/src/lib/account.module.ts

@ -18,6 +18,10 @@ import { ACCOUNT_OPTIONS, optionsFactory } from './tokens/options.token';
}) })
export class AccountModule {} export class AccountModule {}
/**
*
* @deprecated since version 0.9
*/
export function AccountProviders(options = {} as Options): Provider[] { export function AccountProviders(options = {} as Options): Provider[] {
return [ return [
{ provide: ACCOUNT_OPTIONS, useValue: options }, { provide: ACCOUNT_OPTIONS, useValue: options },

4
npm/ng-packs/packages/account/src/lib/constants/routes.ts

@ -1,5 +1,9 @@
import { ABP, eLayoutType } from '@abp/ng.core'; import { ABP, eLayoutType } from '@abp/ng.core';
/**
*
* @deprecated since version 0.9
*/
export const ACCOUNT_ROUTES = { export const ACCOUNT_ROUTES = {
routes: [ routes: [
{ {

3
npm/ng-packs/packages/core/src/lib/enums/common.ts

@ -2,5 +2,8 @@ export const enum eLayoutType {
account = 'account', account = 'account',
application = 'application', application = 'application',
empty = 'empty', empty = 'empty',
/**
* @deprecated since version 0.9.0
*/
setting = 'setting', setting = 'setting',
} }

4
npm/ng-packs/packages/core/src/lib/models/common.ts

@ -43,4 +43,8 @@ export namespace ABP {
id: string; id: string;
name: string; name: string;
} }
export interface Dictionary<T = any> {
[key: string]: T;
}
} }

18
npm/ng-packs/packages/core/src/lib/plugins/config/config.plugin.ts

@ -8,6 +8,8 @@ import clone from 'just-clone';
export const NGXS_CONFIG_PLUGIN_OPTIONS = new InjectionToken('NGXS_CONFIG_PLUGIN_OPTIONS'); export const NGXS_CONFIG_PLUGIN_OPTIONS = new InjectionToken('NGXS_CONFIG_PLUGIN_OPTIONS');
export let ABP_ROUTES = [] as ABP.FullRoute[];
@Injectable() @Injectable()
export class ConfigPlugin implements NgxsPlugin { export class ConfigPlugin implements NgxsPlugin {
private initialized: boolean = false; private initialized: boolean = false;
@ -38,27 +40,31 @@ export class ConfigPlugin implements NgxsPlugin {
} }
function transformRoutes(routes: Routes = [], wrappers: ABP.FullRoute[] = []): any { function transformRoutes(routes: Routes = [], wrappers: ABP.FullRoute[] = []): any {
/**
*
* @deprecated since version 0.9.0
*/
const abpRoutes: ABP.FullRoute[] = routes const abpRoutes: ABP.FullRoute[] = routes
.filter(route => { .filter(route => {
return snq(() => route.data.routes.routes.find(r => r.path === route.path), false); return snq(() => route.data.routes.routes.find(r => r.path === route.path), false);
}) })
.reduce((acc, val) => [...acc, ...val.data.routes.routes], []); .reduce((acc, val) => [...acc, ...val.data.routes.routes], []);
ABP_ROUTES = [...ABP_ROUTES, ...abpRoutes];
wrappers = abpRoutes.filter(ar => ar.wrapper); wrappers = ABP_ROUTES.filter(ar => ar.wrapper);
const transformed = [] as ABP.FullRoute[]; const transformed = [] as ABP.FullRoute[];
routes routes
.filter(route => (route.data || {}).routes && (route.component || route.loadChildren)) .filter(route => route.component || route.loadChildren)
.forEach(route => { .forEach(route => {
const abpPackage = abpRoutes.find( const abpPackage = ABP_ROUTES.find(abp => abp.path.toLowerCase() === route.path.toLowerCase() && !abp.wrapper);
abp => abp.path.toLowerCase() === route.path.toLowerCase() && snq(() => route.data.routes.routes.length, false),
);
const { length } = transformed; const { length } = transformed;
if (abpPackage) { if (abpPackage) {
transformed.push(abpPackage); transformed.push(abpPackage);
} }
if (transformed.length === length) { if (transformed.length === length && (route.data || {}).routes) {
transformed.push({ transformed.push({
...route.data.routes, ...route.data.routes,
path: route.path, path: route.path,

1
npm/ng-packs/packages/identity-config/README.md

@ -0,0 +1 @@
# @abp/ng.identity.config

32
npm/ng-packs/packages/identity-config/karma.conf.js

@ -0,0 +1,32 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../coverage/identity-config'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};

7
npm/ng-packs/packages/identity-config/ng-package.json

@ -0,0 +1,7 @@
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/identity-config",
"lib": {
"entryFile": "src/public-api.ts"
}
}

7
npm/ng-packs/packages/identity-config/package.json

@ -0,0 +1,7 @@
{
"name": "@abp/ng.identity.config",
"version": "0.0.1",
"publishConfig": {
"access": "public"
}
}

8
npm/ng-packs/packages/identity-config/src/lib/identity-config.module.ts

@ -0,0 +1,8 @@
import { noop } from '@abp/ng.core';
import { APP_INITIALIZER, NgModule } from '@angular/core';
import { IdentityConfigService } from './services/identity-config.service';
@NgModule({
providers: [{ provide: APP_INITIALIZER, deps: [IdentityConfigService], useFactory: noop, multi: true }],
})
export class IdentityConfigModule {}

32
npm/ng-packs/packages/identity-config/src/lib/services/identity-config.service.ts

@ -0,0 +1,32 @@
import { ABP_ROUTES, eLayoutType, RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class IdentityConfigService {
constructor(private router: Router, private restService: RestService) {
ABP_ROUTES.push(
{
name: 'AbpUiNavigation::Menu:Administration',
path: '',
order: 1,
wrapper: true,
},
{
name: 'AbpIdentity::Menu:IdentityManagement',
path: 'identity',
order: 1,
parentName: 'AbpUiNavigation::Menu:Administration',
layout: eLayoutType.application,
iconClass: 'fa fa-id-card-o',
children: [
{ path: 'roles', name: 'AbpIdentity::Roles', order: 2, requiredPolicy: 'AbpIdentity.Roles' },
{ path: 'users', name: 'AbpIdentity::Users', order: 1, requiredPolicy: 'AbpIdentity.Users' },
],
},
);
}
}

2
npm/ng-packs/packages/identity-config/src/public-api.ts

@ -0,0 +1,2 @@
export * from './lib/services/identity-config.service';
export * from './lib/identity-config.module';

21
npm/ng-packs/packages/identity-config/src/test.ts

@ -0,0 +1,21 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

26
npm/ng-packs/packages/identity-config/tsconfig.lib.json

@ -0,0 +1,26 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

17
npm/ng-packs/packages/identity-config/tsconfig.spec.json

@ -0,0 +1,17 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

17
npm/ng-packs/packages/identity-config/tslint.json

@ -0,0 +1,17 @@
{
"extends": "../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"abp",
"camelCase"
],
"component-selector": [
true,
"element",
"abp",
"kebab-case"
]
}
}

2
npm/ng-packs/packages/identity/ng-package.json

@ -4,5 +4,5 @@
"lib": { "lib": {
"entryFile": "src/public-api.ts" "entryFile": "src/public-api.ts"
}, },
"whitelistedNonPeerDependencies": ["@abp/ng.theme.shared", "@abp/ng.permission-management"] "whitelistedNonPeerDependencies": ["@abp/ng.theme.shared", "@abp/ng.permission-management", "@abp/ng.identity.config"]
} }

4
npm/ng-packs/packages/identity/package.json

@ -2,7 +2,9 @@
"name": "@abp/ng.identity", "name": "@abp/ng.identity",
"version": "0.9.0", "version": "0.9.0",
"dependencies": { "dependencies": {
"@abp/ng.permission-management": "^0.9.0" "@abp/ng.theme.shared": "^0.9.0",
"@abp/ng.permission-management": "^0.9.0",
"@abp/ng.identity.config": "0.0.1"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

4
npm/ng-packs/packages/identity/src/lib/constants/routes.ts

@ -1,5 +1,9 @@
import { eLayoutType, ABP } from '@abp/ng.core'; import { eLayoutType, ABP } from '@abp/ng.core';
/**
*
* @deprecated
*/
export const IDENTITY_ROUTES = { export const IDENTITY_ROUTES = {
routes: [ routes: [
{ {

19
npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts

@ -9,21 +9,20 @@ import { UserResolver } from './resolvers/users.resolver';
const routes: Routes = [ const routes: Routes = [
{ path: '', redirectTo: 'roles', pathMatch: 'full' }, { path: '', redirectTo: 'roles', pathMatch: 'full' },
{ {
path: 'roles', path: '',
component: DynamicLayoutComponent, component: DynamicLayoutComponent,
canActivate: [AuthGuard, PermissionGuard], canActivate: [AuthGuard, PermissionGuard],
data: { requiredPolicy: 'AbpIdentity.Roles' },
children: [{ path: '', component: RolesComponent, resolve: [RoleResolver] }],
},
{
path: 'users',
component: DynamicLayoutComponent,
canActivate: [AuthGuard, PermissionGuard],
data: { requiredPolicy: 'AbpIdentity.Users' },
children: [ children: [
{ {
path: '', path: 'roles',
component: RolesComponent,
resolve: [RoleResolver],
data: { requiredPolicy: 'AbpIdentity.Roles' },
},
{
path: 'users',
component: UsersComponent, component: UsersComponent,
data: { requiredPolicy: 'AbpIdentity.Users' },
resolve: [RoleResolver, UserResolver], resolve: [RoleResolver, UserResolver],
}, },
], ],

4
npm/ng-packs/packages/identity/src/lib/identity.module.ts

@ -27,6 +27,10 @@ import { NgxValidateCoreModule } from '@ngx-validate/core';
}) })
export class IdentityModule {} export class IdentityModule {}
/**
*
* @deprecated
*/
export function IdentityProviders(): Provider[] { export function IdentityProviders(): Provider[] {
return []; return [];
} }

24
npm/ng-packs/packages/setting-management-config/README.md

@ -0,0 +1,24 @@
# SettingManagementConfig
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.7.
## Code scaffolding
Run `ng generate component component-name --project setting-management-config` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project setting-management-config`.
> Note: Don't forget to add `--project setting-management-config` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build setting-management-config` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build setting-management-config`, go to the dist folder `cd dist/setting-management-config` and run `npm publish`.
## Running unit tests
Run `ng test setting-management-config` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

32
npm/ng-packs/packages/setting-management-config/karma.conf.js

@ -0,0 +1,32 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../coverage/setting-management-config'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};

7
npm/ng-packs/packages/setting-management-config/ng-package.json

@ -0,0 +1,7 @@
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/setting-management-config",
"lib": {
"entryFile": "src/public-api.ts"
}
}

7
npm/ng-packs/packages/setting-management-config/package.json

@ -0,0 +1,7 @@
{
"name": "@abp/ng.setting-management.config",
"version": "0.0.1",
"publishConfig": {
"access": "public"
}
}

18
npm/ng-packs/packages/setting-management-config/src/lib/services/setting-management-config.service.ts

@ -0,0 +1,18 @@
import { Injectable } from '@angular/core';
import { ABP_ROUTES, eLayoutType } from '@abp/ng.core';
@Injectable({
providedIn: 'root',
})
export class SettingManagementConfigService {
constructor() {
ABP_ROUTES.push({
name: 'Settings',
path: 'setting-management',
parentName: 'AbpUiNavigation::Menu:Administration',
layout: eLayoutType.application,
order: 6,
iconClass: 'fa fa-cog',
});
}
}

8
npm/ng-packs/packages/setting-management-config/src/lib/setting-management-config.module.ts

@ -0,0 +1,8 @@
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { SettingManagementConfigService } from './services/setting-management-config.service';
import { noop } from '@abp/ng.core';
@NgModule({
providers: [{ provide: APP_INITIALIZER, deps: [SettingManagementConfigService], useFactory: noop, multi: true }],
})
export class SettingManagementConfigModule {}

1
npm/ng-packs/packages/setting-management-config/src/public-api.ts

@ -0,0 +1 @@
export * from './lib/setting-management-config.module';

21
npm/ng-packs/packages/setting-management-config/src/test.ts

@ -0,0 +1,21 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

26
npm/ng-packs/packages/setting-management-config/tsconfig.lib.json

@ -0,0 +1,26 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

17
npm/ng-packs/packages/setting-management-config/tsconfig.spec.json

@ -0,0 +1,17 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

17
npm/ng-packs/packages/setting-management-config/tslint.json

@ -0,0 +1,17 @@
{
"extends": "../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"abp",
"camelCase"
],
"component-selector": [
true,
"element",
"abp",
"kebab-case"
]
}
}

2
npm/ng-packs/packages/setting-management/ng-package.json

@ -4,5 +4,5 @@
"lib": { "lib": {
"entryFile": "src/public-api.ts" "entryFile": "src/public-api.ts"
}, },
"whitelistedNonPeerDependencies": ["@abp/ng.theme.shared"] "whitelistedNonPeerDependencies": ["@abp/ng.theme.shared", "@abp/ng.setting-management.config"]
} }

3
npm/ng-packs/packages/setting-management/package.json

@ -2,7 +2,8 @@
"name": "@abp/ng.setting-management", "name": "@abp/ng.setting-management",
"version": "0.9.0", "version": "0.9.0",
"dependencies": { "dependencies": {
"@abp/ng.theme.shared": "^0.9.0" "@abp/ng.theme.shared": "^0.9.0",
"@abp/ng.setting-management.config": "^0.0.1"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

29
npm/ng-packs/packages/setting-management/src/lib/components/setting-layout.component.ts

@ -1,29 +0,0 @@
import { eLayoutType } from '@abp/ng.core';
import { SettingTab } from '@abp/ng.theme.shared';
import { Component, TrackByFunction } from '@angular/core';
import { Router } from '@angular/router';
import { timer } from 'rxjs';
import { SettingManagementService } from '../services/setting-management.service';
@Component({
selector: 'abp-setting-layout',
templateUrl: './setting-layout.component.html',
})
export class SettingLayoutComponent {
// required for dynamic component
static type = eLayoutType.setting;
trackByFn: TrackByFunction<SettingTab> = (_, item) => item.name;
constructor(public settingManagementService: SettingManagementService, private router: Router) {
if (
settingManagementService.selected &&
this.router.url !== settingManagementService.selected.url &&
settingManagementService.settings.length
) {
settingManagementService.setSelected(settingManagementService.settings[0]);
}
}
ngOnDestroy() {}
}

23
npm/ng-packs/packages/setting-management/src/lib/components/setting-layout.component.html → npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html

@ -13,20 +13,15 @@
<div id="SettingManagementWrapper"> <div id="SettingManagementWrapper">
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div *ngIf="!settingManagementService.settings.length" class="text-center"> <div *ngIf="!settings.length" class="text-center">
<i class="fa fa-spinner fa-spin"></i> <i class="fa fa-spinner fa-spin"></i>
</div> </div>
<div class="row"> <div class="row">
<div class="col-3"> <div class="col-3">
<ul class="nav flex-column nav-pills" id="nav-tab" role="tablist"> <ul class="nav flex-column nav-pills" id="nav-tab" role="tablist">
<li <li
*abpFor=" *abpFor="let setting of settings; trackBy: trackByFn"
let setting of settingManagementService.settings; (click)="selected = setting"
trackBy: trackByFn;
orderBy: 'order';
orderDir: 'ASC'
"
(click)="settingManagementService.setSelected(setting)"
class="nav-item" class="nav-item"
[abpPermission]="setting.requiredPolicy" [abpPermission]="setting.requiredPolicy"
> >
@ -34,20 +29,16 @@
class="nav-link" class="nav-link"
[id]="setting.name + '-tab'" [id]="setting.name + '-tab'"
role="tab" role="tab"
[class.active]="setting.name === settingManagementService.selected.name" [class.active]="setting.name === selected.name"
>{{ setting.name | abpLocalization }}</a >{{ setting.name | abpLocalization }}</a
> >
</li> </li>
</ul> </ul>
</div> </div>
<div class="col-9"> <div class="col-9">
<div *ngIf="settingManagementService.settings.length" class="tab-content"> <div *ngIf="settings.length" class="tab-content">
<div <div class="tab-pane fade show active" [id]="selected.name + '-tab'" role="tabpanel">
class="tab-pane fade show active" <ng-container *ngComponentOutlet="selected.component"></ng-container>
[id]="settingManagementService.selected.name + '-tab'"
role="tabpanel"
>
<router-outlet></router-outlet>
</div> </div>
</div> </div>
</div> </div>

28
npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts

@ -0,0 +1,28 @@
import { Component, TrackByFunction, OnInit } from '@angular/core';
import { SettingTab, SETTING_TABS } from '@abp/ng.theme.shared';
import { Router } from '@angular/router';
import { Store } from '@ngxs/store';
import { ConfigState } from '@abp/ng.core';
@Component({
selector: 'abp-setting-management',
templateUrl: './setting-management.component.html',
})
export class SettingManagementComponent implements OnInit {
settings: SettingTab[] = [];
selected = {} as SettingTab;
trackByFn: TrackByFunction<SettingTab> = (_, item) => item.name;
constructor(private router: Router, private store: Store) {}
ngOnInit() {
if (this.settings.length) {
this.settings = SETTING_TABS.filter(setting =>
this.store.selectSnapshot(ConfigState.getGrantedPolicy(setting.requiredPolicy)),
).sort((a, b) => a.order - b.order);
this.selected = this.settings[0];
}
}
}

1
npm/ng-packs/packages/setting-management/src/lib/constants/index.ts

@ -1 +0,0 @@
export * from './routes';

14
npm/ng-packs/packages/setting-management/src/lib/constants/routes.ts

@ -1,14 +0,0 @@
import { ABP, eLayoutType } from '@abp/ng.core';
export const SETTING_MANAGEMENT_ROUTES = {
routes: [
{
name: 'Settings',
path: 'setting-management',
parentName: 'AbpUiNavigation::Menu:Administration',
layout: eLayoutType.application,
order: 6,
iconClass: 'fa fa-cog',
},
] as ABP.FullRoute[],
};

61
npm/ng-packs/packages/setting-management/src/lib/services/setting-management.service.ts

@ -1,61 +0,0 @@
import { SettingTab } from '@abp/ng.theme.shared';
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { Navigate } from '@ngxs/router-plugin';
import { Store, Actions, ofActionSuccessful } from '@ngxs/store';
import { Subject } from 'rxjs';
import { ConfigState, GetAppConfiguration } from '@abp/ng.core';
import { OAuthService } from 'angular-oauth2-oidc';
import { takeUntil } from 'rxjs/operators';
@Injectable({ providedIn: 'root' })
export class SettingManagementService {
settings: SettingTab[] = [];
selected = {} as SettingTab;
private destroy$ = new Subject();
constructor(
private actions: Actions,
private router: Router,
private store: Store,
private oAuthService: OAuthService,
) {
setTimeout(() => this.setSettings(), 0);
this.actions
.pipe(ofActionSuccessful(GetAppConfiguration))
.pipe(takeUntil(this.destroy$))
.subscribe(() => {
if (this.oAuthService.hasValidAccessToken()) {
this.setSettings();
}
});
}
ngOnDestroy() {
this.destroy$.next();
}
setSettings() {
const route = this.router.config.find(r => r.path === 'setting-management');
this.settings = (route.data.settings as SettingTab[])
.filter(setting => this.store.selectSnapshot(ConfigState.getGrantedPolicy(setting.requiredPolicy)))
.sort((a, b) => a.order - b.order);
this.checkSelected();
}
checkSelected() {
this.selected = this.settings.find(setting => setting.url === this.router.url) || ({} as SettingTab);
if (!this.selected.name && this.settings.length) {
this.setSelected(this.settings[0]);
}
}
setSelected(selected: SettingTab) {
this.selected = selected;
this.store.dispatch(new Navigate([selected.url]));
}
}

10
npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts

@ -1,15 +1,13 @@
import { DynamicLayoutComponent } from '@abp/ng.core';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
import { SETTING_MANAGEMENT_ROUTES } from './constants/routes'; import { SettingManagementComponent } from './components/setting-management.component';
import { SettingLayoutComponent } from './components/setting-layout.component'; import { DynamicLayoutComponent } from '@abp/ng.core';
const routes: Routes = [ const routes: Routes = [
{ {
path: 'setting-management', path: '',
component: DynamicLayoutComponent, component: DynamicLayoutComponent,
children: [{ path: '', component: SettingLayoutComponent }], children: [{ path: '', component: SettingManagementComponent }],
data: { routes: SETTING_MANAGEMENT_ROUTES, settings: [] },
}, },
]; ];

7
npm/ng-packs/packages/setting-management/src/lib/setting-management.module.ts

@ -1,14 +1,11 @@
import { CoreModule } from '@abp/ng.core'; import { CoreModule } from '@abp/ng.core';
import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { ThemeSharedModule } from '@abp/ng.theme.shared';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { SettingLayoutComponent } from './components/setting-layout.component';
import { SettingManagementRoutingModule } from './setting-management-routing.module'; import { SettingManagementRoutingModule } from './setting-management-routing.module';
import { SettingManagementComponent } from './components/setting-management.component';
export const SETTING_LAYOUT = SettingLayoutComponent;
@NgModule({ @NgModule({
declarations: [SETTING_LAYOUT], declarations: [SettingManagementComponent],
imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule], imports: [SettingManagementRoutingModule, CoreModule, ThemeSharedModule],
entryComponents: [SETTING_LAYOUT],
}) })
export class SettingManagementModule {} export class SettingManagementModule {}

3
npm/ng-packs/packages/setting-management/src/public-api.ts

@ -1,3 +1,2 @@
export * from './lib/setting-management.module'; export * from './lib/setting-management.module';
export * from './lib/constants'; export * from './lib/components/setting-management.component';
export * from './lib/components/setting-layout.component';

1
npm/ng-packs/packages/tenant-management-config/README.md

@ -0,0 +1 @@
# @abp/ng.tenant-management.config

32
npm/ng-packs/packages/tenant-management-config/karma.conf.js

@ -0,0 +1,32 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../coverage/tenant-management-config'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};

7
npm/ng-packs/packages/tenant-management-config/ng-package.json

@ -0,0 +1,7 @@
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/tenant-management-config",
"lib": {
"entryFile": "src/public-api.ts"
}
}

7
npm/ng-packs/packages/tenant-management-config/package.json

@ -0,0 +1,7 @@
{
"name": "@abp/ng.tenant-management.config",
"version": "0.0.1",
"publishConfig": {
"access": "public"
}
}

25
npm/ng-packs/packages/tenant-management-config/src/lib/services/tenant-management-config.service.ts

@ -0,0 +1,25 @@
import { Injectable } from '@angular/core';
import { ABP_ROUTES, eLayoutType } from '@abp/ng.core';
@Injectable({
providedIn: 'root',
})
export class TenantManagementConfigService {
constructor() {
ABP_ROUTES.push({
name: 'AbpTenantManagement::Menu:TenantManagement',
path: 'tenant-management',
parentName: 'AbpUiNavigation::Menu:Administration',
layout: eLayoutType.application,
iconClass: 'fa fa-users',
children: [
{
path: 'tenants',
name: 'AbpTenantManagement::Tenants',
order: 1,
requiredPolicy: 'AbpTenantManagement.Tenants',
},
],
});
}
}

8
npm/ng-packs/packages/tenant-management-config/src/lib/tenant-management-config.module.ts

@ -0,0 +1,8 @@
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { TenantManagementConfigService } from './services/tenant-management-config.service';
import { noop } from '@abp/ng.core';
@NgModule({
providers: [{ provide: APP_INITIALIZER, deps: [TenantManagementConfigService], useFactory: noop, multi: true }],
})
export class TenantManagementConfigModule {}

2
npm/ng-packs/packages/tenant-management-config/src/public-api.ts

@ -0,0 +1,2 @@
export * from './lib/services/tenant-management-config.service';
export * from './lib/tenant-management-config.module';

21
npm/ng-packs/packages/tenant-management-config/src/test.ts

@ -0,0 +1,21 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

26
npm/ng-packs/packages/tenant-management-config/tsconfig.lib.json

@ -0,0 +1,26 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

17
npm/ng-packs/packages/tenant-management-config/tsconfig.spec.json

@ -0,0 +1,17 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/spec",
"types": [
"jasmine",
"node"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

17
npm/ng-packs/packages/tenant-management-config/tslint.json

@ -0,0 +1,17 @@
{
"extends": "../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"abp",
"camelCase"
],
"component-selector": [
true,
"element",
"abp",
"kebab-case"
]
}
}

6
npm/ng-packs/packages/tenant-management/ng-package.json

@ -4,5 +4,9 @@
"lib": { "lib": {
"entryFile": "src/public-api.ts" "entryFile": "src/public-api.ts"
}, },
"whitelistedNonPeerDependencies": ["@abp/ng.theme.shared", "@abp/ng.feature-management"] "whitelistedNonPeerDependencies": [
"@abp/ng.theme.shared",
"@abp/ng.feature-management",
"@abp/ng.tenant-management.config"
]
} }

3
npm/ng-packs/packages/tenant-management/package.json

@ -3,7 +3,8 @@
"version": "0.9.0", "version": "0.9.0",
"dependencies": { "dependencies": {
"@abp/ng.theme.shared": "^0.9.0", "@abp/ng.theme.shared": "^0.9.0",
"@abp/ng.feature-management": "^0.9.0" "@abp/ng.feature-management": "^0.9.0",
"@abp/ng.tenant-management.config": "^0.0.1"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"

4
npm/ng-packs/packages/tenant-management/src/lib/constants/routes.ts

@ -1,5 +1,9 @@
import { ABP, eLayoutType } from '@abp/ng.core'; import { ABP, eLayoutType } from '@abp/ng.core';
/**
*
* @deprecated since version 0.9.0
*/
export const TENANT_MANAGEMENT_ROUTES = { export const TENANT_MANAGEMENT_ROUTES = {
routes: [ routes: [
{ {

4
npm/ng-packs/packages/tenant-management/src/lib/tenant-management.module.ts

@ -25,6 +25,10 @@ import { NgxValidateCoreModule } from '@ngx-validate/core';
}) })
export class TenantManagementModule {} export class TenantManagementModule {}
/**
*
* @deprecated since version 0.9.0
*/
export function TenantManagementProviders(): Provider[] { export function TenantManagementProviders(): Provider[] {
return []; return [];
} }

6
npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts

@ -154,6 +154,10 @@ export default `
z-index: 1000; z-index: 1000;
} }
.color-white {
color: #FFF !important;
}
/* <animations */ /* <animations */
.fade-in-top { .fade-in-top {
@ -172,7 +176,7 @@ export default `
} }
to { to {
transform: translateY(5px); transform: translateY(0px);
opacity: 1; opacity: 1;
} }
} }

6
npm/ng-packs/packages/theme-shared/src/lib/models/setting-management.ts

@ -1,6 +1,10 @@
import { Type } from '@angular/core';
export interface SettingTab { export interface SettingTab {
component: Type<any>;
name: string; name: string;
order: number; order: number;
requiredPolicy?: string; requiredPolicy?: string;
url?: string;
} }
export const SETTING_TABS = [] as SettingTab[];

8
samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj

@ -12,10 +12,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Volo.Abp.Identity.Application.Contracts" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Identity.Application.Contracts" Version="0.21.0" />
<PackageReference Include="Volo.Abp.PermissionManagement.Application.Contracts" Version="0.18.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Application.Contracts" Version="0.21.0" />
<PackageReference Include="Volo.Abp.TenantManagement.Application.Contracts" Version="0.18.1" /> <PackageReference Include="Volo.Abp.TenantManagement.Application.Contracts" Version="0.21.0" />
<PackageReference Include="Volo.Abp.FeatureManagement.Application.Contracts" Version="0.18.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Application.Contracts" Version="0.21.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

2
samples/BookStore/src/Acme.BookStore.Application.Contracts/IBookAppService.cs

@ -5,7 +5,7 @@ using Volo.Abp.Application.Services;
namespace Acme.BookStore namespace Acme.BookStore
{ {
public interface IBookAppService : public interface IBookAppService :
IAsyncCrudAppService< //Defines CRUD methods ICrudAppService< //Defines CRUD methods
BookDto, //Used to show books BookDto, //Used to show books
Guid, //Primary key of the book entity Guid, //Primary key of the book entity
PagedAndSortedResultRequestDto, //Used for paging/sorting on getting a list of books PagedAndSortedResultRequestDto, //Used for paging/sorting on getting a list of books

10
samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj

@ -3,7 +3,7 @@
<Import Project="..\..\common.props" /> <Import Project="..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Acme.BookStore</RootNamespace> <RootNamespace>Acme.BookStore</RootNamespace>
</PropertyGroup> </PropertyGroup>
@ -13,10 +13,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Volo.Abp.Identity.Application" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Identity.Application" Version="0.21.0" />
<PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="0.18.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="0.21.0" />
<PackageReference Include="Volo.Abp.TenantManagement.Application" Version="0.18.1" /> <PackageReference Include="Volo.Abp.TenantManagement.Application" Version="0.21.0" />
<PackageReference Include="Volo.Abp.FeatureManagement.Application" Version="0.18.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Application" Version="0.21.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

2
samples/BookStore/src/Acme.BookStore.Application/BookAppService.cs

@ -6,7 +6,7 @@ using Volo.Abp.Domain.Repositories;
namespace Acme.BookStore namespace Acme.BookStore
{ {
public class BookAppService : public class BookAppService :
AsyncCrudAppService<Book, BookDto, Guid, PagedAndSortedResultRequestDto, CrudAppService<Book, BookDto, Guid, PagedAndSortedResultRequestDto,
CreateUpdateBookDto, CreateUpdateBookDto>, CreateUpdateBookDto, CreateUpdateBookDto>,
IBookAppService IBookAppService
{ {

11
samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj

@ -4,7 +4,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -19,14 +19,17 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0">
<PackageReference Include="Serilog.Extensions.Logging" Version="2.0.4" /> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
<PackageReference Include="Serilog.Sinks.File" Version="4.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="4.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" /> <PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Volo.Abp.Autofac" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Autofac" Version="0.21.0" />
<ProjectReference Include="..\Acme.BookStore.Application.Contracts\Acme.BookStore.Application.Contracts.csproj" /> <ProjectReference Include="..\Acme.BookStore.Application.Contracts\Acme.BookStore.Application.Contracts.csproj" />
<ProjectReference Include="..\Acme.BookStore.EntityFrameworkCore.DbMigrations\Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj" /> <ProjectReference Include="..\Acme.BookStore.EntityFrameworkCore.DbMigrations\Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj" />
</ItemGroup> </ItemGroup>

16
samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj

@ -8,14 +8,14 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Volo.Abp.Identity.Domain.Shared" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Identity.Domain.Shared" Version="0.21.0" />
<PackageReference Include="Volo.Abp.IdentityServer.Domain.Shared" Version="0.18.1" /> <PackageReference Include="Volo.Abp.IdentityServer.Domain.Shared" Version="0.21.0" />
<PackageReference Include="Volo.Abp.BackgroundJobs.Domain.Shared" Version="0.18.1" /> <PackageReference Include="Volo.Abp.BackgroundJobs.Domain.Shared" Version="0.21.0" />
<PackageReference Include="Volo.Abp.AuditLogging.Domain.Shared" Version="0.18.1" /> <PackageReference Include="Volo.Abp.AuditLogging.Domain.Shared" Version="0.21.0" />
<PackageReference Include="Volo.Abp.TenantManagement.Domain.Shared" Version="0.18.1" /> <PackageReference Include="Volo.Abp.TenantManagement.Domain.Shared" Version="0.21.0" />
<PackageReference Include="Volo.Abp.FeatureManagement.Domain.Shared" Version="0.18.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Domain.Shared" Version="0.21.0" />
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.Shared" Version="0.18.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Domain.Shared" Version="0.21.0" />
<PackageReference Include="Volo.Abp.SettingManagement.Domain.Shared" Version="0.18.1" /> <PackageReference Include="Volo.Abp.SettingManagement.Domain.Shared" Version="0.21.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

20
samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj

@ -3,7 +3,7 @@
<Import Project="..\..\common.props" /> <Import Project="..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Acme.BookStore</RootNamespace> <RootNamespace>Acme.BookStore</RootNamespace>
</PropertyGroup> </PropertyGroup>
@ -13,15 +13,15 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.DataAnnotations" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.DataAnnotations" Version="2.2.0" />
<PackageReference Include="Volo.Abp.Identity.Domain" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Identity.Domain" Version="0.21.0" />
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.Identity" Version="0.18.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Domain.Identity" Version="0.21.0" />
<PackageReference Include="Volo.Abp.IdentityServer.Domain" Version="0.18.1" /> <PackageReference Include="Volo.Abp.IdentityServer.Domain" Version="0.21.0" />
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.IdentityServer" Version="0.18.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.Domain.IdentityServer" Version="0.21.0" />
<PackageReference Include="Volo.Abp.BackgroundJobs.Domain" Version="0.18.1" /> <PackageReference Include="Volo.Abp.BackgroundJobs.Domain" Version="0.21.0" />
<PackageReference Include="Volo.Abp.AuditLogging.Domain" Version="0.18.1" /> <PackageReference Include="Volo.Abp.AuditLogging.Domain" Version="0.21.0" />
<PackageReference Include="Volo.Abp.TenantManagement.Domain" Version="0.18.1" /> <PackageReference Include="Volo.Abp.TenantManagement.Domain" Version="0.21.0" />
<PackageReference Include="Volo.Abp.FeatureManagement.Domain" Version="0.18.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Domain" Version="0.21.0" />
<PackageReference Include="Volo.Abp.SettingManagement.Domain" Version="0.18.1" /> <PackageReference Include="Volo.Abp.SettingManagement.Domain" Version="0.21.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

9
samples/BookStore/src/Acme.BookStore.Domain/Book.cs

@ -12,5 +12,14 @@ namespace Acme.BookStore
public DateTime PublishDate { get; set; } public DateTime PublishDate { get; set; }
public float Price { get; set; } public float Price { get; set; }
public Book(Guid id, string name, BookType type, DateTime publishDate, float price)
:base(id)
{
Name = name;
Type = type;
PublishDate = publishDate;
Price = price;
}
} }
} }

6
samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj

@ -3,10 +3,14 @@
<Import Project="..\..\common.props" /> <Import Project="..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Acme.BookStore</RootNamespace> <RootNamespace>Acme.BookStore</RootNamespace>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Acme.BookStore.EntityFrameworkCore\Acme.BookStore.EntityFrameworkCore.csproj" /> <ProjectReference Include="..\Acme.BookStore.EntityFrameworkCore\Acme.BookStore.EntityFrameworkCore.csproj" />
</ItemGroup> </ItemGroup>

1743
samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20190924133131_Upgraded_To_Abp_0_21.Designer.cs

File diff suppressed because it is too large

79
samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20190924133131_Upgraded_To_Abp_0_21.cs

@ -0,0 +1,79 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace Acme.BookStore.Migrations
{
public partial class Upgraded_To_Abp_0_21 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_IdentityServerClients_ClientId",
table: "IdentityServerClients");
migrationBuilder.AddColumn<string>(
name: "Properties",
table: "IdentityServerIdentityResources",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "DeviceCodeLifetime",
table: "IdentityServerClients",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<string>(
name: "UserCodeType",
table: "IdentityServerClients",
maxLength: 100,
nullable: true);
migrationBuilder.AddColumn<int>(
name: "UserSsoLifetime",
table: "IdentityServerClients",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "Properties",
table: "IdentityServerApiResources",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_IdentityServerClients_ClientId",
table: "IdentityServerClients",
column: "ClientId");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_IdentityServerClients_ClientId",
table: "IdentityServerClients");
migrationBuilder.DropColumn(
name: "Properties",
table: "IdentityServerIdentityResources");
migrationBuilder.DropColumn(
name: "DeviceCodeLifetime",
table: "IdentityServerClients");
migrationBuilder.DropColumn(
name: "UserCodeType",
table: "IdentityServerClients");
migrationBuilder.DropColumn(
name: "UserSsoLifetime",
table: "IdentityServerClients");
migrationBuilder.DropColumn(
name: "Properties",
table: "IdentityServerApiResources");
migrationBuilder.CreateIndex(
name: "IX_IdentityServerClients_ClientId",
table: "IdentityServerClients",
column: "ClientId",
unique: true);
}
}
}

780
samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/BookStoreMigrationsDbContextModelSnapshot.cs

File diff suppressed because it is too large

20
samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj

@ -3,21 +3,21 @@
<Import Project="..\..\common.props" /> <Import Project="..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Acme.BookStore</RootNamespace> <RootNamespace>Acme.BookStore</RootNamespace>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Acme.BookStore.Domain\Acme.BookStore.Domain.csproj" /> <ProjectReference Include="..\Acme.BookStore.Domain\Acme.BookStore.Domain.csproj" />
<PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="0.18.1" /> <PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="0.21.0" />
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="0.18.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="0.21.0" />
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="0.18.1" /> <PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="0.21.0" />
<PackageReference Include="Volo.Abp.Identity.EntityFrameworkCore" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Identity.EntityFrameworkCore" Version="0.21.0" />
<PackageReference Include="Volo.Abp.IdentityServer.EntityFrameworkCore" Version="0.18.1" /> <PackageReference Include="Volo.Abp.IdentityServer.EntityFrameworkCore" Version="0.21.0" />
<PackageReference Include="Volo.Abp.BackgroundJobs.EntityFrameworkCore" Version="0.18.1" /> <PackageReference Include="Volo.Abp.BackgroundJobs.EntityFrameworkCore" Version="0.21.0" />
<PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="0.18.1" /> <PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="0.21.0" />
<PackageReference Include="Volo.Abp.TenantManagement.EntityFrameworkCore" Version="0.18.1" /> <PackageReference Include="Volo.Abp.TenantManagement.EntityFrameworkCore" Version="0.21.0" />
<PackageReference Include="Volo.Abp.FeatureManagement.EntityFrameworkCore" Version="0.18.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.EntityFrameworkCore" Version="0.21.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

10
samples/BookStore/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj

@ -3,7 +3,7 @@
<Import Project="..\..\common.props" /> <Import Project="..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Acme.BookStore</RootNamespace> <RootNamespace>Acme.BookStore</RootNamespace>
</PropertyGroup> </PropertyGroup>
@ -12,10 +12,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Volo.Abp.Identity.HttpApi.Client" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Identity.HttpApi.Client" Version="0.21.0" />
<PackageReference Include="Volo.Abp.PermissionManagement.HttpApi.Client" Version="0.18.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.HttpApi.Client" Version="0.21.0" />
<PackageReference Include="Volo.Abp.TenantManagement.HttpApi.Client" Version="0.18.1" /> <PackageReference Include="Volo.Abp.TenantManagement.HttpApi.Client" Version="0.21.0" />
<PackageReference Include="Volo.Abp.FeatureManagement.HttpApi.Client" Version="0.18.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.HttpApi.Client" Version="0.21.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

10
samples/BookStore/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj

@ -3,7 +3,7 @@
<Import Project="..\..\common.props" /> <Import Project="..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Acme.BookStore</RootNamespace> <RootNamespace>Acme.BookStore</RootNamespace>
</PropertyGroup> </PropertyGroup>
@ -12,10 +12,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Volo.Abp.Identity.HttpApi" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Identity.HttpApi" Version="0.21.0" />
<PackageReference Include="Volo.Abp.PermissionManagement.HttpApi" Version="0.18.1" /> <PackageReference Include="Volo.Abp.PermissionManagement.HttpApi" Version="0.21.0" />
<PackageReference Include="Volo.Abp.TenantManagement.HttpApi" Version="0.18.1" /> <PackageReference Include="Volo.Abp.TenantManagement.HttpApi" Version="0.21.0" />
<PackageReference Include="Volo.Abp.FeatureManagement.HttpApi" Version="0.18.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.HttpApi" Version="0.21.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

28
samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj

@ -3,14 +3,16 @@
<Import Project="..\..\common.props" /> <Import Project="..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel> <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> <AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<PreserveCompilationContext>true</PreserveCompilationContext> <PreserveCompilationContext>true</PreserveCompilationContext>
<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish> <MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>
<PreserveCompilationReferences>true</PreserveCompilationReferences>
<Configurations>Debug;Release;Docker</Configurations>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -21,26 +23,26 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
<PackageReference Include="Serilog.AspNetCore" Version="2.1.1" /> <PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
<PackageReference Include="Serilog.Sinks.File" Version="4.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="4.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" />
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="2.7.0" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="4.5.1" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="3.0.0" />
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Acme.BookStore.Application\Acme.BookStore.Application.csproj" /> <ProjectReference Include="..\Acme.BookStore.Application\Acme.BookStore.Application.csproj" />
<ProjectReference Include="..\Acme.BookStore.HttpApi\Acme.BookStore.HttpApi.csproj" /> <ProjectReference Include="..\Acme.BookStore.HttpApi\Acme.BookStore.HttpApi.csproj" />
<ProjectReference Include="..\Acme.BookStore.EntityFrameworkCore.DbMigrations\Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj" /> <ProjectReference Include="..\Acme.BookStore.EntityFrameworkCore.DbMigrations\Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="0.18.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="0.21.0" />
<PackageReference Include="Volo.Abp.Autofac" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Autofac" Version="0.21.0" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="0.18.1" /> <PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="0.21.0" />
<PackageReference Include="Volo.Abp.Identity.Web" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Identity.Web" Version="0.21.0" />
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="0.21.0" />
<PackageReference Include="Volo.Abp.TenantManagement.Web" Version="0.18.1" /> <PackageReference Include="Volo.Abp.TenantManagement.Web" Version="0.21.0" />
<PackageReference Include="Volo.Abp.FeatureManagement.Web" Version="0.18.1" /> <PackageReference Include="Volo.Abp.FeatureManagement.Web" Version="0.21.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

22
samples/BookStore/src/Acme.BookStore.Web/BookStoreWebModule.cs

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Swashbuckle.AspNetCore.Swagger; using Swashbuckle.AspNetCore.Swagger;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Account.Web; using Volo.Abp.Account.Web;
@ -23,7 +24,7 @@ using Volo.Abp.Localization;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.TenantManagement.Web; using Volo.Abp.TenantManagement.Web;
using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation;
using Volo.Abp.Ui.Navigation.Urls; using Volo.Abp.UI.Navigation.Urls;
using Volo.Abp.VirtualFileSystem; using Volo.Abp.VirtualFileSystem;
namespace Acme.BookStore.Web namespace Acme.BookStore.Web
@ -103,7 +104,7 @@ namespace Acme.BookStore.Web
}); });
} }
private void ConfigureVirtualFileSystem(IHostingEnvironment hostingEnvironment) private void ConfigureVirtualFileSystem(IWebHostEnvironment hostingEnvironment)
{ {
if (hostingEnvironment.IsDevelopment()) if (hostingEnvironment.IsDevelopment())
{ {
@ -169,6 +170,9 @@ namespace Acme.BookStore.Web
var app = context.GetApplicationBuilder(); var app = context.GetApplicationBuilder();
var env = context.GetEnvironment(); var env = context.GetEnvironment();
app.UseCorrelationId();
app.UseAbpRequestLocalization();
if (env.IsDevelopment()) if (env.IsDevelopment())
{ {
app.UseDeveloperExceptionPage(); app.UseDeveloperExceptionPage();
@ -179,7 +183,11 @@ namespace Acme.BookStore.Web
} }
app.UseVirtualFiles(); app.UseVirtualFiles();
app.UseRouting();
app.UseAuthentication(); app.UseAuthentication();
app.UseAuthorization();
app.UseJwtTokenMiddleware(); app.UseJwtTokenMiddleware();
if (MultiTenancyConsts.IsEnabled) if (MultiTenancyConsts.IsEnabled)
@ -189,11 +197,11 @@ namespace Acme.BookStore.Web
app.UseIdentityServer(); app.UseIdentityServer();
app.UseAbpRequestLocalization(); app.UseAbpRequestLocalization();
app.UseSwagger(); //app.UseSwagger();
app.UseSwaggerUI(options => //app.UseSwaggerUI(options =>
{ //{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "BookStore API"); // options.SwaggerEndpoint("/swagger/v1/swagger.json", "BookStore API");
}); //});
app.UseAuditing(); app.UseAuditing();
app.UseMvcWithDefaultRouteAndArea(); app.UseMvcWithDefaultRouteAndArea();
} }

3
samples/BookStore/src/Acme.BookStore.Web/Startup.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Text;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -20,6 +21,8 @@ namespace Acme.BookStore.Web
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{ {
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
app.InitializeApplication(); app.InitializeApplication();
} }
} }

4
samples/BookStore/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj

@ -3,7 +3,7 @@
<Import Project="..\..\common.props" /> <Import Project="..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Acme.BookStore</RootNamespace> <RootNamespace>Acme.BookStore</RootNamespace>
</PropertyGroup> </PropertyGroup>
@ -13,7 +13,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.1.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.3.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

4
samples/BookStore/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj

@ -3,7 +3,7 @@
<Import Project="..\..\common.props" /> <Import Project="..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Acme.BookStore</RootNamespace> <RootNamespace>Acme.BookStore</RootNamespace>
</PropertyGroup> </PropertyGroup>
@ -12,7 +12,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.1.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.3.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

8
samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj

@ -3,7 +3,7 @@
<Import Project="..\..\common.props" /> <Import Project="..\..\common.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Acme.BookStore</RootNamespace> <RootNamespace>Acme.BookStore</RootNamespace>
</PropertyGroup> </PropertyGroup>
@ -13,9 +13,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.1.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.3.0" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="2.2.4" /> <PackageReference Include="Microsoft.Data.Sqlite" Version="3.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.4" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

4
samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework> <TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -17,7 +17,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Volo.Abp.Http.Client.IdentityModel" Version="0.18.1" /> <PackageReference Include="Volo.Abp.Http.Client.IdentityModel" Version="0.21.0" />
<ProjectReference Include="..\..\src\Acme.BookStore.HttpApi.Client\Acme.BookStore.HttpApi.Client.csproj" /> <ProjectReference Include="..\..\src\Acme.BookStore.HttpApi.Client\Acme.BookStore.HttpApi.Client.csproj" />
</ItemGroup> </ItemGroup>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save