1+ import { CustomRequest , CustomResponse } from "../types/global" ;
2+ const { addOrUpdate } = require ( "../models/users" ) ;
3+ const { INTERNAL_SERVER_ERROR } = require ( "../constants/errorMessages" ) ;
4+ const nodemailer = require ( "nodemailer" ) ;
5+ const config = require ( "config" ) ;
6+ const emailServiceConfig = config . get ( "emailServiceConfig" ) ;
7+
8+ export const subscribe = async ( req : CustomRequest , res : CustomResponse ) => {
9+ const { email } = req . body ;
10+ const phoneNumber = req . body . phoneNumber || null ;
11+ const userId = req . userData . id ;
12+ const data = { email, isSubscribed : true , phoneNumber } ;
13+ const userAlreadySubscribed = req . userData . isSubscribed ;
14+ try {
15+ if ( userAlreadySubscribed ) {
16+ return res . boom . badRequest ( "User already subscribed" ) ;
17+ }
18+ await addOrUpdate ( data , userId ) ;
19+ return res . status ( 201 ) . json ( "User subscribed successfully" ) ;
20+ } catch ( error ) {
21+ logger . error ( `Error occurred while subscribing: ${ error . message } ` ) ;
22+ return res . boom . badImplementation ( INTERNAL_SERVER_ERROR ) ;
23+ }
24+ } ;
25+
26+ export const unsubscribe = async ( req : CustomRequest , res : CustomResponse ) => {
27+ const userId = req . userData . id ;
28+ const userAlreadySubscribed = req . userData . isSubscribed ;
29+ try {
30+ if ( ! userAlreadySubscribed ) {
31+ return res . boom . badRequest ( "User is already unsubscribed" ) ;
32+ }
33+ await addOrUpdate (
34+ {
35+ isSubscribed : false ,
36+ } ,
37+ userId
38+ ) ;
39+ return res . status ( 200 ) . json ( "User unsubscribed successfully" ) ;
40+ } catch ( error ) {
41+ logger . error ( `Error occurred while unsubscribing: ${ error . message } ` ) ;
42+ return res . boom . badImplementation ( INTERNAL_SERVER_ERROR ) ;
43+ }
44+ } ;
45+
46+ // TODO: currently we are sending test email to a user only (i.e., Tejas sir as decided)
47+ // later we need to make service which send email to all subscribed user
48+ export const sendEmail = async ( req : CustomRequest , res : CustomResponse ) => {
49+ try {
50+ const transporter = nodemailer . createTransport ( {
51+ host : emailServiceConfig . host ,
52+ port : emailServiceConfig . port ,
53+ secure : false ,
54+
55+ auth : {
56+ user : emailServiceConfig . email ,
57+ pass : emailServiceConfig . password ,
58+ } ,
59+ } ) ;
60+
61+ const info = await transporter . sendMail ( {
62+ from : `"Real Dev Squad" <${ emailServiceConfig . email } >` ,
63+ 64+ subject : "Hello local, Testing in progress." ,
65+ text : "working for notification feature" ,
66+ html : "<b>Hello world!</b>" ,
67+ } ) ;
68+
69+ return res . send ( { message : "Email sent successfully" , info } ) ;
70+ } catch ( error ) {
71+ logger . error ( "Error occurred while sending email:" , error . message ) ;
72+ return res . boom . badImplementation ( INTERNAL_SERVER_ERROR ) ;
73+ }
74+ } ;
0 commit comments