From 293366cc595e59ed1c37b434864d948c2036c721 Mon Sep 17 00:00:00 2001 From: Nikolai Papin Date: Thu, 10 Jul 2025 01:41:54 +0300 Subject: [PATCH] feat: development compose file; fix: smtp service --- backend/internal/services/smtp.go | 4 +- dev-compose.yml | 127 ++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 dev-compose.yml diff --git a/backend/internal/services/smtp.go b/backend/internal/services/smtp.go index 7bdb391..d79a048 100644 --- a/backend/internal/services/smtp.go +++ b/backend/internal/services/smtp.go @@ -117,8 +117,8 @@ func (s *smtpServiceImpl) SendEmail(to string, subject, body string) error { return err } - for _, recipient := range to { - if err = client.Rcpt(string(recipient)); err != nil { + for _, recipient := range toSlice { + if err = client.Rcpt(recipient); err != nil { s.log.Error("SMTP recipient set failed", zap.Error(err)) return err } diff --git a/dev-compose.yml b/dev-compose.yml new file mode 100644 index 0000000..af9e3ba --- /dev/null +++ b/dev-compose.yml @@ -0,0 +1,127 @@ +services: + + backend: + build: ./backend + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + minio: + condition: service_healthy + healthcheck: + test: ["CMD", "/usr/bin/curl", "-f", "http://localhost:8080/api/service/health"] + interval: 5s + timeout: 10s + retries: 3 + environment: + ENVIRONMENT: "development" + HOSTNAME: ${HOSTNAME} + PORT: ${PORT} + POSTGRES_URL: ${POSTGRES_URL} + REDIS_URL: ${REDIS_URL} + MINIO_URL: ${MINIO_URL} + JWT_ALGORITHM: ${JWT_ALGORITHM} + JWT_SECRET: ${JWT_SECRET} + JWT_ISSUER: ${JWT_ISSUER} + JWT_AUDIENCE: ${JWT_AUDIENCE} + JWT_EXP_ACCESS: ${JWT_EXP_ACCESS} + JWT_EXP_REFRESH: ${JWT_EXP_REFRESH} + SMTP_ENABLED: ${SMTP_ENABLED} + SMTP_SERVER: ${SMTP_SERVER} + SMTP_PORT: ${SMTP_PORT} + SMTP_USER: ${SMTP_USER} + SMTP_PASSWORD: ${SMTP_PASSWORD} + SMTP_FROM: ${SMTP_FROM} + SMTP_USE_TLS: ${SMTP_USE_TLS} + SMTP_USE_SSL: ${SMTP_USE_SSL} + SMTP_TIMEOUT: ${SMTP_TIMEOUT} + PASSWORD_MIN_LENGTH: ${PASSWORD_MIN_LENGTH} + PASSWORD_MAX_LENGTH: ${PASSWORD_MAX_LENGTH} + PASSWORD_CHECK_NUMBER: ${PASSWORD_CHECK_NUMBER} + PASSWORD_CHECK_CHARAC: ${PASSWORD_CHECK_CHARAC} + PASSWORD_CHECK_CASES: ${PASSWORD_CHECK_CASES} + PASSWORD_CHECK_SYMBOL: ${PASSWORD_CHECK_SYMBOL} + PASSWORD_CHECK_LEAKED: ${PASSWORD_CHECK_LEAKED} + ports: + - "8080:8080" + networks: + - easywish-network + + frontend: + build: ./frontend + restart: unless-stopped + depends_on: + backend: + condition: service_healthy + networks: + - easywish-network + + minio: + image: minio/minio + healthcheck: + test: [ "CMD", "curl", "-I", "localhost:9000/minio/health/live" ] + interval: 5s + timeout: 10s + retries: 3 + environment: + MINIO_ROOT_USER: ${MINIO_ROOT_USER} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} + ports: + - "9000:9000" + command: server /data + networks: + - easywish-network + volumes: + - minio_data:/data + + postgres: + image: postgres:latest + healthcheck: + test: [ "CMD", "pg_isready", "-q", "-d", "${POSTGRES_DB}", "-U", "${POSTGRES_USER}" ] + interval: 5s + timeout: 10s + retries: 3 + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + ports: + - "5432:5432" + networks: + - easywish-network + volumes: + - postgres_data:/var/lib/postgresql/data + - ./sqlc/schema.sql:/docker-entrypoint-initdb.d/init.sql + + redis: + image: eqalpha/keydb + healthcheck: + test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ] + interval: 5s + timeout: 10s + retries: 3 + command: ["keydb-server", "--requirepass", "${REDIS_PASSWORD}"] + environment: + REDIS_PASSWORD: ${REDIS_PASSWORD} + ports: + - "6379:6379" + networks: + - easywish-network + + test-mailserver: + image: rnwood/smtp4dev + hostname: easywish.weirdcatland + ports: + - "25:25" + - "5000:80" + networks: + - easywish-network + +volumes: + postgres_data: + minio_data: +networks: + easywish-network: + driver: bridge