From 8df6e6f81913e79483a5ffd59e580822e040dbbd Mon Sep 17 00:00:00 2001
From: wwwk <1265346495@qq.com>
Date: Sun, 1 May 2022 23:56:28 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0localizationmangement?=
=?UTF-8?q?=E5=B9=B6=E8=BF=81=E7=A7=BBInit?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
services/book-store/BookStore.csproj | 3 +
services/book-store/BookStoreModule.cs | 31 +-
.../book-store/Data/BookStoreDbContext.cs | 2 +
.../Data/BookStoreDbMigrationService.cs | 209 --
.../Data/BookStoreEFCoreDbSchemaMigrator.cs | 32 -
.../DataSeeder/BookStoreDataSeederWorker.cs | 21 +
.../book-store/Localization/BookStore/ar.json | 8 -
.../book-store/Localization/BookStore/cs.json | 8 -
.../Localization/BookStore/de-DE.json | 8 -
.../Localization/BookStore/en-GB.json | 8 -
.../book-store/Localization/BookStore/es.json | 8 -
.../book-store/Localization/BookStore/fi.json | 8 -
.../book-store/Localization/BookStore/fr.json | 8 -
.../book-store/Localization/BookStore/hi.json | 8 -
.../book-store/Localization/BookStore/hu.json | 8 -
.../book-store/Localization/BookStore/is.json | 8 -
.../book-store/Localization/BookStore/it.json | 8 -
.../book-store/Localization/BookStore/nl.json | 8 -
.../Localization/BookStore/pl-PL.json | 8 -
.../Localization/BookStore/pt-BR.json | 8 -
.../Localization/BookStore/ro-RO.json | 8 -
.../book-store/Localization/BookStore/ru.json | 8 -
.../book-store/Localization/BookStore/sk.json | 8 -
.../book-store/Localization/BookStore/sl.json | 8 -
.../book-store/Localization/BookStore/tr.json | 8 -
.../book-store/Localization/BookStore/vi.json | 8 -
.../Localization/BookStore/zh-Hant.json | 8 -
.../20220501153835_Initlize.Designer.cs | 2409 +++++++++++++++++
.../Migrations/20220501153835_Initlize.cs | 1419 ++++++++++
.../BookStoreDbContextModelSnapshot.cs | 2407 ++++++++++++++++
services/book-store/Program.cs | 20 -
31 files changed, 6286 insertions(+), 435 deletions(-)
delete mode 100644 services/book-store/Data/BookStoreDbMigrationService.cs
delete mode 100644 services/book-store/Data/BookStoreEFCoreDbSchemaMigrator.cs
create mode 100644 services/book-store/DataSeeder/BookStoreDataSeederWorker.cs
delete mode 100644 services/book-store/Localization/BookStore/ar.json
delete mode 100644 services/book-store/Localization/BookStore/cs.json
delete mode 100644 services/book-store/Localization/BookStore/de-DE.json
delete mode 100644 services/book-store/Localization/BookStore/en-GB.json
delete mode 100644 services/book-store/Localization/BookStore/es.json
delete mode 100644 services/book-store/Localization/BookStore/fi.json
delete mode 100644 services/book-store/Localization/BookStore/fr.json
delete mode 100644 services/book-store/Localization/BookStore/hi.json
delete mode 100644 services/book-store/Localization/BookStore/hu.json
delete mode 100644 services/book-store/Localization/BookStore/is.json
delete mode 100644 services/book-store/Localization/BookStore/it.json
delete mode 100644 services/book-store/Localization/BookStore/nl.json
delete mode 100644 services/book-store/Localization/BookStore/pl-PL.json
delete mode 100644 services/book-store/Localization/BookStore/pt-BR.json
delete mode 100644 services/book-store/Localization/BookStore/ro-RO.json
delete mode 100644 services/book-store/Localization/BookStore/ru.json
delete mode 100644 services/book-store/Localization/BookStore/sk.json
delete mode 100644 services/book-store/Localization/BookStore/sl.json
delete mode 100644 services/book-store/Localization/BookStore/tr.json
delete mode 100644 services/book-store/Localization/BookStore/vi.json
delete mode 100644 services/book-store/Localization/BookStore/zh-Hant.json
create mode 100644 services/book-store/Migrations/20220501153835_Initlize.Designer.cs
create mode 100644 services/book-store/Migrations/20220501153835_Initlize.cs
create mode 100644 services/book-store/Migrations/BookStoreDbContextModelSnapshot.cs
diff --git a/services/book-store/BookStore.csproj b/services/book-store/BookStore.csproj
index 27e023f..d369894 100644
--- a/services/book-store/BookStore.csproj
+++ b/services/book-store/BookStore.csproj
@@ -486,6 +486,9 @@
+
+
+
diff --git a/services/book-store/BookStoreModule.cs b/services/book-store/BookStoreModule.cs
index 1b0af51..da7a570 100644
--- a/services/book-store/BookStoreModule.cs
+++ b/services/book-store/BookStoreModule.cs
@@ -1,4 +1,5 @@
using BookStore.Data;
+using BookStore.DataSeeder;
using BookStore.Localization;
using Hangfire;
using Microsoft.AspNetCore.Builder;
@@ -16,6 +17,9 @@ using Sanhe.Abp.ExceptionHandling.Emailing;
using Sanhe.Abp.Features.LimitValidation.Redis;
using Sanhe.Abp.Hangfire.Dashboard;
using Sanhe.Abp.Hangfire.Storage.PostgreSql;
+using Sanhe.Abp.LocalizationManagement;
+using Sanhe.Abp.LocalizationManagement.EntityFrameworkCore;
+using Sanhe.Abp.Wrapper;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
@@ -115,7 +119,11 @@ namespace BookStore;
typeof(AbpEmailingExceptionHandlingModule),
typeof(AbpFeaturesValidationRedisModule),
typeof(AbpHangfireDashboardModule),
- typeof(AbpHangfireStoragePostgreSqlModule)
+ typeof(AbpHangfireStoragePostgreSqlModule),
+ // LocalizationManagement
+ typeof(AbpLocalizationManagementApplicationModule),
+ typeof(AbpLocalizationManagementEntityFrameworkCoreModule),
+ typeof(AbpLocalizationManagementHttpApiModule)
)]
public class BookStoreModule : AbpModule
{
@@ -139,11 +147,11 @@ public class BookStoreModule : AbpModule
context.Services.AddAlwaysAllowAuthorization();
// wrap
- //Configure(options =>
- //{
- // options.IsEnabled = true;
- // options.IgnoreNamespaces.Clear();
- //});
+ Configure(options =>
+ {
+ options.IsEnabled = true;
+ options.IgnoreNamespaces.Clear();
+ });
// limit
Configure(options =>
{
@@ -162,6 +170,7 @@ public class BookStoreModule : AbpModule
ConfigureCors(context, configuration);
//ConfigureDataProtection(context, configuration, hostingEnvironment);
ConfigureEfCore(context);
+ ConfigureSeedWorker(context.Services, hostingEnvironment.IsDevelopment());
}
private void ConfigureExceptionHandling()
@@ -268,6 +277,8 @@ public class BookStoreModule : AbpModule
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
options.Languages.Add(new LanguageInfo("en", "en", "English"));
+ // dynamic localization
+ options.Resources.AddDynamic();
});
Configure(options =>
@@ -356,6 +367,14 @@ public class BookStoreModule : AbpModule
});
}
+ private static void ConfigureSeedWorker(IServiceCollection services, bool isDevelopment = false)
+ {
+ if (isDevelopment)
+ {
+ services.AddHostedService();
+ }
+ }
+
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
diff --git a/services/book-store/Data/BookStoreDbContext.cs b/services/book-store/Data/BookStoreDbContext.cs
index 9146cb8..954bcbc 100644
--- a/services/book-store/Data/BookStoreDbContext.cs
+++ b/services/book-store/Data/BookStoreDbContext.cs
@@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore;
+using Sanhe.Abp.LocalizationManagement.EntityFrameworkCore;
using Volo.Abp.AuditLogging.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.FeatureManagement.EntityFrameworkCore;
@@ -30,6 +31,7 @@ public class BookStoreDbContext : AbpDbContext
builder.ConfigureIdentityServer();
builder.ConfigureFeatureManagement();
builder.ConfigureTenantManagement();
+ builder.ConfigureLocalization();
/* Configure your own entities here */
}
diff --git a/services/book-store/Data/BookStoreDbMigrationService.cs b/services/book-store/Data/BookStoreDbMigrationService.cs
deleted file mode 100644
index 8d516cc..0000000
--- a/services/book-store/Data/BookStoreDbMigrationService.cs
+++ /dev/null
@@ -1,209 +0,0 @@
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Logging.Abstractions;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Threading.Tasks;
-using Volo.Abp.Data;
-using Volo.Abp.DependencyInjection;
-using Volo.Abp.Identity;
-using Volo.Abp.MultiTenancy;
-using Volo.Abp.TenantManagement;
-
-namespace BookStore.Data;
-
-public class BookStoreDbMigrationService : ITransientDependency
-{
- public ILogger Logger { get; set; }
-
- private readonly IDataSeeder _dataSeeder;
- private readonly BookStoreEFCoreDbSchemaMigrator _dbSchemaMigrator;
- private readonly ITenantRepository _tenantRepository;
- private readonly ICurrentTenant _currentTenant;
-
- public BookStoreDbMigrationService(
- IDataSeeder dataSeeder,
- BookStoreEFCoreDbSchemaMigrator dbSchemaMigrator,
- ITenantRepository tenantRepository,
- ICurrentTenant currentTenant)
- {
- _dataSeeder = dataSeeder;
- _dbSchemaMigrator = dbSchemaMigrator;
- _tenantRepository = tenantRepository;
- _currentTenant = currentTenant;
-
- Logger = NullLogger.Instance;
- }
-
- public async Task MigrateAsync()
- {
- var initialMigrationAdded = AddInitialMigrationIfNotExist();
-
- if (initialMigrationAdded)
- {
- return;
- }
-
- Logger.LogInformation("Started database migrations...");
-
- await MigrateDatabaseSchemaAsync();
- await SeedDataAsync();
-
- Logger.LogInformation($"Successfully completed host database migrations.");
-
- var tenants = await _tenantRepository.GetListAsync(includeDetails: true);
-
- var migratedDatabaseSchemas = new HashSet();
- foreach (var tenant in tenants)
- {
- using (_currentTenant.Change(tenant.Id))
- {
- if (tenant.ConnectionStrings.Any())
- {
- var tenantConnectionStrings = tenant.ConnectionStrings
- .Select(x => x.Value)
- .ToList();
-
- if (!migratedDatabaseSchemas.IsSupersetOf(tenantConnectionStrings))
- {
- await MigrateDatabaseSchemaAsync(tenant);
-
- migratedDatabaseSchemas.AddIfNotContains(tenantConnectionStrings);
- }
- }
-
- await SeedDataAsync(tenant);
- }
-
- Logger.LogInformation($"Successfully completed {tenant.Name} tenant database migrations.");
- }
-
- Logger.LogInformation("Successfully completed all database migrations.");
- Logger.LogInformation("You can safely end this process...");
- }
-
- private async Task MigrateDatabaseSchemaAsync(Tenant tenant = null)
- {
- Logger.LogInformation($"Migrating schema for {(tenant == null ? "host" : tenant.Name + " tenant")} database...");
- await _dbSchemaMigrator.MigrateAsync();
- }
-
- private async Task SeedDataAsync(Tenant tenant = null)
- {
- Logger.LogInformation($"Executing {(tenant == null ? "host" : tenant.Name + " tenant")} database seed...");
-
- await _dataSeeder.SeedAsync(new DataSeedContext(tenant?.Id)
- .WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, IdentityDataSeedContributor.AdminEmailDefaultValue)
- .WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, IdentityDataSeedContributor.AdminPasswordDefaultValue)
- );
- }
-
- private bool AddInitialMigrationIfNotExist()
- {
- try
- {
- if (!DbMigrationsProjectExists())
- {
- return false;
- }
- }
- catch (Exception)
- {
- return false;
- }
-
- try
- {
- if (!MigrationsFolderExists())
- {
- AddInitialMigration();
- return true;
- }
- else
- {
- return false;
- }
- }
- catch (Exception e)
- {
- Logger.LogWarning("Couldn't determinate if any migrations exist : " + e.Message);
- return false;
- }
- }
-
- private bool DbMigrationsProjectExists()
- {
- return Directory.Exists(GetEntityFrameworkCoreProjectFolderPath());
- }
-
- private bool MigrationsFolderExists()
- {
- var dbMigrationsProjectFolder = GetEntityFrameworkCoreProjectFolderPath();
-
- return Directory.Exists(Path.Combine(dbMigrationsProjectFolder, "Migrations"));
- }
-
- private void AddInitialMigration()
- {
- Logger.LogInformation("Creating initial migration...");
-
- string argumentPrefix;
- string fileName;
-
- if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
- {
- argumentPrefix = "-c";
- fileName = "/bin/bash";
- }
- else
- {
- argumentPrefix = "/C";
- fileName = "cmd.exe";
- }
-
- var procStartInfo = new ProcessStartInfo(fileName,
- $"{argumentPrefix} \"abp create-migration-and-run-migrator \"{GetEntityFrameworkCoreProjectFolderPath()}\" --nolayers\""
- );
-
- try
- {
- Process.Start(procStartInfo);
- }
- catch (Exception)
- {
- throw new Exception("Couldn't run ABP CLI...");
- }
- }
-
- private string GetEntityFrameworkCoreProjectFolderPath()
- {
- var slnDirectoryPath = GetSolutionDirectoryPath();
-
- if (slnDirectoryPath == null)
- {
- throw new Exception("Solution folder not found!");
- }
-
- return Path.Combine(slnDirectoryPath, "BookStore");
- }
-
- private string GetSolutionDirectoryPath()
- {
- var currentDirectory = new DirectoryInfo(Directory.GetCurrentDirectory());
-
- while (Directory.GetParent(currentDirectory.FullName) != null)
- {
- currentDirectory = Directory.GetParent(currentDirectory.FullName);
-
- if (Directory.GetFiles(currentDirectory.FullName).FirstOrDefault(f => f.EndsWith(".sln")) != null)
- {
- return currentDirectory.FullName;
- }
- }
-
- return null;
- }
-}
diff --git a/services/book-store/Data/BookStoreEFCoreDbSchemaMigrator.cs b/services/book-store/Data/BookStoreEFCoreDbSchemaMigrator.cs
deleted file mode 100644
index 06d4fab..0000000
--- a/services/book-store/Data/BookStoreEFCoreDbSchemaMigrator.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using Microsoft.EntityFrameworkCore;
-using Microsoft.Extensions.DependencyInjection;
-using System;
-using System.Threading.Tasks;
-using Volo.Abp.DependencyInjection;
-
-namespace BookStore.Data;
-
-public class BookStoreEFCoreDbSchemaMigrator : ITransientDependency
-{
- private readonly IServiceProvider _serviceProvider;
-
- public BookStoreEFCoreDbSchemaMigrator(
- IServiceProvider serviceProvider)
- {
- _serviceProvider = serviceProvider;
- }
-
- public async Task MigrateAsync()
- {
- /* We intentionally resolving the BookStoreDbContext
- * from IServiceProvider (instead of directly injecting it)
- * to properly get the connection string of the current tenant in the
- * current scope.
- */
-
- await _serviceProvider
- .GetRequiredService()
- .Database
- .MigrateAsync();
- }
-}
diff --git a/services/book-store/DataSeeder/BookStoreDataSeederWorker.cs b/services/book-store/DataSeeder/BookStoreDataSeederWorker.cs
new file mode 100644
index 0000000..e276861
--- /dev/null
+++ b/services/book-store/DataSeeder/BookStoreDataSeederWorker.cs
@@ -0,0 +1,21 @@
+using Microsoft.Extensions.Hosting;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp.Data;
+
+namespace BookStore.DataSeeder;
+
+public class BookStoreDataSeederWorker : BackgroundService
+{
+ protected IDataSeeder DataSeeder { get; }
+
+ public BookStoreDataSeederWorker(IDataSeeder dataSeeder)
+ {
+ DataSeeder = dataSeeder;
+ }
+
+ protected async override Task ExecuteAsync(CancellationToken stoppingToken)
+ {
+ await DataSeeder.SeedAsync();
+ }
+}
\ No newline at end of file
diff --git a/services/book-store/Localization/BookStore/ar.json b/services/book-store/Localization/BookStore/ar.json
deleted file mode 100644
index 1ee9453..0000000
--- a/services/book-store/Localization/BookStore/ar.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "ar",
- "texts": {
- "Welcome_Title": "مرحبا",
- "Welcome_Text": "هذا هو قالب بدء تشغيل تطبيق ذو طبقة واحدة مبسط لإطار عمل ABP.",
- "Menu:Home": "الرئيسية"
- }
-}
diff --git a/services/book-store/Localization/BookStore/cs.json b/services/book-store/Localization/BookStore/cs.json
deleted file mode 100644
index 524a48e..0000000
--- a/services/book-store/Localization/BookStore/cs.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "cs",
- "texts": {
- "Welcome_Title": "Vítejte",
- "Welcome_Text": "Toto je minimalistická šablona pro spuštění aplikace s jednou vrstvou pro ABP Framework.",
- "Menu:Home": "Úvod"
- }
-}
diff --git a/services/book-store/Localization/BookStore/de-DE.json b/services/book-store/Localization/BookStore/de-DE.json
deleted file mode 100644
index da374cd..0000000
--- a/services/book-store/Localization/BookStore/de-DE.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "de-DE",
- "texts": {
- "Welcome_Title": "Willkommen",
- "Welcome_Text": "Dies ist eine minimalistische, einschichtige Anwendungsstartvorlage für das ABP-Framework.",
- "Menu:Home": "Home"
- }
-}
diff --git a/services/book-store/Localization/BookStore/en-GB.json b/services/book-store/Localization/BookStore/en-GB.json
deleted file mode 100644
index cf24737..0000000
--- a/services/book-store/Localization/BookStore/en-GB.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "en-GB",
- "texts": {
- "Welcome_Title": "Welcome_Title",
- "Welcome_Text": "This is a minimalist, single layer application startup template for the ABP Framework.",
- "Menu:Home": "Home"
- }
-}
diff --git a/services/book-store/Localization/BookStore/es.json b/services/book-store/Localization/BookStore/es.json
deleted file mode 100644
index 6e138d3..0000000
--- a/services/book-store/Localization/BookStore/es.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "es",
- "texts": {
- "Welcome_Title": "Bienvenido",
- "Welcome_Text": "Esta es una plantilla de inicio de aplicación minimalista de una sola capa para ABP Framework.",
- "Menu:Home": "Inicio"
- }
-}
diff --git a/services/book-store/Localization/BookStore/fi.json b/services/book-store/Localization/BookStore/fi.json
deleted file mode 100644
index e963857..0000000
--- a/services/book-store/Localization/BookStore/fi.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "fi",
- "texts": {
- "Welcome_Title": "Tervetuloa",
- "Welcome_Text": "Tämä on minimalistinen yksikerroksinen sovelluksen käynnistysmalli ABP Frameworkille.",
- "Menu:Home": "Koti"
- }
-}
diff --git a/services/book-store/Localization/BookStore/fr.json b/services/book-store/Localization/BookStore/fr.json
deleted file mode 100644
index b2c2b62..0000000
--- a/services/book-store/Localization/BookStore/fr.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "fr",
- "texts": {
- "Welcome_Title": "Bienvenue",
- "Welcome_Text": "Il s'agit d'un modèle de démarrage d'application minimaliste à une seule couche pour le cadre ABP.",
- "Menu:Home": "Accueil"
- }
-}
diff --git a/services/book-store/Localization/BookStore/hi.json b/services/book-store/Localization/BookStore/hi.json
deleted file mode 100644
index ec16d65..0000000
--- a/services/book-store/Localization/BookStore/hi.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "hi",
- "texts": {
- "Welcome_Title": "स्वागत हे",
- "Welcome_Text": "यह एबीपी फ्रेमवर्क के लिए एक न्यूनतम, सिंगल लेयर एप्लिकेशन स्टार्टअप टेम्प्लेट है।",
- "Menu:Home": "घर"
- }
-}
diff --git a/services/book-store/Localization/BookStore/hu.json b/services/book-store/Localization/BookStore/hu.json
deleted file mode 100644
index fa6f372..0000000
--- a/services/book-store/Localization/BookStore/hu.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "hu",
- "texts": {
- "Welcome_Title": "Üdvözlöm",
- "Welcome_Text": "Ez egy minimalista, egyrétegű alkalmazásindítási sablon az ABP-keretrendszerhez.",
- "Menu:Home": "Kezdőlap"
- }
-}
diff --git a/services/book-store/Localization/BookStore/is.json b/services/book-store/Localization/BookStore/is.json
deleted file mode 100644
index 080c0ba..0000000
--- a/services/book-store/Localization/BookStore/is.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "is",
- "texts": {
- "Welcome_Title": "Velkomin",
- "Welcome_Text": "Þetta er lægstur, eins lags ræsingarsniðmát fyrir ABP Framework.",
- "Menu:Home": "Heim"
- }
-}
diff --git a/services/book-store/Localization/BookStore/it.json b/services/book-store/Localization/BookStore/it.json
deleted file mode 100644
index 57c3cf6..0000000
--- a/services/book-store/Localization/BookStore/it.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "it",
- "texts": {
- "Welcome_Title": "Benvenuto",
- "Welcome_Text": "Questo è un modello di avvio dell'applicazione minimalista a livello singolo per ABP Framework.",
- "Menu:Home": "Home"
- }
-}
diff --git a/services/book-store/Localization/BookStore/nl.json b/services/book-store/Localization/BookStore/nl.json
deleted file mode 100644
index 525ee02..0000000
--- a/services/book-store/Localization/BookStore/nl.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "nl",
- "texts": {
- "Welcome_Title": "Welkom",
- "Welcome_Text": "Dit is een minimalistische, enkellaagse applicatie-opstartsjabloon voor het ABP Framework.",
- "Menu:Home": "Home"
- }
-}
diff --git a/services/book-store/Localization/BookStore/pl-PL.json b/services/book-store/Localization/BookStore/pl-PL.json
deleted file mode 100644
index 2ebf70a..0000000
--- a/services/book-store/Localization/BookStore/pl-PL.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "pl-PL",
- "texts": {
- "Welcome_Title": "Witaj",
- "Welcome_Text": "Jest to minimalistyczny, jednowarstwowy szablon uruchamiania aplikacji dla ABP Framework.",
- "Menu:Home": "Home"
- }
-}
diff --git a/services/book-store/Localization/BookStore/pt-BR.json b/services/book-store/Localization/BookStore/pt-BR.json
deleted file mode 100644
index 96e45d3..0000000
--- a/services/book-store/Localization/BookStore/pt-BR.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "pt-BR",
- "texts": {
- "Welcome_Title": "Seja bem-vindo!",
- "Welcome_Text": "Este é um modelo de inicialização de aplicativo de camada única minimalista para o ABP Framework.",
- "Menu:Home": "Principal"
- }
-}
diff --git a/services/book-store/Localization/BookStore/ro-RO.json b/services/book-store/Localization/BookStore/ro-RO.json
deleted file mode 100644
index 48102a7..0000000
--- a/services/book-store/Localization/BookStore/ro-RO.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "ro-RO",
- "texts": {
- "Welcome_Title": "Bun venit",
- "Welcome_Text": "Acesta este un șablon de pornire a aplicației minimaliste, cu un singur strat, pentru Cadrul ABP.",
- "Menu:Home": "Acasă"
- }
-}
diff --git a/services/book-store/Localization/BookStore/ru.json b/services/book-store/Localization/BookStore/ru.json
deleted file mode 100644
index eb4cc96..0000000
--- a/services/book-store/Localization/BookStore/ru.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "ru",
- "texts": {
- "Welcome_Title": "Bine ati venit",
- "Welcome_Text": "Acesta este un șablon de pornire a aplicației minimaliste, cu un singur strat, pentru Cadrul ABP.",
- "Menu:Home": "Главная"
- }
-}
diff --git a/services/book-store/Localization/BookStore/sk.json b/services/book-store/Localization/BookStore/sk.json
deleted file mode 100644
index 227d0a7..0000000
--- a/services/book-store/Localization/BookStore/sk.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "sk",
- "texts": {
- "Welcome_Title": "Vitajte",
- "Welcome_Text": "Toto je minimalistická šablóna na spustenie aplikácie s jednou vrstvou pre rámec ABP.",
- "Menu:Home": "Domov"
- }
-}
diff --git a/services/book-store/Localization/BookStore/sl.json b/services/book-store/Localization/BookStore/sl.json
deleted file mode 100644
index 29876af..0000000
--- a/services/book-store/Localization/BookStore/sl.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "sl",
- "texts": {
- "Welcome_Title": "Dobrodošli",
- "Welcome_Text": "To je minimalistična enoslojna predloga za zagon aplikacije za ABP Framework.",
- "Menu:Home": "Domov"
- }
-}
diff --git a/services/book-store/Localization/BookStore/tr.json b/services/book-store/Localization/BookStore/tr.json
deleted file mode 100644
index 6cbdac7..0000000
--- a/services/book-store/Localization/BookStore/tr.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "tr",
- "texts": {
- "Welcome_Title": "Hoşgeldiniz",
- "Welcome_Text": "Bu proje tek katmanlı ABP uygulamaları yapmak için bir başlangıç şablonudur.",
- "Menu:Home": "Ana sayfa"
- }
-}
diff --git a/services/book-store/Localization/BookStore/vi.json b/services/book-store/Localization/BookStore/vi.json
deleted file mode 100644
index f2e55bd..0000000
--- a/services/book-store/Localization/BookStore/vi.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "vi",
- "texts": {
- "Welcome_Title": "Chào mừng bạn",
- "Welcome_Text": "Đây là một mẫu khởi động ứng dụng lớp đơn, tối giản cho ABP Framework.",
- "Menu:Home": "Trang chủ"
- }
-}
diff --git a/services/book-store/Localization/BookStore/zh-Hant.json b/services/book-store/Localization/BookStore/zh-Hant.json
deleted file mode 100644
index 7b4872c..0000000
--- a/services/book-store/Localization/BookStore/zh-Hant.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "culture": "zh-Hant",
- "texts": {
- "Welcome_Title": "歡迎",
- "Welcome_Text": "這是 ABP 框架的極簡單層應用程序啟動模板.",
- "Menu:Home": "首頁"
- }
-}
diff --git a/services/book-store/Migrations/20220501153835_Initlize.Designer.cs b/services/book-store/Migrations/20220501153835_Initlize.Designer.cs
new file mode 100644
index 0000000..55775ff
--- /dev/null
+++ b/services/book-store/Migrations/20220501153835_Initlize.Designer.cs
@@ -0,0 +1,2409 @@
+//
+using System;
+using BookStore.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using Volo.Abp.EntityFrameworkCore;
+
+#nullable disable
+
+namespace BookStore.Migrations
+{
+ [DbContext(typeof(BookStoreDbContext))]
+ [Migration("20220501153835_Initlize")]
+ partial class Initlize
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql)
+ .HasAnnotation("ProductVersion", "6.0.1")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Sanhe.Abp.LocalizationManagement.Language", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("CreationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uuid")
+ .HasColumnName("CreatorId");
+
+ b.Property("CultureName")
+ .IsRequired()
+ .HasMaxLength(20)
+ .HasColumnType("character varying(20)")
+ .HasColumnName("CultureName");
+
+ b.Property("DisplayName")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("DisplayName");
+
+ b.Property("Enable")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(true);
+
+ b.Property("FlagIcon")
+ .HasMaxLength(30)
+ .HasColumnType("character varying(30)")
+ .HasColumnName("FlagIcon");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uuid")
+ .HasColumnName("LastModifierId");
+
+ b.Property("UiCultureName")
+ .IsRequired()
+ .HasMaxLength(20)
+ .HasColumnType("character varying(20)")
+ .HasColumnName("UiCultureName");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CultureName");
+
+ b.ToTable("AbpLocalizationLanguages", (string)null);
+ });
+
+ modelBuilder.Entity("Sanhe.Abp.LocalizationManagement.Resource", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("CreationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uuid")
+ .HasColumnName("CreatorId");
+
+ b.Property("Description")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("Description");
+
+ b.Property("DisplayName")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("DisplayName");
+
+ b.Property("Enable")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(true);
+
+ b.Property("LastModificationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uuid")
+ .HasColumnName("LastModifierId");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(50)
+ .HasColumnType("character varying(50)")
+ .HasColumnName("Name");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name");
+
+ b.ToTable("AbpLocalizationResources", (string)null);
+ });
+
+ modelBuilder.Entity("Sanhe.Abp.LocalizationManagement.Text", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CultureName")
+ .IsRequired()
+ .HasMaxLength(20)
+ .HasColumnType("character varying(20)")
+ .HasColumnName("CultureName");
+
+ b.Property("Key")
+ .IsRequired()
+ .HasMaxLength(512)
+ .HasColumnType("character varying(512)")
+ .HasColumnName("Key");
+
+ b.Property("ResourceName")
+ .HasColumnType("text");
+
+ b.Property("Value")
+ .HasMaxLength(2048)
+ .HasColumnType("character varying(2048)")
+ .HasColumnName("Value");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Key");
+
+ b.ToTable("AbpLocalizationTexts", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ApplicationName")
+ .HasMaxLength(96)
+ .HasColumnType("character varying(96)")
+ .HasColumnName("ApplicationName");
+
+ b.Property("BrowserInfo")
+ .HasMaxLength(512)
+ .HasColumnType("character varying(512)")
+ .HasColumnName("BrowserInfo");
+
+ b.Property("ClientId")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("ClientId");
+
+ b.Property("ClientIpAddress")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("ClientIpAddress");
+
+ b.Property("ClientName")
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)")
+ .HasColumnName("ClientName");
+
+ b.Property("Comments")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("Comments");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CorrelationId")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("CorrelationId");
+
+ b.Property("Exceptions")
+ .HasColumnType("text");
+
+ b.Property("ExecutionDuration")
+ .HasColumnType("integer")
+ .HasColumnName("ExecutionDuration");
+
+ b.Property("ExecutionTime")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("text")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("HttpMethod")
+ .HasMaxLength(16)
+ .HasColumnType("character varying(16)")
+ .HasColumnName("HttpMethod");
+
+ b.Property("HttpStatusCode")
+ .HasColumnType("integer")
+ .HasColumnName("HttpStatusCode");
+
+ b.Property("ImpersonatorTenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("ImpersonatorTenantId");
+
+ b.Property("ImpersonatorTenantName")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("ImpersonatorTenantName");
+
+ b.Property("ImpersonatorUserId")
+ .HasColumnType("uuid")
+ .HasColumnName("ImpersonatorUserId");
+
+ b.Property("ImpersonatorUserName")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("ImpersonatorUserName");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.Property("TenantName")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("TenantName");
+
+ b.Property("Url")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("Url");
+
+ b.Property("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("UserId");
+
+ b.Property("UserName")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("UserName");
+
+ b.HasKey("Id");
+
+ b.HasIndex("TenantId", "ExecutionTime");
+
+ b.HasIndex("TenantId", "UserId", "ExecutionTime");
+
+ b.ToTable("AbpAuditLogs", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AuditLogId")
+ .HasColumnType("uuid")
+ .HasColumnName("AuditLogId");
+
+ b.Property("ExecutionDuration")
+ .HasColumnType("integer")
+ .HasColumnName("ExecutionDuration");
+
+ b.Property("ExecutionTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("ExecutionTime");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("text")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("MethodName")
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)")
+ .HasColumnName("MethodName");
+
+ b.Property("Parameters")
+ .HasMaxLength(2000)
+ .HasColumnType("character varying(2000)")
+ .HasColumnName("Parameters");
+
+ b.Property("ServiceName")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("ServiceName");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditLogId");
+
+ b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime");
+
+ b.ToTable("AbpAuditLogActions", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AuditLogId")
+ .HasColumnType("uuid")
+ .HasColumnName("AuditLogId");
+
+ b.Property("ChangeTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("ChangeTime");
+
+ b.Property("ChangeType")
+ .HasColumnType("smallint")
+ .HasColumnName("ChangeType");
+
+ b.Property("EntityId")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)")
+ .HasColumnName("EntityId");
+
+ b.Property("EntityTenantId")
+ .HasColumnType("uuid");
+
+ b.Property("EntityTypeFullName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)")
+ .HasColumnName("EntityTypeFullName");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("text")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditLogId");
+
+ b.HasIndex("TenantId", "EntityTypeFullName", "EntityId");
+
+ b.ToTable("AbpEntityChanges", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("EntityChangeId")
+ .HasColumnType("uuid");
+
+ b.Property("NewValue")
+ .HasMaxLength(512)
+ .HasColumnType("character varying(512)")
+ .HasColumnName("NewValue");
+
+ b.Property("OriginalValue")
+ .HasMaxLength(512)
+ .HasColumnType("character varying(512)")
+ .HasColumnName("OriginalValue");
+
+ b.Property("PropertyName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)")
+ .HasColumnName("PropertyName");
+
+ b.Property("PropertyTypeFullName")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("PropertyTypeFullName");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EntityChangeId");
+
+ b.ToTable("AbpEntityPropertyChanges", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.Property("ProviderKey")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)");
+
+ b.Property("ProviderName")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)");
+
+ b.Property("Value")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name", "ProviderName", "ProviderKey")
+ .IsUnique();
+
+ b.ToTable("AbpFeatureValues", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("Description")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("text")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsStatic")
+ .HasColumnType("boolean");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("Regex")
+ .HasMaxLength(512)
+ .HasColumnType("character varying(512)");
+
+ b.Property("RegexDescription")
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.Property("Required")
+ .HasColumnType("boolean");
+
+ b.Property("ValueType")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("AbpClaimTypes", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("SourceTenantId")
+ .HasColumnType("uuid");
+
+ b.Property("SourceUserId")
+ .HasColumnType("uuid");
+
+ b.Property("TargetTenantId")
+ .HasColumnType("uuid");
+
+ b.Property("TargetUserId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId")
+ .IsUnique();
+
+ b.ToTable("AbpLinkUsers", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("text")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDefault")
+ .HasColumnType("boolean")
+ .HasColumnName("IsDefault");
+
+ b.Property("IsPublic")
+ .HasColumnType("boolean")
+ .HasColumnName("IsPublic");
+
+ b.Property("IsStatic")
+ .HasColumnType("boolean")
+ .HasColumnName("IsStatic");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("NormalizedName")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedName");
+
+ b.ToTable("AbpRoles", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uuid");
+
+ b.Property("ClaimType")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("ClaimValue")
+ .HasMaxLength(1024)
+ .HasColumnType("character varying(1024)");
+
+ b.Property("RoleId")
+ .HasColumnType("uuid");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AbpRoleClaims", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Action")
+ .HasMaxLength(96)
+ .HasColumnType("character varying(96)");
+
+ b.Property("ApplicationName")
+ .HasMaxLength(96)
+ .HasColumnType("character varying(96)");
+
+ b.Property("BrowserInfo")
+ .HasMaxLength(512)
+ .HasColumnType("character varying(512)");
+
+ b.Property("ClientId")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)");
+
+ b.Property("ClientIpAddress")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CorrelationId")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)");
+
+ b.Property("CreationTime")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("text")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("Identity")
+ .HasMaxLength(96)
+ .HasColumnType("character varying(96)");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.Property("TenantName")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)");
+
+ b.Property("UserId")
+ .HasColumnType("uuid");
+
+ b.Property("UserName")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("TenantId", "Action");
+
+ b.HasIndex("TenantId", "ApplicationName");
+
+ b.HasIndex("TenantId", "Identity");
+
+ b.HasIndex("TenantId", "UserId");
+
+ b.ToTable("AbpSecurityLogs", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AccessFailedCount")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(0)
+ .HasColumnName("AccessFailedCount");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uuid")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("uuid")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("DeletionTime");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("Email");
+
+ b.Property("EmailConfirmed")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false)
+ .HasColumnName("EmailConfirmed");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("text")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsActive")
+ .HasColumnType("boolean");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("IsExternal")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false)
+ .HasColumnName("IsExternal");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uuid")
+ .HasColumnName("LastModifierId");
+
+ b.Property("LockoutEnabled")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false)
+ .HasColumnName("LockoutEnabled");
+
+ b.Property("LockoutEnd")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Name")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("Name");
+
+ b.Property("NormalizedEmail")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("NormalizedEmail");
+
+ b.Property("NormalizedUserName")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("NormalizedUserName");
+
+ b.Property("PasswordHash")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("PasswordHash");
+
+ b.Property("PhoneNumber")
+ .HasMaxLength(16)
+ .HasColumnType("character varying(16)")
+ .HasColumnName("PhoneNumber");
+
+ b.Property("PhoneNumberConfirmed")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false)
+ .HasColumnName("PhoneNumberConfirmed");
+
+ b.Property("SecurityStamp")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("SecurityStamp");
+
+ b.Property("Surname")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)")
+ .HasColumnName("Surname");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.Property("TwoFactorEnabled")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false)
+ .HasColumnName("TwoFactorEnabled");
+
+ b.Property("UserName")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)")
+ .HasColumnName("UserName");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Email");
+
+ b.HasIndex("NormalizedEmail");
+
+ b.HasIndex("NormalizedUserName");
+
+ b.HasIndex("UserName");
+
+ b.ToTable("AbpUsers", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uuid");
+
+ b.Property("ClaimType")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("ClaimValue")
+ .HasMaxLength(1024)
+ .HasColumnType("character varying(1024)");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.Property("UserId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AbpUserClaims", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uuid");
+
+ b.Property("LoginProvider")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)");
+
+ b.Property("ProviderDisplayName")
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.Property("ProviderKey")
+ .IsRequired()
+ .HasMaxLength(196)
+ .HasColumnType("character varying(196)");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.HasKey("UserId", "LoginProvider");
+
+ b.HasIndex("LoginProvider", "ProviderKey");
+
+ b.ToTable("AbpUserLogins", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b =>
+ {
+ b.Property("OrganizationUnitId")
+ .HasColumnType("uuid");
+
+ b.Property("UserId")
+ .HasColumnType("uuid");
+
+ b.Property("CreationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uuid")
+ .HasColumnName("CreatorId");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.HasKey("OrganizationUnitId", "UserId");
+
+ b.HasIndex("UserId", "OrganizationUnitId");
+
+ b.ToTable("AbpUserOrganizationUnits", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uuid");
+
+ b.Property("RoleId")
+ .HasColumnType("uuid");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.HasKey("UserId", "RoleId");
+
+ b.HasIndex("RoleId", "UserId");
+
+ b.ToTable("AbpUserRoles", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("uuid");
+
+ b.Property("LoginProvider")
+ .HasMaxLength(64)
+ .HasColumnType("character varying(64)");
+
+ b.Property("Name")
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.Property("Value")
+ .HasColumnType("text");
+
+ b.HasKey("UserId", "LoginProvider", "Name");
+
+ b.ToTable("AbpUserTokens", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Code")
+ .IsRequired()
+ .HasMaxLength(95)
+ .HasColumnType("character varying(95)")
+ .HasColumnName("Code");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uuid")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("uuid")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("DeletionTime");
+
+ b.Property("DisplayName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)")
+ .HasColumnName("DisplayName");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("text")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uuid")
+ .HasColumnName("LastModifierId");
+
+ b.Property("ParentId")
+ .HasColumnType("uuid");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Code");
+
+ b.HasIndex("ParentId");
+
+ b.ToTable("AbpOrganizationUnits", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b =>
+ {
+ b.Property("OrganizationUnitId")
+ .HasColumnType("uuid");
+
+ b.Property("RoleId")
+ .HasColumnType("uuid");
+
+ b.Property("CreationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uuid")
+ .HasColumnName("CreatorId");
+
+ b.Property("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("TenantId");
+
+ b.HasKey("OrganizationUnitId", "RoleId");
+
+ b.HasIndex("RoleId", "OrganizationUnitId");
+
+ b.ToTable("AbpOrganizationUnitRoles", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AllowedAccessTokenSigningAlgorithms")
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uuid")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("uuid")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("DeletionTime");
+
+ b.Property("Description")
+ .HasMaxLength(1000)
+ .HasColumnType("character varying(1000)");
+
+ b.Property("DisplayName")
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.Property("Enabled")
+ .HasColumnType("boolean");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("text")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uuid")
+ .HasColumnName("LastModifierId");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.Property("ShowInDiscoveryDocument")
+ .HasColumnType("boolean");
+
+ b.HasKey("Id");
+
+ b.ToTable("IdentityServerApiResources", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uuid");
+
+ b.Property("Type")
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.HasKey("ApiResourceId", "Type");
+
+ b.ToTable("IdentityServerApiResourceClaims", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceProperty", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uuid");
+
+ b.Property("Key")
+ .HasMaxLength(250)
+ .HasColumnType("character varying(250)");
+
+ b.Property("Value")
+ .HasMaxLength(2000)
+ .HasColumnType("character varying(2000)");
+
+ b.HasKey("ApiResourceId", "Key", "Value");
+
+ b.ToTable("IdentityServerApiResourceProperties", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceScope", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uuid");
+
+ b.Property("Scope")
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.HasKey("ApiResourceId", "Scope");
+
+ b.ToTable("IdentityServerApiResourceScopes", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceSecret", b =>
+ {
+ b.Property("ApiResourceId")
+ .HasColumnType("uuid");
+
+ b.Property("Type")
+ .HasMaxLength(250)
+ .HasColumnType("character varying(250)");
+
+ b.Property("Value")
+ .HasMaxLength(4000)
+ .HasColumnType("character varying(4000)");
+
+ b.Property("Description")
+ .HasMaxLength(1000)
+ .HasColumnType("character varying(1000)");
+
+ b.Property("Expiration")
+ .HasColumnType("timestamp without time zone");
+
+ b.HasKey("ApiResourceId", "Type", "Value");
+
+ b.ToTable("IdentityServerApiResourceSecrets", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiScopes.ApiScope", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("character varying(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uuid")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("uuid")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("DeletionTime");
+
+ b.Property("Description")
+ .HasMaxLength(1000)
+ .HasColumnType("character varying(1000)");
+
+ b.Property("DisplayName")
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.Property("Emphasize")
+ .HasColumnType("boolean");
+
+ b.Property("Enabled")
+ .HasColumnType("boolean");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("text")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("timestamp without time zone")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uuid")
+ .HasColumnName("LastModifierId");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.Property("Required")
+ .HasColumnType("boolean");
+
+ b.Property("ShowInDiscoveryDocument")
+ .HasColumnType("boolean");
+
+ b.HasKey("Id");
+
+ b.ToTable("IdentityServerApiScopes", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiScopes.ApiScopeClaim", b =>
+ {
+ b.Property("ApiScopeId")
+ .HasColumnType("uuid");
+
+ b.Property("Type")
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.HasKey("ApiScopeId", "Type");
+
+ b.ToTable("IdentityServerApiScopeClaims", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiScopes.ApiScopeProperty", b =>
+ {
+ b.Property("ApiScopeId")
+ .HasColumnType("uuid");
+
+ b.Property("Key")
+ .HasMaxLength(250)
+ .HasColumnType("character varying(250)");
+
+ b.Property("Value")
+ .HasMaxLength(2000)
+ .HasColumnType("character varying(2000)");
+
+ b.HasKey("ApiScopeId", "Key", "Value");
+
+ b.ToTable("IdentityServerApiScopeProperties", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property