first commit

This commit is contained in:
pawan-dot 2023-03-02 21:59:22 +05:30
parent a5bee589a2
commit f1c90c9d3e
14 changed files with 273 additions and 213 deletions

21
.env
View File

@ -1,16 +1,17 @@
# DB_URL ="mongodb://localhost:27017/Atp-project"
DB_URL="mongodb+srv://chatgptairport:FoluznYecXJeEcx8@cluster0.iih5dsg.mongodb.net/?retryWrites=true&w=majority" DB_URL="mongodb+srv://projectjatinmor:fTXdYGKiG9EyXtii@cluster0.baojdkn.mongodb.net/?retryWrites=true&w=majority"
PORT = 5000 PORT = 5000
JWT_SECRET = jdvnvjwrniwj4562jn67hvgtdr@65drfdgfc35r578; JWT_SECRET = jdvnvjwrniwj4562jn6@1xsbfeh@wre4Njdf;
// chatGptAirport cloudinary credential // Jatin Mor cloudinary credential
CLOUDINARY_NAME = "dfwcshsrb" CLOUDINARY_NAME = "dg8dcfqp7"
CLOUDINARY_API_KEY = "729179972558718" CLOUDINARY_API_KEY = "458619733688194"
CLOUDINARY_API_SECRET = "XWtPK6iHcWABNTh2qegrN5Df9OU" CLOUDINARY_API_SECRET = "fW3PekVZn_BOUX9GkzxyvOZZVs4"
SEND_EMAIL_FROM="chatgpt.airport@gmail.com" SEND_EMAIL_FROM="project.jatinmor@gmail.com"
# chatGpt.Airport # Jatin Mor
SENDGRID_API_KEY="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" SENDGRID_API_KEY="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"

8
app.js
View File

