Files
task-manager/implementation_plan_email.md
T
2025-12-12 08:35:48 +01:00

2.2 KiB

Implementation Plan - Email Services

1. Infrastructure

  • Add MailHog to docker-compose.yml for local SMTP testing.
  • Install nodemailer and @types/nodemailer.

2. Database Schema

  • Update shared/schema.ts:
    • Add password_reset_tokens table.
      • id (uuid, pk)
      • userId (fk users.id)
      • token (string, unique)
      • expiresAt (timestamp)
      • isUsed (boolean)
    • Add validation schemas (insertPasswordResetTokenSchema).

3. Email Service (server/email.ts)

  • Create EmailService class.
  • Methods:
    • sendWelcomeEmail(user)
    • sendPasswordResetEmail(user, token)
  • Configuration:
    • Use nodemailer.
    • Fetch SMTP settings from storage.getSystemSettings (fallback to env vars or MailHog defaults for dev).
      • Keys: smtp_host, smtp_port, smtp_user, smtp_pass, smtp_secure, smtp_from.

4. Backend Routes (server/routes.ts)

  • Modify Registration:
    • After successful user creation, call emailService.sendWelcomeEmail.
  • New Routes:
    • POST /api/auth/forgot-password:
      • Input: email.
      • Logic: Find user, generate token (uuid), save to DB, send email.
    • POST /api/auth/reset-password:
      • Input: token, newPassword.
      • Logic: Validate token (exists, not used, not expired), hash new password, update user, mark token used.

5. Storage (server/storage.ts)

  • Update IStorage, MemStorage, DbStorage:
    • createPasswordResetToken(token)
    • getPasswordResetToken(token)
    • markPasswordResetTokenUsed(tokenId)

6. Frontend

  • Forgot Password Page (/forgot-password):
    • Form: Email input.
    • Action: POST /api/auth/forgot-password.
  • Reset Password Page (/reset-password):
    • Form: New Password, Confirm Password.
    • Params: ?token=... from URL.
    • Action: POST /api/auth/reset-password.
  • Login Page Update:
    • Add "Forgot Password?" link.
  • Admin Settings:
    • Add "Email Settings" section in AdminUserManagement or Settings page (optional but requested "add email settings").
    • Form to set SMTP host/port/etc.

7. Configuration

  • Add scripts/test-email-flow.ts to simulate the flow and verify via MailHog API (http://localhost:8025/api/v2/messages).