From 2db95255706ee58fdfd1cd80269882ddfb6a08a0 Mon Sep 17 00:00:00 2001 From: Riccardo Usardi Date: Wed, 9 Jul 2025 18:51:18 +0200 Subject: [PATCH] api e token con ck in db --- .vs/uWine/DesignTimeBuild/.dtbcache.v2 | Bin 169911 -> 174253 bytes .vs/uWine/v17/.suo | Bin 113664 -> 122368 bytes .vs/uWine/v17/DocumentLayout.backup.json | 233 +++++++++++----- .vs/uWine/v17/DocumentLayout.json | 251 ++++++++++++------ uWine.Api/Controllers/TestController.cs | 32 +++ uWine.Api/Controllers/UserController.cs | 75 +++++- uWine.Api/Program.cs | 31 ++- uWine.Api/appsettings.json | 15 +- uWine.Api/uWine.Api.csproj | 6 + uWine.Core.Domain/Entities/Owner.cs | 1 + uWine.Core.Domain/Entities/Role.cs | 14 +- uWine.Core.Domain/Entities/User.cs | 13 +- .../Repositories/IAuthenticationRepository.cs | 1 + .../net8.0/uWine.Core.Domain.AssemblyInfo.cs | 2 +- ...uWine.Core.Domain.AssemblyInfoInputs.cache | 2 +- .../MariaDbAuthenticationRepository.cs | 35 ++- .../Services/AuthenticationService.cs | 5 + .../Services/OwnerService.cs | 15 +- 18 files changed, 570 insertions(+), 161 deletions(-) create mode 100644 uWine.Api/Controllers/TestController.cs diff --git a/.vs/uWine/DesignTimeBuild/.dtbcache.v2 b/.vs/uWine/DesignTimeBuild/.dtbcache.v2 index 7fa485b40c01f114a1f446834f9cf9a16cda8509..56ba631d9abef1b6525c10e2d48f4dda51a6c2bd 100644 GIT binary patch literal 174253 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 literal 169911 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 CnBkNF delta 5165 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 diff --git a/.vs/uWine/v17/DocumentLayout.backup.json b/.vs/uWine/v17/DocumentLayout.backup.json index 898d65c..8905074 100644 --- a/.vs/uWine/v17/DocumentLayout.backup.json +++ b/.vs/uWine/v17/DocumentLayout.backup.json @@ -2,17 +2,53 @@ "Version": 1, "WorkspaceRootPath": "M:\\uv\\uWine\\", "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|m:\\uv\\uwine\\uwine.api\\controllers\\testcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|solutionrelative:uwine.api\\controllers\\testcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|m:\\uv\\uwine\\uwine.api\\controllers\\usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|solutionrelative:uwine.api\\controllers\\usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\repository\\mariadbauthenticationrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\repository\\mariadbauthenticationrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, + { + "AbsoluteMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|m:\\uv\\uwine\\uwine.api\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|solutionrelative:uwine.api\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|m:\\uv\\uwine\\uwine.api\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", + "RelativeMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|solutionrelative:uwine.api\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" + }, + { + "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\services\\authenticationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\services\\authenticationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\role.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\role.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\repositories\\iauthenticationrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\repositories\\iauthenticationrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\services\\authenticationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\services\\authenticationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\vineplant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\vineplant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\services\\ownerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\services\\ownerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\owner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\owner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\contact.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", @@ -30,10 +66,6 @@ "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\vineyard.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\vineyard.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\services\\ownerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\services\\ownerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\repository\\mariadbcontactrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\repository\\mariadbcontactrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -42,10 +74,6 @@ "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\repository\\mariadbaddressrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\repository\\mariadbaddressrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|m:\\uv\\uwine\\uwine.api\\controllers\\usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|solutionrelative:uwine.api\\controllers\\usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\contacttype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\contacttype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -77,10 +105,6 @@ { "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\row.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\row.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\vineplant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\vineplant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -90,8 +114,22 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 8, + "SelectedChildIndex": 10, "Children": [ + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "UserController.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Api\\Controllers\\UserController.cs", + "RelativeDocumentMoniker": "uWine.Api\\Controllers\\UserController.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Api\\Controllers\\UserController.cs", + "RelativeToolTip": "uWine.Api\\Controllers\\UserController.cs", + "ViewState": "AgIAADcAAAAAAAAAAAAswD8AAAAdAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-05T12:49:48.611Z", + "IsPinned": true, + "EditorCaption": "" + }, { "$type": "Bookmark", "Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}" @@ -122,72 +160,137 @@ }, { "$type": "Document", - "DocumentIndex": 1, + "DocumentIndex": 7, + "Title": "Role.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Role.cs", + "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Role.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Role.cs", + "RelativeToolTip": "uWine.Core.Domain\\Entities\\Role.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAArAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-09T15:32:58.964Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "User.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\User.cs", + "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\User.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\User.cs", + "RelativeToolTip": "uWine.Core.Domain\\Entities\\User.cs", + "ViewState": "AgIAAAwAAAAAAAAAAAAowAwAAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-09T15:30:48.881Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "TestController.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Api\\Controllers\\TestController.cs", + "RelativeDocumentMoniker": "uWine.Api\\Controllers\\TestController.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Api\\Controllers\\TestController.cs", + "RelativeToolTip": "uWine.Api\\Controllers\\TestController.cs", + "ViewState": "AgIAAAsAAAAAAAAAAAA7wBoAAAAmAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-09T14:20:34.76Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "Owner.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Owner.cs", + "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Owner.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Owner.cs", + "RelativeToolTip": "uWine.Core.Domain\\Entities\\Owner.cs", + "ViewState": "AgIAAAsAAAAAAAAAAIA7wB0AAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-09T14:14:45.554Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "Program.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Api\\Program.cs", + "RelativeDocumentMoniker": "uWine.Api\\Program.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Api\\Program.cs", + "RelativeToolTip": "uWine.Api\\Program.cs", + "ViewState": "AgIAABkAAAAAAAAAAAAmwCoAAABDAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-09T14:07:06.764Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "appsettings.json", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Api\\appsettings.json", + "RelativeDocumentMoniker": "uWine.Api\\appsettings.json", + "ToolTip": "M:\\uv\\uWine\\uWine.Api\\appsettings.json", + "RelativeToolTip": "uWine.Api\\appsettings.json", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAeAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", + "WhenOpened": "2025-07-09T14:06:21.768Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 8, "Title": "IAuthenticationRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Repositories\\IAuthenticationRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Repositories\\IAuthenticationRepository.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Repositories\\IAuthenticationRepository.cs", "RelativeToolTip": "uWine.Core.Domain\\Repositories\\IAuthenticationRepository.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAFAAAAAAAAAA==", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAFAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-06T19:32:07.448Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 0, + "DocumentIndex": 3, "Title": "MariaDbAuthenticationRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Repository\\MariaDbAuthenticationRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Infrastructure\\Repository\\MariaDbAuthenticationRepository.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Repository\\MariaDbAuthenticationRepository.cs", "RelativeToolTip": "uWine.Core.Infrastructure\\Repository\\MariaDbAuthenticationRepository.cs", - "ViewState": "AgIAAAgAAAAAAAAAAAAAwAwAAAABAAAAAAAAAA==", + "ViewState": "AgIAADEAAAAAAAAAAAAswDwAAAAnAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-05T13:17:22.615Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 2, + "DocumentIndex": 6, "Title": "AuthenticationService.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Services\\AuthenticationService.cs", "RelativeDocumentMoniker": "uWine.Core.Infrastructure\\Services\\AuthenticationService.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Services\\AuthenticationService.cs", "RelativeToolTip": "uWine.Core.Infrastructure\\Services\\AuthenticationService.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAABAAAAAAAAAA==", + "ViewState": "AgIAAAMAAAAAAAAAAAAAABoAAAA+AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-05T13:13:38.382Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 10, "Title": "OwnerService.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Services\\OwnerService.cs", "RelativeDocumentMoniker": "uWine.Core.Infrastructure\\Services\\OwnerService.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Services\\OwnerService.cs", "RelativeToolTip": "uWine.Core.Infrastructure\\Services\\OwnerService.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAUwCQAAAAVAAAAAAAAAA==", + "ViewState": "AgIAABcAAAAAAAAAAAAqwCQAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-05T12:53:14.567Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 10, - "Title": "UserController.cs", - "DocumentMoniker": "M:\\uv\\uWine\\uWine.Api\\Controllers\\UserController.cs", - "RelativeDocumentMoniker": "uWine.Api\\Controllers\\UserController.cs", - "ToolTip": "M:\\uv\\uWine\\uWine.Api\\Controllers\\UserController.cs", - "RelativeToolTip": "uWine.Api\\Controllers\\UserController.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-05T12:49:48.611Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 12, + "DocumentIndex": 19, "Title": "IContactRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Repositories\\IContactRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Repositories\\IContactRepository.cs", @@ -200,7 +303,7 @@ }, { "$type": "Document", - "DocumentIndex": 11, + "DocumentIndex": 18, "Title": "ContactType.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\ContactType.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\ContactType.cs", @@ -208,11 +311,12 @@ "RelativeToolTip": "uWine.Core.Domain\\Entities\\ContactType.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAuwAIAAAARAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-04T14:33:37.163Z" + "WhenOpened": "2025-07-04T14:33:37.163Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 12, "Title": "Contact.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Contact.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Contact.cs", @@ -225,7 +329,7 @@ }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 16, "Title": "MariaDbContactRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Repository\\MariaDbContactRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Infrastructure\\Repository\\MariaDbContactRepository.cs", @@ -238,7 +342,7 @@ }, { "$type": "Document", - "DocumentIndex": 13, + "DocumentIndex": 20, "Title": "IAddressRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Repositories\\IAddressRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Repositories\\IAddressRepository.cs", @@ -246,23 +350,25 @@ "RelativeToolTip": "uWine.Core.Domain\\Repositories\\IAddressRepository.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-04T13:30:13.643Z" + "WhenOpened": "2025-07-04T13:30:13.643Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 14, + "DocumentIndex": 21, "Title": "Address.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Address.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Address.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Address.cs", "RelativeToolTip": "uWine.Core.Domain\\Entities\\Address.cs", - "ViewState": "AgIAAAoAAAAAAAAAAAAkwAAAAAAAAAAAAAAAAA==", + "ViewState": "AgIAAAoAAAAAAAAAAAA5wAAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-04T12:44:44.188Z" + "WhenOpened": "2025-07-04T12:44:44.188Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 17, "Title": "MariaDbAddressRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Repository\\MariaDbAddressRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Infrastructure\\Repository\\MariaDbAddressRepository.cs", @@ -275,7 +381,7 @@ }, { "$type": "Document", - "DocumentIndex": 15, + "DocumentIndex": 22, "Title": "RowWork.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\RowWork.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\RowWork.cs", @@ -283,11 +389,12 @@ "RelativeToolTip": "uWine.Core.Domain\\Entities\\RowWork.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-03T10:09:09.455Z" + "WhenOpened": "2025-07-03T10:09:09.455Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 17, + "DocumentIndex": 24, "Title": "WarehouseProduct.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\WarehouseProduct.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\WarehouseProduct.cs", @@ -295,11 +402,12 @@ "RelativeToolTip": "uWine.Core.Domain\\Entities\\WarehouseProduct.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAA0AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-03T10:07:37.406Z" + "WhenOpened": "2025-07-03T10:07:37.406Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 16, + "DocumentIndex": 23, "Title": "ProductUsage.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\ProductUsage.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\ProductUsage.cs", @@ -307,11 +415,12 @@ "RelativeToolTip": "uWine.Core.Domain\\Entities\\ProductUsage.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-03T10:07:00.42Z" + "WhenOpened": "2025-07-03T10:07:00.42Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 14, "Title": "Worker.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Worker.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Worker.cs", @@ -324,7 +433,7 @@ }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 13, "Title": "PlantVariety.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\PlantVariety.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\PlantVariety.cs", @@ -337,19 +446,20 @@ }, { "$type": "Document", - "DocumentIndex": 19, + "DocumentIndex": 9, "Title": "VinePlant.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\VinePlant.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\VinePlant.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\VinePlant.cs", "RelativeToolTip": "uWine.Core.Domain\\Entities\\VinePlant.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAbAAAAAAAAAA==", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAAqAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-02T17:05:44.035Z" + "WhenOpened": "2025-07-02T17:05:44.035Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 6, + "DocumentIndex": 15, "Title": "Vineyard.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Vineyard.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Vineyard.cs", @@ -362,7 +472,7 @@ }, { "$type": "Document", - "DocumentIndex": 18, + "DocumentIndex": 25, "Title": "Row.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Row.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Row.cs", @@ -370,7 +480,8 @@ "RelativeToolTip": "uWine.Core.Domain\\Entities\\Row.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-02T17:04:07.145Z" + "WhenOpened": "2025-07-02T17:04:07.145Z", + "EditorCaption": "" } ] } diff --git a/.vs/uWine/v17/DocumentLayout.json b/.vs/uWine/v17/DocumentLayout.json index eb307ae..d12b0a4 100644 --- a/.vs/uWine/v17/DocumentLayout.json +++ b/.vs/uWine/v17/DocumentLayout.json @@ -3,17 +3,53 @@ "WorkspaceRootPath": "M:\\uv\\uWine\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\services\\authenticationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\services\\authenticationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + "AbsoluteMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|m:\\uv\\uwine\\uwine.api\\controllers\\testcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|solutionrelative:uwine.api\\controllers\\testcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|m:\\uv\\uwine\\uwine.api\\controllers\\usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|solutionrelative:uwine.api\\controllers\\usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\user.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\repository\\mariadbauthenticationrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\repository\\mariadbauthenticationrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, + { + "AbsoluteMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|m:\\uv\\uwine\\uwine.api\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|solutionrelative:uwine.api\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|m:\\uv\\uwine\\uwine.api\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}", + "RelativeMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|solutionrelative:uwine.api\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}" + }, + { + "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\services\\authenticationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\services\\authenticationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\role.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\role.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\repositories\\iauthenticationrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\repositories\\iauthenticationrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, + { + "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\vineplant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\vineplant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\services\\ownerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\services\\ownerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\owner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\owner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\contact.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\contact.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -30,10 +66,6 @@ "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\vineyard.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\vineyard.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\services\\ownerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\services\\ownerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\repository\\mariadbcontactrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\repository\\mariadbcontactrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -42,10 +74,6 @@ "AbsoluteMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|m:\\uv\\uwine\\uwine.core.infrastructure\\repository\\mariadbaddressrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{50360CEE-B38B-4729-ACA3-ABC3ED3538E9}|uWine.Core.Infrastructure\\uWine.Core.Infrastructure.csproj|solutionrelative:uwine.core.infrastructure\\repository\\mariadbaddressrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, - { - "AbsoluteMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|m:\\uv\\uwine\\uwine.api\\controllers\\usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{8E5D260E-7395-4875-8A4F-16205F92AD38}|uWine.Api\\uWine.Api.csproj|solutionrelative:uwine.api\\controllers\\usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\contacttype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\contacttype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -77,10 +105,6 @@ { "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\row.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\row.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|m:\\uv\\uwine\\uwine.core.domain\\entities\\vineplant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{1DCFCDC3-C4A6-4864-8868-94AAB81C3DBA}|uWine.Core.Domain\\uWine.Core.Domain.csproj|solutionrelative:uwine.core.domain\\entities\\vineplant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], "DocumentGroupContainers": [ @@ -90,104 +114,155 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 9, + "SelectedChildIndex": 3, "Children": [ { - "$type": "Bookmark", - "Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}" + "$type": "Document", + "DocumentIndex": 1, + "Title": "UserController.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Api\\Controllers\\UserController.cs", + "RelativeDocumentMoniker": "uWine.Api\\Controllers\\UserController.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Api\\Controllers\\UserController.cs", + "RelativeToolTip": "uWine.Api\\Controllers\\UserController.cs", + "ViewState": "AgIAADcAAAAAAAAAAAAswD8AAAAdAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-05T12:49:48.611Z", + "IsPinned": true, + "EditorCaption": "" }, { - "$type": "Bookmark", - "Name": "ST:134:0:{1fc202d4-d401-403c-9834-5b218574bb67}" - }, - { - "$type": "Bookmark", - "Name": "ST:134:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" - }, - { - "$type": "Bookmark", - "Name": "ST:135:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" - }, - { - "$type": "Bookmark", - "Name": "ST:130:0:{1fc202d4-d401-403c-9834-5b218574bb67}" - }, - { - "$type": "Bookmark", - "Name": "ST:131:0:{1fc202d4-d401-403c-9834-5b218574bb67}" - }, - { - "$type": "Bookmark", - "Name": "ST:0:0:{004be353-6879-467c-9d1e-9ac23cdf6d49}" + "$type": "Document", + "DocumentIndex": 7, + "Title": "Role.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Role.cs", + "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Role.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Role.cs", + "RelativeToolTip": "uWine.Core.Domain\\Entities\\Role.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAArAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-09T15:32:58.964Z", + "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 2, + "Title": "User.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\User.cs", + "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\User.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\User.cs", + "RelativeToolTip": "uWine.Core.Domain\\Entities\\User.cs", + "ViewState": "AgIAAAwAAAAAAAAAAAAowAwAAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-09T15:30:48.881Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "TestController.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Api\\Controllers\\TestController.cs", + "RelativeDocumentMoniker": "uWine.Api\\Controllers\\TestController.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Api\\Controllers\\TestController.cs", + "RelativeToolTip": "uWine.Api\\Controllers\\TestController.cs", + "ViewState": "AgIAAAsAAAAAAAAAAAA7wBoAAABAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-09T14:20:34.76Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "Owner.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Owner.cs", + "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Owner.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Owner.cs", + "RelativeToolTip": "uWine.Core.Domain\\Entities\\Owner.cs", + "ViewState": "AgIAAAsAAAAAAAAAAIA7wB0AAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-09T14:14:45.554Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "Program.cs", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Api\\Program.cs", + "RelativeDocumentMoniker": "uWine.Api\\Program.cs", + "ToolTip": "M:\\uv\\uWine\\uWine.Api\\Program.cs", + "RelativeToolTip": "uWine.Api\\Program.cs", + "ViewState": "AgIAABkAAAAAAAAAAAAmwCoAAABDAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-09T14:07:06.764Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "appsettings.json", + "DocumentMoniker": "M:\\uv\\uWine\\uWine.Api\\appsettings.json", + "RelativeDocumentMoniker": "uWine.Api\\appsettings.json", + "ToolTip": "M:\\uv\\uWine\\uWine.Api\\appsettings.json", + "RelativeToolTip": "uWine.Api\\appsettings.json", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAeAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|", + "WhenOpened": "2025-07-09T14:06:21.768Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 8, "Title": "IAuthenticationRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Repositories\\IAuthenticationRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Repositories\\IAuthenticationRepository.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Repositories\\IAuthenticationRepository.cs", "RelativeToolTip": "uWine.Core.Domain\\Repositories\\IAuthenticationRepository.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAFAAAAAAAAAA==", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAFAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-06T19:32:07.448Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 1, + "DocumentIndex": 3, "Title": "MariaDbAuthenticationRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Repository\\MariaDbAuthenticationRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Infrastructure\\Repository\\MariaDbAuthenticationRepository.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Repository\\MariaDbAuthenticationRepository.cs", "RelativeToolTip": "uWine.Core.Infrastructure\\Repository\\MariaDbAuthenticationRepository.cs", - "ViewState": "AgIAAAgAAAAAAAAAAAAAwAwAAAABAAAAAAAAAA==", + "ViewState": "AgIAADEAAAAAAAAAAAAswDwAAAAnAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-05T13:17:22.615Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 0, + "DocumentIndex": 6, "Title": "AuthenticationService.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Services\\AuthenticationService.cs", "RelativeDocumentMoniker": "uWine.Core.Infrastructure\\Services\\AuthenticationService.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Services\\AuthenticationService.cs", "RelativeToolTip": "uWine.Core.Infrastructure\\Services\\AuthenticationService.cs", - "ViewState": "AgIAAAMAAAAAAAAAAAAAABUAAAA5AAAAAAAAAA==", + "ViewState": "AgIAAAMAAAAAAAAAAAAAABoAAAA+AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-05T13:13:38.382Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 10, "Title": "OwnerService.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Services\\OwnerService.cs", "RelativeDocumentMoniker": "uWine.Core.Infrastructure\\Services\\OwnerService.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Services\\OwnerService.cs", "RelativeToolTip": "uWine.Core.Infrastructure\\Services\\OwnerService.cs", - "ViewState": "AgIAAAsAAAAAAAAAAAAUwCQAAAAVAAAAAAAAAA==", + "ViewState": "AgIAABcAAAAAAAAAAAAqwCQAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2025-07-05T12:53:14.567Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 10, - "Title": "UserController.cs", - "DocumentMoniker": "M:\\uv\\uWine\\uWine.Api\\Controllers\\UserController.cs", - "RelativeDocumentMoniker": "uWine.Api\\Controllers\\UserController.cs", - "ToolTip": "M:\\uv\\uWine\\uWine.Api\\Controllers\\UserController.cs", - "RelativeToolTip": "uWine.Api\\Controllers\\UserController.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAJAAAAAAAAAA==", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-05T12:49:48.611Z", - "EditorCaption": "" - }, - { - "$type": "Document", - "DocumentIndex": 12, + "DocumentIndex": 19, "Title": "IContactRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Repositories\\IContactRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Repositories\\IContactRepository.cs", @@ -200,7 +275,7 @@ }, { "$type": "Document", - "DocumentIndex": 11, + "DocumentIndex": 18, "Title": "ContactType.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\ContactType.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\ContactType.cs", @@ -208,11 +283,12 @@ "RelativeToolTip": "uWine.Core.Domain\\Entities\\ContactType.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAuwAIAAAARAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-04T14:33:37.163Z" + "WhenOpened": "2025-07-04T14:33:37.163Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 12, "Title": "Contact.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Contact.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Contact.cs", @@ -225,7 +301,7 @@ }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 16, "Title": "MariaDbContactRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Repository\\MariaDbContactRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Infrastructure\\Repository\\MariaDbContactRepository.cs", @@ -238,7 +314,7 @@ }, { "$type": "Document", - "DocumentIndex": 13, + "DocumentIndex": 20, "Title": "IAddressRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Repositories\\IAddressRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Repositories\\IAddressRepository.cs", @@ -246,23 +322,25 @@ "RelativeToolTip": "uWine.Core.Domain\\Repositories\\IAddressRepository.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-04T13:30:13.643Z" + "WhenOpened": "2025-07-04T13:30:13.643Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 14, + "DocumentIndex": 21, "Title": "Address.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Address.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Address.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Address.cs", "RelativeToolTip": "uWine.Core.Domain\\Entities\\Address.cs", - "ViewState": "AgIAAAoAAAAAAAAAAAAkwAAAAAAAAAAAAAAAAA==", + "ViewState": "AgIAAAoAAAAAAAAAAAA5wAAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-04T12:44:44.188Z" + "WhenOpened": "2025-07-04T12:44:44.188Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 17, "Title": "MariaDbAddressRepository.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Infrastructure\\Repository\\MariaDbAddressRepository.cs", "RelativeDocumentMoniker": "uWine.Core.Infrastructure\\Repository\\MariaDbAddressRepository.cs", @@ -275,7 +353,7 @@ }, { "$type": "Document", - "DocumentIndex": 15, + "DocumentIndex": 22, "Title": "RowWork.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\RowWork.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\RowWork.cs", @@ -283,11 +361,12 @@ "RelativeToolTip": "uWine.Core.Domain\\Entities\\RowWork.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-03T10:09:09.455Z" + "WhenOpened": "2025-07-03T10:09:09.455Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 17, + "DocumentIndex": 24, "Title": "WarehouseProduct.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\WarehouseProduct.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\WarehouseProduct.cs", @@ -295,11 +374,12 @@ "RelativeToolTip": "uWine.Core.Domain\\Entities\\WarehouseProduct.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAA0AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-03T10:07:37.406Z" + "WhenOpened": "2025-07-03T10:07:37.406Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 16, + "DocumentIndex": 23, "Title": "ProductUsage.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\ProductUsage.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\ProductUsage.cs", @@ -307,11 +387,12 @@ "RelativeToolTip": "uWine.Core.Domain\\Entities\\ProductUsage.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-03T10:07:00.42Z" + "WhenOpened": "2025-07-03T10:07:00.42Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 14, "Title": "Worker.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Worker.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Worker.cs", @@ -324,7 +405,7 @@ }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 13, "Title": "PlantVariety.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\PlantVariety.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\PlantVariety.cs", @@ -337,19 +418,20 @@ }, { "$type": "Document", - "DocumentIndex": 19, + "DocumentIndex": 9, "Title": "VinePlant.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\VinePlant.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\VinePlant.cs", "ToolTip": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\VinePlant.cs", "RelativeToolTip": "uWine.Core.Domain\\Entities\\VinePlant.cs", - "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAbAAAAAAAAAA==", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAAqAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-02T17:05:44.035Z" + "WhenOpened": "2025-07-02T17:05:44.035Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 6, + "DocumentIndex": 15, "Title": "Vineyard.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Vineyard.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Vineyard.cs", @@ -362,7 +444,7 @@ }, { "$type": "Document", - "DocumentIndex": 18, + "DocumentIndex": 25, "Title": "Row.cs", "DocumentMoniker": "M:\\uv\\uWine\\uWine.Core.Domain\\Entities\\Row.cs", "RelativeDocumentMoniker": "uWine.Core.Domain\\Entities\\Row.cs", @@ -370,7 +452,8 @@ "RelativeToolTip": "uWine.Core.Domain\\Entities\\Row.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2025-07-02T17:04:07.145Z" + "WhenOpened": "2025-07-02T17:04:07.145Z", + "EditorCaption": "" } ] } diff --git a/uWine.Api/Controllers/TestController.cs b/uWine.Api/Controllers/TestController.cs new file mode 100644 index 0000000..2833d90 --- /dev/null +++ b/uWine.Api/Controllers/TestController.cs @@ -0,0 +1,32 @@ +using Microsoft.AspNetCore.Mvc; +using System.Security.Claims; + +namespace uWine.Api.Controllers +{ + [ApiController] + [Route("/[controller]")] + public class TestController : Controller + { + private readonly IConfiguration _configuration; + + public TestController(IConfiguration configuration) { + _configuration = configuration; + } + [HttpGet("cklogin")] + public IActionResult test() + { + try + { + var TUserId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; + var userId = User.FindFirst("userId").Value; + var role = User.FindFirst(ClaimTypes.Role)?.Value; + return Ok(new { userId, TUserId, role }); + } + catch + { + return Unauthorized("\"title\": \"Unauthorized\""); + } + } + + } +} diff --git a/uWine.Api/Controllers/UserController.cs b/uWine.Api/Controllers/UserController.cs index 76f155e..ced5f2d 100644 --- a/uWine.Api/Controllers/UserController.cs +++ b/uWine.Api/Controllers/UserController.cs @@ -1,14 +1,83 @@ using Microsoft.AspNetCore.Mvc; +using Microsoft.IdentityModel.Tokens; +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; +using System.Text; +using uWine.Core.Domain.Entities; +using uWine.Core.Infrastructure.Services; namespace uWine.Api.Controllers { [ApiController] - [Route("/login/")] + [Route("/[controller]")] public class UserController : Controller { - public IActionResult Index() + private readonly IConfiguration _configuration; + readonly AuthenticationService _authenticationService; + public UserController(IConfiguration configuration, AuthenticationService authenticationService) { - return View(); + _configuration = configuration; + _authenticationService = authenticationService; + } + //public IActionResult Index() + //{ + // return View(); + //} + + [HttpGet("login")] + public IActionResult LoginWithBasic() + { + if (!Request.Headers.ContainsKey("Authorization")) + return Unauthorized("Authorization header missing"); + + var authHeader = Request.Headers["Authorization"].ToString(); + + if (!authHeader.StartsWith("Basic ")) + return Unauthorized("Invalid auth scheme"); + + var encodedCredentials = authHeader.Substring("Basic ".Length).Trim(); + var decodedBytes = Convert.FromBase64String(encodedCredentials); + var decodedCredentials = Encoding.UTF8.GetString(decodedBytes); + + var parts = decodedCredentials.Split(':', 2); + if (parts.Length != 2) + return Unauthorized("Invalid credentials format"); + var user = new User { Username = parts[0], Password = parts[1] }; + var auth = _authenticationService.IsAuthenticated(user); + + // 🔐 Autenticazione fittizia (da sostituire con verifica DB) + if (!auth) + return Unauthorized("Credenziali non valide"); + + user = _authenticationService.User(user); + + var token = GenerateJwtToken(user); + return Ok(new { access_token = token }); + } + + + private string GenerateJwtToken(User user) + { + var jwtSettings = _configuration.GetSection("JwtSettings"); + var claims = new[] + { + new Claim("userId", user.Id.ToString()), + new Claim(ClaimTypes.NameIdentifier, Guid.NewGuid().ToString()), + new Claim(ClaimTypes.Role, user.Role.Id.ToString()) + }; + + var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings["Secret"])); + var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); + + var token = new JwtSecurityToken( + issuer: jwtSettings["Issuer"], + audience: jwtSettings["Audience"], + claims: claims, + expires: DateTime.UtcNow.AddMinutes(Convert.ToDouble(jwtSettings["ExpiresInMinutes"])), + signingCredentials: creds + ); + + return new JwtSecurityTokenHandler().WriteToken(token); } } } diff --git a/uWine.Api/Program.cs b/uWine.Api/Program.cs index d2926ce..fd3069f 100644 --- a/uWine.Api/Program.cs +++ b/uWine.Api/Program.cs @@ -1,4 +1,11 @@ +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.IdentityModel.Tokens; +using System.Text; +using uWine.Core.Domain.Repositories; +using uWine.Core.Infrastructure.Repository; +using uWine.Core.Infrastructure.Services; + namespace uWine.Api { public class Program @@ -7,13 +14,35 @@ namespace uWine.Api { var builder = WebApplication.CreateBuilder(args); - // Add services to the container. + builder.Services.AddAuthentication(options => + { + options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; + options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; + }) + .AddJwtBearer(options => + { + var jwtSettings = builder.Configuration.GetSection("JwtSettings"); + options.TokenValidationParameters = new TokenValidationParameters + { + ValidateIssuer = true, + ValidateAudience = true, + ValidateLifetime = true, + ValidateIssuerSigningKey = true, + ValidIssuer = jwtSettings["Issuer"], + ValidAudience = jwtSettings["Audience"], + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings["Secret"])) + }; + }); builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); + builder.Services.AddTransient(); + builder.Services.AddTransient(); + //builder.Services.AddSingleton(); + var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/uWine.Api/appsettings.json b/uWine.Api/appsettings.json index 10f68b8..b49d850 100644 --- a/uWine.Api/appsettings.json +++ b/uWine.Api/appsettings.json @@ -5,5 +5,18 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "JwtSettings": { + "Secret": "questa-chiave-deve-essere-lunga-e-sicura", + "Issuer": "IlTuoPortaleAPI", + "Audience": "IlTuoClientApp", + "ExpiresInMinutes": 60 + }, + "db": { + "mariaDbServer": "192.168.0.7", + "mariaDbSchema": "uvineyard", + "mariaDbUser": "administrator", + "mariaDbPassword": "123456", + "mariaDbPoolSize": 100 + } } diff --git a/uWine.Api/uWine.Api.csproj b/uWine.Api/uWine.Api.csproj index 9daa180..aeac2f0 100644 --- a/uWine.Api/uWine.Api.csproj +++ b/uWine.Api/uWine.Api.csproj @@ -7,7 +7,13 @@ + + + + + + diff --git a/uWine.Core.Domain/Entities/Owner.cs b/uWine.Core.Domain/Entities/Owner.cs index e4b9c65..8bb645f 100644 --- a/uWine.Core.Domain/Entities/Owner.cs +++ b/uWine.Core.Domain/Entities/Owner.cs @@ -26,4 +26,5 @@ Note = reader.GetString("note") }; } + } } diff --git a/uWine.Core.Domain/Entities/Role.cs b/uWine.Core.Domain/Entities/Role.cs index 2061674..5425585 100644 --- a/uWine.Core.Domain/Entities/Role.cs +++ b/uWine.Core.Domain/Entities/Role.cs @@ -1,9 +1,21 @@ -namespace uWine.Core.Domain.Entities +using MySqlConnector; + +namespace uWine.Core.Domain.Entities { public class Role { public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } + + public static Role FromRecord(MySqlDataReader reader) + { + return new Role + { + Id = reader.GetInt32("role_id"), + Name = reader.GetString("name"), + Description = reader.GetString("description") + }; + } } } diff --git a/uWine.Core.Domain/Entities/User.cs b/uWine.Core.Domain/Entities/User.cs index 7e7fa49..6aa0d8f 100644 --- a/uWine.Core.Domain/Entities/User.cs +++ b/uWine.Core.Domain/Entities/User.cs @@ -1,4 +1,6 @@ -namespace uWine.Core.Domain.Entities +using MySqlConnector; + +namespace uWine.Core.Domain.Entities { public class User { @@ -8,5 +10,14 @@ public Role Role { get; set; } public bool Active { get; set; } public List Owners { get; set; } + public static User LoginUser(MySqlDataReader reader) + { + return new User + { + Id = reader.GetInt32("id"), + Username = reader.GetString("username"), + Role = Role.FromRecord(reader), + }; + } } } diff --git a/uWine.Core.Domain/Repositories/IAuthenticationRepository.cs b/uWine.Core.Domain/Repositories/IAuthenticationRepository.cs index 83119c5..1f1b95d 100644 --- a/uWine.Core.Domain/Repositories/IAuthenticationRepository.cs +++ b/uWine.Core.Domain/Repositories/IAuthenticationRepository.cs @@ -6,5 +6,6 @@ namespace uWine.Core.Domain.Repositories public interface IAuthenticationRepository { bool Valid(User user); + User LoggedUser(User user); } } \ No newline at end of file diff --git a/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfo.cs b/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfo.cs index 47d505d..82afa8c 100644 --- a/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfo.cs +++ b/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("uWine.Core.Domain")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7941a858fdaae67757b9b4caff965d2721e9b28d")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a172f05269c07a86949730b68f466dbb39efd35c")] [assembly: System.Reflection.AssemblyProductAttribute("uWine.Core.Domain")] [assembly: System.Reflection.AssemblyTitleAttribute("uWine.Core.Domain")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfoInputs.cache b/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfoInputs.cache index f9eff68..d8519ce 100644 --- a/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfoInputs.cache +++ b/uWine.Core.Domain/obj/Debug/net8.0/uWine.Core.Domain.AssemblyInfoInputs.cache @@ -1 +1 @@ -d2610517bddbb48769c9f8f62bd9f8107a8dab356a5412c7a5c3dfc9b3ba2edd +8b28d92b53d240bb0fa1329b33b29da5b306fb49220cf2f4e3d5082767ed6f9b diff --git a/uWine.Core.Infrastructure/Repository/MariaDbAuthenticationRepository.cs b/uWine.Core.Infrastructure/Repository/MariaDbAuthenticationRepository.cs index 78bda1f..d533b6e 100644 --- a/uWine.Core.Infrastructure/Repository/MariaDbAuthenticationRepository.cs +++ b/uWine.Core.Infrastructure/Repository/MariaDbAuthenticationRepository.cs @@ -22,10 +22,11 @@ namespace uWine.Core.Infrastructure.Repository if (user == null || string.IsNullOrEmpty(user.Username) || string.IsNullOrEmpty(user.Password)) return false; using (var conn = Connection()) { - var cmd = new MySqlCommand("sp_check_login", conn); + conn.Open(); + var cmd = new MySqlCommand("sp_login_user", conn); cmd.CommandType = CommandType.StoredProcedure; - cmd.Parameters.AddWithValue("@Username", user.Username); - cmd.Parameters.AddWithValue("@Password", user.Password); + cmd.Parameters.AddWithValue("@IN_username", user.Username); + cmd.Parameters.AddWithValue("@IN_password", user.Password); using (var reader = cmd.ExecuteReader()) { if (reader.Read()) @@ -36,5 +37,33 @@ namespace uWine.Core.Infrastructure.Repository } return false; } + + public User LoggedUser(User user) + { + using (var conn = Connection()) + { + conn.Open(); + var cmd = new MySqlCommand($@"SELECT u.id, + username, + u.role as role_id, + r.role as name, + description + FROM t_users u + JOIN t_role r on r.id = u.role + WHERE username = @username AND active = 1 AND + password = SHA2(CONCAT(@password, salt), 512)", conn); + cmd.Parameters.AddWithValue("username", user.Username); + cmd.Parameters.AddWithValue ("password", user.Password); + using( var reader = cmd.ExecuteReader()) + { + if (reader.Read()) + { + return User.LoginUser(reader); + } + + } + } + return new User(); + } } } diff --git a/uWine.Core.Infrastructure/Services/AuthenticationService.cs b/uWine.Core.Infrastructure/Services/AuthenticationService.cs index 46afc30..de5e87a 100644 --- a/uWine.Core.Infrastructure/Services/AuthenticationService.cs +++ b/uWine.Core.Infrastructure/Services/AuthenticationService.cs @@ -21,5 +21,10 @@ namespace uWine.Core.Infrastructure.Services { return _authenticationRepository.Valid(user); } + + public User User(User user) + { + return _authenticationRepository.LoggedUser(user); + } } } diff --git a/uWine.Core.Infrastructure/Services/OwnerService.cs b/uWine.Core.Infrastructure/Services/OwnerService.cs index 20a97c7..25f9707 100644 --- a/uWine.Core.Infrastructure/Services/OwnerService.cs +++ b/uWine.Core.Infrastructure/Services/OwnerService.cs @@ -16,9 +16,9 @@ namespace uWine.Core.Infrastructure.Services IVineyardRepository _vineyardRepository; public OwnerService( - IOwnerRepository ownerRepository, - IAddressRepository addressRepository, - IContactRepository contactRepository, + IOwnerRepository ownerRepository, + IAddressRepository addressRepository, + IContactRepository contactRepository, IVineyardRepository vineyardRepository ) { @@ -28,9 +28,16 @@ namespace uWine.Core.Infrastructure.Services _vineyardRepository = vineyardRepository; } + public Owner Owner(int ownerId) + { + var owner = _ownerRepository.Simple(ownerId); + owner = FillData(owner); + return owner; + } + public Owner FillData(Owner owner) { - owner.Addresses =_addressRepository.OwnerAddresses(owner.Id); + owner.Addresses = _addressRepository.OwnerAddresses(owner.Id); owner.Contacts = _contactRepository.OwnerContacts(owner.Id); owner.Vineyards = _vineyardRepository.GetOwnerVineyards(owner.Id);