You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

467 lines
12 KiB

3 years ago
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",
3 years ago
schema: {
description: "To Get user by customerId",
3 years ago
tags: ["User"],
summary: "This is for Get a Single User by customerId",
3 years ago
params: {
type: "object",
properties: {
customerId: {
3 years ago
type: "string",
description: "customerId",
3 years ago
},
},
},
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",
3 years ago
summary: "This is for Get a Current User.",
body: {
type: "object",
required: ["customerId"],
3 years ago
properties: {
customerId: { type: "string" },
3 years ago
},
},
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",
3 years ago
},
},
},
body: {
type: "object",
// required: ['phone'],
properties: {
phone: { type: "string" },
firstName: { type: "string" },
lastName: { type: "string" },
3 years ago
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,
3 years ago
],
// 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" },
3 years ago
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 },
3 years ago
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 },
},
},
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: validationHandler.forgotPassword,
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],
3 years ago
handler: validationHandler.resetPassword,
// 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" },
3 years ago
},
},
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",
3 years ago
schema: {
tags: ["User"],
summary: "This is for update current user",
params: {
type: "object",
properties: {
customerId: {
3 years ago
type: "string",
description: "customerId",
3 years ago
},
},
},
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 },
},
},
},
3 years ago
address1: { type: "string" },
address2: { type: "string" },
city: { type: "string" },
state: { type: "string" },
country: { type: "string" },
zip: { type: "string" },
},
},
security: [
{
3 years ago
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)}
});
3 years ago
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,
});
3 years ago
next();
};