feat: wire email-api into docker-compose, .sln and CLAUDE.md

- docker-compose: add email-api service (internal, no ports)
  with Smtp__* + FileStorage__Path + Files volume mount
- api + cv-search-job: remove Smtp__* vars, add EmailApi__BaseUrl
  and EmailApi__InternalApiKey; add depends_on: email-api
- .sln: move email-api-models to Models virtual folder
- CLAUDE.md: add email-api/email-api-models to layout, update
  service dependency diagram and internal API key table

Closes #22

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-27 16:26:56 +03:00
parent 8878efe184
commit ba92c9f793
3 changed files with 64 additions and 21 deletions
+41 -10
View File
@@ -100,11 +100,47 @@ services:
labels:
- "com.centurylinklabs.watchtower.enable=true"
email-api:
image: registry.easysoft.ro/apps/myai-email-api:${IMAGE_TAG:-staging}
container_name: myai-email-api
environment:
- ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT:-Staging}
- ASPNETCORE_URLS=${ASPNETCORE_URLS:-http://+:8080}
- APP_ENVIRONMENT_NAME=${APP_ENVIRONMENT_NAME:-myai.staging}
- InternalApi__ApiKey=${EmailApi__InternalApiKey:-}
- InternalApi__RequireApiKey=true
- Smtp__Host=${Smtp__Host:-}
- Smtp__Port=${Smtp__Port:-587}
- Smtp__Username=${Smtp__Username:-}
- Smtp__Password=${Smtp__Password:-}
- Smtp__UseStartTls=${Smtp__UseStartTls:-false}
- FileStorage__Path=${FileStorage__Path:-Files}
- Serilog__WriteTo__2__Args__fromEmail=${Serilog__WriteTo__2__Args__fromEmail:-}
- Serilog__WriteTo__2__Args__toEmail=${Serilog__WriteTo__2__Args__toEmail:-}
- Serilog__WriteTo__2__Args__mailServer=${Serilog__WriteTo__2__Args__mailServer:-}
- Serilog__WriteTo__2__Args__networkCredential__userName=${Serilog__WriteTo__2__Args__networkCredential__userName:-}
- Serilog__WriteTo__2__Args__networkCredential__password=${Serilog__WriteTo__2__Args__networkCredential__password:-}
- Serilog__WriteTo__2__Args__port=${Serilog__WriteTo__2__Args__port:-587}
- Serilog__WriteTo__2__Args__enableSsl=${Serilog__WriteTo__2__Args__enableSsl:-true}
volumes:
- ${LOGS_PATH:-/opt/myai/logs}/email-api:/app/logs
- ${FILES_PATH:-/opt/myai/files}:/app/Files
networks:
- myai-network
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
api:
image: registry.easysoft.ro/apps/myai-api:${IMAGE_TAG:-staging}
container_name: myai-api
depends_on:
- cv-matcher-api
- email-api
environment:
- ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT:-Staging}
- ASPNETCORE_URLS=${ASPNETCORE_URLS:-http://+:8080}
@@ -126,11 +162,8 @@ services:
- Subscribe__ToEmail=${Subscribe__ToEmail:-}
- Subscribe__SubjectPrefix=${Subscribe__SubjectPrefix:-}
- Smtp__Host=${Smtp__Host:-}
- Smtp__Port=${Smtp__Port:-587}
- Smtp__Username=${Smtp__Username:-}
- Smtp__Password=${Smtp__Password:-}
- Smtp__UseStartTls=${Smtp__UseStartTls:-false}
- EmailApi__BaseUrl=${EmailApi__BaseUrl:-http://email-api:8080}
- EmailApi__InternalApiKey=${EmailApi__InternalApiKey:-}
- Captcha__Provider=${Captcha__Provider:-Recaptcha}
- Captcha__SecretKey=${Captcha__SecretKey:-}
@@ -210,6 +243,7 @@ services:
container_name: myai-cv-search-job
depends_on:
- cv-matcher-api
- email-api
environment:
- ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT:-Staging}
- APP_ENVIRONMENT_NAME=${APP_ENVIRONMENT_NAME:-myai.staging}
@@ -224,11 +258,8 @@ services:
- CvMatcherApi__BaseUrl=${CvMatcherApi__BaseUrl:-http://cv-matcher-api:8080}
- CvMatcherApi__InternalApiKey=${CvMatcherApi__InternalApiKey:-}
- Smtp__Host=${Smtp__Host:-}
- Smtp__Port=${Smtp__Port:-587}
- Smtp__Username=${Smtp__Username:-}
- Smtp__Password=${Smtp__Password:-}
- Smtp__UseStartTls=${Smtp__UseStartTls:-false}
- EmailApi__BaseUrl=${EmailApi__BaseUrl:-http://email-api:8080}
- EmailApi__InternalApiKey=${EmailApi__InternalApiKey:-}
- Contact__ToEmail=${Contact__ToEmail:-}