diff --git a/.gitignore b/.gitignore index e10897e..f349058 100644 --- a/.gitignore +++ b/.gitignore @@ -54,4 +54,8 @@ TestResult.xml nunit-*.xml -appsettings.Development.json \ No newline at end of file +appsettings.Development.json +appsettings.json +*appsettings.json + +.env \ No newline at end of file diff --git a/.vs/Fin-Backend/CopilotIndices/17.14.734.62261/CodeChunks.db b/.vs/Fin-Backend/CopilotIndices/17.14.734.62261/CodeChunks.db new file mode 100644 index 0000000..82e55a1 Binary files /dev/null and b/.vs/Fin-Backend/CopilotIndices/17.14.734.62261/CodeChunks.db differ diff --git a/.vs/Fin-Backend/CopilotIndices/17.14.734.62261/SemanticSymbols.db b/.vs/Fin-Backend/CopilotIndices/17.14.734.62261/SemanticSymbols.db new file mode 100644 index 0000000..a2a78ed Binary files /dev/null and b/.vs/Fin-Backend/CopilotIndices/17.14.734.62261/SemanticSymbols.db differ diff --git a/.vs/Fin-Backend/DesignTimeBuild/.dtbcache.v2 b/.vs/Fin-Backend/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000..275c4e5 Binary files /dev/null and b/.vs/Fin-Backend/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/Fin-Backend/FileContentIndex/6f825f2f-6b18-4bcc-9a27-756adc3ec514.vsidx b/.vs/Fin-Backend/FileContentIndex/6f825f2f-6b18-4bcc-9a27-756adc3ec514.vsidx new file mode 100644 index 0000000..ebc3c49 Binary files /dev/null and b/.vs/Fin-Backend/FileContentIndex/6f825f2f-6b18-4bcc-9a27-756adc3ec514.vsidx differ diff --git a/.vs/Fin-Backend/FileContentIndex/8be34b6f-428b-401a-b31e-b52358fdea5c.vsidx b/.vs/Fin-Backend/FileContentIndex/8be34b6f-428b-401a-b31e-b52358fdea5c.vsidx new file mode 100644 index 0000000..89767a3 Binary files /dev/null and b/.vs/Fin-Backend/FileContentIndex/8be34b6f-428b-401a-b31e-b52358fdea5c.vsidx differ diff --git a/.vs/Fin-Backend/v17/.futdcache.v2 b/.vs/Fin-Backend/v17/.futdcache.v2 new file mode 100644 index 0000000..f46f1a6 Binary files /dev/null and b/.vs/Fin-Backend/v17/.futdcache.v2 differ diff --git a/.vs/Fin-Backend/v17/.suo b/.vs/Fin-Backend/v17/.suo new file mode 100644 index 0000000..679eb1d Binary files /dev/null and b/.vs/Fin-Backend/v17/.suo differ diff --git a/.vs/Fin-Backend/v17/DocumentLayout.json b/.vs/Fin-Backend/v17/DocumentLayout.json new file mode 100644 index 0000000..6d93739 --- /dev/null +++ b/.vs/Fin-Backend/v17/DocumentLayout.json @@ -0,0 +1,394 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\authentications\\activatedusermiddleware.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\authentications\\activatedusermiddleware.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.domain\\tenants\\entities\\tenantuser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|solutionrelative:fin.domain\\tenants\\entities\\tenantuser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.domain\\tenants\\entities\\tenant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|solutionrelative:fin.domain\\tenants\\entities\\tenant.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{1F2A1D01-85F1-46DC-A5BD-03B7FCF47B82}|Fin.Application\\Fin.Application.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.application\\globals\\services\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1F2A1D01-85F1-46DC-A5BD-03B7FCF47B82}|Fin.Application\\Fin.Application.csproj|solutionrelative:fin.application\\globals\\services\\randomgenerator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{1F2A1D01-85F1-46DC-A5BD-03B7FCF47B82}|Fin.Application\\Fin.Application.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.application\\authentications\\services\\authenticationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{1F2A1D01-85F1-46DC-A5BD-03B7FCF47B82}|Fin.Application\\Fin.Application.csproj|solutionrelative:fin.application\\authentications\\services\\authenticationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.domain\\users\\dtos\\userdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|solutionrelative:fin.domain\\users\\dtos\\userdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.domain\\users\\dtos\\userdeleterequestdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|solutionrelative:fin.domain\\users\\dtos\\userdeleterequestdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.domain\\notifications\\entities\\notificationuserdelivery.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|solutionrelative:fin.domain\\notifications\\entities\\notificationuserdelivery.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.domain\\notifications\\enums\\notificationway.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{E698F897-BB2D-42EF-879A-03B0DA36F212}|Fin.Domain\\Fin.Domain.csproj|solutionrelative:fin.domain\\notifications\\enums\\notificationway.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\unitofworks\\unitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\unitofworks\\unitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\authentications\\enums\\loginerrorcode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\authentications\\enums\\loginerrorcode.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\authentications\\dtos\\logininput.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\authentications\\dtos\\logininput.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\authentications\\dtos\\loginoutput.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\authentications\\dtos\\loginoutput.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\firebases\\firebaseclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\firebases\\firebaseclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\firebases\\firebasenotificationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\firebases\\firebasenotificationservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\firebases\\addfirebaseextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\firebases\\addfirebaseextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\redis\\addredisextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\redis\\addredisextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\notifications\\hubs\\notificationhub.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\notifications\\hubs\\notificationhub.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\notifications\\hubs\\customuseridprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\notifications\\hubs\\customuseridprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\notifications\\hubs\\addnotificationbackgroundjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\notifications\\hubs\\addnotificationbackgroundjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\consts\\appconsts.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\consts\\appconsts.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|c:\\users\\gustavo passos\\desktop\\develop\\fin\\fin-backend\\fin.infrastructure\\firebases\\firebasesendresult.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{8A2A53B4-B6F1-47DC-A681-E1819AE39A0B}|Fin.Infrastructure\\Fin.Infrastructure.csproj|solutionrelative:fin.infrastructure\\firebases\\firebasesendresult.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 8, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "RandomGenerator.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Application\\Globals\\Services\\RandomGenerator.cs", + "RelativeDocumentMoniker": "Fin.Application\\Globals\\Services\\RandomGenerator.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Application\\Globals\\Services\\RandomGenerator.cs", + "RelativeToolTip": "Fin.Application\\Globals\\Services\\RandomGenerator.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T14:49:22.412Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "AuthenticationService.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Application\\Authentications\\Services\\AuthenticationService.cs", + "RelativeDocumentMoniker": "Fin.Application\\Authentications\\Services\\AuthenticationService.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Application\\Authentications\\Services\\AuthenticationService.cs", + "RelativeToolTip": "Fin.Application\\Authentications\\Services\\AuthenticationService.cs", + "ViewState": "AgIAABMAAAAAAAAAAIAwwCAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T14:18:54.877Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "UserDto.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Users\\Dtos\\UserDto.cs", + "RelativeDocumentMoniker": "Fin.Domain\\Users\\Dtos\\UserDto.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Users\\Dtos\\UserDto.cs*", + "RelativeToolTip": "Fin.Domain\\Users\\Dtos\\UserDto.cs*", + "ViewState": "AgIAAAMAAAAAAAAAAAAAABEAAAAWAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T14:05:36.16Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "UserDeleteRequestDto.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Users\\Dtos\\UserDeleteRequestDto.cs", + "RelativeDocumentMoniker": "Fin.Domain\\Users\\Dtos\\UserDeleteRequestDto.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Users\\Dtos\\UserDeleteRequestDto.cs", + "RelativeToolTip": "Fin.Domain\\Users\\Dtos\\UserDeleteRequestDto.cs", + "ViewState": "AgIAAAcAAAAAAAAAAAAQwB4AAAA1AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T14:05:29.028Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "NotificationUserDelivery.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Notifications\\Entities\\NotificationUserDelivery.cs", + "RelativeDocumentMoniker": "Fin.Domain\\Notifications\\Entities\\NotificationUserDelivery.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Notifications\\Entities\\NotificationUserDelivery.cs", + "RelativeToolTip": "Fin.Domain\\Notifications\\Entities\\NotificationUserDelivery.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAFAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T13:11:44.769Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "NotificationWay.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Notifications\\Enums\\NotificationWay.cs", + "RelativeDocumentMoniker": "Fin.Domain\\Notifications\\Enums\\NotificationWay.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Notifications\\Enums\\NotificationWay.cs", + "RelativeToolTip": "Fin.Domain\\Notifications\\Enums\\NotificationWay.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:39:58.617Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "TenantUser.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Tenants\\Entities\\TenantUser.cs", + "RelativeDocumentMoniker": "Fin.Domain\\Tenants\\Entities\\TenantUser.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Tenants\\Entities\\TenantUser.cs", + "RelativeToolTip": "Fin.Domain\\Tenants\\Entities\\TenantUser.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:39:48.55Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "Tenant.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Tenants\\Entities\\Tenant.cs", + "RelativeDocumentMoniker": "Fin.Domain\\Tenants\\Entities\\Tenant.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Domain\\Tenants\\Entities\\Tenant.cs", + "RelativeToolTip": "Fin.Domain\\Tenants\\Entities\\Tenant.cs", + "ViewState": "AgIAAAUAAAAAAAAAAAAxwBwAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:39:38.11Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "ActivatedUserMiddleware.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Authentications\\ActivatedUserMiddleware.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Authentications\\ActivatedUserMiddleware.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Authentications\\ActivatedUserMiddleware.cs", + "RelativeToolTip": "Fin.Infrastructure\\Authentications\\ActivatedUserMiddleware.cs", + "ViewState": "AgIAAAYAAAAAAAAAAAAAABcAAAAJAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:38:34.582Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 9, + "Title": "UnitOfWork.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\UnitOfWorks\\UnitOfWork.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\UnitOfWorks\\UnitOfWork.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\UnitOfWorks\\UnitOfWork.cs", + "RelativeToolTip": "Fin.Infrastructure\\UnitOfWorks\\UnitOfWork.cs", + "ViewState": "AgIAADIAAAAAAAAAAAAUwAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:39:08.167Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 10, + "Title": "LoginErrorCode.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Authentications\\Enums\\LoginErrorCode.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Authentications\\Enums\\LoginErrorCode.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Authentications\\Enums\\LoginErrorCode.cs", + "RelativeToolTip": "Fin.Infrastructure\\Authentications\\Enums\\LoginErrorCode.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:38:20.554Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 12, + "Title": "LoginOutput.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Authentications\\Dtos\\LoginOutput.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Authentications\\Dtos\\LoginOutput.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Authentications\\Dtos\\LoginOutput.cs", + "RelativeToolTip": "Fin.Infrastructure\\Authentications\\Dtos\\LoginOutput.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:38:03.449Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "LoginInput.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Authentications\\Dtos\\LoginInput.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Authentications\\Dtos\\LoginInput.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Authentications\\Dtos\\LoginInput.cs", + "RelativeToolTip": "Fin.Infrastructure\\Authentications\\Dtos\\LoginInput.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:38:02.088Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 13, + "Title": "FirebaseClient.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Firebases\\FirebaseClient.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Firebases\\FirebaseClient.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Firebases\\FirebaseClient.cs", + "RelativeToolTip": "Fin.Infrastructure\\Firebases\\FirebaseClient.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:37:26.15Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 14, + "Title": "FirebaseNotificationService.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Firebases\\FirebaseNotificationService.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Firebases\\FirebaseNotificationService.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Firebases\\FirebaseNotificationService.cs", + "RelativeToolTip": "Fin.Infrastructure\\Firebases\\FirebaseNotificationService.cs", + "ViewState": "AgIAAAEAAAAAAAAAAAAgwAwAAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:36:52.361Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 15, + "Title": "AddFirebaseExtension.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Firebases\\AddFirebaseExtension.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Firebases\\AddFirebaseExtension.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Firebases\\AddFirebaseExtension.cs", + "RelativeToolTip": "Fin.Infrastructure\\Firebases\\AddFirebaseExtension.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:36:48.056Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 16, + "Title": "AddRedisExtension.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Redis\\AddRedisExtension.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Redis\\AddRedisExtension.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Redis\\AddRedisExtension.cs", + "RelativeToolTip": "Fin.Infrastructure\\Redis\\AddRedisExtension.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABcAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:36:15.37Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 17, + "Title": "NotificationHub.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Notifications\\Hubs\\NotificationHub.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Notifications\\Hubs\\NotificationHub.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Notifications\\Hubs\\NotificationHub.cs", + "RelativeToolTip": "Fin.Infrastructure\\Notifications\\Hubs\\NotificationHub.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:36:12.834Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 18, + "Title": "CustomUserIdProvider.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Notifications\\Hubs\\CustomUserIdProvider.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Notifications\\Hubs\\CustomUserIdProvider.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Notifications\\Hubs\\CustomUserIdProvider.cs", + "RelativeToolTip": "Fin.Infrastructure\\Notifications\\Hubs\\CustomUserIdProvider.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:36:09.812Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 19, + "Title": "AddNotificationBackgroundJob.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Notifications\\Hubs\\AddNotificationBackgroundJob.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Notifications\\Hubs\\AddNotificationBackgroundJob.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Notifications\\Hubs\\AddNotificationBackgroundJob.cs", + "RelativeToolTip": "Fin.Infrastructure\\Notifications\\Hubs\\AddNotificationBackgroundJob.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:36:07.883Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 20, + "Title": "AppConsts.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Consts\\AppConsts.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Consts\\AppConsts.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Consts\\AppConsts.cs", + "RelativeToolTip": "Fin.Infrastructure\\Consts\\AppConsts.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:35:46.004Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 21, + "Title": "FirebaseSendResult.cs", + "DocumentMoniker": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Firebases\\FirebaseSendResult.cs", + "RelativeDocumentMoniker": "Fin.Infrastructure\\Firebases\\FirebaseSendResult.cs", + "ToolTip": "C:\\Users\\Gustavo Passos\\Desktop\\Develop\\Fin\\fin-backend\\Fin.Infrastructure\\Firebases\\FirebaseSendResult.cs", + "RelativeToolTip": "Fin.Infrastructure\\Firebases\\FirebaseSendResult.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-08-15T12:32:54.541Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.vs/ProjectEvaluation/fin-backend.metadata.v9.bin b/.vs/ProjectEvaluation/fin-backend.metadata.v9.bin new file mode 100644 index 0000000..f3a089d Binary files /dev/null and b/.vs/ProjectEvaluation/fin-backend.metadata.v9.bin differ diff --git a/.vs/ProjectEvaluation/fin-backend.projects.v9.bin b/.vs/ProjectEvaluation/fin-backend.projects.v9.bin new file mode 100644 index 0000000..8d5050b Binary files /dev/null and b/.vs/ProjectEvaluation/fin-backend.projects.v9.bin differ diff --git a/.vs/ProjectEvaluation/fin-backend.strings.v9.bin b/.vs/ProjectEvaluation/fin-backend.strings.v9.bin new file mode 100644 index 0000000..c462925 Binary files /dev/null and b/.vs/ProjectEvaluation/fin-backend.strings.v9.bin differ diff --git a/Fin.Api/Fin.Api.csproj.user b/Fin.Api/Fin.Api.csproj.user new file mode 100644 index 0000000..9ff5820 --- /dev/null +++ b/Fin.Api/Fin.Api.csproj.user @@ -0,0 +1,6 @@ + + + + https + + \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7f54fc6 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,38 @@ +version: '3.8' + +services: + postgres: + image: postgres:16 + container_name: fin_app + restart: always + environment: + POSTGRES_DB: fin_app + POSTGRES_USER: fin_app + POSTGRES_PASSWORD: fin_app + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U fin_app"] + interval: 10s + timeout: 5s + retries: 5 + + redis: + image: redis:7-alpine + container_name: fin_redis + restart: always + ports: + - "6379:6379" + volumes: + - redis_data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 3s + retries: 5 + +volumes: + postgres_data: + redis_data: diff --git a/docker.md b/docker.md new file mode 100644 index 0000000..bb8a2e3 --- /dev/null +++ b/docker.md @@ -0,0 +1,122 @@ +# Docker Compose - Fin Backend Infrastructure + +## Como rodar o banco de dados PostgreSQL e Redis + +1. **Suba os serviços (PostgreSQL + Redis):** + ``` + docker compose up -d + ``` + Isso irá criar os seguintes containers: + + **PostgreSQL:** + - Container: `fin_app` + - Banco: `fin_app` + - Usuário: `fin_app` + - Senha: `fin_app` + - Porta: `5432` + + **Redis:** + - Container: `fin_redis` + - Porta: `6379` + - Versão: Redis 7 (Alpine) + + **Verificar se os containers estão rodando:** + ``` + docker ps -a + ``` + +2. **Configure as connection strings no seu `appsettings.json`:** + **Para rodar a aplicação localmente:** + ```json + "ConnectionStrings": { + "DefaultConnection": "Host=localhost;Port=5432;Database=fin_app;Username=fin_app;Password=fin_app" + }, + "ApiSettings": { + "Redis": "localhost:6379" + } + ``` + +3. **Rode as migrations para criar as tabelas:** + ``` + dotnet ef database update --project .\Fin.Infrastructure\ + ``` + > Se necessário, instale o pacote de ferramentas: + > ``` + > dotnet tool install --global dotnet-ef + > ``` + +4. **Verifique se tudo está ok:** + ``` + dotnet build + ``` + +5. **Inicie a aplicação:** + ``` + dotnet run --project .\Fin.Api\ + ``` +--- +## Observações + +### PostgreSQL +- O container do PostgreSQL pode ser acessado via qualquer cliente PostgreSQL na porta `5432`. +- As migrations do Entity Framework Core criam todas as tabelas necessárias para todos os domínios do projeto. + +### Redis +- O Redis é usado para cache e sessões no projeto. +- Porta padrão: `6379` +- Os dados do Redis são persistidos no volume `redis_data` +- Health check configurado para verificar se o serviço está ativo + +### Desenvolvimento +- O comando `dotnet build` verifica se o projeto está compilando corretamente. +- O comando `dotnet run` inicia a API. +- Certifique-se de que tanto PostgreSQL quanto Redis estejam rodando antes de iniciar a aplicação. + +**Se já possui o banco e Redis configurados, utilize suas variáveis de ambiente em um `.env`:** + ```json + "ConnectionStrings": { + "DefaultConnection": "Host=${POSTGRES_HOST};Port=${POSTGRES_PORT};Database=${POSTGRES_DB};Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD}" + }, + "ApiSettings": { + "Redis": "${REDIS_HOST}:${REDIS_PORT}" + } + ``` + + **Exemplo de arquivo `.env`:** + ```env + POSTGRES_HOST=localhost + POSTGRES_PORT=5432 + POSTGRES_DB=fin_app + POSTGRES_USER=fin_app + POSTGRES_PASSWORD=fin_app + REDIS_HOST=localhost + REDIS_PORT=6379 + ``` + +--- +## Comandos úteis + +**Para parar os serviços:** +``` +docker compose down +``` + +**Para parar e remover volumes (CUIDADO: apaga os dados):** +``` +docker compose down -v +``` + +**Para ver os logs dos containers:** +``` +docker compose logs -f +``` + +**Para conectar diretamente ao PostgreSQL:** +``` +docker exec -it fin_app psql -U fin_app -d fin_app +``` + +**Para conectar diretamente ao Redis:** +``` +docker exec -it fin_redis redis-cli +``` \ No newline at end of file