diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml
index 588900d..a765d2e 100644
--- a/.gitea/workflows/build.yml
+++ b/.gitea/workflows/build.yml
@@ -34,15 +34,15 @@ jobs:
- name: Build API image
run: |
- docker build -f api/Dockerfile -t "${REGISTRY_HOST}/${API_IMAGE}:${IMAGE_TAG}" .
+ docker build -f Apis/api/Dockerfile -t "${REGISTRY_HOST}/${API_IMAGE}:${IMAGE_TAG}" .
- name: Build CV Matcher API image
run: |
- docker build -f cv-matcher-api/Dockerfile -t "${REGISTRY_HOST}/${CV_MATCHER_API_IMAGE}:${IMAGE_TAG}" .
+ docker build -f Apis/cv-matcher-api/Dockerfile -t "${REGISTRY_HOST}/${CV_MATCHER_API_IMAGE}:${IMAGE_TAG}" .
- name: Build RAG API image
run: |
- docker build -f rag-api/Dockerfile -t "${REGISTRY_HOST}/${RAG_API_IMAGE}:${IMAGE_TAG}" .
+ docker build -f Apis/rag-api/Dockerfile -t "${REGISTRY_HOST}/${RAG_API_IMAGE}:${IMAGE_TAG}" .
- name: Build Web image
run: |
@@ -50,7 +50,7 @@ jobs:
- name: Build Job worker image
run: |
- docker build -f cv-cleanup-job/Dockerfile -t "${REGISTRY_HOST}/${JOB_IMAGE}:${IMAGE_TAG}" .
+ docker build -f Jobs/cv-cleanup-job/Dockerfile -t "${REGISTRY_HOST}/${JOB_IMAGE}:${IMAGE_TAG}" .
- name: Push API image
run: |
diff --git a/Apis/api/Dockerfile b/Apis/api/Dockerfile
new file mode 100644
index 0000000..3450b36
--- /dev/null
+++ b/Apis/api/Dockerfile
@@ -0,0 +1,28 @@
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
+ARG BUILD_CONFIGURATION=Release
+WORKDIR /src
+
+COPY Apis/api/api.csproj Apis/api/
+COPY Apis/shared-models/shared-models.csproj Apis/shared-models/
+COPY Apis/api-models/api-models.csproj Apis/api-models/
+COPY Apis/cv-matcher-api-models/cv-matcher-api-models.csproj Apis/cv-matcher-api-models/
+COPY Helpers/startup-helpers/startup-helpers.csproj Helpers/startup-helpers/
+
+RUN dotnet restore Apis/api/api.csproj
+
+COPY Apis/api/ Apis/api/
+COPY Apis/shared-models/ Apis/shared-models/
+COPY Apis/api-models/ Apis/api-models/
+COPY Apis/cv-matcher-api-models/ Apis/cv-matcher-api-models/
+COPY Helpers/startup-helpers/ Helpers/startup-helpers/
+
+RUN dotnet publish Apis/api/api.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
+
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
+WORKDIR /app
+EXPOSE 8080
+ENV ASPNETCORE_URLS=http://0.0.0.0:8080
+
+COPY --from=build /app/publish .
+
+ENTRYPOINT ["dotnet", "api.dll"]
\ No newline at end of file
diff --git a/Apis/api/api.csproj b/Apis/api/api.csproj
new file mode 100644
index 0000000..282531a
--- /dev/null
+++ b/Apis/api/api.csproj
@@ -0,0 +1,44 @@
+
+
+
+ net10.0
+ enable
+ enable
+ 1.0.0-build.$([System.DateTime]::UtcNow.ToString("yyyyMMddHHmmss"))
+ $(Version)
+
+ false
+ Linux
+ true
+ Api
+ true
+ $(NoWarn);1591
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Apis/cv-matcher-api/Dockerfile b/Apis/cv-matcher-api/Dockerfile
new file mode 100644
index 0000000..343c535
--- /dev/null
+++ b/Apis/cv-matcher-api/Dockerfile
@@ -0,0 +1,28 @@
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
+ARG BUILD_CONFIGURATION=Release
+WORKDIR /src
+
+COPY Apis/cv-matcher-api/cv-matcher-api.csproj Apis/cv-matcher-api/
+COPY Apis/shared-models/shared-models.csproj Apis/shared-models/
+COPY Apis/cv-matcher-api-models/cv-matcher-api-models.csproj Apis/cv-matcher-api-models/
+COPY Helpers/common-helpers/common-helpers.csproj Helpers/common-helpers/
+COPY Helpers/startup-helpers/startup-helpers.csproj Helpers/startup-helpers/
+
+RUN dotnet restore Apis/cv-matcher-api/cv-matcher-api.csproj
+
+COPY Apis/cv-matcher-api/ Apis/cv-matcher-api/
+COPY Apis/shared-models/ Apis/shared-models/
+COPY Apis/cv-matcher-api-models/ Apis/cv-matcher-api-models/
+COPY Helpers/common-helpers/ Helpers/common-helpers/
+COPY Helpers/startup-helpers/ Helpers/startup-helpers/
+
+RUN dotnet publish Apis/cv-matcher-api/cv-matcher-api.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
+
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
+WORKDIR /app
+EXPOSE 8080
+ENV ASPNETCORE_URLS=http://0.0.0.0:8080
+
+COPY --from=build /app/publish .
+
+ENTRYPOINT ["dotnet", "cv-matcher-api.dll"]
\ No newline at end of file
diff --git a/Apis/cv-matcher-api/cv-matcher-api.csproj b/Apis/cv-matcher-api/cv-matcher-api.csproj
new file mode 100644
index 0000000..3abf857
--- /dev/null
+++ b/Apis/cv-matcher-api/cv-matcher-api.csproj
@@ -0,0 +1,85 @@
+
+
+ net10.0
+ enable
+ enable
+ Linux
+ Api
+ true
+ $(NoWarn);1591
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Apis/rag-api/Dockerfile b/Apis/rag-api/Dockerfile
new file mode 100644
index 0000000..9878095
--- /dev/null
+++ b/Apis/rag-api/Dockerfile
@@ -0,0 +1,28 @@
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
+ARG BUILD_CONFIGURATION=Release
+WORKDIR /src
+
+COPY Apis/rag-api/rag-api.csproj Apis/rag-api/
+COPY Apis/shared-models/shared-models.csproj Apis/shared-models/
+COPY Apis/rag-api-models/rag-api-models.csproj Apis/rag-api-models/
+COPY Helpers/common-helpers/common-helpers.csproj Helpers/common-helpers/
+COPY Helpers/startup-helpers/startup-helpers.csproj Helpers/startup-helpers/
+
+RUN dotnet restore Apis/rag-api/rag-api.csproj
+
+COPY Apis/rag-api/ Apis/rag-api/
+COPY Apis/shared-models/ Apis/shared-models/
+COPY Apis/rag-api-models/ Apis/rag-api-models/
+COPY Helpers/common-helpers/ Helpers/common-helpers/
+COPY Helpers/startup-helpers/ Helpers/startup-helpers/
+
+RUN dotnet publish Apis/rag-api/rag-api.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
+
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
+WORKDIR /app
+EXPOSE 8080
+ENV ASPNETCORE_URLS=http://0.0.0.0:8080
+
+COPY --from=build /app/publish .
+
+ENTRYPOINT ["dotnet", "rag-api.dll"]
\ No newline at end of file
diff --git a/Apis/rag-api/rag-api.csproj b/Apis/rag-api/rag-api.csproj
new file mode 100644
index 0000000..91f151b
--- /dev/null
+++ b/Apis/rag-api/rag-api.csproj
@@ -0,0 +1,85 @@
+
+
+ net10.0
+ enable
+ enable
+ Linux
+ Api
+ true
+ $(NoWarn);1591
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Helpers/startup-helpers/startup-helpers.csproj b/Helpers/startup-helpers/startup-helpers.csproj
new file mode 100644
index 0000000..8a5bc9a
--- /dev/null
+++ b/Helpers/startup-helpers/startup-helpers.csproj
@@ -0,0 +1,28 @@
+
+
+
+ net10.0
+ StartupHelpers
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Jobs/cv-cleanup-job/Dockerfile b/Jobs/cv-cleanup-job/Dockerfile
new file mode 100644
index 0000000..cee0119
--- /dev/null
+++ b/Jobs/cv-cleanup-job/Dockerfile
@@ -0,0 +1,24 @@
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
+ARG BUILD_CONFIGURATION=Release
+WORKDIR /src
+
+COPY Jobs/cv-cleanup-job/cv-cleanup-job.csproj Jobs/cv-cleanup-job/
+COPY Jobs/job-scheduler/job-scheduler.csproj Jobs/job-scheduler/
+COPY Apis/api-models/api-models.csproj Apis/api-models/
+COPY Apis/shared-models/shared-models.csproj Apis/shared-models/
+
+RUN dotnet restore Jobs/cv-cleanup-job/cv-cleanup-job.csproj
+
+COPY Jobs/cv-cleanup-job/ Jobs/cv-cleanup-job/
+COPY Jobs/job-scheduler/ Jobs/job-scheduler/
+COPY Apis/api-models/ Apis/api-models/
+COPY Apis/shared-models/ Apis/shared-models/
+
+RUN dotnet publish Jobs/cv-cleanup-job/cv-cleanup-job.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
+
+FROM mcr.microsoft.com/dotnet/runtime:10.0 AS final
+WORKDIR /app
+
+COPY --from=build /app/publish .
+
+ENTRYPOINT ["dotnet", "cv-cleanup-job.dll"]
diff --git a/Jobs/cv-cleanup-job/cv-cleanup-job.csproj b/Jobs/cv-cleanup-job/cv-cleanup-job.csproj
new file mode 100644
index 0000000..f5ed4a2
--- /dev/null
+++ b/Jobs/cv-cleanup-job/cv-cleanup-job.csproj
@@ -0,0 +1,20 @@
+
+
+
+ net10.0
+ enable
+ enable
+ CvCleanupJob
+ cv-cleanup-job
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml
index 2004176..119405e 100644
--- a/docker-compose/docker-compose.yml
+++ b/docker-compose/docker-compose.yml
@@ -2,7 +2,7 @@ services:
rag-api:
build:
context: ..
- dockerfile: rag-api/Dockerfile
+ dockerfile: Apis/rag-api/Dockerfile
container_name: myai-rag-api
ports:
- "8081:8080"
@@ -60,7 +60,7 @@ services:
- Serilog__WriteTo__2__Args__port=${Serilog__WriteTo__2__Args__port:-587}
- Serilog__WriteTo__2__Args__enableSsl=${Serilog__WriteTo__2__Args__enableSsl:-true}
volumes:
- - ../api/logs:/app/logs
+ - ../Apis/api/logs:/app/logs
networks:
- myai-network
restart: unless-stopped
@@ -70,7 +70,7 @@ services:
cv-matcher-api:
build:
context: ..
- dockerfile: cv-matcher-api/Dockerfile
+ dockerfile: Apis/cv-matcher-api/Dockerfile
container_name: myai-cv-matcher-api
depends_on:
- rag-api
@@ -128,7 +128,7 @@ services:
- Serilog__WriteTo__2__Args__port=${Serilog__WriteTo__2__Args__port:-587}
- Serilog__WriteTo__2__Args__enableSsl=${Serilog__WriteTo__2__Args__enableSsl:-true}
volumes:
- - ../api/logs:/app/logs
+ - ../Apis/api/logs:/app/logs
networks:
- myai-network
restart: unless-stopped
@@ -138,7 +138,7 @@ services:
api:
build:
context: ..
- dockerfile: api/Dockerfile
+ dockerfile: Apis/api/Dockerfile
container_name: myai-api
depends_on:
- cv-matcher-api
@@ -146,8 +146,8 @@ services:
- "8080:8080"
env_file:
- .env
- # Keep this only if api/.env contains api-specific overrides not present in docker-compose/.env.
- # - ../api/.env
+ # Keep this only if Apis/api/.env contains api-specific overrides not present in docker-compose/.env.
+ # - ../Apis/api/.env
environment:
# ASP.NET
- ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT:-Development}
@@ -218,7 +218,7 @@ services:
- Serilog__WriteTo__2__Args__port=${Serilog__WriteTo__2__Args__port:-587}
- Serilog__WriteTo__2__Args__enableSsl=${Serilog__WriteTo__2__Args__enableSsl:-true}
volumes:
- - ../api/logs:/app/logs
+ - ../Apis/api/logs:/app/logs
- ${FileStorage__Path:-../Files}:/app/Files
networks:
- myai-network
@@ -229,7 +229,7 @@ services:
job:
build:
context: ..
- dockerfile: cv-cleanup-job/Dockerfile
+ dockerfile: Jobs/cv-cleanup-job/Dockerfile
container_name: myai-job
depends_on:
- api
diff --git a/myAi.sln b/myAi.sln
index 732b8b7..13ee5c1 100644
--- a/myAi.sln
+++ b/myAi.sln
@@ -2,13 +2,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
VisualStudioVersion = 18.2.11415.280
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "api", "api\api.csproj", "{16F8CA9D-341F-47B8-8E34-F4C5B3E72F3C}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "api", "Apis\api\api.csproj", "{16F8CA9D-341F-47B8-8E34-F4C5B3E72F3C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "web", "web\web.csproj", "{B0A3EAB7-759A-448A-A906-52DF75A70016}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "rag-api", "rag-api\rag-api.csproj", "{A63E1C1A-4A78-49F4-9F5C-D43783294861}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "rag-api", "Apis\rag-api\rag-api.csproj", "{A63E1C1A-4A78-49F4-9F5C-D43783294861}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-matcher-api", "cv-matcher-api\cv-matcher-api.csproj", "{C40F5025-B0A6-4B25-B4A2-7EA568E06C40}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-matcher-api", "Apis\cv-matcher-api\cv-matcher-api.csproj", "{C40F5025-B0A6-4B25-B4A2-7EA568E06C40}"
EndProject
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose\docker-compose.dcproj", "{81DDED9D-158B-E303-5F62-77A2896D2A5A}"
EndProject
@@ -16,25 +16,25 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apis", "Apis", "{0FE6558F-2
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Models", "Models", "{E08A1D43-24A3-4F93-B66A-4230FD8261BA}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-matcher-api-models", "cv-matcher-api-models\cv-matcher-api-models.csproj", "{D09DA1C2-3DC5-48E7-9F5B-739CA41174F1}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-matcher-api-models", "Apis\cv-matcher-api-models\cv-matcher-api-models.csproj", "{D09DA1C2-3DC5-48E7-9F5B-739CA41174F1}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "api-models", "api-models\api-models.csproj", "{FB5EAA9E-1B83-41E4-A3BC-F4B7D1AA0769}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "api-models", "Apis\api-models\api-models.csproj", "{FB5EAA9E-1B83-41E4-A3BC-F4B7D1AA0769}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "rag-api-models", "rag-api-models\rag-api-models.csproj", "{6A1ADA81-28E9-4A64-A32D-0755876D5EB7}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "rag-api-models", "Apis\rag-api-models\rag-api-models.csproj", "{6A1ADA81-28E9-4A64-A32D-0755876D5EB7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "shared-models", "shared-models\shared-models.csproj", "{185A8BB0-344A-4856-AEB4-213866EB2EE7}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "shared-models", "Apis\shared-models\shared-models.csproj", "{185A8BB0-344A-4856-AEB4-213866EB2EE7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Helpers", "Helpers", "{43E9CD21-25B6-4CB4-B94E-5B953B2E1284}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "startup-helpers", "startup-helpers\startup-helpers.csproj", "{7446D193-8636-4E58-96E4-0C8CB8790679}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "startup-helpers", "Helpers\startup-helpers\startup-helpers.csproj", "{7446D193-8636-4E58-96E4-0C8CB8790679}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "common-helpers", "common-helpers\common-helpers.csproj", "{4EDDEE9A-E9C7-4972-9C4A-3177611CCFE3}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "common-helpers", "Helpers\common-helpers\common-helpers.csproj", "{4EDDEE9A-E9C7-4972-9C4A-3177611CCFE3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jobs", "Jobs", "{F1A2B3C4-D5E6-4789-ABCD-EF0123456789}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-cleanup-job", "cv-cleanup-job\cv-cleanup-job.csproj", "{E7F21C94-6D88-4E9B-A12F-9C3E8D5B7A41}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-cleanup-job", "Jobs\cv-cleanup-job\cv-cleanup-job.csproj", "{E7F21C94-6D88-4E9B-A12F-9C3E8D5B7A41}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "job-scheduler", "job-scheduler\job-scheduler.csproj", "{A19D2776-B935-BD35-4AB1-3FCE2092805A}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "job-scheduler", "Jobs\job-scheduler\job-scheduler.csproj", "{A19D2776-B935-BD35-4AB1-3FCE2092805A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -102,10 +102,10 @@ Global
{16F8CA9D-341F-47B8-8E34-F4C5B3E72F3C} = {0FE6558F-2157-47F2-A835-558416CE0E2B}
{A63E1C1A-4A78-49F4-9F5C-D43783294861} = {0FE6558F-2157-47F2-A835-558416CE0E2B}
{C40F5025-B0A6-4B25-B4A2-7EA568E06C40} = {0FE6558F-2157-47F2-A835-558416CE0E2B}
- {D09DA1C2-3DC5-48E7-9F5B-739CA41174F1} = {E08A1D43-24A3-4F93-B66A-4230FD8261BA}
- {FB5EAA9E-1B83-41E4-A3BC-F4B7D1AA0769} = {E08A1D43-24A3-4F93-B66A-4230FD8261BA}
- {6A1ADA81-28E9-4A64-A32D-0755876D5EB7} = {E08A1D43-24A3-4F93-B66A-4230FD8261BA}
- {185A8BB0-344A-4856-AEB4-213866EB2EE7} = {E08A1D43-24A3-4F93-B66A-4230FD8261BA}
+ {D09DA1C2-3DC5-48E7-9F5B-739CA41174F1} = {0FE6558F-2157-47F2-A835-558416CE0E2B}
+ {FB5EAA9E-1B83-41E4-A3BC-F4B7D1AA0769} = {0FE6558F-2157-47F2-A835-558416CE0E2B}
+ {6A1ADA81-28E9-4A64-A32D-0755876D5EB7} = {0FE6558F-2157-47F2-A835-558416CE0E2B}
+ {185A8BB0-344A-4856-AEB4-213866EB2EE7} = {0FE6558F-2157-47F2-A835-558416CE0E2B}
{7446D193-8636-4E58-96E4-0C8CB8790679} = {43E9CD21-25B6-4CB4-B94E-5B953B2E1284}
{4EDDEE9A-E9C7-4972-9C4A-3177611CCFE3} = {43E9CD21-25B6-4CB4-B94E-5B953B2E1284}
{E7F21C94-6D88-4E9B-A12F-9C3E8D5B7A41} = {F1A2B3C4-D5E6-4789-ABCD-EF0123456789}