diff --git a/KonSoft.sln.DotSettings b/KonSoft.sln.DotSettings index cb0b2c9..cffb367 100644 --- a/KonSoft.sln.DotSettings +++ b/KonSoft.sln.DotSettings @@ -20,4 +20,5 @@ False False SQL + True \ No newline at end of file diff --git a/applications/KonSoft.AuthServer/Dockerfile b/applications/KonSoft.AuthServer/Dockerfile index e3d23a4..ef44ab6 100644 --- a/applications/KonSoft.AuthServer/Dockerfile +++ b/applications/KonSoft.AuthServer/Dockerfile @@ -5,6 +5,16 @@ EXPOSE 8081 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release +ARG NODE_VERSION=16.13.0 +ARG YARN_VERSION=1.22.15 +RUN apt-get update -yq \ + && apt-get install -yq curl gnupg \ + && curl -sL https://deb.nodesource.com/setup_16.x | bash - \ + && apt-get install -yq nodejs \ + && npm install -g yarn@${YARN_VERSION} \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["NuGet.Config", "."] COPY ["applications/KonSoft.AuthServer/KonSoft.AuthServer.csproj", "applications/KonSoft.AuthServer/"] @@ -15,6 +25,9 @@ COPY ["shared/KonSoft.Shared.Localization/KonSoft.Shared.Localization.csproj", " RUN dotnet restore "./applications/KonSoft.AuthServer/KonSoft.AuthServer.csproj" COPY . . WORKDIR "/src/applications/KonSoft.AuthServer" +RUN dotnet tool install -g Volo.Abp.Cli \ + && export PATH="$PATH:/root/.dotnet/tools" \ + && abp install-libs RUN dotnet build "./KonSoft.AuthServer.csproj" -c $BUILD_CONFIGURATION -o /app/build # 此阶段用于发布要复制到最终阶段的服务项目 diff --git a/applications/KonSoft.AuthServer/KonSoftAuthServerModule.cs b/applications/KonSoft.AuthServer/KonSoftAuthServerModule.cs index 171c3b1..7529a65 100644 --- a/applications/KonSoft.AuthServer/KonSoftAuthServerModule.cs +++ b/applications/KonSoft.AuthServer/KonSoftAuthServerModule.cs @@ -26,7 +26,7 @@ namespace KonSoft; typeof(AbpAccountApplicationModule), typeof(AbpAccountHttpApiModule), typeof(KonSoftSharedHostingMicroservicesModule) - )] +)] public class KonSoftAuthServerModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) @@ -53,7 +53,8 @@ public class KonSoftAuthServerModule : AbpModule PreConfigure(serverBuilder => { - serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "59464dba-b66e-48cd-8b81-2e4a9c08c977"); + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", + "59464dba-b66e-48cd-8b81-2e4a9c08c977"); }); } } @@ -77,23 +78,17 @@ public class KonSoftAuthServerModule : AbpModule { options.StyleBundles.Configure( BasicThemeBundles.Styles.Global, - bundle => - { - bundle.AddFiles("/global-styles.css"); - } + bundle => { bundle.AddFiles("/global-styles.css"); } ); }); Configure(options => { - options.IsEnabledForGetRequests = true; - options.ApplicationName = "AuthServer"; + options.IsEnabledForGetRequests = true; + options.ApplicationName = "AuthServer"; }); - Configure(options => - { - options.IsJobExecutionEnabled = false; - }); + Configure(options => { options.IsJobExecutionEnabled = false; }); context.Services.Configure(options => { @@ -138,4 +133,4 @@ public class KonSoftAuthServerModule : AbpModule app.UseAbpSerilogEnrichers(); app.UseConfiguredEndpoints(); } -} +} \ No newline at end of file diff --git a/applications/KonSoft.AuthServer/KonSoftBrandingProvider.cs b/applications/KonSoft.AuthServer/KonSoftBrandingProvider.cs index 56858dd..5721aed 100644 --- a/applications/KonSoft.AuthServer/KonSoftBrandingProvider.cs +++ b/applications/KonSoft.AuthServer/KonSoftBrandingProvider.cs @@ -8,7 +8,7 @@ namespace KonSoft; [Dependency(ReplaceServices = true)] public class KonSoftBrandingProvider : DefaultBrandingProvider { - private IStringLocalizer _localizer; + private readonly IStringLocalizer _localizer; public KonSoftBrandingProvider(IStringLocalizer localizer) { @@ -16,4 +16,4 @@ public class KonSoftBrandingProvider : DefaultBrandingProvider } public override string AppName => _localizer["AppName"]; -} +} \ No newline at end of file diff --git a/applications/KonSoft.AuthServer/Pages/Index.cshtml b/applications/KonSoft.AuthServer/Pages/Index.cshtml index 100f64a..6b961e2 100644 --- a/applications/KonSoft.AuthServer/Pages/Index.cshtml +++ b/applications/KonSoft.AuthServer/Pages/Index.cshtml @@ -1,12 +1,13 @@ @page +@using System.Net +@using KonSoft.Shared.Localization.Localization @using Microsoft.AspNetCore.Http.Extensions @using Microsoft.AspNetCore.Mvc.Localization -@using KonSoft.Pages -@using KonSoft.Shared.Localization.Localization -@using Volo.Abp.Users +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Grid @using Volo.Abp.AspNetCore.Mvc.UI.Theming @using Volo.Abp.Ui.Branding -@model IndexModel +@using Volo.Abp.Users +@model KonSoft.Pages.IndexModel @inject IHtmlLocalizer L @inject ICurrentUser CurrentUser @inject IBrandingProvider BrandingProvider @@ -45,32 +46,32 @@ - - @if (CurrentUser.IsAuthenticated) - { - - @L["MyAccount"] - @L["Logout"] - - } - else - { - @L["Login"] - } - + + @if (CurrentUser.IsAuthenticated) + { + + @L["MyAccount"] + @L["Logout"] + + } + else + { + @L["Login"] + } + - - @if (@Model.Languages != null) + + @if (Model.Languages != null) { @foreach (var language in Model.Languages) { - var languageUrl = Url.Content($"~/Abp/Languages/Switch?culture={language.CultureName}&uiCulture={language.UiCultureName}&returnUrl={System.Net.WebUtility.UrlEncode(Request.GetEncodedPathAndQuery())}"); + var languageUrl = Url.Content($"~/Abp/Languages/Switch?culture={language.CultureName}&uiCulture={language.UiCultureName}&returnUrl={WebUtility.UrlEncode(Request.GetEncodedPathAndQuery())}"); @language.DisplayName } @@ -82,18 +83,18 @@ @if (Model.Applications != null) { - + @foreach (var application in Model.Applications) { - + - @{ - var clientUri = application.ClientUri.Contains("Swagger") ? application.ClientUri.EnsureEndsWith('/') + "swagger/index.html" : application.ClientUri; + @{ + var clientUri = application.ClientUri.Contains("Swagger") ? application.ClientUri.EnsureEndsWith('/') + "swagger/index.html" : application.ClientUri; } - + @if (!application.LogoUri.IsNullOrEmpty()) { @@ -115,4 +116,4 @@ - + \ No newline at end of file diff --git a/applications/KonSoft.AuthServer/Pages/Index.cshtml.cs b/applications/KonSoft.AuthServer/Pages/Index.cshtml.cs index cfa19b7..fa752ca 100644 --- a/applications/KonSoft.AuthServer/Pages/Index.cshtml.cs +++ b/applications/KonSoft.AuthServer/Pages/Index.cshtml.cs @@ -9,6 +9,12 @@ namespace KonSoft.Pages; public class IndexModel : AbpPageModel { + public IndexModel(IOpenIddictApplicationRepository openIdApplicationRepository, ILanguageProvider languageProvider) + { + OpenIdApplicationRepository = openIdApplicationRepository; + LanguageProvider = languageProvider; + } + public List? Applications { get; protected set; } public IReadOnlyList? Languages { get; protected set; } @@ -19,12 +25,6 @@ public class IndexModel : AbpPageModel protected ILanguageProvider LanguageProvider { get; } - public IndexModel(IOpenIddictApplicationRepository openIdApplicationRepository, ILanguageProvider languageProvider) - { - OpenIdApplicationRepository = openIdApplicationRepository; - LanguageProvider = languageProvider; - } - public async Task OnGetAsync() { Applications = await OpenIdApplicationRepository.GetListAsync(); @@ -32,4 +32,4 @@ public class IndexModel : AbpPageModel Languages = await LanguageProvider.GetLanguagesAsync(); CurrentLanguage = CultureInfo.CurrentCulture.DisplayName; } -} +} \ No newline at end of file diff --git a/applications/KonSoft.AuthServer/Program.cs b/applications/KonSoft.AuthServer/Program.cs index 3431a6e..0622452 100644 --- a/applications/KonSoft.AuthServer/Program.cs +++ b/applications/KonSoft.AuthServer/Program.cs @@ -10,7 +10,7 @@ namespace KonSoft; public class Program { - public async static Task Main(string[] args) + public static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() #if DEBUG @@ -53,4 +53,4 @@ public class Program Log.CloseAndFlush(); } } -} +} \ No newline at end of file diff --git a/applications/KonSoft.AuthServer/web.config b/applications/KonSoft.AuthServer/web.config index a0bbf07..f3ab5f0 100644 --- a/applications/KonSoft.AuthServer/web.config +++ b/applications/KonSoft.AuthServer/web.config @@ -1,18 +1,20 @@ + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/applications/KonSoft.BackgroundJobs/Controllers/WeatherForecastController.cs b/applications/KonSoft.BackgroundJobs/Controllers/WeatherForecastController.cs index c3d2a1d..2d04686 100644 --- a/applications/KonSoft.BackgroundJobs/Controllers/WeatherForecastController.cs +++ b/applications/KonSoft.BackgroundJobs/Controllers/WeatherForecastController.cs @@ -1,33 +1,32 @@ using Microsoft.AspNetCore.Mvc; -namespace KonSoft.BackgroundJobs.Controllers +namespace KonSoft.BackgroundJobs.Controllers; + +[ApiController] +[Route("[controller]")] +public class WeatherForecastController : ControllerBase { - [ApiController] - [Route("[controller]")] - public class WeatherForecastController : ControllerBase + private static readonly string[] Summaries = + [ + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + ]; + + private readonly ILogger _logger; + + public WeatherForecastController(ILogger logger) { - private static readonly string[] Summaries = - [ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - ]; + _logger = logger; + } - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast + [HttpGet(Name = "GetWeatherForecast")] + public IEnumerable Get() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); - } } -} +} \ No newline at end of file diff --git a/applications/KonSoft.BackgroundJobs/Program.cs b/applications/KonSoft.BackgroundJobs/Program.cs index 48863a6..8264bac 100644 --- a/applications/KonSoft.BackgroundJobs/Program.cs +++ b/applications/KonSoft.BackgroundJobs/Program.cs @@ -22,4 +22,4 @@ app.UseAuthorization(); app.MapControllers(); -app.Run(); +app.Run(); \ No newline at end of file diff --git a/applications/KonSoft.BackgroundJobs/WeatherForecast.cs b/applications/KonSoft.BackgroundJobs/WeatherForecast.cs index 95cf6dc..46a479e 100644 --- a/applications/KonSoft.BackgroundJobs/WeatherForecast.cs +++ b/applications/KonSoft.BackgroundJobs/WeatherForecast.cs @@ -1,13 +1,12 @@ -namespace KonSoft.BackgroundJobs +namespace KonSoft.BackgroundJobs; + +public class WeatherForecast { - public class WeatherForecast - { - public DateOnly Date { get; set; } + public DateOnly Date { get; set; } - public int TemperatureC { get; set; } + public int TemperatureC { get; set; } - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - public string? Summary { get; set; } - } -} + public string? Summary { get; set; } +} \ No newline at end of file diff --git a/applications/KonSoft.BackgroundWorker/Controllers/WeatherForecastController.cs b/applications/KonSoft.BackgroundWorker/Controllers/WeatherForecastController.cs index b2fde33..b394e24 100644 --- a/applications/KonSoft.BackgroundWorker/Controllers/WeatherForecastController.cs +++ b/applications/KonSoft.BackgroundWorker/Controllers/WeatherForecastController.cs @@ -1,33 +1,32 @@ using Microsoft.AspNetCore.Mvc; -namespace KonSoft.BackgroundWorker.Controllers +namespace KonSoft.BackgroundWorker.Controllers; + +[ApiController] +[Route("[controller]")] +public class WeatherForecastController : ControllerBase { - [ApiController] - [Route("[controller]")] - public class WeatherForecastController : ControllerBase + private static readonly string[] Summaries = + [ + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + ]; + + private readonly ILogger _logger; + + public WeatherForecastController(ILogger logger) { - private static readonly string[] Summaries = - [ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - ]; + _logger = logger; + } - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast + [HttpGet(Name = "GetWeatherForecast")] + public IEnumerable Get() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); - } } -} +} \ No newline at end of file diff --git a/applications/KonSoft.BackgroundWorker/Program.cs b/applications/KonSoft.BackgroundWorker/Program.cs index 48863a6..8264bac 100644 --- a/applications/KonSoft.BackgroundWorker/Program.cs +++ b/applications/KonSoft.BackgroundWorker/Program.cs @@ -22,4 +22,4 @@ app.UseAuthorization(); app.MapControllers(); -app.Run(); +app.Run(); \ No newline at end of file diff --git a/applications/KonSoft.BackgroundWorker/WeatherForecast.cs b/applications/KonSoft.BackgroundWorker/WeatherForecast.cs index 8a9a070..2d7f56f 100644 --- a/applications/KonSoft.BackgroundWorker/WeatherForecast.cs +++ b/applications/KonSoft.BackgroundWorker/WeatherForecast.cs @@ -1,13 +1,12 @@ -namespace KonSoft.BackgroundWorker +namespace KonSoft.BackgroundWorker; + +public class WeatherForecast { - public class WeatherForecast - { - public DateOnly Date { get; set; } + public DateOnly Date { get; set; } - public int TemperatureC { get; set; } + public int TemperatureC { get; set; } - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - public string? Summary { get; set; } - } -} + public string? Summary { get; set; } +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..20b53c4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +services: + internalgateways: + container_name: clean-internalgateways + restart: always + build: + context: . + dockerfile: ./gateways/KonSoft.InternalGateway/Dockerfile + environment: + - ASPNETCORE_ENVIRONMENT=Test + - AgileConfig__AppId=KonSoft.InternalGateway + - AgileConfig__Name=KonSoft.InternalGateway + - AgileConfig__Nodes=https://config.konsoft.top/ + - AgileConfig__Secret=DBE31703-14F9-4B01-893D-900B8380CE04 + + authserver: + container_name: clean-authserver + restart: always + build: + context: . + dockerfile: ./applications/KonSoft.AuthServer/Dockerfile + environment: + - ASPNETCORE_ENVIRONMENT=Test + - AgileConfig__AppId=KonSoft.AuthServer + - AgileConfig__Name=KonSoft.AuthServer + - AgileConfig__Nodes=https://config.konsoft.top/ + - AgileConfig__Secret=DBE31703-14F9-4B01-893D-900B8380CE04 + + adminservice: + container_name: clean-adminservice + restart: always + build: + context: . + dockerfile: ./microservices/KonSoft.Admin.HttpApi.Host/Dockerfile + environment: + - ASPNETCORE_ENVIRONMENT=Test + - AgileConfig__AppId=KonSoft.Admin.HttpApi.Host + - AgileConfig__Name=KonSoft.Admin.HttpApi.Host + - AgileConfig__Nodes=https://config.konsoft.top/ + - AgileConfig__Secret=DBE31703-14F9-4B01-893D-900B8380CE04 \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Controllers/WeatherForecastController.cs b/gateways/KonSoft.InternalGateway/Controllers/WeatherForecastController.cs deleted file mode 100644 index 525870b..0000000 --- a/gateways/KonSoft.InternalGateway/Controllers/WeatherForecastController.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace KonSoft.InternalGateway.Controllers -{ - [ApiController] - [Route("[controller]")] - public class WeatherForecastController : ControllerBase - { - private static readonly string[] Summaries = - [ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - ]; - - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }) - .ToArray(); - } - } -} diff --git a/gateways/KonSoft.InternalGateway/Dockerfile b/gateways/KonSoft.InternalGateway/Dockerfile new file mode 100644 index 0000000..19e12f9 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/Dockerfile @@ -0,0 +1,29 @@ +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +USER $APP_UID +WORKDIR /app +EXPOSE 8080 +EXPOSE 8081 + + +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["NuGet.Config", "."] +COPY ["gateways/KonSoft.InternalGateway/KonSoft.InternalGateway.csproj", "gateways/KonSoft.InternalGateway/"] +COPY ["shared/KonSoft.Shared.Hosting.Gateways/KonSoft.Shared.Hosting.Gateways.csproj", "shared/KonSoft.Shared.Hosting.Gateways/"] +COPY ["shared/KonSoft.Shared.Hosting.AspNetCore/KonSoft.Shared.Hosting.AspNetCore.csproj", "shared/KonSoft.Shared.Hosting.AspNetCore/"] +COPY ["shared/KonSoft.Shared.Hosting/KonSoft.Shared.Hosting.csproj", "shared/KonSoft.Shared.Hosting/"] +COPY ["shared/KonSoft.Shared.Localization/KonSoft.Shared.Localization.csproj", "shared/KonSoft.Shared.Localization/"] +RUN dotnet restore "./gateways/KonSoft.InternalGateway/KonSoft.InternalGateway.csproj" +COPY . . +WORKDIR "/src/gateways/KonSoft.InternalGateway" +RUN dotnet build "./KonSoft.InternalGateway.csproj" -c $BUILD_CONFIGURATION -o /app/build + +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./KonSoft.InternalGateway.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "KonSoft.InternalGateway.dll"] \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/InternalGatewayModule.cs b/gateways/KonSoft.InternalGateway/InternalGatewayModule.cs new file mode 100644 index 0000000..f046065 --- /dev/null +++ b/gateways/KonSoft.InternalGateway/InternalGatewayModule.cs @@ -0,0 +1,17 @@ +using KonSoft.Shared.Hosting.Gateways; +using Volo.Abp; +using Volo.Abp.Modularity; + +namespace KonSoft.InternalGateway +{ + [DependsOn( + typeof(KonSoftSharedHostingGatewaysModule) + )] + public class InternalGatewayModule : AbpModule + { + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + + } + } +} diff --git a/gateways/KonSoft.InternalGateway/KonSoft.InternalGateway.csproj b/gateways/KonSoft.InternalGateway/KonSoft.InternalGateway.csproj index 5419ef0..4bd0fa3 100644 --- a/gateways/KonSoft.InternalGateway/KonSoft.InternalGateway.csproj +++ b/gateways/KonSoft.InternalGateway/KonSoft.InternalGateway.csproj @@ -4,10 +4,18 @@ net8.0 enable enable + 98521e87-fe4a-4555-8c3b-e83559a64e03 + Linux + ..\.. - + + + + + + diff --git a/gateways/KonSoft.InternalGateway/Program.cs b/gateways/KonSoft.InternalGateway/Program.cs index 48863a6..ae03f33 100644 --- a/gateways/KonSoft.InternalGateway/Program.cs +++ b/gateways/KonSoft.InternalGateway/Program.cs @@ -1,25 +1,37 @@ -var builder = WebApplication.CreateBuilder(args); +using KonSoft.InternalGateway; +using KonSoft.Shared.Hosting.AspNetCore; +using Serilog; -// Add services to the container. +var assemblyName = typeof(Program).Assembly.GetName().Name!; +SerilogConfigurationHelper.Configure(assemblyName); -builder.Services.AddControllers(); -// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); - -var app = builder.Build(); - -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) +try { - app.UseSwagger(); - app.UseSwaggerUI(); + var builder = WebApplication.CreateBuilder(args); + builder.Configuration + .AddAgileConfig(option => + { + option.ENV = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Development"; + }); + builder.Host + .AddAppSettingsSecretsJson() + .UseAutofac() + .UseSerilog(); + builder.Services.AddReverseProxy() + .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")); + await builder.AddApplicationAsync(); + var app = builder.Build(); + await app.InitializeApplicationAsync(); + await app.RunAsync(); + + return 0; } - -app.UseHttpsRedirection(); - -app.UseAuthorization(); - -app.MapControllers(); - -app.Run(); +catch (Exception ex) +{ + Log.Fatal(ex, $"{assemblyName} terminated unexpectedly!"); + return 1; +} +finally +{ + await Log.CloseAndFlushAsync(); +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/Properties/launchSettings.json b/gateways/KonSoft.InternalGateway/Properties/launchSettings.json index 407c599..ed7fdeb 100644 --- a/gateways/KonSoft.InternalGateway/Properties/launchSettings.json +++ b/gateways/KonSoft.InternalGateway/Properties/launchSettings.json @@ -1,33 +1,24 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:15968", - "sslPort": 44395 - } - }, +{ "profiles": { "http": { "commandName": "Project", - "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", - "applicationUrl": "http://localhost:5090", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" - } + }, + "dotnetRunMessages": true, + "applicationUrl": "http://localhost:5090" }, "https": { "commandName": "Project", - "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", - "applicationUrl": "https://localhost:7264;http://localhost:5090", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" - } + }, + "dotnetRunMessages": true, + "applicationUrl": "https://localhost:7264;http://localhost:5090" }, "IIS Express": { "commandName": "IISExpress", @@ -36,6 +27,26 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } + }, + "Container (Dockerfile)": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger", + "environmentVariables": { + "ASPNETCORE_HTTPS_PORTS": "8081", + "ASPNETCORE_HTTP_PORTS": "8080" + }, + "publishAllPorts": true, + "useSSL": true + } + }, + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:15968", + "sslPort": 44395 } } -} +} \ No newline at end of file diff --git a/gateways/KonSoft.InternalGateway/WeatherForecast.cs b/gateways/KonSoft.InternalGateway/WeatherForecast.cs deleted file mode 100644 index 3905db0..0000000 --- a/gateways/KonSoft.InternalGateway/WeatherForecast.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace KonSoft.InternalGateway -{ - public class WeatherForecast - { - public DateOnly Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } - } -} diff --git a/gateways/KonSoft.InternalGateway/appsettings.json b/gateways/KonSoft.InternalGateway/appsettings.json index 10f68b8..8b93288 100644 --- a/gateways/KonSoft.InternalGateway/appsettings.json +++ b/gateways/KonSoft.InternalGateway/appsettings.json @@ -1,9 +1,8 @@ { - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" + "AgileConfig": { + "appId": "KonSoft.InternalGateway", + "name": "KonSoft.InternalGateway", + "nodes": "https://config.konsoft.top/", + "secret": "DBE31703-14F9-4B01-893D-900B8380CE04" + } } diff --git a/gateways/KonSoft.PublicGateway/Controllers/WeatherForecastController.cs b/gateways/KonSoft.PublicGateway/Controllers/WeatherForecastController.cs index 1af2048..4eee9a9 100644 --- a/gateways/KonSoft.PublicGateway/Controllers/WeatherForecastController.cs +++ b/gateways/KonSoft.PublicGateway/Controllers/WeatherForecastController.cs @@ -1,33 +1,32 @@ using Microsoft.AspNetCore.Mvc; -namespace KonSoft.PublicGateway.Controllers +namespace KonSoft.PublicGateway.Controllers; + +[ApiController] +[Route("[controller]")] +public class WeatherForecastController : ControllerBase { - [ApiController] - [Route("[controller]")] - public class WeatherForecastController : ControllerBase + private static readonly string[] Summaries = + [ + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + ]; + + private readonly ILogger _logger; + + public WeatherForecastController(ILogger logger) { - private static readonly string[] Summaries = - [ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - ]; + _logger = logger; + } - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast + [HttpGet(Name = "GetWeatherForecast")] + public IEnumerable Get() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); - } } -} +} \ No newline at end of file diff --git a/gateways/KonSoft.PublicGateway/Program.cs b/gateways/KonSoft.PublicGateway/Program.cs index 48863a6..8264bac 100644 --- a/gateways/KonSoft.PublicGateway/Program.cs +++ b/gateways/KonSoft.PublicGateway/Program.cs @@ -22,4 +22,4 @@ app.UseAuthorization(); app.MapControllers(); -app.Run(); +app.Run(); \ No newline at end of file diff --git a/gateways/KonSoft.PublicGateway/WeatherForecast.cs b/gateways/KonSoft.PublicGateway/WeatherForecast.cs index 2577b66..6784d2b 100644 --- a/gateways/KonSoft.PublicGateway/WeatherForecast.cs +++ b/gateways/KonSoft.PublicGateway/WeatherForecast.cs @@ -1,13 +1,12 @@ -namespace KonSoft.PublicGateway +namespace KonSoft.PublicGateway; + +public class WeatherForecast { - public class WeatherForecast - { - public DateOnly Date { get; set; } + public DateOnly Date { get; set; } - public int TemperatureC { get; set; } + public int TemperatureC { get; set; } - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - public string? Summary { get; set; } - } -} + public string? Summary { get; set; } +} \ No newline at end of file diff --git a/microservices/KonSoft.Admin.HttpApi.Host/AdminHttpApiHostModule.cs b/microservices/KonSoft.Admin.HttpApi.Host/AdminHttpApiHostModule.cs index f142e0c..3f2fc14 100644 --- a/microservices/KonSoft.Admin.HttpApi.Host/AdminHttpApiHostModule.cs +++ b/microservices/KonSoft.Admin.HttpApi.Host/AdminHttpApiHostModule.cs @@ -23,9 +23,9 @@ public class AdminHttpApiHostModule : AbpModule var configuration = context.Services.GetConfiguration(); SwaggerConfigurationHelper.ConfigureWithOidc( - context: context, - authority: configuration["AuthServer:Authority"]!, - scopes: ["AdministrationService"], + context, + configuration["AuthServer:Authority"]!, + ["AdministrationService"], discoveryEndpoint: configuration["AuthServer:MetadataAddress"], apiTitle: "Administration Service API" ); @@ -69,9 +69,15 @@ public class AdminHttpApiHostModule : AbpModule options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]); options.OAuthScopes("Admin"); }); - + app.UseAuditing(); app.UseAbpSerilogEnrichers(); app.UseConfiguredEndpoints(); } -} + + //public override async Task OnPostApplicationInitializationAsync(ApplicationInitializationContext context) + //{ + // await context.ServiceProvider.GetRequiredService() + // .CheckAndApplyDatabaseMigrationsAsync(); + //} +} \ No newline at end of file diff --git a/microservices/KonSoft.Admin.HttpApi.Host/Controllers/HomeController.cs b/microservices/KonSoft.Admin.HttpApi.Host/Controllers/HomeController.cs index caf536b..d815119 100644 --- a/microservices/KonSoft.Admin.HttpApi.Host/Controllers/HomeController.cs +++ b/microservices/KonSoft.Admin.HttpApi.Host/Controllers/HomeController.cs @@ -9,4 +9,4 @@ public class HomeController : AbpController { return Redirect("~/swagger"); } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Admin.HttpApi.Host/DbMigrations/AdminDataSeedContributor.cs b/microservices/KonSoft.Admin.HttpApi.Host/DbMigrations/AdminDataSeedContributor.cs new file mode 100644 index 0000000..195c5ab --- /dev/null +++ b/microservices/KonSoft.Admin.HttpApi.Host/DbMigrations/AdminDataSeedContributor.cs @@ -0,0 +1,13 @@ +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace KonSoft.Admin.DbMigrations; + +public class AdminDataSeedContributor : IDataSeedContributor, ITransientDependency +{ + public Task SeedAsync(DataSeedContext context) + { + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/microservices/KonSoft.Admin.HttpApi.Host/DbMigrations/AdminDataSeeder.cs b/microservices/KonSoft.Admin.HttpApi.Host/DbMigrations/AdminDataSeeder.cs deleted file mode 100644 index 5b125bf..0000000 --- a/microservices/KonSoft.Admin.HttpApi.Host/DbMigrations/AdminDataSeeder.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Data; -using Volo.Abp.DependencyInjection; - -namespace KonSoft.Admin.DbMigrations -{ - public class AdminDataSeeder : IDataSeedContributor, ITransientDependency - { - public Task SeedAsync(DataSeedContext context) - { - return Task.CompletedTask; - } - } -} diff --git a/microservices/KonSoft.Admin.HttpApi.Host/DbMigrations/AdminPendingEfCoreMigrationsChecker.cs b/microservices/KonSoft.Admin.HttpApi.Host/DbMigrations/AdminPendingEfCoreMigrationsChecker.cs index 508e8be..b1d722c 100644 --- a/microservices/KonSoft.Admin.HttpApi.Host/DbMigrations/AdminPendingEfCoreMigrationsChecker.cs +++ b/microservices/KonSoft.Admin.HttpApi.Host/DbMigrations/AdminPendingEfCoreMigrationsChecker.cs @@ -6,21 +6,20 @@ using Volo.Abp.EventBus.Distributed; using Volo.Abp.MultiTenancy; using Volo.Abp.Uow; -namespace KonSoft.Admin.DbMigrations +namespace KonSoft.Admin.DbMigrations; + +public class AdminPendingEfCoreMigrationsChecker : PendingEfCoreMigrationsChecker { - public class AdminPendingEfCoreMigrationsChecker : PendingEfCoreMigrationsChecker + public AdminPendingEfCoreMigrationsChecker(IUnitOfWorkManager unitOfWorkManager, + IServiceProvider serviceProvider, + ICurrentTenant currentTenant, + IDistributedEventBus distributedEventBus, + IAbpDistributedLock abpDistributedLock) : base(unitOfWorkManager, + serviceProvider, + currentTenant, + distributedEventBus, + abpDistributedLock, + "Clean") { - public AdminPendingEfCoreMigrationsChecker(IUnitOfWorkManager unitOfWorkManager, - IServiceProvider serviceProvider, - ICurrentTenant currentTenant, - IDistributedEventBus distributedEventBus, - IAbpDistributedLock abpDistributedLock) : base(unitOfWorkManager, - serviceProvider, - currentTenant, - distributedEventBus, - abpDistributedLock, - "Clean") - { - } } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Admin.HttpApi.Host/Dockerfile b/microservices/KonSoft.Admin.HttpApi.Host/Dockerfile index 582ca45..183f46b 100644 --- a/microservices/KonSoft.Admin.HttpApi.Host/Dockerfile +++ b/microservices/KonSoft.Admin.HttpApi.Host/Dockerfile @@ -4,7 +4,6 @@ WORKDIR /app EXPOSE 8080 -# 此阶段用于生成服务项目 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src diff --git a/microservices/KonSoft.Admin.HttpApi.Host/KonSoft.Admin.HttpApi.Host.csproj b/microservices/KonSoft.Admin.HttpApi.Host/KonSoft.Admin.HttpApi.Host.csproj index 5debc82..cee14aa 100644 --- a/microservices/KonSoft.Admin.HttpApi.Host/KonSoft.Admin.HttpApi.Host.csproj +++ b/microservices/KonSoft.Admin.HttpApi.Host/KonSoft.Admin.HttpApi.Host.csproj @@ -17,6 +17,10 @@ + + + + diff --git a/microservices/KonSoft.Admin.HttpApi.Host/Program.cs b/microservices/KonSoft.Admin.HttpApi.Host/Program.cs index f357a71..1189def 100644 --- a/microservices/KonSoft.Admin.HttpApi.Host/Program.cs +++ b/microservices/KonSoft.Admin.HttpApi.Host/Program.cs @@ -1,8 +1,8 @@ -using KonSoft.Admin; +using System; +using KonSoft.Admin; using KonSoft.Shared.Hosting.AspNetCore; using Microsoft.AspNetCore.Builder; using Serilog; -using System; var assemblyName = typeof(Program).Assembly.GetName().Name!; diff --git a/microservices/KonSoft.Admin.HttpApi.Host/Properties/launchSettings.json b/microservices/KonSoft.Admin.HttpApi.Host/Properties/launchSettings.json index dfbbc2f..4660c69 100644 --- a/microservices/KonSoft.Admin.HttpApi.Host/Properties/launchSettings.json +++ b/microservices/KonSoft.Admin.HttpApi.Host/Properties/launchSettings.json @@ -1,5 +1,4 @@ { - "$schema": "http://json.schemastore.org/launchsettings.json", "profiles": { "http": { "commandName": "Project", @@ -8,6 +7,18 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "applicationUrl": "https://localhost:44354" + }, + "Container (Dockerfile)": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "environmentVariables": { + "ASPNETCORE_HTTPS_PORTS": "8081", + "ASPNETCORE_HTTP_PORTS": "8080" + }, + "publishAllPorts": true, + "useSSL": true } - } + }, + "$schema": "http://json.schemastore.org/launchsettings.json" } \ No newline at end of file diff --git a/microservices/KonSoft.Admin.HttpApi.Host/appsettings.json b/microservices/KonSoft.Admin.HttpApi.Host/appsettings.json index 5ea53ed..c1df4ef 100644 --- a/microservices/KonSoft.Admin.HttpApi.Host/appsettings.json +++ b/microservices/KonSoft.Admin.HttpApi.Host/appsettings.json @@ -1,29 +1,13 @@ { - "App": { - "CorsOrigins": "https://*.KonSoft.top" - }, - "ConnectionStrings": { - "Default": "Host=1.94.99.47;Port=26666;Database=Clean;User ID=postgres;Password=zzx7845zzx;" - }, - "Redis": { - "Configuration": "1.94.99.47:26668" + "AgileConfig": { + "appId": "KonSoft.Admin.HttpApi.Host", + "name": "KonSoft.Admin.HttpApi.Host", + "nodes": "https://config.konsoft.top/", + "secret": "DBE31703-14F9-4B01-893D-900B8380CE04" }, "AuthServer": { - "Authority": "https://localhost:44397", + "Authority": "https://localhost:44322", "RequireHttpsMetadata": true, "SwaggerClientId": "Admin_Swagger" - }, - "StringEncryption": { - "DefaultPassPhrase": "g3NdNOyDR9oYj0gK" - }, - "RabbitMQ": { - "Connections": { - "Default": { - "HostName": "1.94.99.47", - "Port": 26667, - "UserName": "admin", - "Password": "zzx7845zzx" - } - } } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Admin.HttpApi.Host/web.config b/microservices/KonSoft.Admin.HttpApi.Host/web.config index fc25838..9b0476c 100644 --- a/microservices/KonSoft.Admin.HttpApi.Host/web.config +++ b/microservices/KonSoft.Admin.HttpApi.Host/web.config @@ -1,18 +1,20 @@ + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/microservices/KonSoft.Dispatch.HttpApi.Host/Controllers/HomeController.cs b/microservices/KonSoft.Dispatch.HttpApi.Host/Controllers/HomeController.cs index 9c0bb17..5f97226 100644 --- a/microservices/KonSoft.Dispatch.HttpApi.Host/Controllers/HomeController.cs +++ b/microservices/KonSoft.Dispatch.HttpApi.Host/Controllers/HomeController.cs @@ -9,4 +9,4 @@ public class HomeController : AbpController { return Redirect("~/swagger"); } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Dispatch.HttpApi.Host/DispatchHttpApiHostModule.cs b/microservices/KonSoft.Dispatch.HttpApi.Host/DispatchHttpApiHostModule.cs index 1a2fcb4..8ee6568 100644 --- a/microservices/KonSoft.Dispatch.HttpApi.Host/DispatchHttpApiHostModule.cs +++ b/microservices/KonSoft.Dispatch.HttpApi.Host/DispatchHttpApiHostModule.cs @@ -2,7 +2,6 @@ using KonSoft.Dispatch.EntityFrameworkCore; using KonSoft.Shared.Hosting.AspNetCore; using KonSoft.Shared.Hosting.Microservices; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Volo.Abp; @@ -24,9 +23,9 @@ public class DispatchHttpApiHostModule : AbpModule var configuration = context.Services.GetConfiguration(); SwaggerConfigurationHelper.ConfigureWithOidc( - context: context, - authority: configuration["AuthServer:Authority"]!, - scopes: ["DispatchService"], + context, + configuration["AuthServer:Authority"]!, + ["DispatchService"], discoveryEndpoint: configuration["AuthServer:MetadataAddress"], apiTitle: "Dispatch Service API" ); @@ -75,4 +74,4 @@ public class DispatchHttpApiHostModule : AbpModule app.UseAbpSerilogEnrichers(); app.UseConfiguredEndpoints(); } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Dispatch.HttpApi.Host/Program.cs b/microservices/KonSoft.Dispatch.HttpApi.Host/Program.cs index caa2139..a4ed304 100644 --- a/microservices/KonSoft.Dispatch.HttpApi.Host/Program.cs +++ b/microservices/KonSoft.Dispatch.HttpApi.Host/Program.cs @@ -10,7 +10,7 @@ namespace KonSoft.Dispatch; public class Program { - public async static Task Main(string[] args) + public static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() #if DEBUG @@ -53,4 +53,4 @@ public class Program Log.CloseAndFlush(); } } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Dispatch.HttpApi.Host/web.config b/microservices/KonSoft.Dispatch.HttpApi.Host/web.config index 729e3cd..b100f39 100644 --- a/microservices/KonSoft.Dispatch.HttpApi.Host/web.config +++ b/microservices/KonSoft.Dispatch.HttpApi.Host/web.config @@ -1,18 +1,20 @@ + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/microservices/KonSoft.Payment.HttpApi.Host/Controllers/HomeController.cs b/microservices/KonSoft.Payment.HttpApi.Host/Controllers/HomeController.cs index 2974e46..1480f62 100644 --- a/microservices/KonSoft.Payment.HttpApi.Host/Controllers/HomeController.cs +++ b/microservices/KonSoft.Payment.HttpApi.Host/Controllers/HomeController.cs @@ -9,4 +9,4 @@ public class HomeController : AbpController { return Redirect("~/swagger"); } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Payment.HttpApi.Host/PaymentHttpApiHostModule.cs b/microservices/KonSoft.Payment.HttpApi.Host/PaymentHttpApiHostModule.cs index 57bd455..ade593b 100644 --- a/microservices/KonSoft.Payment.HttpApi.Host/PaymentHttpApiHostModule.cs +++ b/microservices/KonSoft.Payment.HttpApi.Host/PaymentHttpApiHostModule.cs @@ -2,7 +2,6 @@ using KonSoft.Payment.EntityFrameworkCore; using KonSoft.Shared.Hosting.AspNetCore; using KonSoft.Shared.Hosting.Microservices; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Volo.Abp; @@ -24,9 +23,9 @@ public class PaymentHttpApiHostModule : AbpModule var configuration = context.Services.GetConfiguration(); SwaggerConfigurationHelper.ConfigureWithOidc( - context: context, - authority: configuration["AuthServer:Authority"]!, - scopes: ["PaymentService"], + context, + configuration["AuthServer:Authority"]!, + ["PaymentService"], discoveryEndpoint: configuration["AuthServer:MetadataAddress"], apiTitle: "Payment Service API" ); @@ -75,4 +74,4 @@ public class PaymentHttpApiHostModule : AbpModule app.UseAbpSerilogEnrichers(); app.UseConfiguredEndpoints(); } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Payment.HttpApi.Host/Program.cs b/microservices/KonSoft.Payment.HttpApi.Host/Program.cs index dfd86a7..e59121c 100644 --- a/microservices/KonSoft.Payment.HttpApi.Host/Program.cs +++ b/microservices/KonSoft.Payment.HttpApi.Host/Program.cs @@ -10,7 +10,7 @@ namespace KonSoft.Payment; public class Program { - public async static Task Main(string[] args) + public static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() #if DEBUG @@ -53,4 +53,4 @@ public class Program Log.CloseAndFlush(); } } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Payment.HttpApi.Host/web.config b/microservices/KonSoft.Payment.HttpApi.Host/web.config index d8a82b4..b18b7ca 100644 --- a/microservices/KonSoft.Payment.HttpApi.Host/web.config +++ b/microservices/KonSoft.Payment.HttpApi.Host/web.config @@ -1,18 +1,20 @@ + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/microservices/KonSoft.Report.HttpApi.Host/Controllers/HomeController.cs b/microservices/KonSoft.Report.HttpApi.Host/Controllers/HomeController.cs index 1175391..3bbf891 100644 --- a/microservices/KonSoft.Report.HttpApi.Host/Controllers/HomeController.cs +++ b/microservices/KonSoft.Report.HttpApi.Host/Controllers/HomeController.cs @@ -9,4 +9,4 @@ public class HomeController : AbpController { return Redirect("~/swagger"); } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Report.HttpApi.Host/Program.cs b/microservices/KonSoft.Report.HttpApi.Host/Program.cs index 54c2ba8..1aeeae8 100644 --- a/microservices/KonSoft.Report.HttpApi.Host/Program.cs +++ b/microservices/KonSoft.Report.HttpApi.Host/Program.cs @@ -10,7 +10,7 @@ namespace KonSoft.Report; public class Program { - public async static Task Main(string[] args) + public static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() #if DEBUG @@ -53,4 +53,4 @@ public class Program Log.CloseAndFlush(); } } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Report.HttpApi.Host/ReportHttpApiHostModule.cs b/microservices/KonSoft.Report.HttpApi.Host/ReportHttpApiHostModule.cs index 3d27148..8289318 100644 --- a/microservices/KonSoft.Report.HttpApi.Host/ReportHttpApiHostModule.cs +++ b/microservices/KonSoft.Report.HttpApi.Host/ReportHttpApiHostModule.cs @@ -2,7 +2,6 @@ using KonSoft.Report.EntityFrameworkCore; using KonSoft.Shared.Hosting.AspNetCore; using KonSoft.Shared.Hosting.Microservices; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Volo.Abp; @@ -24,9 +23,9 @@ public class ReportHttpApiHostModule : AbpModule var configuration = context.Services.GetConfiguration(); SwaggerConfigurationHelper.ConfigureWithOidc( - context: context, - authority: configuration["AuthServer:Authority"]!, - scopes: ["ReportService"], + context, + configuration["AuthServer:Authority"]!, + ["ReportService"], discoveryEndpoint: configuration["AuthServer:MetadataAddress"], apiTitle: "Report Service API" ); @@ -75,4 +74,4 @@ public class ReportHttpApiHostModule : AbpModule app.UseAbpSerilogEnrichers(); app.UseConfiguredEndpoints(); } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.Report.HttpApi.Host/web.config b/microservices/KonSoft.Report.HttpApi.Host/web.config index aee1cd4..3e0193a 100644 --- a/microservices/KonSoft.Report.HttpApi.Host/web.config +++ b/microservices/KonSoft.Report.HttpApi.Host/web.config @@ -1,18 +1,20 @@ + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/microservices/KonSoft.TenantManagement.HttpApi.Host/Controllers/HomeController.cs b/microservices/KonSoft.TenantManagement.HttpApi.Host/Controllers/HomeController.cs index be4fe40..d11861b 100644 --- a/microservices/KonSoft.TenantManagement.HttpApi.Host/Controllers/HomeController.cs +++ b/microservices/KonSoft.TenantManagement.HttpApi.Host/Controllers/HomeController.cs @@ -9,4 +9,4 @@ public class HomeController : AbpController { return Redirect("~/swagger"); } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.TenantManagement.HttpApi.Host/Program.cs b/microservices/KonSoft.TenantManagement.HttpApi.Host/Program.cs index 26cedfb..4b39966 100644 --- a/microservices/KonSoft.TenantManagement.HttpApi.Host/Program.cs +++ b/microservices/KonSoft.TenantManagement.HttpApi.Host/Program.cs @@ -10,7 +10,7 @@ namespace KonSoft.TenantManagement; public class Program { - public async static Task Main(string[] args) + public static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() #if DEBUG @@ -53,4 +53,4 @@ public class Program Log.CloseAndFlush(); } } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.TenantManagement.HttpApi.Host/TenantManagementHttpApiHostModule.cs b/microservices/KonSoft.TenantManagement.HttpApi.Host/TenantManagementHttpApiHostModule.cs index d209b92..b1c51e5 100644 --- a/microservices/KonSoft.TenantManagement.HttpApi.Host/TenantManagementHttpApiHostModule.cs +++ b/microservices/KonSoft.TenantManagement.HttpApi.Host/TenantManagementHttpApiHostModule.cs @@ -2,7 +2,6 @@ using KonSoft.Shared.Hosting.AspNetCore; using KonSoft.Shared.Hosting.Microservices; using KonSoft.TenantManagement.EntityFrameworkCore; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Volo.Abp; @@ -24,9 +23,9 @@ public class TenantManagementHttpApiHostModule : AbpModule var configuration = context.Services.GetConfiguration(); SwaggerConfigurationHelper.ConfigureWithOidc( - context: context, - authority: configuration["AuthServer:Authority"]!, - scopes: ["TenantManagementService"], + context, + configuration["AuthServer:Authority"]!, + ["TenantManagementService"], discoveryEndpoint: configuration["AuthServer:MetadataAddress"], apiTitle: "TenantManagement Service API" ); @@ -75,4 +74,4 @@ public class TenantManagementHttpApiHostModule : AbpModule app.UseAbpSerilogEnrichers(); app.UseConfiguredEndpoints(); } -} +} \ No newline at end of file diff --git a/microservices/KonSoft.TenantManagement.HttpApi.Host/web.config b/microservices/KonSoft.TenantManagement.HttpApi.Host/web.config index 407dc06..f7caf8c 100644 --- a/microservices/KonSoft.TenantManagement.HttpApi.Host/web.config +++ b/microservices/KonSoft.TenantManagement.HttpApi.Host/web.config @@ -1,18 +1,20 @@ + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/AdminApplicationContractsModule.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/AdminApplicationContractsModule.cs index a4da8ef..3343628 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/AdminApplicationContractsModule.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/AdminApplicationContractsModule.cs @@ -25,4 +25,4 @@ public class AdminApplicationContractsModule : AbpModule { AdminDtoExtensions.Configure(); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/AdminDtoExtensions.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/AdminDtoExtensions.cs index 2b4f57c..86a0f2b 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/AdminDtoExtensions.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/AdminDtoExtensions.cs @@ -1,28 +1,26 @@ -using Volo.Abp.Identity; -using Volo.Abp.ObjectExtending; -using Volo.Abp.Threading; +using Volo.Abp.Threading; namespace KonSoft.Admin; public static class AdminDtoExtensions { - private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + private static readonly OneTimeRunner OneTimeRunner = new(); public static void Configure() { OneTimeRunner.Run(() => { - /* You can add extension properties to DTOs - * defined in the depended modules. - * - * Example: - * - * ObjectExtensionManager.Instance - * .AddOrUpdateProperty("Title"); - * - * See the documentation for more: - * https://docs.abp.io/en/abp/latest/Object-Extensions - */ + /* You can add extension properties to DTOs + * defined in the depended modules. + * + * Example: + * + * ObjectExtensionManager.Instance + * .AddOrUpdateProperty("Title"); + * + * See the documentation for more: + * https://docs.abp.io/en/abp/latest/Object-Extensions + */ }); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/AddressDto.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/AddressDto.cs index 45c2de5..eec00ce 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/AddressDto.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/AddressDto.cs @@ -1,17 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +namespace KonSoft.Admin.Dtos; -namespace KonSoft.Admin.Dtos +public class AddressDto { - public class AddressDto - { - public string ContactName { get; set; } - public string ContactPhone { get; set; } - public string DetailAddress { get; set; } - public string City { get; set; } - public string District { get; set; } - } -} + public string ContactName { get; set; } + public string ContactPhone { get; set; } + public string DetailAddress { get; set; } + public string City { get; set; } + public string District { get; set; } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/CreateOrderDto.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/CreateOrderDto.cs index 171abcf..81dc26d 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/CreateOrderDto.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/CreateOrderDto.cs @@ -1,25 +1,19 @@ using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -namespace KonSoft.Admin.Dtos +namespace KonSoft.Admin.Dtos; + +public class CreateOrderDto { - public class CreateOrderDto - { - [Required] - public Guid CustomerId { get; set; } - [Required] - public Guid ServiceCategoryId { get; set; } - [Required] - public DateTime ServiceTime { get; set; } - [Required] - public decimal Amount { get; set; } - [Required] - public AddressDto Address { get; set; } + [Required] public Guid CustomerId { get; set; } - public string Remark { get; set; } - } -} + [Required] public Guid ServiceCategoryId { get; set; } + + [Required] public DateTime ServiceTime { get; set; } + + [Required] public decimal Amount { get; set; } + + [Required] public AddressDto Address { get; set; } + + public string Remark { get; set; } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/CreateServiceCategoryDto.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/CreateServiceCategoryDto.cs index 73acd6d..3bd5a9e 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/CreateServiceCategoryDto.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/CreateServiceCategoryDto.cs @@ -1,14 +1,9 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -namespace KonSoft.Admin.Dtos +namespace KonSoft.Admin.Dtos; + +public class CreateServiceCategoryDto { - public class CreateServiceCategoryDto - { - public string Name { get; set; } - public Guid? ParentId { get; set; } - } -} + public string Name { get; set; } + public Guid? ParentId { get; set; } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/OrderDto.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/OrderDto.cs index 0bfee44..3dc5e23 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/OrderDto.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/OrderDto.cs @@ -1,26 +1,20 @@ -using KonSoft.Admin.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; +using System; +using KonSoft.Admin.Enums; -namespace KonSoft.Admin.Dtos +namespace KonSoft.Admin.Dtos; + +public class OrderDto { - public class OrderDto - { - public Guid Id { get; set; } - public string OrderSN { get; set; } - public Guid CustomerId { get; set; } - public Guid? WorkerId { get; set; } - public ServiceCategoryDto? ServiceCategory { get; set; } - public DateTime ServiceTime { get; set; } - public OrderStatus Status { get; set; } - public decimal Amount { get; set; } - public decimal PaidAmount { get; set; } - public string PaymentMethod { get; set; } - public AddressDto Address { get; set; } - public string Remark { get; set; } - } -} + public Guid Id { get; set; } + public string OrderSN { get; set; } + public Guid CustomerId { get; set; } + public Guid? WorkerId { get; set; } + public ServiceCategoryDto? ServiceCategory { get; set; } + public DateTime ServiceTime { get; set; } + public OrderStatus Status { get; set; } + public decimal Amount { get; set; } + public decimal PaidAmount { get; set; } + public string PaymentMethod { get; set; } + public AddressDto Address { get; set; } + public string Remark { get; set; } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/PayOrderDto.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/PayOrderDto.cs index d9128bf..d1a4d97 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/PayOrderDto.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/PayOrderDto.cs @@ -1,12 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +namespace KonSoft.Admin.Dtos; -namespace KonSoft.Admin.Dtos +public class PayOrderDto { - public class PayOrderDto - { - } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/ProductDto.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/ProductDto.cs index 43ac051..2a3db90 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/ProductDto.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/ProductDto.cs @@ -1,66 +1,60 @@ - -using System; +using System; using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; -namespace KonSoft.Admin.Dtos +namespace KonSoft.Admin.Dtos; + +public class ProductDto : CreateProductDto { - public class ProductDto: CreateProductDto - { - /// - /// 嵌套子类 - /// - public List Children { get; set; } = new(); - } - - public class CreateProductDto - { - /// - /// 分类名称 - /// - public string Name { get; private set; } - - /// - /// 商品编码 - /// - public string Code { get; private set; } - /// - /// 商品价格 - /// - public decimal Price { get; private set; } - - /// - /// 商品描述 - /// - public string Description { get; private set; } - - /// - /// 分类类型(大类或小类) - /// - public string Type { get; private set; } - - /// - /// 父分类ID - /// - public Guid? ParentId { get; private set; } - - /// - /// 商品状态(在售/下架等) - /// - public string Status { get; private set; } - - /// - /// 排序字段 - /// - public int Order { get; private set; } - } - - public class UpdateProductDto: CreateProductDto - { - public Guid Id { get; set; } - } + /// + /// 嵌套子类 + /// + public List Children { get; set; } = new(); } + +public class CreateProductDto +{ + /// + /// 分类名称 + /// + public string Name { get; private set; } + + /// + /// 商品编码 + /// + public string Code { get; private set; } + + /// + /// 商品价格 + /// + public decimal Price { get; private set; } + + /// + /// 商品描述 + /// + public string Description { get; private set; } + + /// + /// 分类类型(大类或小类) + /// + public string Type { get; private set; } + + /// + /// 父分类ID + /// + public Guid? ParentId { get; private set; } + + /// + /// 商品状态(在售/下架等) + /// + public string Status { get; private set; } + + /// + /// 排序字段 + /// + public int Order { get; private set; } +} + +public class UpdateProductDto : CreateProductDto +{ + public Guid Id { get; set; } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/ServiceCategoryDto.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/ServiceCategoryDto.cs index 27071cc..11c7f77 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/ServiceCategoryDto.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/ServiceCategoryDto.cs @@ -1,17 +1,13 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -namespace KonSoft.Admin.Dtos +namespace KonSoft.Admin.Dtos; + +public class ServiceCategoryDto { - public class ServiceCategoryDto - { - public Guid Id { get; set; } - public string Name { get; set; } - public Guid? ParentId { get; set; } - public int Level { get; set; } - public List Children { get; set; } = new List(); - } -} + public Guid Id { get; set; } + public string Name { get; set; } + public Guid? ParentId { get; set; } + public int Level { get; set; } + public List Children { get; set; } = new(); +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/WorkerDto.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/WorkerDto.cs index befee95..5dfad4b 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/WorkerDto.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/Dtos/WorkerDto.cs @@ -1,17 +1,12 @@ -using KonSoft.Admin.Enums; -using System; +using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Volo.Abp.Application.Dtos; -namespace KonSoft.Admin.Dtos +namespace KonSoft.Admin.Dtos; + +public class WorkerDto : EntityDto { - public class WorkerDto : EntityDto - { - public string Name { get; set; } - public string Phone { get; set; } - public List SkillCategoryIds { get; set; } = new(); // 擅长服务类型 - } -} + public string Name { get; set; } + public string Phone { get; set; } + public List SkillCategoryIds { get; set; } = new(); // 擅长服务类型 +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IOrderAppService.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IOrderAppService.cs index f90cc7c..3750d02 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IOrderAppService.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IOrderAppService.cs @@ -1,28 +1,28 @@ -using KonSoft.Admin.Dtos; -using System; +using System; using System.Threading.Tasks; +using KonSoft.Admin.Dtos; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; -namespace KonSoft.Admin.IApplicationServices +namespace KonSoft.Admin.IApplicationServices; + +public interface IOrderAppService : IApplicationService { - public interface IOrderAppService : IApplicationService - { - /// - /// 创建订单 - /// - /// - /// - Task CreateAsync(CreateOrderDto input); - Task PayAsync(Guid orderId, PayOrderDto input); - Task AssignAsync(Guid orderId, Guid workerId); - Task StartServiceAsync(Guid orderId); - Task CompleteServiceAsync(Guid orderId); - Task ConfirmAsync(Guid orderId); - Task CancelAsync(Guid orderId, string reason); - Task DeleteAsync(params Guid[] ids); - Task EditAsync(OrderDto input); - Task GetAsync(Guid id); - Task> GetListAsync(PagedResultRequestDto input); - } -} + /// + /// 创建订单 + /// + /// + /// + Task CreateAsync(CreateOrderDto input); + + Task PayAsync(Guid orderId, PayOrderDto input); + Task AssignAsync(Guid orderId, Guid workerId); + Task StartServiceAsync(Guid orderId); + Task CompleteServiceAsync(Guid orderId); + Task ConfirmAsync(Guid orderId); + Task CancelAsync(Guid orderId, string reason); + Task DeleteAsync(params Guid[] ids); + Task EditAsync(OrderDto input); + Task GetAsync(Guid id); + Task> GetListAsync(PagedResultRequestDto input); +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IProductAppService.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IProductAppService.cs new file mode 100644 index 0000000..bce6e69 --- /dev/null +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IProductAppService.cs @@ -0,0 +1,16 @@ +using System; +using System.Threading.Tasks; +using KonSoft.Admin.Dtos; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace KonSoft.Admin.IApplicationServices; + +public interface IProductAppService : IApplicationService +{ + Task CreateAsync(CreateProductDto input); + Task UpdateAsync(UpdateProductDto input); + Task DeleteAsync(Guid id); + Task GetAsync(Guid id); + Task> GetListAsync(PagedResultRequestDto input); +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IProductService.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IProductService.cs deleted file mode 100644 index 6f554f2..0000000 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IProductService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using KonSoft.Admin.Dtos; -using System; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; - -namespace KonSoft.Admin.IApplicationServices -{ - public interface IProductService: IApplicationService - { - Task CreateAsync(CreateProductDto input); - Task UpdateAsync(UpdateProductDto input); - Task DeleteAsync(Guid id); - Task GetAsync(Guid id); - Task> GetListAsync(PagedResultRequestDto input); - } -} diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IServiceCategoryAppService.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IServiceCategoryAppService.cs index 5db4a45..530bd1a 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IServiceCategoryAppService.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IServiceCategoryAppService.cs @@ -1,16 +1,13 @@ -using KonSoft.Admin.Dtos; -using System; +using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; +using KonSoft.Admin.Dtos; -namespace KonSoft.Admin.IApplicationServices +namespace KonSoft.Admin.IApplicationServices; + +public interface IServiceCategoryAppService { - public interface IServiceCategoryAppService - { - Task CreateAsync(CreateServiceCategoryDto input); - Task DeleteAsync(Guid id); - Task> GetTreeAsync(); - } -} + Task CreateAsync(CreateServiceCategoryDto input); + Task DeleteAsync(Guid id); + Task> GetTreeAsync(); +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IWorkerAppService.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IWorkerAppService.cs index 0d22702..105a191 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IWorkerAppService.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IWorkerAppService.cs @@ -1,13 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Application.Services; +using Volo.Abp.Application.Services; -namespace KonSoft.Admin.IApplicationServices +namespace KonSoft.Admin.IApplicationServices; + +public interface IWorkerAppService : IApplicationService { - public interface IWorkerAppService : IApplicationService - { - } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IWorkerAssignmentService.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IWorkerAssignmentService.cs index a832d6b..b88c202 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IWorkerAssignmentService.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/IApplicationServices/IWorkerAssignmentService.cs @@ -1,15 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +namespace KonSoft.Admin.IApplicationServices; -namespace KonSoft.Admin.IApplicationServices +public interface IWorkerAssignmentService { - public interface IWorkerAssignmentService - { - - - - } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/Permissions/AdminPermissionDefinitionProvider.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/Permissions/AdminPermissionDefinitionProvider.cs index c11e790..7b22d6d 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/Permissions/AdminPermissionDefinitionProvider.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/Permissions/AdminPermissionDefinitionProvider.cs @@ -17,4 +17,4 @@ public class AdminPermissionDefinitionProvider : PermissionDefinitionProvider { return LocalizableString.Create(name); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application.Contracts/Permissions/AdminPermissions.cs b/modules/admin/src/KonSoft.Admin.Application.Contracts/Permissions/AdminPermissions.cs index 5fe4774..895f2e9 100644 --- a/modules/admin/src/KonSoft.Admin.Application.Contracts/Permissions/AdminPermissions.cs +++ b/modules/admin/src/KonSoft.Admin.Application.Contracts/Permissions/AdminPermissions.cs @@ -6,4 +6,4 @@ public static class AdminPermissions //Add your own permission names. Example: //public const string MyPermission1 = GroupName + ".MyPermission1"; -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application/AdminAppService.cs b/modules/admin/src/KonSoft.Admin.Application/AdminAppService.cs index 58ac913..321536a 100644 --- a/modules/admin/src/KonSoft.Admin.Application/AdminAppService.cs +++ b/modules/admin/src/KonSoft.Admin.Application/AdminAppService.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; -using KonSoft.Admin.Localization; +using KonSoft.Admin.Localization; using Volo.Abp.Application.Services; namespace KonSoft.Admin; @@ -14,4 +11,4 @@ public abstract class AdminAppService : ApplicationService { LocalizationResource = typeof(AdminResource); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application/AdminApplicationAutoMapperProfile.cs b/modules/admin/src/KonSoft.Admin.Application/AdminApplicationAutoMapperProfile.cs index 1fc6ee0..115d8b3 100644 --- a/modules/admin/src/KonSoft.Admin.Application/AdminApplicationAutoMapperProfile.cs +++ b/modules/admin/src/KonSoft.Admin.Application/AdminApplicationAutoMapperProfile.cs @@ -1,6 +1,7 @@ using AutoMapper; using KonSoft.Admin.Dtos; using KonSoft.Admin.Entities; +using KonSoft.Admin.ValueObjects; namespace KonSoft.Admin; @@ -17,4 +18,4 @@ public class AdminApplicationAutoMapperProfile : Profile CreateMap(); CreateMap(); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application/AdminApplicationModule.cs b/modules/admin/src/KonSoft.Admin.Application/AdminApplicationModule.cs index 4b8589a..af7691e 100644 --- a/modules/admin/src/KonSoft.Admin.Application/AdminApplicationModule.cs +++ b/modules/admin/src/KonSoft.Admin.Application/AdminApplicationModule.cs @@ -18,14 +18,11 @@ namespace KonSoft.Admin; typeof(AbpTenantManagementApplicationModule), typeof(AbpFeatureManagementApplicationModule), typeof(AbpSettingManagementApplicationModule) - )] +)] public class AdminApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => - { - options.AddMaps(); - }); + Configure(options => { options.AddMaps(); }); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/OrderAppService.cs b/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/OrderAppService.cs index 1134803..7768805 100644 --- a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/OrderAppService.cs +++ b/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/OrderAppService.cs @@ -1,165 +1,167 @@ -using KonSoft.Admin.Dtos; -using KonSoft.Admin.Entities; -using KonSoft.Admin.IApplicationServices; -using KonSoft.Admin.Repositories; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using KonSoft.Admin.Dtos; +using KonSoft.Admin.Entities; +using KonSoft.Admin.IApplicationServices; +using KonSoft.Admin.IRepositories; +using KonSoft.Admin.ValueObjects; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; -namespace KonSoft.Admin.ApplicationServices +namespace KonSoft.Admin.ApplicationServices; + +public class OrderAppService(IOrderRepository orderRepository) : ApplicationService, IOrderAppService { - public class OrderAppService(IOrderRepository orderRepository) : ApplicationService, IOrderAppService + private readonly IOrderRepository _orderRepository = orderRepository; + + /// + /// 分配师傅 + /// + /// + /// + /// + /// + public async Task AssignAsync(Guid orderId, Guid workerId) { - private readonly IOrderRepository _orderRepository = orderRepository; + var order = await _orderRepository.GetAsync(o => o.Id == orderId); + order.AssignWorker(workerId); + } - /// - /// 分配师傅 - /// - /// - /// - /// - /// - public async Task AssignAsync(Guid orderId, Guid workerId) - { - var order = await _orderRepository.GetAsync(o => o.Id == orderId); - order.AssignWorker(workerId); - } + /// + /// 取消订单 + /// + /// + /// + /// + /// + public async Task CancelAsync(Guid orderId, string reason) + { + var order = await _orderRepository.GetAsync(o => o.Id == orderId); + order.Cancel(reason); + } - /// - /// 取消订单 - /// - /// - /// - /// - /// - public async Task CancelAsync(Guid orderId, string reason) - { - var order = await _orderRepository.GetAsync(o => o.Id == orderId); - order.Cancel(reason); - } + /// + /// 完成订单 + /// + /// + /// + /// + public async Task CompleteServiceAsync(Guid orderId) + { + var order = await _orderRepository.GetAsync(o => o.Id == orderId); + order.CompleteService(); + } - /// - /// 完成订单 - /// - /// - /// - /// - public async Task CompleteServiceAsync(Guid orderId) - { - var order = await _orderRepository.GetAsync(o => o.Id == orderId); - order.CompleteService(); - } + /// + /// 确认订单 + /// + /// + /// + /// + public async Task ConfirmAsync(Guid orderId) + { + var order = await _orderRepository.GetAsync(o => o.Id == orderId); + order.ConfirmCompletion(); + } - /// - /// 确认订单 - /// - /// - /// - /// - public async Task ConfirmAsync(Guid orderId) - { - var order = await _orderRepository.GetAsync(o => o.Id == orderId); - order.ConfirmCompletion(); - } + /// + /// 创建订单 + /// + /// + /// + /// + public async Task CreateAsync(CreateOrderDto input) + { + // 生成订单号 TODO + var orderSN = "SN001"; + var address = ObjectMapper.Map(input.Address); + var order = new Order(input.CustomerId, input.ServiceCategoryId, input.ServiceTime, + input.Amount, address, input.Remark); - /// - /// 创建订单 - /// - /// - /// - /// - public async Task CreateAsync(CreateOrderDto input) - { - // 生成订单号 TODO - var orderSN = "SN001"; - var address = ObjectMapper.Map(input.Address); - var order = new Order(Guid.NewGuid(), orderSN, input.CustomerId, input.ServiceCategoryId, input.ServiceTime, input.Amount, address, input.Remark); + await _orderRepository.InsertAsync(order); + return ObjectMapper.Map(order); + } - await _orderRepository.InsertAsync(order); - return ObjectMapper.Map(order); - } + /// + /// 根据订单ID删除订单 + /// + /// 订单ID + public async Task DeleteAsync(params Guid[] ids) + { + // 根据ID删除订单 + await _orderRepository.DeleteAsync(x => ids.Contains(x.Id)); + } - /// - /// 根据订单ID删除订单 - /// - /// 订单ID - public async Task DeleteAsync(params Guid[] ids) - { - // 根据ID删除订单 - await _orderRepository.DeleteAsync(x => ids.Contains(x.Id)); - } + /// + /// 修改订单信息 + /// + /// 订单DTO对象 + /// s + public async Task EditAsync(OrderDto input) + { + // 根据ID查询订单,如果不存在则抛出异常【修改前端必然看到了,数据若查不到提示自定义异常信息】 + var order = await _orderRepository.FindAsync(o => o.Id == input.Id) ?? + throw new BusinessException("订单找不到").WithData("Id", input.Id); - /// - /// 修改订单信息 - /// - /// 订单DTO对象s - public async Task EditAsync(OrderDto input) - { - // 根据ID查询订单,如果不存在则抛出异常【修改前端必然看到了,数据若查不到提示自定义异常信息】 - var order = await _orderRepository.FindAsync(o => o.Id == input.Id) ?? - throw new BusinessException("订单找不到").WithData("Id", input.Id); + // 将输入的DTO字段映射到订单实体 + ObjectMapper.Map(input, order); - // 将输入的DTO字段映射到订单实体 - ObjectMapper.Map(input, order); + // 更新订单 + await _orderRepository.UpdateAsync(order); + } - // 更新订单 - await _orderRepository.UpdateAsync(order); - } + /// + /// 支付 + /// + /// + /// + /// + /// + public Task PayAsync(Guid orderId, PayOrderDto input) + { + throw new NotImplementedException(); + } - /// - /// 支付 - /// - /// - /// - /// - /// - public Task PayAsync(Guid orderId, PayOrderDto input) - { - throw new NotImplementedException(); - } + /// + /// 开始订单 + /// + /// + /// + /// + public async Task StartServiceAsync(Guid orderId) + { + var order = await _orderRepository.GetAsync(o => o.Id == orderId); + order.StartService(); + } - /// - /// 开始订单 - /// - /// - /// - /// - public async Task StartServiceAsync(Guid orderId) - { - var order = await _orderRepository.GetAsync(o => o.Id == orderId); - order.StartService(); - } + /// + /// 根据订单ID获取单个订单 + /// + public async Task GetAsync(Guid id) + { + // 根据ID从数据库查询订单 + var order = await _orderRepository.GetAsync(o => o.Id == id); - /// - /// 根据订单ID获取单个订单 - /// - public async Task GetAsync(Guid id) - { - // 根据ID从数据库查询订单 - var order = await _orderRepository.GetAsync(o => o.Id == id); + // 转换为OrderDto返回 + return ObjectMapper.Map(order); + } - // 转换为OrderDto返回 - return ObjectMapper.Map(order); - } + /// + /// 获取所有订单列表 + /// + public async Task> GetListAsync(PagedResultRequestDto input) + { + // 查询所有订单 + var orders = await _orderRepository.GetPagedListAsync(input.SkipCount, input.MaxResultCount, "Id"); - /// - /// 获取所有订单列表 - /// - public async Task> GetListAsync(PagedResultRequestDto input) - { - // 查询所有订单 - var orders = await _orderRepository.GetPagedListAsync(input.SkipCount, input.MaxResultCount, "Id"); + var totalCount = await _orderRepository.CountAsync(); - var totalCount = await _orderRepository.CountAsync(); + var orderDtos = ObjectMapper.Map, List>(orders); - var orderDtos = ObjectMapper.Map, List>(orders); - - return new PagedResultDto(totalCount, orderDtos); - } + return new PagedResultDto(totalCount, orderDtos); } } \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/ProductAppAppService.cs b/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/ProductAppAppService.cs new file mode 100644 index 0000000..27f7a23 --- /dev/null +++ b/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/ProductAppAppService.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using KonSoft.Admin.Dtos; +using KonSoft.Admin.Entities; +using KonSoft.Admin.IApplicationServices; +using KonSoft.Admin.IRepositories; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace KonSoft.Admin.ApplicationServices; + +public class ProductAppAppService(IProductRepository repository) : ApplicationService, IProductAppService +{ + private readonly IProductRepository repository = repository; + + /// + /// 创建产品 + /// + public async Task CreateAsync(CreateProductDto input) + { + var id = Guid.NewGuid(); + var product = new Product(id, input.Name, input.Code, input.Price, input.Description, input.Type, + input.ParentId, input.Status, input.Order); + await repository.InsertAsync(product); + } + + /// + /// 删除 + /// + public async Task DeleteAsync(Guid id) + { + await repository.DeleteAsync(x => x.Id == id); + } + + /// + /// 查询 + /// + public async Task GetAsync(Guid id) + { + var product = await repository.GetAsync(x => x.Id == id); + return ObjectMapper.Map(product); + } + + /// + /// 查询集合 + /// + /// + /// + public async Task> GetListAsync(PagedResultRequestDto input) + { + var query = await repository.GetPageRootListAsync(input.SkipCount, input.MaxResultCount, + x => x.ParentId == null); + var all = await repository.GetListAsync(x => x.ParentId != null); + foreach (var item in query) + { + BuildChildren(item, all); + } + + var totalCount = await repository.CountAsync(x => x.ParentId == null); + + var productDtos = ObjectMapper.Map, List>(query); + + return new PagedResultDto(totalCount, productDtos); + } + + /// + /// 修改 + /// + /// + /// + public async Task UpdateAsync(UpdateProductDto input) + { + // 根据ID查询订单,如果不存在则抛出异常【修改前端必然看到了,数据若查不到提示自定义异常信息】 + var order = await repository.FindAsync(o => o.Id == input.Id) ?? + throw new BusinessException("商品找不到").WithData("Id", input.Id); + + // 将输入的DTO字段映射到订单实体 + ObjectMapper.Map(input, order); + + // 更新订单 + await repository.UpdateAsync(order); + } + + private static void BuildChildren(Product parent, List all) + { + var children = all + .Where(x => x.ParentId == parent.Id) + .OrderBy(x => x.Order) + .ToList(); + + parent.Children = children; + + foreach (var child in children) + { + BuildChildren(child, all); // 递归 + } + } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/ProductAppService.cs b/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/ProductAppService.cs deleted file mode 100644 index f0e08e3..0000000 --- a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/ProductAppService.cs +++ /dev/null @@ -1,100 +0,0 @@ -using KonSoft.Admin.Dtos; -using KonSoft.Admin.Entities; -using KonSoft.Admin.IApplicationServices; -using KonSoft.Admin.Repositories; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.Abp.Domain.Repositories; - -namespace KonSoft.Admin.ApplicationServices -{ - public class ProductAppService(IProductRepository repository) : ApplicationService, IProductService - { - private readonly IProductRepository repository = repository; - - /// - /// 创建产品 - /// - public async Task CreateAsync(CreateProductDto input) - { - var id = Guid.NewGuid(); - var product = new Product(id, input.Name, input.Code, input.Price, input.Description, input.Type, input.ParentId, input.Status, input.Order); - await repository.InsertAsync(product); - } - - /// - /// 删除 - /// - public async Task DeleteAsync(Guid id) - { - await repository.DeleteAsync(x => x.Id == id); - } - - /// - /// 查询 - /// - public async Task GetAsync(Guid id) - { - var product = await repository.GetAsync(x => x.Id == id); - return ObjectMapper.Map(product); - } - - /// - /// 查询集合 - /// - /// - /// - public async Task> GetListAsync(PagedResultRequestDto input) - { - var query = await repository.GetPageRootListAsync(input.SkipCount, input.MaxResultCount, x => x.ParentId == null); - var all = await repository.GetListAsync(x => x.ParentId != null); - foreach (var item in query) - { - BuildChildren(item, all); - } - var totalCount = await repository.CountAsync(x => x.ParentId == null); - - var productDtos = ObjectMapper.Map, List>(query); - - return new PagedResultDto(totalCount, productDtos); - } - - private static void BuildChildren(Product parent, List all) - { - var children = all - .Where(x => x.ParentId == parent.Id) - .OrderBy(x => x.Order) - .ToList(); - - parent.Children = children; - - foreach (var child in children) - { - BuildChildren(child, all); // 递归 - } - } - - /// - /// 修改 - /// - /// - /// - public async Task UpdateAsync(UpdateProductDto input) - { - // 根据ID查询订单,如果不存在则抛出异常【修改前端必然看到了,数据若查不到提示自定义异常信息】 - var order = await repository.FindAsync(o => o.Id == input.Id) ?? - throw new BusinessException("商品找不到").WithData("Id", input.Id); - - // 将输入的DTO字段映射到订单实体 - ObjectMapper.Map(input, order); - - // 更新订单 - await repository.UpdateAsync(order); - } - } -} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/ServiceCategoryAppService.cs b/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/ServiceCategoryAppService.cs index e3b5fa0..990cd4c 100644 --- a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/ServiceCategoryAppService.cs +++ b/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/ServiceCategoryAppService.cs @@ -1,75 +1,77 @@ -using KonSoft.Admin.Dtos; -using KonSoft.Admin.Entities; -using KonSoft.Admin.IApplicationServices; -using System; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading.Tasks; +using KonSoft.Admin.Dtos; +using KonSoft.Admin.Entities; +using KonSoft.Admin.IApplicationServices; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; -namespace KonSoft.Admin.ApplicationServices +namespace KonSoft.Admin.ApplicationServices; + +public class ServiceCategoryAppService : ApplicationService, IServiceCategoryAppService { - public class ServiceCategoryAppService : ApplicationService, IServiceCategoryAppService + private readonly IRepository _repository; + + + public ServiceCategoryAppService(IRepository repository) { - private readonly IRepository _repository; - - - public ServiceCategoryAppService(IRepository repository) - { - _repository = repository; - } - - public async Task CreateAsync(CreateServiceCategoryDto input) - { - ServiceCategory parent = null; - if (input.ParentId.HasValue) - { - parent = await _repository.GetAsync(input.ParentId.Value); - } - - var category = new ServiceCategory(Guid.NewGuid(), input.Name); - category.SetParent(parent); - - - await _repository.InsertAsync(category); - - - return ObjectMapper.Map(category); - } - - public async Task DeleteAsync(Guid id) - { - var hasChildren = await _repository.AnyAsync(c => c.ParentId == id); - if (hasChildren) throw new InvalidOperationException("存在子节点无法删除!"); - - - await _repository.DeleteAsync(o => o.Id == id); - } - - public async Task> GetTreeAsync() - { - var allCategories = await _repository.GetListAsync(); - - // 构建树 - var lookup = allCategories.ToDictionary(c => c.Id, c => ObjectMapper.Map(c)); - var rootList = new List(); - - - foreach (var dto in lookup.Values) - { - if (dto.ParentId.HasValue && lookup.ContainsKey(dto.ParentId.Value)) - { - lookup[dto.ParentId.Value].Children.Add(dto); - } - else - { - rootList.Add(dto); - } - } - - return rootList.OrderBy(c => c.Name).ToList(); - } + _repository = repository; } -} + + public async Task CreateAsync(CreateServiceCategoryDto input) + { + ServiceCategory parent = null; + if (input.ParentId.HasValue) + { + parent = await _repository.GetAsync(input.ParentId.Value); + } + + var category = new ServiceCategory(Guid.NewGuid(), input.Name); + category.SetParent(parent); + + + await _repository.InsertAsync(category); + + + return ObjectMapper.Map(category); + } + + public async Task DeleteAsync(Guid id) + { + var hasChildren = await _repository.AnyAsync(c => c.ParentId == id); + if (hasChildren) + { + throw new InvalidOperationException("存在子节点无法删除!"); + } + + + await _repository.DeleteAsync(o => o.Id == id); + } + + public async Task> GetTreeAsync() + { + var allCategories = await _repository.GetListAsync(); + + // 构建树 + var lookup = + allCategories.ToDictionary(c => c.Id, c => ObjectMapper.Map(c)); + var rootList = new List(); + + + foreach (var dto in lookup.Values) + { + if (dto.ParentId.HasValue && lookup.ContainsKey(dto.ParentId.Value)) + { + lookup[dto.ParentId.Value].Children.Add(dto); + } + else + { + rootList.Add(dto); + } + } + + return rootList.OrderBy(c => c.Name).ToList(); + } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/WorkerAppService.cs b/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/WorkerAppService.cs deleted file mode 100644 index 5ca999c..0000000 --- a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/WorkerAppService.cs +++ /dev/null @@ -1,20 +0,0 @@ -using KonSoft.Admin.Dtos; -using KonSoft.Admin.Entities; -using KonSoft.Admin.IApplicationServices; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Application.Services; -using Volo.Abp.Domain.Repositories; - -namespace KonSoft.Admin.ApplicationServices -{ - public class WorkerAppService : CrudAppService, IWorkerAppService - { - public WorkerAppService(IRepository repository) : base(repository) - { - } - } -} diff --git a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/WorkerAssignmentService.cs b/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/WorkerAssignmentService.cs deleted file mode 100644 index 28283c8..0000000 --- a/modules/admin/src/KonSoft.Admin.Application/ApplicationServices/WorkerAssignmentService.cs +++ /dev/null @@ -1,27 +0,0 @@ -using KonSoft.Admin.Entities; -using KonSoft.Admin.IApplicationServices; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Application.Services; -using Volo.Abp.Domain.Repositories; - -namespace KonSoft.Admin.ApplicationServices -{ - /// - /// 分配家政人员 TODO - /// - public class WorkerAssignmentService : ApplicationService, IWorkerAssignmentService - { - private readonly IRepository _workerRepository; - private readonly IRepository _orderRepository; - - public WorkerAssignmentService(IRepository workerRepository, IRepository orderRepository) - { - _workerRepository = workerRepository; - _orderRepository = orderRepository; - } - } -} diff --git a/modules/admin/src/KonSoft.Admin.Application/Properties/AssemblyInfo.cs b/modules/admin/src/KonSoft.Admin.Application/Properties/AssemblyInfo.cs index 12c97cf..9755293 100644 --- a/modules/admin/src/KonSoft.Admin.Application/Properties/AssemblyInfo.cs +++ b/modules/admin/src/KonSoft.Admin.Application/Properties/AssemblyInfo.cs @@ -1,2 +1,3 @@ using System.Runtime.CompilerServices; -[assembly:InternalsVisibleToAttribute("KonSoft.Admin.Application.Tests")] + +[assembly: InternalsVisibleToAttribute("KonSoft.Admin.Application.Tests")] \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminDomainErrorCodes.cs b/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminDomainErrorCodes.cs index 78050c5..b057d1a 100644 --- a/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminDomainErrorCodes.cs +++ b/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminDomainErrorCodes.cs @@ -3,4 +3,4 @@ public static class AdminDomainErrorCodes { /* You can add your business exception error codes here, as constants */ -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminDomainSharedModule.cs b/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminDomainSharedModule.cs index e998a5d..63ffc7f 100644 --- a/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminDomainSharedModule.cs +++ b/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminDomainSharedModule.cs @@ -23,8 +23,8 @@ namespace KonSoft.Admin; typeof(AbpOpenIddictDomainSharedModule), typeof(AbpPermissionManagementDomainSharedModule), typeof(AbpSettingManagementDomainSharedModule), - typeof(AbpTenantManagementDomainSharedModule) - )] + typeof(AbpTenantManagementDomainSharedModule) +)] public class AdminDomainSharedModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) @@ -35,10 +35,7 @@ public class AdminDomainSharedModule : AbpModule public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => - { - options.FileSets.AddEmbedded(); - }); + Configure(options => { options.FileSets.AddEmbedded(); }); Configure(options => { @@ -55,4 +52,4 @@ public class AdminDomainSharedModule : AbpModule options.MapCodeNamespace("Admin", typeof(AdminResource)); }); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminGlobalFeatureConfigurator.cs b/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminGlobalFeatureConfigurator.cs index 4ca98e9..8fb344c 100644 --- a/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminGlobalFeatureConfigurator.cs +++ b/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminGlobalFeatureConfigurator.cs @@ -4,19 +4,19 @@ namespace KonSoft.Admin; public static class AdminGlobalFeatureConfigurator { - private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + private static readonly OneTimeRunner OneTimeRunner = new(); public static void Configure() { OneTimeRunner.Run(() => { - /* You can configure (enable/disable) global features of the used modules here. - * - * YOU CAN SAFELY DELETE THIS CLASS AND REMOVE ITS USAGES IF YOU DON'T NEED TO IT! - * - * Please refer to the documentation to lear more about the Global Features System: - * https://docs.abp.io/en/abp/latest/Global-Features - */ + /* You can configure (enable/disable) global features of the used modules here. + * + * YOU CAN SAFELY DELETE THIS CLASS AND REMOVE ITS USAGES IF YOU DON'T NEED TO IT! + * + * Please refer to the documentation to lear more about the Global Features System: + * https://docs.abp.io/en/abp/latest/Global-Features + */ }); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminModuleExtensionConfigurator.cs b/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminModuleExtensionConfigurator.cs index 5e99900..87da9dd 100644 --- a/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminModuleExtensionConfigurator.cs +++ b/modules/admin/src/KonSoft.Admin.Domain.Shared/AdminModuleExtensionConfigurator.cs @@ -1,13 +1,10 @@ -using System.ComponentModel.DataAnnotations; -using Volo.Abp.Identity; -using Volo.Abp.ObjectExtending; -using Volo.Abp.Threading; +using Volo.Abp.Threading; namespace KonSoft.Admin; public static class AdminModuleExtensionConfigurator { - private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + private static readonly OneTimeRunner OneTimeRunner = new(); public static void Configure() { @@ -57,7 +54,7 @@ public static class AdminModuleExtensionConfigurator //validation rules property.Attributes.Add(new RequiredAttribute()); property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4}); - + property.Configuration[IdentityModuleExtensionConsts.ConfigurationNames.AllowUserToEdit] = true; //...other configurations for this property @@ -70,4 +67,4 @@ public static class AdminModuleExtensionConfigurator * https://docs.abp.io/en/abp/latest/Module-Entity-Extensions */ } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain.Shared/Enums/OrderStatus.cs b/modules/admin/src/KonSoft.Admin.Domain.Shared/Enums/OrderStatus.cs index 9689b7b..e6c8335 100644 --- a/modules/admin/src/KonSoft.Admin.Domain.Shared/Enums/OrderStatus.cs +++ b/modules/admin/src/KonSoft.Admin.Domain.Shared/Enums/OrderStatus.cs @@ -1,22 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +namespace KonSoft.Admin.Enums; -namespace KonSoft.Admin.Enums +public enum OrderStatus { - public enum OrderStatus - { - PendingPayment, // 待支付 - PaidWaitingAssign, // 已支付待派单 - AssignedWaitingService, // 已派单待服务 - InService, // 服务中 - WaitingConfirm, // 待用户确认 - Completed, // 已完成 - Canceled, // 已取消 - Refunding, // 退款中 - Refunded // 已退款 - - } -} + PendingPayment, // 待支付 + PaidWaitingAssign, // 已支付待派单 + AssignedWaitingService, // 已派单待服务 + InService, // 服务中 + WaitingConfirm, // 待用户确认 + Completed, // 已完成 + Canceled, // 已取消 + Refunding, // 退款中 + Refunded // 已退款 +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain.Shared/Localization/AdminResource.cs b/modules/admin/src/KonSoft.Admin.Domain.Shared/Localization/AdminResource.cs index 71f6d84..10b65ee 100644 --- a/modules/admin/src/KonSoft.Admin.Domain.Shared/Localization/AdminResource.cs +++ b/modules/admin/src/KonSoft.Admin.Domain.Shared/Localization/AdminResource.cs @@ -5,5 +5,4 @@ namespace KonSoft.Admin.Localization; [LocalizationResourceName("Admin")] public class AdminResource { - -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/AdminConsts.cs b/modules/admin/src/KonSoft.Admin.Domain/AdminConsts.cs index 976eacc..336faa4 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/AdminConsts.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/AdminConsts.cs @@ -3,6 +3,6 @@ public static class AdminConsts { public const string DbTablePrefix = "App"; - - public const string DbSchema = null; -} + public const string DbSchema = ""; + public const string ConnectionStringName = "Default"; +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/AdminDomainModule.cs b/modules/admin/src/KonSoft.Admin.Domain/AdminDomainModule.cs index c410645..74948b6 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/AdminDomainModule.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/AdminDomainModule.cs @@ -7,7 +7,6 @@ using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; using Volo.Abp.Localization; using Volo.Abp.Modularity; -using Volo.Abp.MultiTenancy; using Volo.Abp.OpenIddict; using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.PermissionManagement.OpenIddict; @@ -60,4 +59,4 @@ public class AdminDomainModule : AbpModule context.Services.Replace(ServiceDescriptor.Singleton()); #endif } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Data/AdminDbMigrationService.cs b/modules/admin/src/KonSoft.Admin.Domain/Data/AdminDbMigrationService.cs index 4b5626c..2828ccc 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/Data/AdminDbMigrationService.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/Data/AdminDbMigrationService.cs @@ -17,12 +17,11 @@ namespace KonSoft.Admin.Data; public class AdminDbMigrationService : ITransientDependency { - public ILogger Logger { get; set; } + private readonly ICurrentTenant _currentTenant; private readonly IDataSeeder _dataSeeder; private readonly IEnumerable _dbSchemaMigrators; private readonly ITenantRepository _tenantRepository; - private readonly ICurrentTenant _currentTenant; public AdminDbMigrationService( IDataSeeder dataSeeder, @@ -38,6 +37,8 @@ public class AdminDbMigrationService : ITransientDependency Logger = NullLogger.Instance; } + public ILogger Logger { get; set; } + public async Task MigrateAsync() { var initialMigrationAdded = AddInitialMigrationIfNotExist(); @@ -52,7 +53,7 @@ public class AdminDbMigrationService : ITransientDependency await MigrateDatabaseSchemaAsync(); await SeedDataAsync(); - Logger.LogInformation($"Successfully completed host database migrations."); + Logger.LogInformation("Successfully completed host database migrations."); var tenants = await _tenantRepository.GetListAsync(includeDetails: true); @@ -101,8 +102,10 @@ public class AdminDbMigrationService : ITransientDependency 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) + .WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, + IdentityDataSeedContributor.AdminEmailDefaultValue) + .WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, + IdentityDataSeedContributor.AdminPasswordDefaultValue) ); } @@ -127,10 +130,8 @@ public class AdminDbMigrationService : ITransientDependency AddInitialMigration(); return true; } - else - { - return false; - } + + return false; } catch (Exception e) { @@ -149,7 +150,8 @@ public class AdminDbMigrationService : ITransientDependency private bool MigrationsFolderExists() { var dbMigrationsProjectFolder = GetEntityFrameworkCoreProjectFolderPath(); - return dbMigrationsProjectFolder != null && Directory.Exists(Path.Combine(dbMigrationsProjectFolder, "Migrations")); + return dbMigrationsProjectFolder != null && + Directory.Exists(Path.Combine(dbMigrationsProjectFolder, "Migrations")); } private void AddInitialMigration() @@ -207,7 +209,8 @@ public class AdminDbMigrationService : ITransientDependency { currentDirectory = Directory.GetParent(currentDirectory.FullName); - if (currentDirectory != null && Directory.GetFiles(currentDirectory.FullName).FirstOrDefault(f => f.EndsWith(".sln")) != null) + if (currentDirectory != null && + Directory.GetFiles(currentDirectory.FullName).FirstOrDefault(f => f.EndsWith(".sln")) != null) { return currentDirectory.FullName; } @@ -215,4 +218,4 @@ public class AdminDbMigrationService : ITransientDependency return null; } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Data/IAdminDbSchemaMigrator.cs b/modules/admin/src/KonSoft.Admin.Domain/Data/IAdminDbSchemaMigrator.cs index d182021..6989d53 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/Data/IAdminDbSchemaMigrator.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/Data/IAdminDbSchemaMigrator.cs @@ -5,4 +5,4 @@ namespace KonSoft.Admin.Data; public interface IAdminDbSchemaMigrator { Task MigrateAsync(); -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Data/NullAdminDbSchemaMigrator.cs b/modules/admin/src/KonSoft.Admin.Domain/Data/NullAdminDbSchemaMigrator.cs index 0d1c758..0d9c225 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/Data/NullAdminDbSchemaMigrator.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/Data/NullAdminDbSchemaMigrator.cs @@ -12,4 +12,4 @@ public class NullAdminDbSchemaMigrator : IAdminDbSchemaMigrator, ITransientDepen { return Task.CompletedTask; } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Entities/AddressInfo.cs b/modules/admin/src/KonSoft.Admin.Domain/Entities/AddressInfo.cs deleted file mode 100644 index 7c418d4..0000000 --- a/modules/admin/src/KonSoft.Admin.Domain/Entities/AddressInfo.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Domain.Entities; -using Volo.Abp.Domain.Values; - -namespace KonSoft.Admin.Entities -{ - /// - /// 地址 - /// - public class AddressInfo : ValueObject - { - /// - /// 联系人 - /// - public string ContactName { get; private set; } - /// - /// 手机号 - /// - public string ContactPhone { get; private set; } - /// - /// 详细地址 - /// - public string DetailAddress { get; private set; } - /// - /// 城市 - /// - public string City { get; private set; } - /// - /// 区域 - /// - public string District { get; private set; } - - - public AddressInfo() { } - - public AddressInfo(string contactName, string contactPhone, string detailAddress, string city, string district) - { - ContactName = contactName; - ContactPhone = contactPhone; - DetailAddress = detailAddress; - City = city; - District = district; - } - - - protected override IEnumerable GetAtomicValues() - { - yield return ContactName; - yield return ContactPhone; - yield return DetailAddress; - yield return City; - yield return District; - } - - } -} diff --git a/modules/admin/src/KonSoft.Admin.Domain/Entities/HouseholdWorker.cs b/modules/admin/src/KonSoft.Admin.Domain/Entities/HouseholdWorker.cs new file mode 100644 index 0000000..1d608cd --- /dev/null +++ b/modules/admin/src/KonSoft.Admin.Domain/Entities/HouseholdWorker.cs @@ -0,0 +1,24 @@ +using Volo.Abp.Identity; + +namespace KonSoft.Admin.Entities; + +/// +/// 家政服务工人实体 +/// +public class HouseholdWorker : IdentityUser +{ + /// + /// 接单数 + /// + public int OrderCount { get; set; } + + /// + /// 职业 + /// + public required string Profession { get; set; } + + /// + /// 能力范围 + /// + public required string ScopeOfCompetence { get; set; } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Entities/Order.cs b/modules/admin/src/KonSoft.Admin.Domain/Entities/Order.cs index d0d272f..1bcb9cb 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/Entities/Order.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/Entities/Order.cs @@ -1,157 +1,158 @@ -using KonSoft.Admin.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System; +using KonSoft.Admin.Enums; +using KonSoft.Admin.ValueObjects; using Volo.Abp.Domain.Entities.Auditing; -using Volo.Abp.Identity; -namespace KonSoft.Admin.Entities +namespace KonSoft.Admin.Entities; + +public class Order : FullAuditedAggregateRoot { - public class Order : FullAuditedAggregateRoot + private Order() { - /// - /// 订单编号 - /// - public string OrderSN { get; private set; } - - /// - /// 用户ID - /// - public Guid CustomerId { get; private set; } - /// - /// 家政人员ID - /// - public Guid? WorkerId { get; private set; } - - ///// - ///// 用户ID - ///// - //public virtual IdentityUser Customer { get; private set; } - ///// - ///// 家政人员ID - ///// - //public virtual IdentityUser? Worker { get; private set; } - /// - /// 服务项目ID - /// - public Guid ServiceCategoryId { get; private set; } - - public virtual ServiceCategory ServiceCategory { get; private set; } - - /// - /// 服务预约时间 - /// - public DateTime ServiceTime { get; private set; } - - public OrderStatus Status { get; private set; } - - /// - /// 应付金额 - /// - public decimal Amount { get; private set; } - /// - /// 实付金额 - /// - public decimal PaidAmount { get; private set; } - /// - /// 支付方式 - /// - public string PaymentMethod { get; private set; } - /// - /// 地址 - /// - public AddressInfo Address { get; private set; } - - /// - /// 备注 - /// - public string? Remark { get; private set; } - /// - /// 取消原因 - /// - public string? CancelReason { get; private set; } - - protected Order() { } - - - public Order(Guid id, string orderSN, Guid customerId, Guid serviceCategoryId, DateTime serviceTime, decimal amount, AddressInfo address, string remark = null) - : base(id) - { - OrderSN = orderSN; - CustomerId = customerId; - ServiceCategoryId = serviceCategoryId; - ServiceTime = serviceTime; - Amount = amount; - Address = address; - Remark = remark; - Status = OrderStatus.PendingPayment; - } - - - public void MarkPaid(decimal paidAmount, string method) - { - if (Status != OrderStatus.PendingPayment) - throw new InvalidOperationException("订单不在待付款状态"); - - - PaidAmount = paidAmount; - PaymentMethod = method; - Status = OrderStatus.PaidWaitingAssign; - } - - - public void AssignWorker(Guid workerId) - { - if (Status != OrderStatus.PaidWaitingAssign) - throw new InvalidOperationException("订单无法分配师傅"); - - - WorkerId = workerId; - Status = OrderStatus.AssignedWaitingService; - } - - - public void StartService() - { - if (Status != OrderStatus.AssignedWaitingService) - throw new InvalidOperationException("订单无法开始"); - - - Status = OrderStatus.InService; - } - - - public void CompleteService() - { - if (Status != OrderStatus.InService) - throw new InvalidOperationException("订单未开始服务,无法完成"); - - - Status = OrderStatus.WaitingConfirm; - } - - - public void ConfirmCompletion() - { - if (Status != OrderStatus.WaitingConfirm) - throw new InvalidOperationException("订单无法确认"); - - - Status = OrderStatus.Completed; - } - - - public void Cancel(string reason) - { - // 若已完成或退款中则不可取消 - if (Status == OrderStatus.Completed || Status == OrderStatus.Refunding || Status == OrderStatus.Refunded) - throw new InvalidOperationException("订单无法被取消"); - - - CancelReason = reason; - Status = OrderStatus.Canceled; - } } -} + + + public Order(Guid customerId, Guid serviceCategoryId, DateTime serviceTime, decimal amount, + AddressInfo address, string? remark = null) + { + CustomerId = customerId; + ServiceCategoryId = serviceCategoryId; + ServiceTime = serviceTime; + Amount = amount; + Address = address; + Remark = remark; + Status = OrderStatus.PendingPayment; + } + + /// + /// 用户ID + /// + public Guid CustomerId { get; private set; } + + /// + /// 家政人员ID + /// + public Guid? WorkerId { get; private set; } + + /// + /// 服务项目ID + /// + public Guid ServiceCategoryId { get; private set; } + + /// + /// 服务预约时间 + /// + public DateTime ServiceTime { get; private set; } + + /// + /// 订单状态 + /// + public OrderStatus Status { get; private set; } + + /// + /// 应付金额 + /// + public decimal Amount { get; private set; } + + /// + /// 实付金额 + /// + public decimal PaidAmount { get; private set; } + + /// + /// 支付方式 + /// + public string PaymentMethod { get; private set; } + + /// + /// 地址 + /// + public AddressInfo Address { get; private set; } + + /// + /// 备注 + /// + public string? Remark { get; private set; } + + /// + /// 取消原因 + /// + public string? CancelReason { get; private set; } + + + public void MarkPaid(decimal paidAmount, string method) + { + if (Status != OrderStatus.PendingPayment) + { + throw new InvalidOperationException("订单不在待付款状态"); + } + + + PaidAmount = paidAmount; + PaymentMethod = method; + Status = OrderStatus.PaidWaitingAssign; + } + + + public void AssignWorker(Guid workerId) + { + if (Status != OrderStatus.PaidWaitingAssign) + { + throw new InvalidOperationException("订单无法分配师傅"); + } + + + WorkerId = workerId; + Status = OrderStatus.AssignedWaitingService; + } + + + public void StartService() + { + if (Status != OrderStatus.AssignedWaitingService) + { + throw new InvalidOperationException("订单无法开始"); + } + + + Status = OrderStatus.InService; + } + + + public void CompleteService() + { + if (Status != OrderStatus.InService) + { + throw new InvalidOperationException("订单未开始服务,无法完成"); + } + + + Status = OrderStatus.WaitingConfirm; + } + + + public void ConfirmCompletion() + { + if (Status != OrderStatus.WaitingConfirm) + { + throw new InvalidOperationException("订单无法确认"); + } + + + Status = OrderStatus.Completed; + } + + + public void Cancel(string reason) + { + // 若已完成或退款中则不可取消 + if (Status == OrderStatus.Completed || Status == OrderStatus.Refunding || Status == OrderStatus.Refunded) + { + throw new InvalidOperationException("订单无法被取消"); + } + + + CancelReason = reason; + Status = OrderStatus.Canceled; + } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Entities/Product.cs b/modules/admin/src/KonSoft.Admin.Domain/Entities/Product.cs index 580460f..404f9f1 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/Entities/Product.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/Entities/Product.cs @@ -1,99 +1,105 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; using Volo.Abp.Domain.Entities.Auditing; -namespace KonSoft.Admin.Entities +namespace KonSoft.Admin.Entities; + +public class Product( + Guid id, + string name, + string code, + decimal price, + string description, + string type, + Guid? parentId, + string status = "在售", + int order = 0) : FullAuditedAggregateRoot(id) { - public class Product(Guid id, string name, string code, decimal price, string description, string type, Guid? parentId, string status = "在售", int order = 0) : FullAuditedAggregateRoot(id) + /// + /// 分类名称 + /// + public string Name { get; private set; } = name; + + /// + /// 商品编码 + /// + public string Code { get; private set; } = code; + + /// + /// 商品价格 + /// + public decimal Price { get; private set; } = price; + + /// + /// 商品描述 + /// + public string Description { get; private set; } = description; + + /// + /// 分类类型(大类或小类) + /// + public string Type { get; private set; } = type; + + /// + /// 父分类ID + /// + public Guid? ParentId { get; private set; } = parentId; + + /// + /// 商品状态(在售/下架等) + /// + public string Status { get; private set; } = status; + + /// + /// 排序字段 + /// + public int Order { get; private set; } = order; + + [NotMapped] public List Children { get; set; } = new(); + + /// + /// 修改商品信息 + /// + public void Update(string name, string code, decimal price, string description, int order) { - /// - /// 分类名称 - /// - public string Name { get; private set; } = name; + Name = name; + Code = code; + Price = price; + Description = description; + Order = order; + } - /// - /// 商品编码 - /// - public string Code { get; private set; } = code; + /// + /// 修改商品分类 + /// + public void ChangeCategory(string type, Guid? parentId) + { + Type = type; + ParentId = parentId; + } - /// - /// 商品价格 - /// - public decimal Price { get; private set; } = price; + /// + /// 上架商品 + /// + public void PutOnSale() + { + Status = "在售"; + } - /// - /// 商品描述 - /// - public string Description { get; private set; } = description; + /// + /// 下架商品 + /// + public void TakeOffSale() + { + Status = "下架"; + } - /// - /// 分类类型(大类或小类) - /// - public string Type { get; private set; } = type; - - /// - /// 父分类ID - /// - public Guid? ParentId { get; private set; } = parentId; - - /// - /// 商品状态(在售/下架等) - /// - public string Status { get; private set; } = status; - - /// - /// 排序字段 - /// - public int Order { get; private set; } = order; - - [NotMapped] - public List Children { get; set; } = new(); - - /// - /// 修改商品信息 - /// - public void Update(string name, string code, decimal price, string description, int order) - { - Name = name; - Code = code; - Price = price; - Description = description; - Order = order; - } - - /// - /// 修改商品分类 - /// - public void ChangeCategory(string type, Guid? parentId) - { - Type = type; - ParentId = parentId; - } - - /// - /// 上架商品 - /// - public void PutOnSale() - { - Status = "在售"; - } - - /// - /// 下架商品 - /// - public void TakeOffSale() - { - Status = "下架"; - } - - /// - /// 修改价格 - /// - public void ChangePrice(decimal newPrice) - { - Price = newPrice; - } + /// + /// 修改价格 + /// + public void ChangePrice(decimal newPrice) + { + Price = newPrice; } } \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Entities/ServiceCategory.cs b/modules/admin/src/KonSoft.Admin.Domain/Entities/ServiceCategory.cs index 6bcb013..c141425 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/Entities/ServiceCategory.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/Entities/ServiceCategory.cs @@ -1,46 +1,44 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Volo.Abp.Domain.Entities.Auditing; -namespace KonSoft.Admin.Entities +namespace KonSoft.Admin.Entities; + +public class ServiceCategory : FullAuditedAggregateRoot { - public class ServiceCategory : FullAuditedAggregateRoot + protected ServiceCategory() { - public string Name { get; private set; } - public Guid? ParentId { get; private set; } - public string Path { get; private set; } - public int Level { get; private set; } - - protected ServiceCategory() { } - - public ServiceCategory(Guid id, string name) - : base(id) - { - Name = name; - } - - public ServiceCategory(Guid id, string name, Guid? parentId = null, string path = null, int level = 0) : base(id) - { - Name = name; - ParentId = parentId; - Path = path ?? id.ToString(); - Level = level; - } - - - public void UpdateName(string name) => Name = name; - - - public void SetParent(ServiceCategory parent) - { - ParentId = parent?.Id; - Level = (parent?.Level ?? 0) + 1; - Path = parent != null ? $"{parent.Path}/{Id}" : Id.ToString(); - } - - } -} + + public ServiceCategory(Guid id, string name) + : base(id) + { + Name = name; + } + + public ServiceCategory(Guid id, string name, Guid? parentId = null, string path = null, int level = 0) : base(id) + { + Name = name; + ParentId = parentId; + Path = path ?? id.ToString(); + Level = level; + } + + public string Name { get; private set; } + public Guid? ParentId { get; private set; } + public string Path { get; private set; } + public int Level { get; private set; } + + + public void UpdateName(string name) + { + Name = name; + } + + + public void SetParent(ServiceCategory parent) + { + ParentId = parent?.Id; + Level = (parent?.Level ?? 0) + 1; + Path = parent != null ? $"{parent.Path}/{Id}" : Id.ToString(); + } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Entities/Worker.cs b/modules/admin/src/KonSoft.Admin.Domain/Entities/Worker.cs deleted file mode 100644 index 94aa33f..0000000 --- a/modules/admin/src/KonSoft.Admin.Domain/Entities/Worker.cs +++ /dev/null @@ -1,34 +0,0 @@ -using KonSoft.Admin.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Domain.Entities.Auditing; - -namespace KonSoft.Admin.Entities -{ - /// - /// 家政人员 - /// - public class Worker : FullAuditedAggregateRoot - { - public string Name { get; private set; } - public string Phone { get; private set; } - public decimal Rating { get; private set; } // 评分 - public List SkillCategoryIds { get; private set; } = new List(); - - public Worker() { } - - - public void UpdateRating(decimal newRating) - { - Rating = newRating; - } - - public bool CanPerform(Guid serviceCategoryId) - { - return SkillCategoryIds.Contains(serviceCategoryId); - } - } -} diff --git a/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IHouseholdWorkerRepository.cs b/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IHouseholdWorkerRepository.cs new file mode 100644 index 0000000..9326980 --- /dev/null +++ b/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IHouseholdWorkerRepository.cs @@ -0,0 +1,8 @@ +using KonSoft.Admin.Entities; +using Volo.Abp.Domain.Repositories; + +namespace KonSoft.Admin.IRepositories; + +public interface IHouseholdWorkerRepository : IRepository +{ +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IOrderRepository.cs b/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IOrderRepository.cs index 26449f5..53ae5af 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IOrderRepository.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IOrderRepository.cs @@ -1,14 +1,8 @@ using KonSoft.Admin.Entities; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; -namespace KonSoft.Admin.Repositories +namespace KonSoft.Admin.IRepositories; + +public interface IOrderRepository : IRepository { - public interface IOrderRepository : IRepository - { - } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IProductRepository.cs b/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IProductRepository.cs index bbe1aab..041b644 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IProductRepository.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/IRepositories/IProductRepository.cs @@ -1,14 +1,13 @@ -using KonSoft.Admin.Entities; -using System; +using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading.Tasks; +using KonSoft.Admin.Entities; using Volo.Abp.Domain.Repositories; -namespace KonSoft.Admin.Repositories +namespace KonSoft.Admin.IRepositories; + +public interface IProductRepository : IRepository { - public interface IProductRepository : IRepository - { - Task> GetPageRootListAsync(int skipCount, int maxResult, Expression> where); - } -} + Task> GetPageRootListAsync(int skipCount, int maxResult, Expression> where); +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/OpenIddict/OpenIddictDataSeedContributor.cs b/modules/admin/src/KonSoft.Admin.Domain/OpenIddict/OpenIddictDataSeedContributor.cs index 986d4a8..f805d73 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/OpenIddict/OpenIddictDataSeedContributor.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/OpenIddict/OpenIddictDataSeedContributor.cs @@ -23,12 +23,12 @@ namespace KonSoft.Admin.OpenIddict; */ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDependency { + private readonly IAbpApplicationManager _applicationManager; private readonly IConfiguration _configuration; private readonly IOpenIddictApplicationRepository _openIddictApplicationRepository; - private readonly IAbpApplicationManager _applicationManager; private readonly IOpenIddictScopeRepository _openIddictScopeRepository; - private readonly IOpenIddictScopeManager _scopeManager; private readonly IPermissionDataSeeder _permissionDataSeeder; + private readonly IOpenIddictScopeManager _scopeManager; private readonly IStringLocalizer L; public OpenIddictDataSeedContributor( @@ -38,7 +38,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep IOpenIddictScopeRepository openIddictScopeRepository, IOpenIddictScopeManager scopeManager, IPermissionDataSeeder permissionDataSeeder, - IStringLocalizer l ) + IStringLocalizer l) { _configuration = configuration; _openIddictApplicationRepository = openIddictApplicationRepository; @@ -60,7 +60,8 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep { if (await _openIddictScopeRepository.FindByNameAsync("Admin") == null) { - await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor { + await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor + { Name = "Admin", DisplayName = "Admin API", Resources = { "Admin" } }); } @@ -68,7 +69,8 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep private async Task CreateApplicationsAsync() { - var commonScopes = new List { + var commonScopes = new List + { OpenIddictConstants.Permissions.Scopes.Address, OpenIddictConstants.Permissions.Scopes.Email, OpenIddictConstants.Permissions.Scopes.Phone, @@ -80,10 +82,6 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep var configurationSection = _configuration.GetSection("OpenIddict:Applications"); - - - - // Swagger Client var swaggerClientId = configurationSection["Admin_Swagger:ClientId"]; if (!swaggerClientId.IsNullOrWhiteSpace()) @@ -91,13 +89,13 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep var swaggerRootUrl = configurationSection["Admin_Swagger:RootUrl"]?.TrimEnd('/'); await CreateApplicationAsync( - name: swaggerClientId!, - type: OpenIddictConstants.ClientTypes.Public, - consentType: OpenIddictConstants.ConsentTypes.Implicit, - displayName: "Swagger Application", - secret: null, - grantTypes: [OpenIddictConstants.GrantTypes.AuthorizationCode], - scopes: commonScopes, + swaggerClientId!, + OpenIddictConstants.ClientTypes.Public, + OpenIddictConstants.ConsentTypes.Implicit, + "Swagger Application", + null, + [OpenIddictConstants.GrantTypes.AuthorizationCode], + commonScopes, redirectUri: $"{swaggerRootUrl}/swagger/oauth2-redirect.html", clientUri: swaggerRootUrl ); @@ -131,13 +129,14 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep var client = await _openIddictApplicationRepository.FindByClientIdAsync(name); - var application = new AbpApplicationDescriptor { + var application = new AbpApplicationDescriptor + { ClientId = name, ClientType = type, ClientSecret = secret, ConsentType = consentType, DisplayName = displayName, - ClientUri = clientUri, + ClientUri = clientUri }; Check.NotNullOrEmpty(grantTypes, nameof(grantTypes)); @@ -160,7 +159,8 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep application.Permissions.Add(OpenIddictConstants.Permissions.Endpoints.Logout); } - var buildInGrantTypes = new[] { + var buildInGrantTypes = new[] + { OpenIddictConstants.GrantTypes.Implicit, OpenIddictConstants.GrantTypes.Password, OpenIddictConstants.GrantTypes.AuthorizationCode, OpenIddictConstants.GrantTypes.ClientCredentials, OpenIddictConstants.GrantTypes.DeviceCode, OpenIddictConstants.GrantTypes.RefreshToken @@ -233,7 +233,8 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep } } - var buildInScopes = new[] { + var buildInScopes = new[] + { OpenIddictConstants.Permissions.Scopes.Address, OpenIddictConstants.Permissions.Scopes.Email, OpenIddictConstants.Permissions.Scopes.Phone, OpenIddictConstants.Permissions.Scopes.Profile, OpenIddictConstants.Permissions.Scopes.Roles @@ -289,8 +290,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep await _permissionDataSeeder.SeedAsync( ClientPermissionValueProvider.ProviderName, name, - permissions, - null + permissions ); } @@ -302,8 +302,10 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep if (!HasSameRedirectUris(client, application)) { - client.RedirectUris = JsonSerializer.Serialize(application.RedirectUris.Select(q => q.ToString().TrimEnd('/'))); - client.PostLogoutRedirectUris = JsonSerializer.Serialize(application.PostLogoutRedirectUris.Select(q => q.ToString().TrimEnd('/'))); + client.RedirectUris = + JsonSerializer.Serialize(application.RedirectUris.Select(q => q.ToString().TrimEnd('/'))); + client.PostLogoutRedirectUris = + JsonSerializer.Serialize(application.PostLogoutRedirectUris.Select(q => q.ToString().TrimEnd('/'))); await _applicationManager.UpdateAsync(client.ToModel()); } @@ -317,11 +319,13 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep private bool HasSameRedirectUris(OpenIddictApplication existingClient, AbpApplicationDescriptor application) { - return existingClient.RedirectUris == JsonSerializer.Serialize(application.RedirectUris.Select(q => q.ToString().TrimEnd('/'))); + return existingClient.RedirectUris == + JsonSerializer.Serialize(application.RedirectUris.Select(q => q.ToString().TrimEnd('/'))); } private bool HasSameScopes(OpenIddictApplication existingClient, AbpApplicationDescriptor application) { - return existingClient.Permissions == JsonSerializer.Serialize(application.Permissions.Select(q => q.ToString().TrimEnd('/'))); + return existingClient.Permissions == + JsonSerializer.Serialize(application.Permissions.Select(q => q.ToString().TrimEnd('/'))); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Properties/AssemblyInfo.cs b/modules/admin/src/KonSoft.Admin.Domain/Properties/AssemblyInfo.cs index 1ed25b9..58c43ff 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/Properties/AssemblyInfo.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/Properties/AssemblyInfo.cs @@ -1,3 +1,4 @@ using System.Runtime.CompilerServices; -[assembly:InternalsVisibleToAttribute("KonSoft.Admin.Domain.Tests")] -[assembly:InternalsVisibleToAttribute("KonSoft.Admin.TestBase")] + +[assembly: InternalsVisibleToAttribute("KonSoft.Admin.Domain.Tests")] +[assembly: InternalsVisibleToAttribute("KonSoft.Admin.TestBase")] \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Settings/AdminSettingDefinitionProvider.cs b/modules/admin/src/KonSoft.Admin.Domain/Settings/AdminSettingDefinitionProvider.cs index 0920a30..e3e9f67 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/Settings/AdminSettingDefinitionProvider.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/Settings/AdminSettingDefinitionProvider.cs @@ -9,4 +9,4 @@ public class AdminSettingDefinitionProvider : SettingDefinitionProvider //Define your own settings here. Example: //context.Add(new SettingDefinition(AdminSettings.MySetting1)); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/Settings/AdminSettings.cs b/modules/admin/src/KonSoft.Admin.Domain/Settings/AdminSettings.cs index 1d1d09e..14c0ab1 100644 --- a/modules/admin/src/KonSoft.Admin.Domain/Settings/AdminSettings.cs +++ b/modules/admin/src/KonSoft.Admin.Domain/Settings/AdminSettings.cs @@ -6,4 +6,4 @@ public static class AdminSettings //Add your own setting names here. Example: //public const string MySetting1 = Prefix + ".MySetting1"; -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.Domain/ValueObjects/AddressInfo.cs b/modules/admin/src/KonSoft.Admin.Domain/ValueObjects/AddressInfo.cs new file mode 100644 index 0000000..8f52ad0 --- /dev/null +++ b/modules/admin/src/KonSoft.Admin.Domain/ValueObjects/AddressInfo.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; +using Volo.Abp.Domain.Values; + +namespace KonSoft.Admin.ValueObjects; + +/// +/// 地址 +/// +public class AddressInfo : ValueObject +{ + public AddressInfo(string contactName, string contactPhone, string detailAddress, string city, string district) + { + ContactName = contactName; + ContactPhone = contactPhone; + DetailAddress = detailAddress; + City = city; + District = district; + } + + /// + /// 联系人 + /// + public string ContactName { get; private set; } + + /// + /// 手机号 + /// + public string ContactPhone { get; private set; } + + /// + /// 详细地址 + /// + public string DetailAddress { get; private set; } + + /// + /// 城市 + /// + public string City { get; private set; } + + /// + /// 区域 + /// + public string District { get; private set; } + + + protected override IEnumerable GetAtomicValues() + { + yield return ContactName; + yield return ContactPhone; + yield return DetailAddress; + yield return City; + yield return District; + } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminDbContext.cs b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminDbContext.cs index 5f7dcdb..9e107af 100644 --- a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminDbContext.cs +++ b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminDbContext.cs @@ -1,4 +1,4 @@ -using KonSoft.Admin.Entities; +using KonSoft.Admin.EntityFrameworkCore.Configures; using Microsoft.EntityFrameworkCore; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.BackgroundJobs.EntityFrameworkCore; @@ -18,60 +18,21 @@ namespace KonSoft.Admin.EntityFrameworkCore; [ReplaceDbContext(typeof(IIdentityDbContext))] [ReplaceDbContext(typeof(ITenantManagementDbContext))] -[ConnectionStringName("Default")] +[ConnectionStringName(AdminConsts.ConnectionStringName)] public class AdminDbContext : AbpDbContext, IIdentityDbContext, ITenantManagementDbContext { - /* Add DbSet properties for your Aggregate Roots / Entities here. */ - - #region Entities from the modules - - /* Notice: We only implemented IIdentityDbContext and ITenantManagementDbContext - * and replaced them for this DbContext. This allows you to perform JOIN - * queries for the entities of these modules over the repositories easily. You - * typically don't need that for other modules. But, if you need, you can - * implement the DbContext interface of the needed module and use ReplaceDbContext - * attribute just like IIdentityDbContext and ITenantManagementDbContext. - * - * More info: Replacing a DbContext of a module ensures that the related module - * uses this DbContext on runtime. Otherwise, it will use its own DbContext class. - */ - - //Identity - public DbSet Users { get; set; } - public DbSet Roles { get; set; } - public DbSet ClaimTypes { get; set; } - public DbSet OrganizationUnits { get; set; } - public DbSet SecurityLogs { get; set; } - public DbSet LinkUsers { get; set; } - public DbSet UserDelegations { get; set; } - public DbSet Sessions { get; set; } - // Tenant Management - public DbSet Tenants { get; set; } - public DbSet TenantConnectionStrings { get; set; } - - #endregion - - #region 订单 - public DbSet Orders { get; set; } - public DbSet Workers { get; set; } - public DbSet ServiceCategorys { get; set; } - #endregion - public AdminDbContext(DbContextOptions options) : base(options) { - } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); - /* Include modules to your migration db context */ - builder.ConfigurePermissionManagement(); builder.ConfigureSettingManagement(); builder.ConfigureBackgroundJobs(); @@ -81,13 +42,17 @@ public class AdminDbContext : builder.ConfigureFeatureManagement(); builder.ConfigureTenantManagement(); - /* Configure your own tables/entities inside here */ - - //builder.Entity(b => - //{ - // b.ToTable(AdminConsts.DbTablePrefix + "YourEntities", AdminConsts.DbSchema); - // b.ConfigureByConvention(); //auto configure for the base class props - // //... - //}); + builder.ConfigureApplication(); } -} + + public DbSet Users { get; set; } + public DbSet Roles { get; set; } + public DbSet ClaimTypes { get; set; } + public DbSet OrganizationUnits { get; set; } + public DbSet SecurityLogs { get; set; } + public DbSet LinkUsers { get; set; } + public DbSet UserDelegations { get; set; } + public DbSet Sessions { get; set; } + public DbSet Tenants { get; set; } + public DbSet TenantConnectionStrings { get; set; } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminDbContextFactory.cs b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminDbContextFactory.cs index 9d63ad3..0e77c3e 100644 --- a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminDbContextFactory.cs +++ b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminDbContextFactory.cs @@ -20,7 +20,7 @@ public class AdminDbContextFactory : IDesignTimeDbContextFactory var configuration = BuildConfiguration(); var builder = new DbContextOptionsBuilder() - .UseNpgsql(configuration.GetConnectionString("Default")); + .UseNpgsql(configuration.GetConnectionString(AdminConsts.ConnectionStringName)); return new AdminDbContext(builder.Options); } @@ -28,9 +28,9 @@ public class AdminDbContextFactory : IDesignTimeDbContextFactory private static IConfigurationRoot BuildConfiguration() { var builder = new ConfigurationBuilder() - .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../KonSoft.Admin.DbMigrator/")) - .AddJsonFile("appsettings.json", optional: false); + .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../../../../microservices/KonSoft.Admin.HttpApi.Host/")) + .AddJsonFile("appsettings.json", false); return builder.Build(); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminEfCoreEntityExtensionMappings.cs b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminEfCoreEntityExtensionMappings.cs index a41e0ac..ec8f2fb 100644 --- a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminEfCoreEntityExtensionMappings.cs +++ b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminEfCoreEntityExtensionMappings.cs @@ -1,13 +1,10 @@ -using Microsoft.EntityFrameworkCore; -using Volo.Abp.Identity; -using Volo.Abp.ObjectExtending; -using Volo.Abp.Threading; +using Volo.Abp.Threading; namespace KonSoft.Admin.EntityFrameworkCore; public static class AdminEfCoreEntityExtensionMappings { - private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + private static readonly OneTimeRunner OneTimeRunner = new(); public static void Configure() { @@ -16,29 +13,29 @@ public static class AdminEfCoreEntityExtensionMappings OneTimeRunner.Run(() => { - /* You can configure extra properties for the - * entities defined in the modules used by your application. - * - * This class can be used to map these extra properties to table fields in the database. - * - * USE THIS CLASS ONLY TO CONFIGURE EF CORE RELATED MAPPING. - * USE AdminModuleExtensionConfigurator CLASS (in the Domain.Shared project) - * FOR A HIGH LEVEL API TO DEFINE EXTRA PROPERTIES TO ENTITIES OF THE USED MODULES - * - * Example: Map a property to a table field: + /* You can configure extra properties for the + * entities defined in the modules used by your application. + * + * This class can be used to map these extra properties to table fields in the database. + * + * USE THIS CLASS ONLY TO CONFIGURE EF CORE RELATED MAPPING. + * USE AdminModuleExtensionConfigurator CLASS (in the Domain.Shared project) + * FOR A HIGH LEVEL API TO DEFINE EXTRA PROPERTIES TO ENTITIES OF THE USED MODULES + * + * Example: Map a property to a table field: - ObjectExtensionManager.Instance - .MapEfCoreProperty( - "MyProperty", - (entityBuilder, propertyBuilder) => - { - propertyBuilder.HasMaxLength(128); - } - ); + ObjectExtensionManager.Instance + .MapEfCoreProperty( + "MyProperty", + (entityBuilder, propertyBuilder) => + { + propertyBuilder.HasMaxLength(128); + } + ); - * See the documentation for more: - * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities - */ + * See the documentation for more: + * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities + */ }); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminEntityFrameworkCoreModule.cs b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminEntityFrameworkCoreModule.cs index ff52226..21ab65b 100644 --- a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminEntityFrameworkCoreModule.cs +++ b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/AdminEntityFrameworkCoreModule.cs @@ -1,6 +1,5 @@ using System; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Uow; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.BackgroundJobs.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -26,7 +25,7 @@ namespace KonSoft.Admin.EntityFrameworkCore; typeof(AbpAuditLoggingEntityFrameworkCoreModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule) - )] +)] public class AdminEntityFrameworkCoreModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) @@ -41,17 +40,16 @@ public class AdminEntityFrameworkCoreModule : AbpModule { context.Services.AddAbpDbContext(options => { - /* Remove "includeAllEntities: true" to create - * default repositories only for aggregate roots */ - options.AddDefaultRepositories(includeAllEntities: true); + /* Remove "includeAllEntities: true" to create + * default repositories only for aggregate roots */ + options.AddDefaultRepositories(true); }); Configure(options => { - /* The main point to change your DBMS. - * See also AdminMigrationsDbContextFactory for EF Core tooling. */ + /* The main point to change your DBMS. + * See also AdminMigrationsDbContextFactory for EF Core tooling. */ options.UseNpgsql(); }); - } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Configures/ApplicationDbContextModelBuilderExtensions.cs b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Configures/ApplicationDbContextModelBuilderExtensions.cs index ba7094d..c305eba 100644 --- a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Configures/ApplicationDbContextModelBuilderExtensions.cs +++ b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Configures/ApplicationDbContextModelBuilderExtensions.cs @@ -1,52 +1,48 @@ using KonSoft.Admin.Entities; using Microsoft.EntityFrameworkCore; -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Volo.Abp; +using Volo.Abp.EntityFrameworkCore.Modeling; +using Volo.Abp.Identity; -namespace KonSoft.Admin.EntityFrameworkCore.Configures +namespace KonSoft.Admin.EntityFrameworkCore.Configures; + +public static class ApplicationDbContextModelBuilderExtensions { - public static class ApplicationDbContextModelBuilderExtensions + public static void ConfigureApplication([NotNull] this ModelBuilder builder) { - public static void ConfigureApplication([NotNull] this ModelBuilder builder) + Check.NotNull(builder, nameof(builder)); + + builder.Entity(e => { - Check.NotNull(builder, nameof(builder)); + e.ToTable(AdminConsts.DbTablePrefix + nameof(Order) + AdminConsts.DbSchema); + e.ConfigureByConvention(); - builder.Entity(b => - { - b.ToTable(AdminConsts.DbTablePrefix + nameof(Order) + AdminConsts.DbSchema); + e.ComplexProperty(b => b.Address); - b.OwnsOne(o => o.Address, a => - { - a.Property(p => p.ContactName).HasColumnName("ContactName").HasMaxLength(50); - a.Property(p => p.ContactPhone).HasColumnName("ContactPhone").HasMaxLength(20); - a.Property(p => p.DetailAddress).HasColumnName("DetailAddress").HasMaxLength(200); - a.Property(p => p.City).HasColumnName("City").HasMaxLength(50); - a.Property(p => p.District).HasColumnName("District").HasMaxLength(50); - }); - }); + e.ApplyObjectExtensionMappings(); + }); - builder.Entity(b => - { - b.ToTable(AdminConsts.DbTablePrefix + nameof(Worker) + AdminConsts.DbSchema); + builder.Entity(e => + { + e.ToTable(AdminConsts.DbTablePrefix + nameof(Product) + AdminConsts.DbSchema); + e.ConfigureByConvention(); + e.ApplyObjectExtensionMappings(); + }); + builder.Entity(e => + { + e.ToTable(AbpIdentityDbProperties.DbTablePrefix + "Users" + AbpIdentityDbProperties.DbSchema); + e.ConfigureByConvention(); + e.ApplyObjectExtensionMappings(); + }); - }); - - - builder.Entity(b => - { - b.ToTable(AdminConsts.DbTablePrefix + nameof(ServiceCategory) + AdminConsts.DbSchema); - - - }); - - } - + builder.Entity(e => + { + e.ToTable(AdminConsts.DbTablePrefix + nameof(ServiceCategory) + AdminConsts.DbSchema); + e.ConfigureByConvention(); + e.ApplyObjectExtensionMappings(); + }); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreAdminDbSchemaMigrator.cs b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreAdminDbSchemaMigrator.cs index 99dceb8..520ac06 100644 --- a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreAdminDbSchemaMigrator.cs +++ b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreAdminDbSchemaMigrator.cs @@ -1,8 +1,8 @@ using System; using System.Threading.Tasks; +using KonSoft.Admin.Data; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; -using KonSoft.Admin.Data; using Volo.Abp.DependencyInjection; namespace KonSoft.Admin.EntityFrameworkCore; @@ -31,4 +31,4 @@ public class EntityFrameworkCoreAdminDbSchemaMigrator .Database .MigrateAsync(); } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/HouseholdWorkerRepository.cs b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/HouseholdWorkerRepository.cs new file mode 100644 index 0000000..f85c8a1 --- /dev/null +++ b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/HouseholdWorkerRepository.cs @@ -0,0 +1,16 @@ +using KonSoft.Admin.Entities; +using KonSoft.Admin.IRepositories; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.TenantManagement.EntityFrameworkCore; + +namespace KonSoft.Admin.EntityFrameworkCore.Repositories; + +public class HouseholdWorkerRepository : EfCoreRepository, + IHouseholdWorkerRepository +{ + public HouseholdWorkerRepository(IDbContextProvider dbContextProvider) : base( + dbContextProvider) + { + } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/OrderRepository.cs b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/OrderRepository.cs index 956a252..0f8048f 100644 --- a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/OrderRepository.cs +++ b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/OrderRepository.cs @@ -1,21 +1,13 @@ using KonSoft.Admin.Entities; -using KonSoft.Admin.Repositories; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Domain.Repositories; +using KonSoft.Admin.IRepositories; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; -namespace KonSoft.Admin.EntityFrameworkCore.Repositories +namespace KonSoft.Admin.EntityFrameworkCore.Repositories; + +public class OrderRepository : EfCoreRepository, IOrderRepository { - public class OrderRepository : EfCoreRepository, IOrderRepository + public OrderRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { - public OrderRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) - { - } } -} +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/ProductRepository.cs b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/ProductRepository.cs index c49f828..fefe51f 100644 --- a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/ProductRepository.cs +++ b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/EntityFrameworkCore/Repositories/ProductRepository.cs @@ -1,25 +1,25 @@ -using KonSoft.Admin.Entities; -using KonSoft.Admin.Repositories; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using KonSoft.Admin.Entities; +using KonSoft.Admin.IRepositories; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; -namespace KonSoft.Admin.EntityFrameworkCore.Repositories -{ - public class ProductRepository : EfCoreRepository, IProductRepository - { - public ProductRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) - { - } +namespace KonSoft.Admin.EntityFrameworkCore.Repositories; - public async Task> GetPageRootListAsync(int skipCount, int maxResultCount, Expression> where) - { - var queryable = await GetQueryableAsync(); - return queryable.PageBy(skipCount, maxResultCount).Where(where).OrderBy(x => x.Order).ToList(); - } +public class ProductRepository : EfCoreRepository, IProductRepository +{ + public ProductRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { } -} + + public async Task> GetPageRootListAsync(int skipCount, int maxResultCount, + Expression> where) + { + var queryable = await GetQueryableAsync(); + return queryable.PageBy(skipCount, maxResultCount).Where(where).OrderBy(x => x.Order).ToList(); + } +} \ No newline at end of file diff --git a/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/Migrations/20251017042956_V1.0.0.Designer.cs b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/Migrations/20251017042956_V1.0.0.Designer.cs new file mode 100644 index 0000000..1d35e74 --- /dev/null +++ b/modules/admin/src/KonSoft.Admin.EntityFrameworkCore/Migrations/20251017042956_V1.0.0.Designer.cs @@ -0,0 +1,2294 @@ +// +using System; +using System.Collections.Generic; +using KonSoft.Admin.EntityFrameworkCore; +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 KonSoft.Admin.Migrations +{ + [DbContext(typeof(AdminDbContext))] + [Migration("20251017042956_V1.0.0")] + partial class V100 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "8.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("KonSoft.Admin.Entities.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Amount") + .HasColumnType("numeric"); + + b.Property("CancelReason") + .HasColumnType("text"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .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("CustomerId") + .HasColumnType("uuid"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .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("PaidAmount") + .HasColumnType("numeric"); + + b.Property("PaymentMethod") + .IsRequired() + .HasColumnType("text"); + + b.Property("Remark") + .HasColumnType("text"); + + b.Property("ServiceCategoryId") + .HasColumnType("uuid"); + + b.Property("ServiceTime") + .HasColumnType("timestamp without time zone"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("WorkerId") + .HasColumnType("uuid"); + + b.ComplexProperty>("Address", "KonSoft.Admin.Entities.Order.Address#AddressInfo", b1 => + { + b1.IsRequired(); + + b1.Property("City") + .IsRequired() + .HasColumnType("text"); + + b1.Property("ContactName") + .IsRequired() + .HasColumnType("text"); + + b1.Property("ContactPhone") + .IsRequired() + .HasColumnType("text"); + + b1.Property("DetailAddress") + .IsRequired() + .HasColumnType("text"); + + b1.Property("District") + .IsRequired() + .HasColumnType("text"); + }); + + b.HasKey("Id"); + + b.ToTable("AppOrder", (string)null); + }); + + modelBuilder.Entity("KonSoft.Admin.Entities.Product", b => + { + b.Property