|
|
|
const fastify = require("fastify");
|
|
|
|
const userController = require("../controllers/userController");
|
|
|
|
const validationHandler = require("../handlers/userHandler");
|
|
|
|
|
|
|
|
module.exports = function (fastify, opts, next) {
|
|
|
|
fastify.get("/api/users", {
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is for Get All Users",
|
|
|
|
summary: "This is for to Get All Users",
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
preHandler: fastify.auth([fastify.authenticate]),
|
|
|
|
handler: userController.getUsers,
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/users/:customerId",
|
|
|
|
schema: {
|
|
|
|
description: "To Get user by customerId",
|
|
|
|
tags: ["User"],
|
|
|
|
summary: "This is for Get a Single User by customerId",
|
|
|
|
params: {
|
|
|
|
type: "object",
|
|
|
|
properties: {
|
|
|
|
customerId: {
|
|
|
|
type: "string",
|
|
|
|
description: "customerId",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
preHandler: fastify.auth([fastify.authenticate]),
|
|
|
|
handler: userController.getSingleUser,
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/currentUser",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is for Get Current User by customerId by Post Body",
|
|
|
|
summary: "This is for Get a Current User.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
required: ["customerId"],
|
|
|
|
properties: {
|
|
|
|
customerId: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
preHandler: fastify.auth([fastify.authenticate]),
|
|
|
|
handler: userController.getCurrentUser,
|
|
|
|
// onSend: (request, reply, done) => {
|
|
|
|
|
|
|
|
// // fire&forget
|
|
|
|
// request.log.info("#########################################");
|
|
|
|
// request.log.info(reply);
|
|
|
|
|
|
|
|
// done()
|
|
|
|
// },
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "PUT",
|
|
|
|
url: "/api/user/:userId",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
summary: "This is for update user",
|
|
|
|
params: {
|
|
|
|
type: "object",
|
|
|
|
properties: {
|
|
|
|
userId: {
|
|
|
|
type: "string",
|
|
|
|
description: "userId",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
// required: ['phone'],
|
|
|
|
properties: {
|
|
|
|
phone: { type: "string" },
|
|
|
|
firstName: { type: "string" },
|
|
|
|
lastName: { type: "string" },
|
|
|
|
|
|
|
|
address1: { type: "string" },
|
|
|
|
address2: { type: "string" },
|
|
|
|
city: { type: "string" },
|
|
|
|
state: { type: "string" },
|
|
|
|
country: { type: "string" },
|
|
|
|
zip: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
preHandler: [
|
|
|
|
fastify.auth([fastify.operatorAuthenticate]),
|
|
|
|
//validationHandler.validatePhoneFormat,
|
|
|
|
],
|
|
|
|
// preHandler: fastify.auth([fastify.authenticate]),
|
|
|
|
handler: userController.editUserInfo,
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/users",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is for cretae New user",
|
|
|
|
summary: "This is for Create New User.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
properties: {
|
|
|
|
phone: { type: "string" },
|
|
|
|
password: { type: "string" },
|
|
|
|
emails: {
|
|
|
|
type: "array",
|
|
|
|
maxItems: 2,
|
|
|
|
items: {
|
|
|
|
type: "object",
|
|
|
|
properties: {
|
|
|
|
email: { type: "string", default: null },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
firstName: { type: "string", default: null },
|
|
|
|
lastName: { type: "string", default: null },
|
|
|
|
username: { type: "string" },
|
|
|
|
buildingName: { type: "string", default: null },
|
|
|
|
inchargeName: { type: "string", default: null },
|
|
|
|
address1: { type: "string", default: null },
|
|
|
|
address2: { type: "string", default: null },
|
|
|
|
city: { type: "string", default: null },
|
|
|
|
state: { type: "string", default: null },
|
|
|
|
zip: { type: "string", default: null },
|
|
|
|
country: { type: "string", default: null },
|
|
|
|
notes: { type: "string", default: null },
|
|
|
|
latitude: { type: 'number' },
|
|
|
|
longitude: { type: 'number'}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
preHandler: [
|
|
|
|
validationHandler.fieldCheck,
|
|
|
|
validationHandler.verifyUser,
|
|
|
|
// validationHandler.validatePhoneFormat,
|
|
|
|
validationHandler.validateEmailFormat,
|
|
|
|
],
|
|
|
|
handler: userController.addUser,
|
|
|
|
// onResponse: (request, reply) => {
|
|
|
|
// validationHandler.sendPhoneVerificationCode(request, reply);
|
|
|
|
// },
|
|
|
|
//onResponse: validationHandler.sendPhoneVerificationCode,
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/phone",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is for verify User Phone",
|
|
|
|
summary: "This is to Verify User Phone.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
required: ["phone"],
|
|
|
|
properties: {
|
|
|
|
phoneVerificationCode: { type: "string" },
|
|
|
|
phone: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
// preHandler: fastify.auth([fastify.authenticate]),
|
|
|
|
handler: validationHandler.verifyPhone,
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/forgotpassword",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is for forget password for the User.",
|
|
|
|
summary: "This is for forget User Password.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
required: ["phone"],
|
|
|
|
properties: {
|
|
|
|
phone: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
// preHandler: [validationHandler.],
|
|
|
|
handler: userController.forgotPassword,
|
|
|
|
onResponse: (request, reply) => {
|
|
|
|
validationHandler.sendPasswordResetCode(request, reply);
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/forgotpasswordsupplier",
|
|
|
|
schema: {
|
|
|
|
tags: ["Supplier-Data"],
|
|
|
|
description: "This is for forgot password for the Supplier.",
|
|
|
|
summary: "This is for forgot password for the Supplier.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
required: ["phone"],
|
|
|
|
properties: {
|
|
|
|
phone: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
// preHandler: [validationHandler.],
|
|
|
|
handler: userController.forgotPasswordSupplier,
|
|
|
|
onResponse: (request, reply) => {
|
|
|
|
validationHandler.sendPasswordResetCode(request, reply);
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/resetpassword",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is for Reset User Password.",
|
|
|
|
summary: "This is for Reset User Password.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
required: ["phone", "resetPasswordCode", "newPassword"],
|
|
|
|
properties: {
|
|
|
|
phone: { type: "string" },
|
|
|
|
resetPasswordCode: { type: "string" },
|
|
|
|
newPassword: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
//preHandler: [validationHandler],
|
|
|
|
handler: validationHandler.resetPassword,
|
|
|
|
// onResponse: (request,reply) => {validationHandler.resetPassword(request,reply)}
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/resetpasswordsupplier",
|
|
|
|
schema: {
|
|
|
|
tags: ["Supplier-Data"],
|
|
|
|
description: "This is for Supplier Reset Password.",
|
|
|
|
summary: "This is for Supplier Reset Password.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
required: ["phone", "resetPasswordCode", "newPassword"],
|
|
|
|
properties: {
|
|
|
|
phone: { type: "string" },
|
|
|
|
resetPasswordCode: { type: "string" },
|
|
|
|
newPassword: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
//preHandler: [validationHandler],
|
|
|
|
handler: validationHandler.resetPasswordSupplier,
|
|
|
|
// onResponse: (request,reply) => {validationHandler.resetPassword(request,reply)}
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/resetPasswordFromAdmin",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is for Reset Password for Admin.",
|
|
|
|
summary: "This is for Reset Password for Admin.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
properties: {
|
|
|
|
customerId: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
// preHandler: [validationHandler.],
|
|
|
|
handler: validationHandler.resetPasswordFromAdmin,
|
|
|
|
// onResponse: (request,reply) => {validationHandler.resetPassword(request,reply)}
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/resendphoneverificationcode",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is for Reset phone Verification Code.",
|
|
|
|
summary: "This is for Reset phone verification Code.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
required: ["phone"],
|
|
|
|
properties: {
|
|
|
|
phone: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
// preHandler: [validationHandler.],
|
|
|
|
handler: validationHandler.sendPhoneVerificationCode,
|
|
|
|
// onResponse: (request,reply) => {validationHandler.sendPhoneVerificationCode(request,reply)}
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/users/send_message",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is for Send Message.",
|
|
|
|
summary: "This is for Send Message.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
required: ["userId"],
|
|
|
|
properties: {
|
|
|
|
userId: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
handler: validationHandler.sendMessageNotification,
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "PUT",
|
|
|
|
url: "/api/update/currentUser/:customerId",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
summary: "This is for update current user",
|
|
|
|
params: {
|
|
|
|
type: "object",
|
|
|
|
properties: {
|
|
|
|
customerId: {
|
|
|
|
type: "string",
|
|
|
|
description: "customerId",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
properties: {
|
|
|
|
phone: { type: "string" },
|
|
|
|
firstName: { type: "string" },
|
|
|
|
lastName: { type: "string" },
|
|
|
|
username: { type: "string" },
|
|
|
|
emails: {
|
|
|
|
type: "array",
|
|
|
|
maxItems: 2,
|
|
|
|
items: {
|
|
|
|
type: "object",
|
|
|
|
properties: {
|
|
|
|
email: { type: "string", default: null },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
address1: { type: "string" },
|
|
|
|
address2: { type: "string" },
|
|
|
|
city: { type: "string" },
|
|
|
|
state: { type: "string" },
|
|
|
|
country: { type: "string" },
|
|
|
|
zip: { type: "string" },
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
preHandler: [fastify.auth([fastify.authenticate])],
|
|
|
|
handler: userController.editCuurentUserInfo,
|
|
|
|
});
|
|
|
|
// Login for a user is in the main index.js file.
|
|
|
|
// fastify-jwt used to create the token was throwing exceptions and requierd
|
|
|
|
// it be called before the route is loaded.
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/users/profile-picture/:customerId",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is for uploading profile picture.",
|
|
|
|
summary: "This is for uploading profile picture.",
|
|
|
|
params: {
|
|
|
|
type: "object",
|
|
|
|
properties: {
|
|
|
|
customerId: {
|
|
|
|
type: "string",
|
|
|
|
description: "customerId",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
required: ["picture"],
|
|
|
|
properties: {
|
|
|
|
picture: {
|
|
|
|
type: 'string'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
handler: userController.uploadProfilePicture,
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "POST",
|
|
|
|
url: "/api/sendSms",
|
|
|
|
schema: {
|
|
|
|
tags: ["User"],
|
|
|
|
description: "This is to send Sms.",
|
|
|
|
summary: "This is to send Sms.",
|
|
|
|
body: {
|
|
|
|
type: "object",
|
|
|
|
required: ["mobileNumbers"],
|
|
|
|
properties: {
|
|
|
|
mobileNumbers: { type: "string" },
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
security: [
|
|
|
|
{
|
|
|
|
basicAuth: [],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
//preHandler: [validationHandler],
|
|
|
|
handler: userController.sendSms,
|
|
|
|
// onResponse: (request,reply) => {validationHandler.resetPassword(request,reply)}
|
|
|
|
});
|
|
|
|
|
|
|
|
fastify.route({
|
|
|
|
method: "DELETE",
|
|
|
|
url: "/api/logout",
|
|
|
|
schema: {
|
|
|
|
description: "This is for logout",
|
|
|
|
tags: ["Logout"],
|
|
|
|
summary: "This is for logout",
|
|
|
|
params: {
|
|
|
|
type: "object",
|
|
|
|
properties: {
|
|
|
|
customerId: {
|
|
|
|
type: "string",
|
|
|
|
description: "customerId",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
// preHandler: fastify.auth([fastify.authenticate]),
|
|
|
|
handler: userController.logout,
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
next();
|
|
|
|
};
|