@ -1,6 +1,6 @@
import dotenv from "dotenv"; import dotenv from "dotenv";
import express from 'express'; import express from 'express'
const app = express(); const app = express();
import bodyParser from "body-parser"; import bodyParser from "body-parser";
import fileUpload from "express-fileupload"// important pkg for file upload import fileUpload from "express-fileupload"// important pkg for file upload
@ -23,10 +23,10 @@ app.use(fileUpload({
//auth //auth
import user from "./resources/user/userRoute.js" import user from "./resources/user/userRoute.js"
import ProductRouter from "./resources/Products/ProductRoute.js"; import ProductRouter from "./resources/Products/ProductRoute.js";
import orderRoute from './resources/Orders/orderRoute.js' import orderRoute from './resources/Orders/orderRoute.js';
import DepartureRouter from "./resources/Departure/DepartureRoute.js"; import DepartureRouter from "./resources/Departure/DepartureRoute.js";
import InformationRoute from "./resources/Informations/InformationRoute.js"; import InformationRoute from "./resources/Informations/InformationRoute.js";
import ComplaintRoute from "./resources/Complaints/ComplaintRoute.js"; import Testimonial from "./resources/Testimonials/TestimonialRoute.js";
import ContactRequest from "./resources/ContactRequests/ContactRequestRoute.js" import ContactRequest from "./resources/ContactRequests/ContactRequestRoute.js"
import StateRouter from "./resources/setting/state/state_routes.js"; import StateRouter from "./resources/setting/state/state_routes.js";
@ -45,7 +45,7 @@ app.use("/api/information/", InformationRoute);
//Contact Requests //Contact Requests
app.use("/api/contact/request/", ContactRequest); app.use("/api/contact/request/", ContactRequest);
//Complaints //Complaints
app.use("/api/complaint/", ComplaintRoute); app.use("/api/testimonial/", Testimonial);
//state //state
app.use("/api/state", StateRouter); app.use("/api/state", StateRouter);
//city //city

View File

@ -1,6 +1,5 @@
import mongoose from "mongoose"; import mongoose from "mongoose";
//require("dotenv").config(); //require("dotenv").config();
const connectDatabase = () => { const connectDatabase = () => {
mongoose mongoose
.connect(process.env.DB_URL, { .connect(process.env.DB_URL, {
@ -9,6 +8,8 @@ const connectDatabase = () => {
}).then((data) => { }).then((data) => {
console.log(`Mongodb connected with server: ${data.connection.host}`); console.log(`Mongodb connected with server: ${data.connection.host}`);
}).catch(err => {
console.log(err)
}) })
}; };
export default connectDatabase; export default connectDatabase;

View File

@ -1,53 +0,0 @@
import { Complaint } from "./ComplaintModel.js"
export const AddNewComplaint = async (req, res) => {
try {
if (!req?.user) return res.status(400).json({ message: "please login !" });
// console.log(req?.user)
// req.body.user = req.user._id
const complaint = await Complaint.create(req.body);
res.status(201).json({
success: true,
complaint,
message: 'Complaint Added',
});
} catch (error) {
res.status(500).json({
success: false,
message: error.message ? error.message : 'Something went Wrong',
});
}
}
export const FindAllComplaint = async (req, res) => {
try {
if (!req?.user) return res.status(400).json({ message: "please login !" });
// console.log(req?.user)
const complaint = await Complaint.find().sort({ createdAt: -1 });
if (complaint) {
return res.status(200).json({
success: true,
complaint,
message: 'Fetched All Complaint',
});
}
else {
return res.status(404).json({
success: true,
message: 'No Complaint till Now',
});
}
} catch (error) {
res.status(500).json({
success: false,
message: error.message ? error.message : 'Something went Wrong',
});
}
}

View File

@ -1,23 +0,0 @@
import mongoose from "mongoose";
const { Schema, model } = mongoose;
const ComplaintSchema = new mongoose.Schema(
{
MobileOrEmail: {
type: String,
maxLength: [150, "Mobile Or Email cannot exceed 25 characters"],
required: [true, "Please Enter Mobile Or Email "],
},
Complaint: {
type: String,
maxLength: [1000, "Complaint cannot exceed 1000 characters"],
required: [true, "Please Enter Complaint"],
},
},
{ timestamps: true, versionKey: false }
);
export const Complaint = mongoose.model("Complaint", ComplaintSchema);

View File

@ -1,18 +0,0 @@
import express from 'express'
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
import { AddNewComplaint, FindAllComplaint } from './ComplaintController.js';
const router = express.Router()
router.route("/new").post(isAuthenticatedUser, AddNewComplaint)
router.route("/getAll").get(isAuthenticatedUser, authorizeRoles("admin"), FindAllComplaint)
// router.route("/product/getAll/").get(getAllProduct)
export default router

View File

@ -7,7 +7,6 @@ import cloudinary from "../../Utils/cloudinary.js";
export const createProduct = async (req, res) => { export const createProduct = async (req, res) => {
try { try {
// console.log(req.body)
if (!req.files) { if (!req.files) {
return res.status(400).json({ return res.status(400).json({
@ -15,30 +14,38 @@ export const createProduct = async (req, res) => {
}); });
} }
const image_file = req.files.image; let images = [];
let Allfiles = req.files.image;
if (typeof Allfiles.tempFilePath === "string") {
let filepath = Allfiles.tempFilePath;
images.push(filepath)
} else {
Allfiles.map(item => {
images.push(item.tempFilePath);
})
}
const imagesLinks = [];
for (let i = 0; i < images.length; i++) {
const result = await cloudinary.v2.uploader.upload(images[i], {
folder: "jatinMor/product",
});
imagesLinks.push({
public_id: result.public_id,
url: result.secure_url,
});
}
req.body.image = imagesLinks;
req.body.addedBy = req.user.id;
const myCloud = await cloudinary.v2.uploader.upload( const data = await Product.create({ ...req.body });
image_file?.tempFilePath,
{
folder: "ATP/Product_Image",
}
);
// const { name, base, description, date, time } = req.body;
const data = await Product.create({
...req.body,
image: {
public_id: myCloud.public_id,
url: myCloud.secure_url,
},
});
res.status(201).json({ res.status(201).json({
success: true, success: true,
data,
msg: " create Product Successfully!!", msg: " create Product Successfully!!",
}); });
@ -96,45 +103,57 @@ export const getOneProduct = async (req, res) => {
// 3.update Product // 3.update Product
export const updateProduct = async (req, res) => { export const updateProduct = async (req, res) => {
try { try {
const newProductData = { // const newProductData = {
name: req.body.name, // name: req.body.name,
description: req.body.description, // description: req.body.description,
base_Price: req.body.base_Price, // price: req.body.base_Price,
base_Price_With_Tax: req.body.base_Price_With_Tax,
price_Level_2: req.body.price_Level_2,
price_Level_2_With_Tax: req.body.price_Level_2_With_Tax,
price_Level_3: req.body.price_Level_3,
price_Level_3_With_Tax: req.body.price_Level_3_With_Tax,
// }
}
if (req.files) { if (req.files) {
const image_file = req.files.image;
// req.body.addedBy = req.user.id;
// const image_file = req.files.image;
const getProduct = await Product.findById(req.params.id); const getProduct = await Product.findById(req.params.id);
if (getProduct) { if (getProduct) {
const imageId = getProduct.image.public_id; // Deleting Images From Cloudinary
//delete image from claudinary for (let i = 0; i < getProduct.image.length; i++) {
await cloudinary.uploader.destroy(imageId) await cloudinary.v2.uploader.destroy(getProduct.image[i].public_id);
}
}
let images = [];
let Allfiles = req.files.image;
if (typeof Allfiles.tempFilePath === "string") {
let filepath = Allfiles.tempFilePath;
images.push(filepath)
} else {
Allfiles.map(item => {
images.push(item.tempFilePath);
})
}
const imagesLinks = [];
for (let i = 0; i < images.length; i++) {
const result = await cloudinary.v2.uploader.upload(images[i], {
folder: "jatinMor/product",
});
imagesLinks.push({
public_id: result.public_id,
url: result.secure_url,
});
} }
const myCloud = await cloudinary.v2.uploader.upload( req.body.image = imagesLinks;
image_file?.tempFilePath,
{
folder: "ATP/Product_Image",
}
);
// console.log(myCloud)
newProductData.image = {
public_id: myCloud.public_id,
url: myCloud.secure_url,
};
} }
// console.log(newCategoryData)
//req.user.id,
const ModifyProduct = await Product.findByIdAndUpdate(req.params.id, newProductData, const ModifyProduct = await Product.findByIdAndUpdate(req.params.id, req.body,
{ new: true } { new: true }
// runValidators: true, // runValidators: true,
@ -161,9 +180,14 @@ export const updateProduct = async (req, res) => {
export const deleteProduct = async (req, res) => { export const deleteProduct = async (req, res) => {
try { try {
//delete image from cloudinary
if (!req.params.id) {
return res.status(400).json({
success: false,
msg: "Please Provide Product ID!"
});
}
const getProduct = await Product.findById(req.params.id); const getProduct = await Product.findById(req.params.id);
// console.log(categ)
if (!getProduct) { if (!getProduct) {
return res.status(404).json({ return res.status(404).json({
success: false, success: false,
@ -171,8 +195,11 @@ export const deleteProduct = async (req, res) => {
}); });
} }
const imageId = getProduct.image.public_id; // Deleting Images From Cloudinary
await cloudinary.uploader.destroy(imageId) for (let i = 0; i < getProduct.image.length; i++) {
await cloudinary.v2.uploader.destroy(getProduct.image[i].public_id);
}
//-------------------------// //-------------------------//
const product = await Product.findByIdAndDelete(req.params.id) const product = await Product.findByIdAndDelete(req.params.id)

View File

@ -13,58 +13,30 @@ const productSchema = new Schema({
maxLength: [100, "description cannot exceed 100 characters"], maxLength: [100, "description cannot exceed 100 characters"],
required: [true, "Please Enter product Description"], required: [true, "Please Enter product Description"],
}, },
base_Price: { price: {
type: Number,
required: [true, "Please Enter product Price"],
maxLength: [8, "Price cannot exceed 8 characters"],
},
base_Price_With_Tax: {
type: Number, type: Number,
required: [true, "Please Enter product Price"], required: [true, "Please Enter product Price"],
maxLength: [8, "Price cannot exceed 8 characters"], maxLength: [8, "Price cannot exceed 8 characters"],
}, },
price_Level_2: {
type: Number,
required: true,
maxLength: [8, "price leval2 cannot exceed 8 characters"],
},
price_Level_2_With_Tax: {
type: Number,
required: [true, "Please Enter product Price"],
maxLength: [8, "Price cannot exceed 8 characters"],
},
price_Level_3: { image: [
type: Number, {
required: true, public_id: {
type: String,
maxLength: [8, "price leval3 cannot exceed 8 characters"], required: true,
}, },
price_Level_3_With_Tax: { url: {
type: Number, type: String,
required: [true, "Please Enter product Price"], required: true,
maxLength: [8, "Price cannot exceed 8 characters"], },
}, },
taxId: { ],
addedBy: {
type: Schema.Types.ObjectId, type: Schema.Types.ObjectId,
ref: 'User'
ref: "Tax" }
},
image:
{
public_id: {
type: String,
required: true,
},
url: {
type: String,
required: true,
},
},

View File

@ -0,0 +1,91 @@
import cloudinary from "../../Utils/cloudinary.js";
import { Testimonial } from "./TestimonialModel.js"
export const AddNewTestimonial = async (req, res) => {
try {
if (!req?.user) return res.status(400).json({ message: "please login !" });
// console.log(req?.user)
if (req.files) {
let getImg = req.files.image
const result = await cloudinary.v2.uploader.upload(getImg?.tempFilePath, {
folder: "jatinMor/Testimonial",
})
let simage = {
public_id: result.public_id,
url: result.secure_url,
}
req.body.image = simage
}
req.body.user = req.user._id
const testimonial = await Testimonial.create(req.body);
res.status(201).json({
success: true,
testimonial,
message: 'Testimonial Added',
});
} catch (error) {
res.status(500).json({
success: false,
message: error.message ? error.message : 'Something went Wrong',
});
}
}
export const FindAllTestimonial = async (req, res) => {
try {
if (!req?.user) return res.status(400).json({ message: "please login !" });
// console.log(req?.user)
const testimonial = await Testimonial.find().sort({ createdAt: -1 });
if (testimonial) {
return res.status(200).json({
success: true,
testimonial,
message: 'Fetched All Testimonial',
});
}
else {
return res.status(404).json({
success: true,
message: 'No Testimonial till Now',
});
}
} catch (error) {
res.status(500).json({
success: false,
message: error.message ? error.message : 'Something went Wrong',
});
}
}
export const FindOneTestimonial = async (req, res) => {
try {
if (!req?.user) return res.status(400).json({ message: "please login !" });
// console.log(req?.user)
if (!req.params.id) return res.status(400).json({ message: "please give ID !" });
const testimonial = await Testimonial.findById(req.params.id);
if (testimonial) {
return res.status(200).json({
success: true,
testimonial,
message: 'Fetched Testimonial',
});
}
} catch (error) {
res.status(500).json({
success: false,
message: error.message ? error.message : 'Something went Wrong',
});
}
}

View File

@ -0,0 +1,42 @@
import mongoose from "mongoose";
const { Schema, model } = mongoose;
const TestimonialSchema = new mongoose.Schema(
{
name: {
type: String,
maxLength: [150, "name cannot exceed 25 characters"],
required: [true, "Please Enter name "],
},
company: {
type: String,
maxLength: [30, "company name cannot exceed 1000 characters"],
default: ''
},
testimonial: {
type: String,
maxLength: [1000, "testimonial cannot exceed 1000 characters"],
required: [true, "Please Enter testimonial"],
},
image: {
public_id: {
type: String,
},
url: {
type: String,
},
},
user: {
type: Schema.Types.ObjectId,
ref: 'User'
}
},
{ timestamps: true, versionKey: false }
);
export const Testimonial = mongoose.model("Testimonial", TestimonialSchema);

View File

@ -0,0 +1,20 @@
import express from 'express'
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
import { AddNewTestimonial, FindAllTestimonial, FindOneTestimonial } from './TestimonialController.js';
const router = express.Router()
router.route("/new").post(isAuthenticatedUser, AddNewTestimonial)
router.route("/getAll").get(isAuthenticatedUser, authorizeRoles("admin"), FindAllTestimonial)
router.route("/getOne/:id").get(isAuthenticatedUser, FindOneTestimonial)
// router.route("/product/getAll/").get(getAllProduct)
export default router

View File

@ -286,14 +286,14 @@ const addLogo = async (req, res) => {
const result = await cloudinary.v2.uploader.upload( const result = await cloudinary.v2.uploader.upload(
req.files.Headerlogo.tempFilePath, req.files.Headerlogo.tempFilePath,
{ folder: "ATP/Logo" } { folder: "Jatin/Logo" }
); );
result1 = result.secure_url; result1 = result.secure_url;
} }
if (req.files.Footerlogo) { if (req.files.Footerlogo) {
const result = await cloudinary.v2.uploader.upload( const result = await cloudinary.v2.uploader.upload(
req.files.Footerlogo.tempFilePath, req.files.Footerlogo.tempFilePath,
{ folder: "ATP/Logo" } { folder: "Jatin/Logo" }
); );
result2 = result.secure_url; result2 = result.secure_url;
} }
@ -301,7 +301,7 @@ const addLogo = async (req, res) => {
// console.log(req.files.Adminlogo.path) // console.log(req.files.Adminlogo.path)
const result = await cloudinary.v2.uploader.upload( const result = await cloudinary.v2.uploader.upload(
req.files.Adminlogo.tempFilePath, req.files.Adminlogo.tempFilePath,
{ folder: "ATP/Logo" } { folder: "Jatin/Logo" }
); );
result3 = result.secure_url; result3 = result.secure_url;
} }

View File

@ -129,7 +129,7 @@ export const forgotPassword = async (req, res, next) => {
from: `${process.env.SEND_EMAIL_FROM}`, // Change to your verified sender from: `${process.env.SEND_EMAIL_FROM}`, // Change to your verified sender
subject: `ChatGpt Airport Password Recovery`, subject: `JAtin Mor Password Recovery`,
html: `your new password is: <br/> <strong> ${passwords}</strong><br/><br/>If you have not requested this email then, please ignore it.` html: `your new password is: <br/> <strong> ${passwords}</strong><br/><br/>If you have not requested this email then, please ignore it.`
}); });

View File

@ -2,11 +2,11 @@
import dotenv from 'dotenv' import dotenv from 'dotenv'
dotenv.config() dotenv.config()
import app from "./app.js" import app from "./app.js"
import connectDatabase from "./database/db.js"; import connectDatabase from "./database/db.js"
import cloudinary from "cloudinary" import cloudinary from "cloudinary"
// Connecting to database // Connecting to database
connectDatabase(); connectDatabase()
//console.log(process.env.CLOUDINARY_API_KEY) //console.log(process.env.CLOUDINARY_API_KEY)
//cloudenary uses //cloudenary uses