Skip to content

Commit f98ebc2

Browse files
committed
fix: add ntools.dto and ntools.acl in one package
1 parent 22c4cd7 commit f98ebc2

35 files changed

Lines changed: 1050 additions & 4 deletions
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
name: Publish NuGet Package
2+
3+
on:
4+
workflow_run:
5+
workflows: ["Version and Tag"]
6+
types:
7+
- completed
8+
branches:
9+
- main
10+
workflow_dispatch:
11+
12+
env:
13+
DOTNET_VERSION: '8.0.x'
14+
CONFIGURATION: Release
15+
16+
jobs:
17+
publish-nuget:
18+
runs-on: ubuntu-latest
19+
if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
20+
permissions:
21+
contents: read
22+
packages: write
23+
24+
steps:
25+
- name: Checkout code
26+
uses: actions/checkout@v4
27+
with:
28+
fetch-depth: 0
29+
30+
- name: Setup .NET
31+
uses: actions/setup-dotnet@v4
32+
with:
33+
dotnet-version: ${{ env.DOTNET_VERSION }}
34+
35+
- name: Install GitVersion
36+
uses: gittools/actions/gitversion/setup@v0.10.2
37+
with:
38+
versionSpec: '5.x'
39+
40+
- name: Determine Version
41+
id: gitversion
42+
uses: gittools/actions/gitversion/execute@v0.10.2
43+
with:
44+
useConfigFile: true
45+
configFilePath: GitVersion.yml
46+
47+
- name: Display Version
48+
run: |
49+
echo "Building and publishing version: ${{ steps.gitversion.outputs.nuGetVersionV2 }}"
50+
51+
- name: Restore dependencies
52+
run: dotnet restore
53+
54+
- name: Build NTools
55+
run: dotnet build NTools/NTools.csproj --configuration ${{ env.CONFIGURATION }} --no-restore /p:Version=${{ steps.gitversion.outputs.nuGetVersionV2 }}
56+
57+
- name: Pack NTools
58+
run: dotnet pack NTools/NTools.csproj --configuration ${{ env.CONFIGURATION }} --no-build --output ./artifacts /p:PackageVersion=${{ steps.gitversion.outputs.nuGetVersionV2 }}
59+
60+
- name: Publish NTools to NuGet
61+
run: dotnet nuget push ./artifacts/NTools.${{ steps.gitversion.outputs.nuGetVersionV2 }}.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
62+
continue-on-error: false
63+
64+
- name: Upload artifacts
65+
uses: actions/upload-artifact@v4
66+
with:
67+
name: nuget-packages
68+
path: ./artifacts/*.nupkg
69+
retention-days: 30
70+
71+
- name: Summary
72+
run: |
73+
echo "## NuGet Package Published" >> $GITHUB_STEP_SUMMARY
74+
echo "" >> $GITHUB_STEP_SUMMARY
75+
echo "### NTools" >> $GITHUB_STEP_SUMMARY
76+
echo "- Version: \`${{ steps.gitversion.outputs.nuGetVersionV2 }}\`" >> $GITHUB_STEP_SUMMARY
77+
echo "- Package: [NTools on NuGet](https://www.nuget.org/packages/NTools/${{ steps.gitversion.outputs.nuGetVersionV2 }})" >> $GITHUB_STEP_SUMMARY
78+
echo "" >> $GITHUB_STEP_SUMMARY
79+
echo "### Version Information" >> $GITHUB_STEP_SUMMARY
80+
echo "- SemVer: \`${{ steps.gitversion.outputs.semVer }}\`" >> $GITHUB_STEP_SUMMARY
81+
echo "- Full SemVer: \`${{ steps.gitversion.outputs.fullSemVer }}\`" >> $GITHUB_STEP_SUMMARY
82+
echo "- Commit: \`${{ steps.gitversion.outputs.sha }}\`" >> $GITHUB_STEP_SUMMARY

Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ WORKDIR /src
66
COPY ["NTools.API/NTools.API.csproj", "NTools.API/"]
77
COPY ["NTools.Application/NTools.Application.csproj", "NTools.Application/"]
88
COPY ["NTools.Domain/NTools.Domain.csproj", "NTools.Domain/"]
9+
COPY ["NTools/NTools.csproj", "NTools/"]
910

1011
RUN dotnet restore "NTools.API/NTools.API.csproj"
1112

1213
# Copy only necessary source code (exclude tests, docs, and sensitive files)
1314
COPY ["NTools.API/", "NTools.API/"]
1415
COPY ["NTools.Application/", "NTools.Application/"]
1516
COPY ["NTools.Domain/", "NTools.Domain/"]
17+
COPY ["NTools/", "NTools/"]
1618

1719
# Build the application (disable package generation for Docker build)
1820
WORKDIR "/src/NTools.API"

NTools.API/NTools.API.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@
1010
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="9.0.8" />
1111
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.22.1" />
1212
<PackageReference Include="Swashbuckle.AspNetCore" Version="9.0.4" />
13-
<PackageReference Include="NTools.ACL" Version="0.2.2" />
14-
<PackageReference Include="NTools.DTO" Version="0.2.2" />
1513
</ItemGroup>
1614

1715
<ItemGroup>
1816
<ProjectReference Include="..\NTools.Application\NTools.Application.csproj" />
1917
<ProjectReference Include="..\NTools.Domain\NTools.Domain.csproj" />
18+
<ProjectReference Include="..\NTools\NTools.csproj" />
2019
</ItemGroup>
2120
</Project>

NTools.Domain/NTools.Domain.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</ItemGroup>
1717

1818
<ItemGroup>
19-
<PackageReference Include="NTools.DTO" Version="0.2.2" />
19+
<ProjectReference Include="..\NTools\NTools.csproj" />
2020
</ItemGroup>
2121

2222
<ItemGroup>

NTools.sln

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1+
22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio Version 17
44
VisualStudioVersion = 17.1.32228.430
@@ -32,28 +32,78 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4 - Tests", "4 - Tests", "{
3232
EndProject
3333
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NTools.Tests", "NTools.Tests\NTools.Tests.csproj", "{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}"
3434
EndProject
35+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NTools", "NTools\NTools.csproj", "{2F6164D8-98D3-4F94-8B78-750BF3EA8545}"
36+
EndProject
3537
Global
3638
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3739
Debug|Any CPU = Debug|Any CPU
40+
Debug|x64 = Debug|x64
41+
Debug|x86 = Debug|x86
3842
Release|Any CPU = Release|Any CPU
43+
Release|x64 = Release|x64
44+
Release|x86 = Release|x86
3945
EndGlobalSection
4046
GlobalSection(ProjectConfigurationPlatforms) = postSolution
4147
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
4248
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Debug|Any CPU.Build.0 = Debug|Any CPU
49+
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Debug|x64.ActiveCfg = Debug|Any CPU
50+
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Debug|x64.Build.0 = Debug|Any CPU
51+
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Debug|x86.ActiveCfg = Debug|Any CPU
52+
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Debug|x86.Build.0 = Debug|Any CPU
4353
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Release|Any CPU.ActiveCfg = Release|Any CPU
4454
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Release|Any CPU.Build.0 = Release|Any CPU
55+
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Release|x64.ActiveCfg = Release|Any CPU
56+
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Release|x64.Build.0 = Release|Any CPU
57+
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Release|x86.ActiveCfg = Release|Any CPU
58+
{A1075D98-F8C9-4101-A9BD-D86B2AECA385}.Release|x86.Build.0 = Release|Any CPU
4559
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
4660
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
61+
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Debug|x64.ActiveCfg = Debug|Any CPU
62+
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Debug|x64.Build.0 = Debug|Any CPU
63+
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Debug|x86.ActiveCfg = Debug|Any CPU
64+
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Debug|x86.Build.0 = Debug|Any CPU
4765
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
4866
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Release|Any CPU.Build.0 = Release|Any CPU
67+
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Release|x64.ActiveCfg = Release|Any CPU
68+
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Release|x64.Build.0 = Release|Any CPU
69+
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Release|x86.ActiveCfg = Release|Any CPU
70+
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8}.Release|x86.Build.0 = Release|Any CPU
4971
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
5072
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
73+
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Debug|x64.ActiveCfg = Debug|Any CPU
74+
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Debug|x64.Build.0 = Debug|Any CPU
75+
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Debug|x86.ActiveCfg = Debug|Any CPU
76+
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Debug|x86.Build.0 = Debug|Any CPU
5177
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
5278
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Release|Any CPU.Build.0 = Release|Any CPU
79+
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Release|x64.ActiveCfg = Release|Any CPU
80+
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Release|x64.Build.0 = Release|Any CPU
81+
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Release|x86.ActiveCfg = Release|Any CPU
82+
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6}.Release|x86.Build.0 = Release|Any CPU
5383
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
5484
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Debug|Any CPU.Build.0 = Debug|Any CPU
85+
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Debug|x64.ActiveCfg = Debug|Any CPU
86+
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Debug|x64.Build.0 = Debug|Any CPU
87+
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Debug|x86.ActiveCfg = Debug|Any CPU
88+
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Debug|x86.Build.0 = Debug|Any CPU
5589
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Release|Any CPU.ActiveCfg = Release|Any CPU
5690
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Release|Any CPU.Build.0 = Release|Any CPU
91+
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Release|x64.ActiveCfg = Release|Any CPU
92+
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Release|x64.Build.0 = Release|Any CPU
93+
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Release|x86.ActiveCfg = Release|Any CPU
94+
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82}.Release|x86.Build.0 = Release|Any CPU
95+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
96+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Debug|Any CPU.Build.0 = Debug|Any CPU
97+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Debug|x64.ActiveCfg = Debug|Any CPU
98+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Debug|x64.Build.0 = Debug|Any CPU
99+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Debug|x86.ActiveCfg = Debug|Any CPU
100+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Debug|x86.Build.0 = Debug|Any CPU
101+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Release|Any CPU.ActiveCfg = Release|Any CPU
102+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Release|Any CPU.Build.0 = Release|Any CPU
103+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Release|x64.ActiveCfg = Release|Any CPU
104+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Release|x64.Build.0 = Release|Any CPU
105+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Release|x86.ActiveCfg = Release|Any CPU
106+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545}.Release|x86.Build.0 = Release|Any CPU
57107
EndGlobalSection
58108
GlobalSection(SolutionProperties) = preSolution
59109
HideSolutionNode = FALSE
@@ -63,6 +113,7 @@ Global
63113
{3B88C798-479A-4EB0-8F68-23B3EF1AFAE8} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
64114
{5DE107B9-14A2-4A93-ACF8-E6F6BE632AC6} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
65115
{DC3E8518-7410-4AE2-B387-2F1FA2A94C82} = {E8269F19-9FE3-475C-AF6B-6D17257C9446}
116+
{2F6164D8-98D3-4F94-8B78-750BF3EA8545} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
66117
EndGlobalSection
67118
GlobalSection(ExtensibilityGlobals) = postSolution
68119
SolutionGuid = {09F0A422-0692-4032-9924-7DF1D27AEF60}

NTools/ACL/ChatGPTClient.cs

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
using Microsoft.Extensions.Logging;
2+
using Microsoft.Extensions.Options;
3+
using Newtonsoft.Json;
4+
using NTools.ACL.Interfaces;
5+
using NTools.DTO.ChatGPT;
6+
using NTools.DTO.Settings;
7+
using System.Collections.Generic;
8+
using System.Net.Http;
9+
using System.Text;
10+
using System.Threading.Tasks;
11+
12+
namespace NTools.ACL
13+
{
14+
public class ChatGPTClient : IChatGPTClient
15+
{
16+
private readonly HttpClient _httpClient;
17+
private readonly IOptions<NToolSetting> _ntoolSetting;
18+
private readonly ILogger<ChatGPTClient> _logger;
19+
20+
public ChatGPTClient(HttpClient httpClient, IOptions<NToolSetting> ntoolSetting, ILogger<ChatGPTClient> logger)
21+
{
22+
_httpClient = httpClient;
23+
_ntoolSetting = ntoolSetting;
24+
_logger = logger;
25+
}
26+
27+
public async Task<string> SendMessageAsync(string message)
28+
{
29+
var url = $"{_ntoolSetting.Value.ApiUrl}/ChatGPT/sendMessage";
30+
_logger.LogInformation("Sending message to ChatGPT via URL: {Url}", url);
31+
32+
var request = new ChatGPTMessageRequest
33+
{
34+
Message = message
35+
};
36+
37+
var content = new StringContent(
38+
JsonConvert.SerializeObject(request),
39+
Encoding.UTF8,
40+
"application/json");
41+
42+
var response = await _httpClient.PostAsync(url, content);
43+
response.EnsureSuccessStatusCode();
44+
45+
var aiResponse = await response.Content.ReadAsStringAsync();
46+
_logger.LogInformation("ChatGPT message response received");
47+
48+
return aiResponse;
49+
}
50+
51+
public async Task<string> SendConversationAsync(List<ChatMessage> messages)
52+
{
53+
var url = $"{_ntoolSetting.Value.ApiUrl}/ChatGPT/sendConversation";
54+
_logger.LogInformation("Sending conversation to ChatGPT via URL: {Url} with {Count} messages", url, messages.Count);
55+
56+
var content = new StringContent(
57+
JsonConvert.SerializeObject(messages),
58+
Encoding.UTF8,
59+
"application/json");
60+
61+
var response = await _httpClient.PostAsync(url, content);
62+
response.EnsureSuccessStatusCode();
63+
64+
var aiResponse = await response.Content.ReadAsStringAsync();
65+
_logger.LogInformation("ChatGPT conversation response received");
66+
67+
return aiResponse;
68+
}
69+
70+
public async Task<ChatGPTResponse> SendRequestAsync(ChatGPTRequest request)
71+
{
72+
var url = $"{_ntoolSetting.Value.ApiUrl}/ChatGPT/sendRequest";
73+
_logger.LogInformation("Sending custom request to ChatGPT via URL: {Url}", url);
74+
75+
var content = new StringContent(
76+
JsonConvert.SerializeObject(request),
77+
Encoding.UTF8,
78+
"application/json");
79+
80+
var response = await _httpClient.PostAsync(url, content);
81+
response.EnsureSuccessStatusCode();
82+
83+
var json = await response.Content.ReadAsStringAsync();
84+
_logger.LogInformation("ChatGPT custom request response received");
85+
86+
return JsonConvert.DeserializeObject<ChatGPTResponse>(json);
87+
}
88+
89+
public async Task<DallEResponse> GenerateImageAsync(string prompt)
90+
{
91+
var url = $"{_ntoolSetting.Value.ApiUrl}/ChatGPT/generateImage";
92+
_logger.LogInformation("Generating image with DALL-E via URL: {Url}", url);
93+
94+
var request = new ChatGPTMessageRequest
95+
{
96+
Message = prompt
97+
};
98+
99+
var content = new StringContent(
100+
JsonConvert.SerializeObject(request),
101+
Encoding.UTF8,
102+
"application/json");
103+
104+
var response = await _httpClient.PostAsync(url, content);
105+
response.EnsureSuccessStatusCode();
106+
107+
var json = await response.Content.ReadAsStringAsync();
108+
_logger.LogInformation("Image generation response received");
109+
110+
return JsonConvert.DeserializeObject<DallEResponse>(json);
111+
}
112+
113+
public async Task<DallEResponse> GenerateImageAdvancedAsync(DallERequest request)
114+
{
115+
var url = $"{_ntoolSetting.Value.ApiUrl}/ChatGPT/generateImageAdvanced";
116+
_logger.LogInformation("Generating image with DALL-E (advanced) via URL: {Url}", url);
117+
118+
var content = new StringContent(
119+
JsonConvert.SerializeObject(request),
120+
Encoding.UTF8,
121+
"application/json");
122+
123+
var response = await _httpClient.PostAsync(url, content);
124+
response.EnsureSuccessStatusCode();
125+
126+
var json = await response.Content.ReadAsStringAsync();
127+
_logger.LogInformation("Image generation response received");
128+
129+
return JsonConvert.DeserializeObject<DallEResponse>(json);
130+
}
131+
}
132+
}

NTools/ACL/DocumentClient.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using Microsoft.Extensions.Logging;
2+
using Microsoft.Extensions.Options;
3+
using Newtonsoft.Json;
4+
using NTools.ACL.Interfaces;
5+
using NTools.DTO.Settings;
6+
7+
namespace NTools.ACL
8+
{
9+
public class DocumentClient : IDocumentClient
10+
{
11+
private readonly HttpClient _httpClient;
12+
private readonly IOptions<NToolSetting> _ntoolSetting;
13+
private readonly ILogger<DocumentClient> _logger;
14+
15+
public DocumentClient(HttpClient httpClient, IOptions<NToolSetting> ntoolSetting, ILogger<DocumentClient> logger)
16+
{
17+
_httpClient = httpClient;
18+
_ntoolSetting = ntoolSetting;
19+
_logger = logger;
20+
}
21+
22+
public async Task<bool> validarCpfOuCnpjAsync(string cpfCnpj)
23+
{
24+
var url = $"{_ntoolSetting.Value.ApiUrl}/Document/validarCpfOuCnpj/{cpfCnpj}";
25+
_logger.LogInformation("Accessing URL: {Url}", url);
26+
27+
var response = await _httpClient.GetAsync(url);
28+
response.EnsureSuccessStatusCode();
29+
var json = await response.Content.ReadAsStringAsync();
30+
31+
_logger.LogInformation("Response received: {Response}", json);
32+
33+
return JsonConvert.DeserializeObject<bool>(json);
34+
}
35+
}
36+
}

0 commit comments

Comments
 (0)