Skip to content

Commit c1b1e6f

Browse files
committed
chore: Improve logging, Refactor store email validator, improve error handling for sending emails, Minor fixes
1 parent 8251c49 commit c1b1e6f

File tree

4 files changed

+53
-40
lines changed

4 files changed

+53
-40
lines changed

app/controllers/contacts_controller.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@ import { storeEmailValidator } from '#validators/email';
33
import type { HttpContext } from '@adonisjs/core/http'
44
import logger from '@adonisjs/core/services/logger';
55
import db from '@adonisjs/lucid/services/db';
6+
import { Exception } from '@adonisjs/core/exceptions';
67

78
export default class ContactsController {
8-
public async store({ request }: HttpContext) {
9+
public async store({ request, response }: HttpContext) {
910
const data = request.all();
1011

1112
const payload = await storeEmailValidator.validate(data);
1213
const pastMessages = await EmailMessage.query().where('email', payload.email).orWhere('ip', request.ip());
1314

1415
if(pastMessages.length >= 3) {
15-
return {
16-
success: false,
16+
return response.tooManyRequests({
1717
message: 'You can\'t send anymore messages'
18-
};
18+
});
1919
}
2020

2121
const trx = await db.transaction();
@@ -31,14 +31,12 @@ export default class ContactsController {
3131
trx.rollback();
3232
logger.error(e);
3333

34-
return {
35-
success: false,
36-
message: 'Server error'
37-
};
34+
throw new Exception('Server error', {
35+
status: 500,
36+
code: 'E_SERVER_ERROR',
37+
});
3838
}
3939

40-
return {
41-
success: true
42-
};
40+
return response.ok({});
4341
}
4442
}

app/services/email_service.ts

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,44 @@
11
import EmailMessage from "#models/email_message";
22
import mail from '@adonisjs/mail/services/main';
33
import env from '#start/env';
4+
import logger from '@adonisjs/core/services/logger';
45

56
export class EmailService {
67
public async handleContactMessage(emailMessage: EmailMessage) {
7-
await mail.send((message) => {
8-
message
9-
.to(env.get('EMAIL_TO'))
10-
.from(emailMessage.email)
11-
.subject(`New message from: [ ${emailMessage.name} ] - [ ${emailMessage.email} ]`)
12-
.htmlView(
13-
'emails/contact_new_message',
14-
{
15-
email: emailMessage.email,
16-
name: emailMessage.name,
17-
message: emailMessage.message
18-
}
19-
)
20-
});
8+
try {
9+
await mail.send((message) => {
10+
message
11+
.to(env.get('EMAIL_TO'))
12+
.from(env.get('EMAIL_FROM'), 'My website')
13+
.subject(`New message from: [ ${emailMessage.name} ] - [ ${emailMessage.email} ]`)
14+
.htmlView(
15+
'emails/contact_new_message',
16+
{
17+
email: emailMessage.email,
18+
name: emailMessage.name,
19+
message: emailMessage.message
20+
}
21+
)
22+
});
23+
} catch (error) {
24+
logger.error(error);
25+
}
2126

22-
await mail.send((message) => {
23-
message
24-
.to(emailMessage.email)
25-
.from(env.get('EMAIL_FROM'))
26-
.subject(`[AUTO-MESSAGE] Thanks for contacting - [ ${emailMessage.name} ]`)
27-
.htmlView(
28-
'emails/contact_reply_to_sender',
29-
{
30-
name: emailMessage.name,
31-
}
32-
)
33-
});
27+
try {
28+
await mail.send((message) => {
29+
message
30+
.to(emailMessage.email)
31+
.from(env.get('EMAIL_FROM'), 'Hamza.im')
32+
.subject(`[AUTO-MESSAGE] Thanks for contacting - [ ${emailMessage.name} ]`)
33+
.htmlView(
34+
'emails/contact_reply_to_sender',
35+
{
36+
name: emailMessage.name,
37+
}
38+
)
39+
});
40+
} catch (error) {
41+
logger.error(error);
42+
}
3443
}
3544
}

app/validators/email.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@ export const storeEmailValidator = vine.compile(
55
name: vine.string().trim().maxLength(25),
66
email: vine.string().trim().email(),
77
message: vine.string().trim().maxLength(255),
8-
locale: vine.string().trim().maxLength(5).nullable(),
98
})
109
)

config/logger.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,14 @@ const loggerConfig = defineConfig({
1818
targets: targets()
1919
.pushIf(!app.inProduction, targets.pretty())
2020
.pushIf(app.inProduction, targets.file({ destination: 1 }))
21-
.toArray(),
21+
.push({
22+
target: 'pino/file',
23+
options: {
24+
destination: './logs/app.log'
25+
},
26+
level: 'info'
27+
})
28+
.toArray()
2229
},
2330
},
2431
},
@@ -31,5 +38,5 @@ export default loggerConfig
3138
* in your application.
3239
*/
3340
declare module '@adonisjs/core/types' {
34-
export interface LoggersList extends InferLoggers<typeof loggerConfig> {}
41+
export interface LoggersList extends InferLoggers<typeof loggerConfig> { }
3542
}

0 commit comments

Comments
 (0)