Skip to content

Commit

Permalink
contact us api
Browse files Browse the repository at this point in the history
  • Loading branch information
Timothy-py committed Sep 10, 2024
1 parent 572f66c commit 9cd4720
Show file tree
Hide file tree
Showing 6 changed files with 171 additions and 1 deletion.
33 changes: 33 additions & 0 deletions controllers/message.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
const Message = require('../model/messages');
const { validateContactUsSchema } = require('../middleware/validators');

exports.contactUs = async (req, res) => {
try {
const { error, value } = validateContactUsSchema(req.body);
if (error) return res.status(400).send(error.details);
const { first_name, last_name, email, message, additional_details } = value;

const newMessage = await Message.create([
{
first_name: first_name,
last_name: last_name,
email: email,
message: message,
additional_details: additional_details
}
]);

await newMessage[0].save();

return res.status(200).json({
success: true,
message: 'Message sent successfully'
});
} catch (error) {
return res.status(500).json({
success: false,
message: 'Unable to send message',
error: error
});
}
};
12 changes: 11 additions & 1 deletion middleware/validators.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,14 @@ const changePasswordSchema = Joi.object({
)
});

const contactUsSchema = Joi.object({
first_name: Joi.string().required(),
last_name: Joi.string().required(),
email: Joi.string().email().required(),
message: Joi.string().required(),
additional_details: Joi.string().optional()
});

const validateAdminInvite = validator(inviteAdminSchema);
const validateAdminLogin = validator(loginAdminSchema);
const validateJobStatus = validator(jobStatus);
Expand All @@ -130,6 +138,7 @@ const validatePasswordSchema = validator(passwordSchema);
const validateCreateJob = validator(jobSchema);
const validateApplyJobSchema = validator(applyJobSchema);
const validateChangePasswordSchema = validator(changePasswordSchema);
const validateContactUsSchema = validator(contactUsSchema);

const joiErrorMessage = (error) => {
return error.details.map((detail) => {
Expand All @@ -151,5 +160,6 @@ module.exports = {
validatePasswordSchema,
validateCreateJob,
validateApplyJobSchema,
validateChangePasswordSchema
validateChangePasswordSchema,
validateContactUsSchema
};
38 changes: 38 additions & 0 deletions model/messages.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
const mongoose = require('mongoose');

const messageSchema = new mongoose.Schema({
first_name: {
type: String,
required: [true, 'Please enter your First name'],
trim: true
},

last_name: {
type: String,
required: [true, 'Please enter your Last name'],
trim: true
},
email: {
type: String,
required: [true, 'Please enter Email address'],
trim: true,
unique: true,
lowercase: true,
match: [
/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/,
'Please enter a valid Email address'
]
},
message: {
type: String,
required: true
},
additional_details: {
type: String,
required: false
}
});

const Message = mongoose.model('Message', messageSchema);

module.exports = Message;
8 changes: 8 additions & 0 deletions routes/message.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const express = require('express');
const router = express.Router();

const { contactUs } = require('../controllers/message');

router.post('/', contactUs);

module.exports = router;
2 changes: 2 additions & 0 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const adminRouter = require('./routes/admin');
const usersRouter = require('./routes/users');
const reportRouter = require('./routes/report');
const xjobRouter = require('./routes/xjobs');
const messageRouter = require('./routes/message');
const himalayas = require('./jobsfeed/himalayas');
const empllo = require('./jobsfeed/empllo');

Expand Down Expand Up @@ -61,6 +62,7 @@ app.use('/api/v1/admins', adminRouter);
app.use('/api/v1/users', usersRouter);
app.use('/api/v1/reports', reportRouter);
app.use('/api/v1/xjobs', xjobRouter);
app.use('/api/v1/contact-us', messageRouter);

// server Swagger documentation
swaggerDocs(app, PORT);
Expand Down
79 changes: 79 additions & 0 deletions swagger/doc.message.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/**
* @openapi
* /contact-us:
* post:
* tags:
* - Message
* summary: Contact us
* description: Contact us
* requestBody:
* description: Contact us
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* first_name:
* type: string
* required: true
* last_name:
* type: string
* required: true
* email:
* type: string
* format: email
* required: true
* message:
* type: string
* required: true
* additional_details:
* type: string
* required: false
* responses:
* 200:
* description: Message sent successfully
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* example: true
* message:
* type: string
* example: Message sent successfully
* 400:
* description: Bad request
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* example: false
* message:
* type: string
* example: Please enter a valid Email address
* error:
* type: object
* example: { details: [{ message: "Please enter a valid Email address", path: ["email"], type: "string.email" }] }
* 500:
* description: Internal Server Error
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* example: false
* message:
* type: string
* example: Unable to send message
* error:
* type: object
* example: { message: "Unable to send message" }
*/

0 comments on commit 9cd4720

Please sign in to comment.