diff --git a/.build-verify/PetWash.Api/PetWash.Api.deps.json b/.build-verify/PetWash.Api/PetWash.Api.deps.json new file mode 100644 index 0000000..e5d52e2 --- /dev/null +++ b/.build-verify/PetWash.Api/PetWash.Api.deps.json @@ -0,0 +1,997 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "PetWash.Api/1.0.0": { + "dependencies": { + "MQTTnet.AspNetCore": "4.3.7.1207", + "Microsoft.EntityFrameworkCore.Design": "8.0.0", + "Microsoft.EntityFrameworkCore.Sqlite": "8.0.14", + "Pomelo.EntityFrameworkCore.MySql": "8.0.2", + "Swashbuckle.AspNetCore": "6.6.2" + }, + "runtime": { + "PetWash.Api.dll": {} + } + }, + "Humanizer.Core/2.14.1": { + "runtime": { + "lib/net6.0/Humanizer.dll": { + "assemblyVersion": "2.14.0.0", + "fileVersion": "2.14.1.48190" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/6.0.0": { + "runtime": { + "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + }, + "Microsoft.CodeAnalysis.Common/4.5.0": { + "runtime": { + "lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll": { + "assemblyVersion": "4.5.0.0", + "fileVersion": "4.500.23.10905" + } + }, + "resources": { + "lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/4.5.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "4.5.0" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll": { + "assemblyVersion": "4.5.0.0", + "fileVersion": "4.500.23.10905" + } + }, + "resources": { + "lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.5.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "4.5.0", + "Microsoft.CodeAnalysis.Common": "4.5.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "4.5.0" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "assemblyVersion": "4.5.0.0", + "fileVersion": "4.500.23.10905" + } + }, + "resources": { + "lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.5.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.CodeAnalysis.Common": "4.5.0", + "System.Composition": "6.0.0" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.CodeAnalysis.Workspaces.dll": { + "assemblyVersion": "4.5.0.0", + "fileVersion": "4.500.23.10905" + } + }, + "resources": { + "lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.Data.Sqlite.Core/8.0.14": { + "dependencies": { + "SQLitePCLRaw.core": "2.1.6" + }, + "runtime": { + "lib/net8.0/Microsoft.Data.Sqlite.dll": { + "assemblyVersion": "8.0.14.0", + "fileVersion": "8.0.1425.11206" + } + } + }, + "Microsoft.EntityFrameworkCore/8.0.14": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "8.0.14", + "Microsoft.Extensions.Caching.Memory": "8.0.1", + "Microsoft.Extensions.Logging": "8.0.1" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.dll": { + "assemblyVersion": "8.0.14.0", + "fileVersion": "8.0.1425.11206" + } + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/8.0.14": { + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "assemblyVersion": "8.0.14.0", + "fileVersion": "8.0.1425.11206" + } + } + }, + "Microsoft.EntityFrameworkCore.Design/8.0.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.5.0", + "Microsoft.EntityFrameworkCore.Relational": "8.0.14", + "Microsoft.Extensions.DependencyModel": "8.0.2", + "Mono.TextTemplating": "2.2.1" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.EntityFrameworkCore.Relational/8.0.14": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "8.0.14" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "assemblyVersion": "8.0.14.0", + "fileVersion": "8.0.1425.11206" + } + } + }, + "Microsoft.EntityFrameworkCore.Sqlite/8.0.14": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Sqlite.Core": "8.0.14", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.6" + } + }, + "Microsoft.EntityFrameworkCore.Sqlite.Core/8.0.14": { + "dependencies": { + "Microsoft.Data.Sqlite.Core": "8.0.14", + "Microsoft.EntityFrameworkCore.Relational": "8.0.14", + "Microsoft.Extensions.DependencyModel": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Sqlite.dll": { + "assemblyVersion": "8.0.14.0", + "fileVersion": "8.0.1425.11206" + } + } + }, + "Microsoft.Extensions.Caching.Memory/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Caching.Memory.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.DependencyInjection/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.DependencyModel/8.0.2": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyModel.dll": { + "assemblyVersion": "8.0.0.2", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Logging/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Options/8.0.2": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.224.6711" + } + } + }, + "Microsoft.OpenApi/1.6.14": { + "runtime": { + "lib/netstandard2.0/Microsoft.OpenApi.dll": { + "assemblyVersion": "1.6.14.0", + "fileVersion": "1.6.14.0" + } + } + }, + "Mono.TextTemplating/2.2.1": { + "dependencies": { + "System.CodeDom": "4.4.0" + }, + "runtime": { + "lib/netstandard2.0/Mono.TextTemplating.dll": { + "assemblyVersion": "2.2.0.0", + "fileVersion": "2.2.1.1" + } + } + }, + "MQTTnet/4.3.7.1207": { + "runtime": { + "lib/net7.0/MQTTnet.dll": { + "assemblyVersion": "4.3.7.1207", + "fileVersion": "4.3.7.1207" + } + } + }, + "MQTTnet.AspNetCore/4.3.7.1207": { + "dependencies": { + "MQTTnet": "4.3.7.1207" + }, + "runtime": { + "lib/net7.0/MQTTnet.AspNetCore.dll": { + "assemblyVersion": "4.3.7.1207", + "fileVersion": "4.3.7.1207" + } + } + }, + "MySqlConnector/2.3.5": { + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/MySqlConnector.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "2.3.5.0" + } + } + }, + "Pomelo.EntityFrameworkCore.MySql/8.0.2": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Relational": "8.0.14", + "MySqlConnector": "2.3.5" + }, + "runtime": { + "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": { + "assemblyVersion": "8.0.2.0", + "fileVersion": "8.0.2.0" + } + } + }, + "SQLitePCLRaw.bundle_e_sqlite3/2.1.6": { + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.6", + "SQLitePCLRaw.provider.e_sqlite3": "2.1.6" + }, + "runtime": { + "lib/netstandard2.0/SQLitePCLRaw.batteries_v2.dll": { + "assemblyVersion": "2.1.6.2060", + "fileVersion": "2.1.6.2060" + } + } + }, + "SQLitePCLRaw.core/2.1.6": { + "runtime": { + "lib/netstandard2.0/SQLitePCLRaw.core.dll": { + "assemblyVersion": "2.1.6.2060", + "fileVersion": "2.1.6.2060" + } + } + }, + "SQLitePCLRaw.lib.e_sqlite3/2.1.6": { + "runtimeTargets": { + "runtimes/browser-wasm/nativeassets/net8.0/e_sqlite3.a": { + "rid": "browser-wasm", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-arm/native/libe_sqlite3.so": { + "rid": "linux-arm", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-arm64/native/libe_sqlite3.so": { + "rid": "linux-arm64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-armel/native/libe_sqlite3.so": { + "rid": "linux-armel", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-mips64/native/libe_sqlite3.so": { + "rid": "linux-mips64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-musl-arm/native/libe_sqlite3.so": { + "rid": "linux-musl-arm", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-musl-arm64/native/libe_sqlite3.so": { + "rid": "linux-musl-arm64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-musl-x64/native/libe_sqlite3.so": { + "rid": "linux-musl-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-ppc64le/native/libe_sqlite3.so": { + "rid": "linux-ppc64le", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-s390x/native/libe_sqlite3.so": { + "rid": "linux-s390x", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x64/native/libe_sqlite3.so": { + "rid": "linux-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/linux-x86/native/libe_sqlite3.so": { + "rid": "linux-x86", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/maccatalyst-arm64/native/libe_sqlite3.dylib": { + "rid": "maccatalyst-arm64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/maccatalyst-x64/native/libe_sqlite3.dylib": { + "rid": "maccatalyst-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-arm64/native/libe_sqlite3.dylib": { + "rid": "osx-arm64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/libe_sqlite3.dylib": { + "rid": "osx-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/win-arm/native/e_sqlite3.dll": { + "rid": "win-arm", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/win-arm64/native/e_sqlite3.dll": { + "rid": "win-arm64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/win-x64/native/e_sqlite3.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/win-x86/native/e_sqlite3.dll": { + "rid": "win-x86", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "SQLitePCLRaw.provider.e_sqlite3/2.1.6": { + "dependencies": { + "SQLitePCLRaw.core": "2.1.6" + }, + "runtime": { + "lib/net6.0/SQLitePCLRaw.provider.e_sqlite3.dll": { + "assemblyVersion": "2.1.6.2060", + "fileVersion": "2.1.6.2060" + } + } + }, + "Swashbuckle.AspNetCore/6.6.2": { + "dependencies": { + "Swashbuckle.AspNetCore.Swagger": "6.6.2", + "Swashbuckle.AspNetCore.SwaggerGen": "6.6.2", + "Swashbuckle.AspNetCore.SwaggerUI": "6.6.2" + } + }, + "Swashbuckle.AspNetCore.Swagger/6.6.2": { + "dependencies": { + "Microsoft.OpenApi": "1.6.14" + }, + "runtime": { + "lib/net8.0/Swashbuckle.AspNetCore.Swagger.dll": { + "assemblyVersion": "6.6.2.0", + "fileVersion": "6.6.2.401" + } + } + }, + "Swashbuckle.AspNetCore.SwaggerGen/6.6.2": { + "dependencies": { + "Swashbuckle.AspNetCore.Swagger": "6.6.2" + }, + "runtime": { + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { + "assemblyVersion": "6.6.2.0", + "fileVersion": "6.6.2.401" + } + } + }, + "Swashbuckle.AspNetCore.SwaggerUI/6.6.2": { + "runtime": { + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { + "assemblyVersion": "6.6.2.0", + "fileVersion": "6.6.2.401" + } + } + }, + "System.CodeDom/4.4.0": { + "runtime": { + "lib/netstandard2.0/System.CodeDom.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "4.6.25519.3" + } + } + }, + "System.Composition/6.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "6.0.0", + "System.Composition.Convention": "6.0.0", + "System.Composition.Hosting": "6.0.0", + "System.Composition.Runtime": "6.0.0", + "System.Composition.TypedParts": "6.0.0" + } + }, + "System.Composition.AttributedModel/6.0.0": { + "runtime": { + "lib/net6.0/System.Composition.AttributedModel.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + }, + "System.Composition.Convention/6.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "6.0.0" + }, + "runtime": { + "lib/net6.0/System.Composition.Convention.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + }, + "System.Composition.Hosting/6.0.0": { + "dependencies": { + "System.Composition.Runtime": "6.0.0" + }, + "runtime": { + "lib/net6.0/System.Composition.Hosting.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + }, + "System.Composition.Runtime/6.0.0": { + "runtime": { + "lib/net6.0/System.Composition.Runtime.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + }, + "System.Composition.TypedParts/6.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "6.0.0", + "System.Composition.Hosting": "6.0.0", + "System.Composition.Runtime": "6.0.0" + }, + "runtime": { + "lib/net6.0/System.Composition.TypedParts.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + } + } + }, + "libraries": { + "PetWash.Api/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Humanizer.Core/2.14.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==", + "path": "humanizer.core/2.14.1", + "hashPath": "humanizer.core.2.14.1.nupkg.sha512" + }, + "Microsoft.Bcl.AsyncInterfaces/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg==", + "path": "microsoft.bcl.asyncinterfaces/6.0.0", + "hashPath": "microsoft.bcl.asyncinterfaces.6.0.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Common/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lwAbIZNdnY0SUNoDmZHkVUwLO8UyNnyyh1t/4XsbFxi4Ounb3xszIYZaWhyj5ZjyfcwqwmtMbE7fUTVCqQEIdQ==", + "path": "microsoft.codeanalysis.common/4.5.0", + "hashPath": "microsoft.codeanalysis.common.4.5.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cM59oMKAOxvdv76bdmaKPy5hfj+oR+zxikWoueEB7CwTko7mt9sVKZI8Qxlov0C/LuKEG+WQwifepqL3vuTiBQ==", + "path": "microsoft.codeanalysis.csharp/4.5.0", + "hashPath": "microsoft.codeanalysis.csharp.4.5.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-h74wTpmGOp4yS4hj+EvNzEiPgg/KVs2wmSfTZ81upJZOtPkJsVkgfsgtxxqmAeapjT/vLKfmYV0bS8n5MNVP+g==", + "path": "microsoft.codeanalysis.csharp.workspaces/4.5.0", + "hashPath": "microsoft.codeanalysis.csharp.workspaces.4.5.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-l4dDRmGELXG72XZaonnOeORyD/T5RpEu5LGHOUIhnv+MmUWDY/m1kWXGwtcgQ5CJ5ynkFiRnIYzTKXYjUs7rbw==", + "path": "microsoft.codeanalysis.workspaces.common/4.5.0", + "hashPath": "microsoft.codeanalysis.workspaces.common.4.5.0.nupkg.sha512" + }, + "Microsoft.Data.Sqlite.Core/8.0.14": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MT/9fCazlL4T10BwCQCxvUXOmtU4rR1qDl2mpePFhmuXONafUjXUf8FH94IR79ISxrGVHxsOWvwGzgKi6RSE/g==", + "path": "microsoft.data.sqlite.core/8.0.14", + "hashPath": "microsoft.data.sqlite.core.8.0.14.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore/8.0.14": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HNn+NPKCm7rR7ij7IRCCbuImaMulFJGloyIbMwi3Ews77RsthM8gxpTZciFLgRYPsBtszKpdIClEwnWmP0vjUg==", + "path": "microsoft.entityframeworkcore/8.0.14", + "hashPath": "microsoft.entityframeworkcore.8.0.14.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Abstractions/8.0.14": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Om8/jdWyx9eKFkA1YEgxk13KjGIzA8teLgG7iNFunsI2+MT6UT54Eb4t6oe4NQlIaACj5voUe6szVAQe9GKwDA==", + "path": "microsoft.entityframeworkcore.abstractions/8.0.14", + "hashPath": "microsoft.entityframeworkcore.abstractions.8.0.14.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Design/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-94reKYu63jg4O75UI3LMJHwOSi8tQ6IfubiZhdnSsWcgtmAuF8OyLfjK/MIxuvaQRJZAF6E747FIuxjOtb8/og==", + "path": "microsoft.entityframeworkcore.design/8.0.0", + "hashPath": "microsoft.entityframeworkcore.design.8.0.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Relational/8.0.14": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cPEeIk9nFO3+hxj9tp5AvTFdcTZkVPJCOFUiagbf37KhPGtiG0ZWpl15xOzLYTDAYjF5kxH/jcuDYGlLACJEmA==", + "path": "microsoft.entityframeworkcore.relational/8.0.14", + "hashPath": "microsoft.entityframeworkcore.relational.8.0.14.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Sqlite/8.0.14": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iqrhkOirZ9mm3Yu+ut9698VDn6WSykfr9NMECIe6gObUZLxAsg28f1JmIjx2n4pKFm5Uz5sYJ3k4AUnrJbgUag==", + "path": "microsoft.entityframeworkcore.sqlite/8.0.14", + "hashPath": "microsoft.entityframeworkcore.sqlite.8.0.14.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Sqlite.Core/8.0.14": { + "type": "package", + "serviceable": true, + "sha512": "sha512-TcbHy/SdKTcrxlgx14uicVMqrBTu3SP3STGicR+JzYG4I3mVtsBgqtArt6mmUtA7UZj7sogXJ6EFpSyNsJU8Zg==", + "path": "microsoft.entityframeworkcore.sqlite.core/8.0.14", + "hashPath": "microsoft.entityframeworkcore.sqlite.core.8.0.14.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Memory/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HFDnhYLccngrzyGgHkjEDU5FMLn4MpOsr5ElgsBMC4yx6lJh4jeWO7fHS8+TXPq+dgxCmUa/Trl8svObmwW4QA==", + "path": "microsoft.extensions.caching.memory/8.0.1", + "hashPath": "microsoft.extensions.caching.memory.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", + "path": "microsoft.extensions.dependencyinjection/8.0.1", + "hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==", + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyModel/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mUBDZZRgZrSyFOsJ2qJJ9fXfqd/kXJwf3AiDoqLD9m6TjY5OO/vLNOb9fb4juC0487eq4hcGN/M2Rh/CKS7QYw==", + "path": "microsoft.extensions.dependencymodel/8.0.2", + "hashPath": "microsoft.extensions.dependencymodel.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", + "path": "microsoft.extensions.logging/8.0.1", + "hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", + "path": "microsoft.extensions.logging.abstractions/8.0.2", + "hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Options/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", + "path": "microsoft.extensions.options/8.0.2", + "hashPath": "microsoft.extensions.options.8.0.2.nupkg.sha512" + }, + "Microsoft.OpenApi/1.6.14": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tTaBT8qjk3xINfESyOPE2rIellPvB7qpVqiWiyA/lACVvz+xOGiXhFUfohcx82NLbi5avzLW0lx+s6oAqQijfw==", + "path": "microsoft.openapi/1.6.14", + "hashPath": "microsoft.openapi.1.6.14.nupkg.sha512" + }, + "Mono.TextTemplating/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KZYeKBET/2Z0gY1WlTAK7+RHTl7GSbtvTLDXEZZojUdAPqpQNDL6tHv7VUpqfX5VEOh+uRGKaZXkuD253nEOBQ==", + "path": "mono.texttemplating/2.2.1", + "hashPath": "mono.texttemplating.2.2.1.nupkg.sha512" + }, + "MQTTnet/4.3.7.1207": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ah7aHXoedWp5m5a4zy2u4phOEVj0QFYzOb5tFKQeV8RRBrxp+1QREF4ymZuG8D+hzB2dhtrrG81WxTFv0PzOeQ==", + "path": "mqttnet/4.3.7.1207", + "hashPath": "mqttnet.4.3.7.1207.nupkg.sha512" + }, + "MQTTnet.AspNetCore/4.3.7.1207": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aDtlDjDv65kK0J3/SeagD9h1/xAzxSjbIMEQOzwChyv9mZt79KRRX0TIHQ03SyXfsRC6yyOcyqJxIp8K7FON1A==", + "path": "mqttnet.aspnetcore/4.3.7.1207", + "hashPath": "mqttnet.aspnetcore.4.3.7.1207.nupkg.sha512" + }, + "MySqlConnector/2.3.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "path": "mysqlconnector/2.3.5", + "hashPath": "mysqlconnector.2.3.5.nupkg.sha512" + }, + "Pomelo.EntityFrameworkCore.MySql/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-XjnlcxVBLnEMbyEc5cZzgZeDyLvAniACZQ04W1slWN0f4rmfNzl98gEMvHnFH0fMDF06z9MmgGi/Sr7hJ+BVnw==", + "path": "pomelo.entityframeworkcore.mysql/8.0.2", + "hashPath": "pomelo.entityframeworkcore.mysql.8.0.2.nupkg.sha512" + }, + "SQLitePCLRaw.bundle_e_sqlite3/2.1.6": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BmAf6XWt4TqtowmiWe4/5rRot6GerAeklmOPfviOvwLoF5WwgxcJHAxZtySuyW9r9w+HLILnm8VfJFLCUJYW8A==", + "path": "sqlitepclraw.bundle_e_sqlite3/2.1.6", + "hashPath": "sqlitepclraw.bundle_e_sqlite3.2.1.6.nupkg.sha512" + }, + "SQLitePCLRaw.core/2.1.6": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wO6v9GeMx9CUngAet8hbO7xdm+M42p1XeJq47ogyRoYSvNSp0NGLI+MgC0bhrMk9C17MTVFlLiN6ylyExLCc5w==", + "path": "sqlitepclraw.core/2.1.6", + "hashPath": "sqlitepclraw.core.2.1.6.nupkg.sha512" + }, + "SQLitePCLRaw.lib.e_sqlite3/2.1.6": { + "type": "package", + "serviceable": true, + "sha512": "sha512-2ObJJLkIUIxRpOUlZNGuD4rICpBnrBR5anjyfUFQep4hMOIeqW+XGQYzrNmHSVz5xSWZ3klSbh7sFR6UyDj68Q==", + "path": "sqlitepclraw.lib.e_sqlite3/2.1.6", + "hashPath": "sqlitepclraw.lib.e_sqlite3.2.1.6.nupkg.sha512" + }, + "SQLitePCLRaw.provider.e_sqlite3/2.1.6": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PQ2Oq3yepLY4P7ll145P3xtx2bX8xF4PzaKPRpw9jZlKvfe4LE/saAV82inND9usn1XRpmxXk7Lal3MTI+6CNg==", + "path": "sqlitepclraw.provider.e_sqlite3/2.1.6", + "hashPath": "sqlitepclraw.provider.e_sqlite3.2.1.6.nupkg.sha512" + }, + "Swashbuckle.AspNetCore/6.6.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+NB4UYVYN6AhDSjW0IJAd1AGD8V33gemFNLPaxKTtPkHB+HaKAKf9MGAEUPivEWvqeQfcKIw8lJaHq6LHljRuw==", + "path": "swashbuckle.aspnetcore/6.6.2", + "hashPath": "swashbuckle.aspnetcore.6.6.2.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.Swagger/6.6.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ovgPTSYX83UrQUWiS5vzDcJ8TEX1MAxBgDFMK45rC24MorHEPQlZAHlaXj/yth4Zf6xcktpUgTEBvffRQVwDKA==", + "path": "swashbuckle.aspnetcore.swagger/6.6.2", + "hashPath": "swashbuckle.aspnetcore.swagger.6.6.2.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.SwaggerGen/6.6.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zv4ikn4AT1VYuOsDCpktLq4QDq08e7Utzbir86M5/ZkRaLXbCPF11E1/vTmOiDzRTl0zTZINQU2qLKwTcHgfrA==", + "path": "swashbuckle.aspnetcore.swaggergen/6.6.2", + "hashPath": "swashbuckle.aspnetcore.swaggergen.6.6.2.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.SwaggerUI/6.6.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mBBb+/8Hm2Q3Wygag+hu2jj69tZW5psuv0vMRXY07Wy+Rrj40vRP8ZTbKBhs91r45/HXT4aY4z0iSBYx1h6JvA==", + "path": "swashbuckle.aspnetcore.swaggerui/6.6.2", + "hashPath": "swashbuckle.aspnetcore.swaggerui.6.6.2.nupkg.sha512" + }, + "System.CodeDom/4.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA==", + "path": "system.codedom/4.4.0", + "hashPath": "system.codedom.4.4.0.nupkg.sha512" + }, + "System.Composition/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-d7wMuKQtfsxUa7S13tITC8n1cQzewuhD5iDjZtK2prwFfKVzdYtgrTHgjaV03Zq7feGQ5gkP85tJJntXwInsJA==", + "path": "system.composition/6.0.0", + "hashPath": "system.composition.6.0.0.nupkg.sha512" + }, + "System.Composition.AttributedModel/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-WK1nSDLByK/4VoC7fkNiFuTVEiperuCN/Hyn+VN30R+W2ijO1d0Z2Qm0ScEl9xkSn1G2MyapJi8xpf4R8WRa/w==", + "path": "system.composition.attributedmodel/6.0.0", + "hashPath": "system.composition.attributedmodel.6.0.0.nupkg.sha512" + }, + "System.Composition.Convention/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-XYi4lPRdu5bM4JVJ3/UIHAiG6V6lWWUlkhB9ab4IOq0FrRsp0F4wTyV4Dj+Ds+efoXJ3qbLqlvaUozDO7OLeXA==", + "path": "system.composition.convention/6.0.0", + "hashPath": "system.composition.convention.6.0.0.nupkg.sha512" + }, + "System.Composition.Hosting/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-w/wXjj7kvxuHPLdzZ0PAUt++qJl03t7lENmb2Oev0n3zbxyNULbWBlnd5J5WUMMv15kg5o+/TCZFb6lSwfaUUQ==", + "path": "system.composition.hosting/6.0.0", + "hashPath": "system.composition.hosting.6.0.0.nupkg.sha512" + }, + "System.Composition.Runtime/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qkRH/YBaMPTnzxrS5RDk1juvqed4A6HOD/CwRcDGyPpYps1J27waBddiiq1y93jk2ZZ9wuA/kynM+NO0kb3PKg==", + "path": "system.composition.runtime/6.0.0", + "hashPath": "system.composition.runtime.6.0.0.nupkg.sha512" + }, + "System.Composition.TypedParts/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iUR1eHrL8Cwd82neQCJ00MpwNIBs4NZgXzrPqx8NJf/k4+mwBO0XCRmHYJT4OLSwDDqh5nBLJWkz5cROnrGhRA==", + "path": "system.composition.typedparts/6.0.0", + "hashPath": "system.composition.typedparts.6.0.0.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/.build-verify/PetWash.Api/PetWash.Api.runtimeconfig.json b/.build-verify/PetWash.Api/PetWash.Api.runtimeconfig.json new file mode 100644 index 0000000..b8a4a9c --- /dev/null +++ b/.build-verify/PetWash.Api/PetWash.Api.runtimeconfig.json @@ -0,0 +1,20 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "frameworks": [ + { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + { + "name": "Microsoft.AspNetCore.App", + "version": "8.0.0" + } + ], + "configProperties": { + "System.GC.Server": true, + "System.Reflection.NullabilityInfoContext.IsSupported": true, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/.build-verify/PetWash.Api/PetWash.Api.staticwebassets.endpoints.json b/.build-verify/PetWash.Api/PetWash.Api.staticwebassets.endpoints.json new file mode 100644 index 0000000..5576e88 --- /dev/null +++ b/.build-verify/PetWash.Api/PetWash.Api.staticwebassets.endpoints.json @@ -0,0 +1 @@ +{"Version":1,"ManifestType":"Build","Endpoints":[]} \ No newline at end of file diff --git a/.build-verify/PetWash.Api/appsettings.Development.json b/.build-verify/PetWash.Api/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/.build-verify/PetWash.Api/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/.build-verify/PetWash.Api/appsettings.Production.json b/.build-verify/PetWash.Api/appsettings.Production.json new file mode 100644 index 0000000..c4375f4 --- /dev/null +++ b/.build-verify/PetWash.Api/appsettings.Production.json @@ -0,0 +1,11 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "Microsoft.EntityFrameworkCore": "Warning" + } + }, + "AllowedHosts": "*", + "DatabaseProvider": "MySql" +} diff --git a/.build-verify/PetWash.Api/appsettings.json b/.build-verify/PetWash.Api/appsettings.json new file mode 100644 index 0000000..a006831 --- /dev/null +++ b/.build-verify/PetWash.Api/appsettings.json @@ -0,0 +1,28 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "DefaultConnection": "Data Source=petwash.db", + "MySqlConnection": "Server=101.132.182.216;Database=petwash;User=sc_root;Password=Shsc#$@2024#@!;Port=3306;CharSet=utf8mb4;" + }, + "DatabaseProvider": "Sqlite", + "WeChatPay": { + "AppId": "wxa27a3e3cfce7ae19", + "MerchantId": "1107066208", + "CertificateSerialNumber": "3243AE8427384A692FBAA92C5EC5887BEF1988FD", + "PrivateKeyPath": "", + "PrivateKeyPem": "/etc/ssl/certs/apiclient_key.pem", + "NotifyUrl": "http://csicsizn.com:8080/api/payments/wechat/notify", + "ApiV3Key": "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDMlj1LkO9Cfg3LWBYpe9GBn7vWgLE6kqEG1ohaxbaPxA6OwuGn0XQZfRBbJmncSXGLYahQ7T0OvFBIp8SyYm6q9kol8c9naxd+KxjMrx/qSWqwEJ76meBNK6LBYBVFTobg47cexpyR1TOZK0EFBGJQU2yQ1nsuQczVvq+WaSn4+kVENWf+o2g2nFS1VXNBIjL0/C8vXbz/0Y8k6ecH5mbmy/t+YR6X4TsiIAzIxIcfMMNhVCwqKLsu3D20N0ViYbKToHWIXi8wS8dyruHqQ1lZVJV/fF7pdI36HFI94enksCZrDb1LVFjL+4ccE04MJLIEZSH73RrOFkLaRzn8pwBbAgMBAAECggEAY7kD7baa+XVKMgkg3F2vVJjQzZDzUpKwjQ27b0uaXl95nRrfNZcCGX59n4CM70SZZRBYJAJP1cP", + "PlatformPublicKeyPath": "", + "PlatformPublicKeyPem": "", + "PlatformPublicKeySerial": "", + "Currency": "CNY", + "OrderExpireMinutes": 5 + } +} diff --git a/.build-verify/PetWash.Api/dotnet-tools.json b/.build-verify/PetWash.Api/dotnet-tools.json new file mode 100644 index 0000000..bffb60c --- /dev/null +++ b/.build-verify/PetWash.Api/dotnet-tools.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "10.0.3", + "commands": [ + "dotnet-ef" + ], + "rollForward": false + } + } +} \ No newline at end of file diff --git a/.build-verify/PetWash.Api/runtimes/browser-wasm/nativeassets/net8.0/e_sqlite3.a b/.build-verify/PetWash.Api/runtimes/browser-wasm/nativeassets/net8.0/e_sqlite3.a new file mode 100644 index 0000000..ace30e6 Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/browser-wasm/nativeassets/net8.0/e_sqlite3.a differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-arm/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-arm/native/libe_sqlite3.so new file mode 100644 index 0000000..8520492 Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-arm/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-arm64/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-arm64/native/libe_sqlite3.so new file mode 100644 index 0000000..30b84ea Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-arm64/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-armel/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-armel/native/libe_sqlite3.so new file mode 100644 index 0000000..48de629 Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-armel/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-mips64/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-mips64/native/libe_sqlite3.so new file mode 100644 index 0000000..4f7d693 Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-mips64/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-musl-arm/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-musl-arm/native/libe_sqlite3.so new file mode 100644 index 0000000..2c9dcda Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-musl-arm/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-musl-arm64/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-musl-arm64/native/libe_sqlite3.so new file mode 100644 index 0000000..53949cf Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-musl-arm64/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-musl-x64/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-musl-x64/native/libe_sqlite3.so new file mode 100644 index 0000000..a043d7d Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-musl-x64/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-ppc64le/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-ppc64le/native/libe_sqlite3.so new file mode 100644 index 0000000..3593c9b Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-ppc64le/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-s390x/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-s390x/native/libe_sqlite3.so new file mode 100644 index 0000000..7e01b91 Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-s390x/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-x64/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-x64/native/libe_sqlite3.so new file mode 100644 index 0000000..a8f9ae0 Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-x64/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/linux-x86/native/libe_sqlite3.so b/.build-verify/PetWash.Api/runtimes/linux-x86/native/libe_sqlite3.so new file mode 100644 index 0000000..f9a9b69 Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/linux-x86/native/libe_sqlite3.so differ diff --git a/.build-verify/PetWash.Api/runtimes/maccatalyst-arm64/native/libe_sqlite3.dylib b/.build-verify/PetWash.Api/runtimes/maccatalyst-arm64/native/libe_sqlite3.dylib new file mode 100644 index 0000000..e6612c5 Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/maccatalyst-arm64/native/libe_sqlite3.dylib differ diff --git a/.build-verify/PetWash.Api/runtimes/maccatalyst-x64/native/libe_sqlite3.dylib b/.build-verify/PetWash.Api/runtimes/maccatalyst-x64/native/libe_sqlite3.dylib new file mode 100644 index 0000000..3ad1142 Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/maccatalyst-x64/native/libe_sqlite3.dylib differ diff --git a/.build-verify/PetWash.Api/runtimes/osx-arm64/native/libe_sqlite3.dylib b/.build-verify/PetWash.Api/runtimes/osx-arm64/native/libe_sqlite3.dylib new file mode 100644 index 0000000..21a8f42 Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/osx-arm64/native/libe_sqlite3.dylib differ diff --git a/.build-verify/PetWash.Api/runtimes/osx-x64/native/libe_sqlite3.dylib b/.build-verify/PetWash.Api/runtimes/osx-x64/native/libe_sqlite3.dylib new file mode 100644 index 0000000..ffaf82f Binary files /dev/null and b/.build-verify/PetWash.Api/runtimes/osx-x64/native/libe_sqlite3.dylib differ diff --git a/.build-verify/PetWashControl/PetWashControl.deps.json b/.build-verify/PetWashControl/PetWashControl.deps.json new file mode 100644 index 0000000..7b58122 --- /dev/null +++ b/.build-verify/PetWashControl/PetWashControl.deps.json @@ -0,0 +1,661 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "PetWashControl/1.0.0": { + "dependencies": { + "CommunityToolkit.Mvvm": "8.4.0", + "MQTTnet": "4.3.7.1207", + "Microsoft.Extensions.Hosting": "8.0.1", + "NModbus": "3.0.81", + "QRCoder": "1.6.0" + }, + "runtime": { + "PetWashControl.dll": {} + } + }, + "CommunityToolkit.Mvvm/8.4.0": { + "runtime": { + "lib/net8.0/CommunityToolkit.Mvvm.dll": { + "assemblyVersion": "8.4.0.0", + "fileVersion": "8.4.0.1" + } + } + }, + "Microsoft.Extensions.Configuration/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.Binder/8.0.2": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.Binder.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.724.31311" + } + } + }, + "Microsoft.Extensions.Configuration.CommandLine/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Configuration.FileExtensions/8.0.1": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.724.31311" + } + } + }, + "Microsoft.Extensions.Configuration.Json/8.0.1": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.1", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Configuration.UserSecrets/8.0.1": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.1", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.DependencyInjection/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Diagnostics/8.0.1": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.FileProviders.Physical/8.0.0": { + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Hosting/8.0.1": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.2", + "Microsoft.Extensions.Configuration.CommandLine": "8.0.0", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.1", + "Microsoft.Extensions.Configuration.Json": "8.0.1", + "Microsoft.Extensions.Configuration.UserSecrets": "8.0.1", + "Microsoft.Extensions.DependencyInjection": "8.0.1", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Diagnostics": "8.0.1", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Configuration": "8.0.1", + "Microsoft.Extensions.Logging.Console": "8.0.1", + "Microsoft.Extensions.Logging.Debug": "8.0.1", + "Microsoft.Extensions.Logging.EventLog": "8.0.1", + "Microsoft.Extensions.Logging.EventSource": "8.0.1", + "Microsoft.Extensions.Options": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Hosting.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.1": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Logging/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Logging.Configuration/8.0.1": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.2", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Configuration.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Logging.Console/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Configuration": "8.0.1", + "Microsoft.Extensions.Options": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Console.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Logging.Debug/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Debug.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Logging.EventLog/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", + "System.Diagnostics.EventLog": "8.0.1" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.EventLog.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Logging.EventSource/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.EventSource.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Options/8.0.2": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.224.6711" + } + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.2", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Primitives/8.0.0": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "MQTTnet/4.3.7.1207": { + "runtime": { + "lib/net7.0/MQTTnet.dll": { + "assemblyVersion": "4.3.7.1207", + "fileVersion": "4.3.7.1207" + } + } + }, + "NModbus/3.0.81": { + "runtime": { + "lib/net6.0/NModbus.dll": { + "assemblyVersion": "3.0.81.0", + "fileVersion": "3.0.81.0" + } + } + }, + "QRCoder/1.6.0": { + "runtime": { + "lib/net6.0-windows7.0/QRCoder.dll": { + "assemblyVersion": "1.6.0.0", + "fileVersion": "1.6.0.0" + } + } + }, + "System.Diagnostics.EventLog/8.0.1": { + "runtime": { + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + } + } + }, + "libraries": { + "PetWashControl/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "CommunityToolkit.Mvvm/8.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tqVU8yc/ADO9oiTRyTnwhFN68hCwvkliMierptWOudIAvWY1mWCh5VFh+guwHJmpMwfg0J0rY+yyd5Oy7ty9Uw==", + "path": "communitytoolkit.mvvm/8.4.0", + "hashPath": "communitytoolkit.mvvm.8.4.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", + "path": "microsoft.extensions.configuration/8.0.0", + "hashPath": "microsoft.extensions.configuration.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "path": "microsoft.extensions.configuration.abstractions/8.0.0", + "hashPath": "microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7IQhGK+wjyGrNsPBjJcZwWAr+Wf6D4+TwOptUt77bWtgNkiV8tDEbhFS+dDamtQFZ2X7kWG9m71iZQRj2x3zgQ==", + "path": "microsoft.extensions.configuration.binder/8.0.2", + "hashPath": "microsoft.extensions.configuration.binder.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.CommandLine/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NZuZMz3Q8Z780nKX3ifV1fE7lS+6pynDHK71OfU4OZ1ItgvDOhyOC7E6z+JMZrAj63zRpwbdldYFk499t3+1dQ==", + "path": "microsoft.extensions.configuration.commandline/8.0.0", + "hashPath": "microsoft.extensions.configuration.commandline.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-plvZ0ZIpq+97gdPNNvhwvrEZ92kNml9hd1pe3idMA7svR0PztdzVLkoWLcRFgySYXUJc3kSM3Xw3mNFMo/bxRA==", + "path": "microsoft.extensions.configuration.environmentvariables/8.0.0", + "hashPath": "microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.FileExtensions/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EJzSNO9oaAXnTdtdNO6npPRsIIeZCBSNmdQ091VDO7fBiOtJAAeEq6dtrVXIi3ZyjC5XRSAtVvF8SzcneRHqKQ==", + "path": "microsoft.extensions.configuration.fileextensions/8.0.1", + "hashPath": "microsoft.extensions.configuration.fileextensions.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Json/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-L89DLNuimOghjV3tLx0ArFDwVEJD6+uGB3BMCMX01kaLzXkaXHb2021xOMl2QOxUxbdePKUZsUY7n2UUkycjRg==", + "path": "microsoft.extensions.configuration.json/8.0.1", + "hashPath": "microsoft.extensions.configuration.json.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.UserSecrets/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7tYqdPPpAK+3jO9d5LTuCK2VxrEdf85Ol4trUr6ds4jclBecadWZ/RyPCbNjfbN5iGTfUnD/h65TOQuqQv2c+A==", + "path": "microsoft.extensions.configuration.usersecrets/8.0.1", + "hashPath": "microsoft.extensions.configuration.usersecrets.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", + "path": "microsoft.extensions.dependencyinjection/8.0.1", + "hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==", + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Diagnostics/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-doVPCUUCY7c6LhBsEfiy3W1bvS7Mi6LkfQMS8nlC22jZWNxBv8VO8bdfeyvpYFst6Kxqk7HBC6lytmEoBssvSQ==", + "path": "microsoft.extensions.diagnostics/8.0.1", + "hashPath": "microsoft.extensions.diagnostics.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-elH2vmwNmsXuKmUeMQ4YW9ldXiF+gSGDgg1vORksob5POnpaI6caj1Hu8zaYbEuibhqCoWg0YRWDazBY3zjBfg==", + "path": "microsoft.extensions.diagnostics.abstractions/8.0.1", + "hashPath": "microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", + "path": "microsoft.extensions.fileproviders.abstractions/8.0.0", + "hashPath": "microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Physical/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==", + "path": "microsoft.extensions.fileproviders.physical/8.0.0", + "hashPath": "microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==", + "path": "microsoft.extensions.filesystemglobbing/8.0.0", + "hashPath": "microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Hosting/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bP9EEkHBEfjgYiG8nUaXqMk/ujwJrffOkNPP7onpRMO8R+OUSESSP4xHkCAXgYZ1COP2Q9lXlU5gkMFh20gRuw==", + "path": "microsoft.extensions.hosting/8.0.1", + "hashPath": "microsoft.extensions.hosting.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", + "path": "microsoft.extensions.hosting.abstractions/8.0.1", + "hashPath": "microsoft.extensions.hosting.abstractions.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", + "path": "microsoft.extensions.logging/8.0.1", + "hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", + "path": "microsoft.extensions.logging.abstractions/8.0.2", + "hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Configuration/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", + "path": "microsoft.extensions.logging.configuration/8.0.1", + "hashPath": "microsoft.extensions.logging.configuration.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Console/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uzcg/5U2eLyn5LIKlERkdSxw6VPC1yydnOSQiRRWGBGN3kphq3iL4emORzrojScDmxRhv49gp5BI8U3Dz7y4iA==", + "path": "microsoft.extensions.logging.console/8.0.1", + "hashPath": "microsoft.extensions.logging.console.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Debug/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-B8hqNuYudC2RB+L/DI33uO4rf5by41fZVdcVL2oZj0UyoAZqnwTwYHp1KafoH4nkl1/23piNeybFFASaV2HkFg==", + "path": "microsoft.extensions.logging.debug/8.0.1", + "hashPath": "microsoft.extensions.logging.debug.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.EventLog/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZD1m4GXoxcZeDJIq8qePKj+QAWeQNO/OG8skvrOG8RQfxLp9MAKRoliTc27xanoNUzeqvX5HhS/I7c0BvwAYUg==", + "path": "microsoft.extensions.logging.eventlog/8.0.1", + "hashPath": "microsoft.extensions.logging.eventlog.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.EventSource/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YMXMAla6B6sEf/SnfZYTty633Ool3AH7KOw2LOaaEqwSo2piK4f7HMtzyc3CNiipDnq1fsUSuG5Oc7ZzpVy8WQ==", + "path": "microsoft.extensions.logging.eventsource/8.0.1", + "hashPath": "microsoft.extensions.logging.eventsource.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Options/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", + "path": "microsoft.extensions.options/8.0.2", + "hashPath": "microsoft.extensions.options.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", + "path": "microsoft.extensions.options.configurationextensions/8.0.0", + "hashPath": "microsoft.extensions.options.configurationextensions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", + "path": "microsoft.extensions.primitives/8.0.0", + "hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512" + }, + "MQTTnet/4.3.7.1207": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ah7aHXoedWp5m5a4zy2u4phOEVj0QFYzOb5tFKQeV8RRBrxp+1QREF4ymZuG8D+hzB2dhtrrG81WxTFv0PzOeQ==", + "path": "mqttnet/4.3.7.1207", + "hashPath": "mqttnet.4.3.7.1207.nupkg.sha512" + }, + "NModbus/3.0.81": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EzKEp7CHD8ErBL36iMts+6IrZZ9FEqllaD7Y5XzhoRjlxt5yXRughQ1bxPs99QFYFkW5xfkANB0Qs1gAmYGP8Q==", + "path": "nmodbus/3.0.81", + "hashPath": "nmodbus.3.0.81.nupkg.sha512" + }, + "QRCoder/1.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-XmPA81eo+oRxBuyVdswsSkTGTE1d3thfF11Z1PdD7oB56A6HU4G4AAOdySmGRMb/cljwlFTMWUtosGEnwpS6GA==", + "path": "qrcoder/1.6.0", + "hashPath": "qrcoder.1.6.0.nupkg.sha512" + }, + "System.Diagnostics.EventLog/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-n1ZP7NM2Gkn/MgD8+eOT5MulMj6wfeQMNS2Pizvq5GHCZfjlFMXV2irQlQmJhwA2VABC57M0auudO89Iu2uRLg==", + "path": "system.diagnostics.eventlog/8.0.1", + "hashPath": "system.diagnostics.eventlog.8.0.1.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/.build-verify/PetWashControl/PetWashControl.runtimeconfig.json b/.build-verify/PetWashControl/PetWashControl.runtimeconfig.json new file mode 100644 index 0000000..d721cab --- /dev/null +++ b/.build-verify/PetWashControl/PetWashControl.runtimeconfig.json @@ -0,0 +1,19 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "frameworks": [ + { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + { + "name": "Microsoft.WindowsDesktop.App", + "version": "8.0.0" + } + ], + "configProperties": { + "MVVMTOOLKIT_ENABLE_INOTIFYPROPERTYCHANGING_SUPPORT": true, + "CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false + } + } +} \ No newline at end of file diff --git a/.build-verify/PetWashControl/appsettings.json b/.build-verify/PetWashControl/appsettings.json new file mode 100644 index 0000000..693e229 --- /dev/null +++ b/.build-verify/PetWashControl/appsettings.json @@ -0,0 +1,29 @@ +{ + "apiBaseUrl": "http://101.132.182.216:8080/", + "mqttBrokerHost": "101.132.182.216", + "mqttBrokerPort": 1883, + "mqttApiKey": "dc240ab5ec", + "mqttId": "13064", + "mqttClientId": "PetWashControl", + "modbusIpAddress": "127.0.0.1", + "modbusPort": 502, + "modbusSlaveId": 1, + "modbusConnectTimeoutMs": 5000, + "modbusReadTimeoutMs": 3000, + "paymentCheckIntervalSeconds": 2, + "washSimulationSeconds": 10, + "firstSprayWaterTime": 2, + "afterShampoo1SprayTime": 2, + "afterShampoo2SprayTime": 2, + "afterShampoo3SprayTime": 2, + "sprayShampoo1Time": 1, + "sprayShampoo2Time": 1, + "sprayShampoo3Time": 1, + "coldAirTime": 2, + "hotAirTime": 5, + "uvSterilizationTime": 3, + "adminUsername": "admin", + "adminPassword": "123456", + "adminMaxFailedAttempts": 5, + "adminLockoutMinutes": 15 +} diff --git a/PetWash.Api/Controllers/OrdersController.cs b/PetWash.Api/Controllers/OrdersController.cs index 56d075b..bb85b88 100644 --- a/PetWash.Api/Controllers/OrdersController.cs +++ b/PetWash.Api/Controllers/OrdersController.cs @@ -43,6 +43,33 @@ public class OrdersController : ControllerBase } } + [HttpPost("{id}/payment-qrcode")] + public async Task CreatePaymentQrCode(int id) + { + var order = await _orderService.GetOrderAsync(id); + if (order == null) + { + return NotFound(); + } + + try + { + var payment = await _weChatPayService.CreateNativePayAsync(order, HttpContext.RequestAborted); + + return Ok(new CreateOrderResponse + { + Order = order, + CodeUrl = payment.CodeUrl, + OutTradeNo = payment.OutTradeNo, + ExpiresAt = payment.ExpiresAt + }); + } + catch (InvalidOperationException ex) + { + return StatusCode(StatusCodes.Status502BadGateway, ex.Message); + } + } + [HttpPost("{id}/payment")] public async Task ConfirmPayment(int id) { diff --git a/PetWashControl/Services/ApiService.cs b/PetWashControl/Services/ApiService.cs index 5572f02..ca9bc94 100644 --- a/PetWashControl/Services/ApiService.cs +++ b/PetWashControl/Services/ApiService.cs @@ -1,5 +1,6 @@ using System.Net.Http; using System.Net.Http.Json; +using System.Text.Json; using PetWashControl.Models; namespace PetWashControl.Services; @@ -8,6 +9,7 @@ public class ApiService { private readonly HttpClient _httpClient; private readonly ConfigurationService _config; + private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web); public ApiService(ConfigurationService? config = null) { @@ -23,7 +25,7 @@ public class ApiService { try { - return await _httpClient.GetFromJsonAsync>("api/packages") + return await _httpClient.GetFromJsonAsync>("api/packages") ?? new List(); } catch (HttpRequestException ex) @@ -38,7 +40,23 @@ public class ApiService { var response = await _httpClient.PostAsJsonAsync("api/orders", new { packageId }); response.EnsureSuccessStatusCode(); - return await response.Content.ReadFromJsonAsync(); + + var responseBody = await response.Content.ReadAsStringAsync(); + var parsed = ParseCreateOrderResponse(responseBody); + + if (parsed?.Order?.Id > 0 && + (string.IsNullOrWhiteSpace(parsed.CodeUrl) || string.IsNullOrWhiteSpace(parsed.OutTradeNo))) + { + var fallback = await TryCreatePaymentQrAsync(parsed.Order.Id); + if (fallback?.Order != null && + !string.IsNullOrWhiteSpace(fallback.CodeUrl) && + !string.IsNullOrWhiteSpace(fallback.OutTradeNo)) + { + return fallback; + } + } + + return parsed; } catch (HttpRequestException ex) { @@ -98,6 +116,7 @@ public class ApiService throw new Exception($"更新订单状态失败: {ex.Message}", ex); } } + public async Task UpdatePackageAsync(Package package) { try @@ -124,4 +143,140 @@ public class ApiService throw new Exception($"保存套餐配置失败: {ex.Message}", ex); } } + + private async Task TryCreatePaymentQrAsync(int orderId) + { + try + { + var response = await _httpClient.PostAsync($"api/orders/{orderId}/payment-qrcode", null); + if (!response.IsSuccessStatusCode) + { + return null; + } + + var responseBody = await response.Content.ReadAsStringAsync(); + return ParseCreateOrderResponse(responseBody); + } + catch (HttpRequestException) + { + return null; + } + } + + private static CreateOrderResponse? ParseCreateOrderResponse(string responseBody) + { + if (string.IsNullOrWhiteSpace(responseBody)) + { + return null; + } + + try + { + var parsed = JsonSerializer.Deserialize(responseBody, JsonOptions); + if (parsed?.Order != null || !string.IsNullOrWhiteSpace(parsed?.CodeUrl) || !string.IsNullOrWhiteSpace(parsed?.OutTradeNo)) + { + return parsed; + } + } + catch (JsonException) + { + // Fall back to compatibility parsing below. + } + + try + { + using var document = JsonDocument.Parse(responseBody); + var root = document.RootElement; + var orderElement = GetFirstProperty(root, "order", "data", "result"); + var paymentElement = GetFirstProperty(root, "payment", "wechatPayment", "wechat", "nativePay", "qrCode"); + + return new CreateOrderResponse + { + Order = TryDeserializeOrder(orderElement) ?? TryDeserializeOrder(root), + CodeUrl = GetFirstString(root, "codeUrl", "code_url", "qrCodeUrl", "paymentUrl") + ?? GetFirstString(paymentElement, "codeUrl", "code_url", "qrCodeUrl", "paymentUrl") + ?? string.Empty, + OutTradeNo = GetFirstString(root, "outTradeNo", "out_trade_no") + ?? GetFirstString(paymentElement, "outTradeNo", "out_trade_no") + ?? string.Empty, + ExpiresAt = GetFirstDateTimeOffset(root, "expiresAt", "expires_at", "timeExpire", "time_expire") + ?? GetFirstDateTimeOffset(paymentElement, "expiresAt", "expires_at", "timeExpire", "time_expire") + }; + } + catch (JsonException ex) + { + var preview = responseBody.Length > 300 ? responseBody[..300] + "..." : responseBody; + throw new Exception($"创建订单失败: 无法解析服务器返回。响应内容: {preview}", ex); + } + } + + private static Order? TryDeserializeOrder(JsonElement? element) + { + if (element is not { ValueKind: JsonValueKind.Object }) + { + return null; + } + + try + { + return element.Value.Deserialize(JsonOptions); + } + catch (JsonException) + { + return null; + } + } + + private static JsonElement? GetFirstProperty(JsonElement element, params string[] propertyNames) + { + if (element.ValueKind != JsonValueKind.Object) + { + return null; + } + + foreach (var property in element.EnumerateObject()) + { + foreach (var propertyName in propertyNames) + { + if (string.Equals(property.Name, propertyName, StringComparison.OrdinalIgnoreCase)) + { + return property.Value; + } + } + } + + return null; + } + + private static string? GetFirstString(JsonElement element, params string[] propertyNames) + { + var property = GetFirstProperty(element, propertyNames); + if (property is null) + { + return null; + } + + return property.Value.ValueKind switch + { + JsonValueKind.String => property.Value.GetString(), + JsonValueKind.Number => property.Value.GetRawText(), + _ => null + }; + } + + private static string? GetFirstString(JsonElement? element, params string[] propertyNames) + { + return element is null ? null : GetFirstString(element.Value, propertyNames); + } + + private static DateTimeOffset? GetFirstDateTimeOffset(JsonElement element, params string[] propertyNames) + { + var value = GetFirstString(element, propertyNames); + return DateTimeOffset.TryParse(value, out var result) ? result : null; + } + + private static DateTimeOffset? GetFirstDateTimeOffset(JsonElement? element, params string[] propertyNames) + { + return element is null ? null : GetFirstDateTimeOffset(element.Value, propertyNames); + } } diff --git a/PetWashControl/ViewModels/MainViewModel.cs b/PetWashControl/ViewModels/MainViewModel.cs index 0ecff28..eb1a930 100644 --- a/PetWashControl/ViewModels/MainViewModel.cs +++ b/PetWashControl/ViewModels/MainViewModel.cs @@ -360,21 +360,11 @@ public partial class MainViewModel : ObservableObject LoadDefaultParameters(); } - // 连接 MQTT - await _mqttService.ConnectAsync(); - IsConnected = _mqttService.IsConnected; - _logger.LogInfo("MQTT连接成功"); + await InitializeMqttAsync(); await LoadPackagesAsync(); - if (IsModbusConnected) - { - StatusMessage = "系统就绪,设备已连接"; - } - else - { - StatusMessage = "系统就绪,设备未连接"; - } + StatusMessage = BuildReadyStatusMessage(); _logger.LogInfo("系统初始化完成"); } @@ -387,6 +377,56 @@ public partial class MainViewModel : ObservableObject } } + private async Task InitializeMqttAsync() + { + try + { + await _mqttService.ConnectAsync(); + IsConnected = _mqttService.IsConnected; + + if (IsConnected) + { + _logger.LogInfo("MQTT连接成功"); + return; + } + + _logger.LogWarning("MQTT未连接,系统将以离线模式继续运行"); + } + catch (Exception ex) + { + IsConnected = false; + _logger.LogWarning($"MQTT连接失败,系统将以离线模式继续运行: {ex.Message}"); + } + } + + private string BuildReadyStatusMessage() + { + var modbusStatus = IsModbusConnected ? "设备已连接" : "设备未连接"; + var mqttStatus = IsConnected ? "MQTT已连接" : "MQTT未连接"; + return $"系统就绪,{modbusStatus},{mqttStatus}"; + } + + private async Task TryPublishDeviceStatusAsync(object payload, string actionName) + { + if (!_mqttService.IsConnected) + { + IsConnected = false; + _logger.LogWarning($"MQTT未连接,跳过{actionName}状态上报"); + return; + } + + try + { + await _mqttService.PublishAsync("device/status", payload); + IsConnected = _mqttService.IsConnected; + } + catch (Exception ex) + { + IsConnected = false; + _logger.LogWarning($"MQTT状态上报失败,已忽略,不影响主流程。操作: {actionName},错误: {ex.Message}"); + } + } + /// /// 从 Modbus 设备读取系统参数 /// @@ -954,7 +994,9 @@ public partial class MainViewModel : ObservableObject if (CurrentOrder == null || PaymentQrCodeImage == null || string.IsNullOrWhiteSpace(PaymentOutTradeNo)) { - throw new InvalidOperationException("Payment QR code was not returned by the server."); + _logger.LogError( + $"创建订单响应缺少支付字段。OrderId={CurrentOrder?.Id}, HasCodeUrl={!string.IsNullOrWhiteSpace(PaymentCodeUrl)}, HasOutTradeNo={!string.IsNullOrWhiteSpace(PaymentOutTradeNo)}"); + throw new InvalidOperationException("服务器未返回完整的支付二维码信息,请确认后端已部署最新版本,并检查下单响应中的 codeUrl 和 outTradeNo 字段。"); } StatusMessage = $"订单创建成功,请扫码支付 ¥{package.DisplayPrice}"; @@ -1192,12 +1234,12 @@ public partial class MainViewModel : ObservableObject // await _modbusService.TriggerStartWashAsync(); // 通过MQTT发送关门状态 - await _mqttService.PublishAsync("device/status", new + await TryPublishDeviceStatusAsync(new { status = "door_closed", orderId = CurrentOrder.Id, timestamp = DateTime.Now - }); + }, "关门"); // 更新订单状态 CurrentOrder = await _apiService.UpdateOrderStatusAsync(CurrentOrder.Id, OrderStatus.DoorClosed); @@ -1239,12 +1281,12 @@ public partial class MainViewModel : ObservableObject IsWashing = false; // 通过MQTT发送紧急停止状态 - await _mqttService.PublishAsync("device/status", new + await TryPublishDeviceStatusAsync(new { status = "emergency_stop", orderId = CurrentOrder?.Id, timestamp = DateTime.Now - }); + }, "紧急停止"); StatusMessage = "紧急停止已触发"; _logger.LogInfo("紧急停止执行成功"); @@ -1442,12 +1484,12 @@ public partial class MainViewModel : ObservableObject _logger.LogInfo($"清洗完成,订单ID: {CurrentOrder.Id}"); // 发送清洗完成状态 - await _mqttService.PublishAsync("device/status", new + await TryPublishDeviceStatusAsync(new { status = "completed", orderId = CurrentOrder.Id, timestamp = DateTime.Now - }); + }, "清洗完成"); CurrentOrder = await _apiService.UpdateOrderStatusAsync(CurrentOrder.Id, OrderStatus.Completed); diff --git a/PetWashControl/Views/MainWindow.xaml b/PetWashControl/Views/MainWindow.xaml index 5d5ad59..0797aff 100644 --- a/PetWashControl/Views/MainWindow.xaml +++ b/PetWashControl/Views/MainWindow.xaml @@ -467,7 +467,7 @@ Foreground="#1B5E20" HorizontalAlignment="Center" Margin="0,0,0,6"/> - - + @@ -741,7 +741,7 @@ - + @@ -829,7 +829,7 @@ HorizontalAlignment="Center" Margin="0,0,0,12"/> - -