File: /var/www/javago-api-updates/src/controllers/cafe/cafe.controller.js
import * as cafeService from "../../services/cafe/cafe.services.js";
import { messages } from "../../config/response.messages.js";
import * as Helper from "../../helper/index.js";
import * as Email from "../../helper/email.js";
import moment from "moment/moment.js";
import bcrypt from "bcrypt";
import { getPreSignedUrl } from "../../helper/presigned.url.js";
import Stripe from "stripe";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
// cafe list according to filter
/**
* 0 - All
* 1 - Favorite cafe list
* 2 - Vegan cafe list
* 3 - Bubble Tea cafe list
* 4 - Dessert cafe list
* 5 - sandwich cafe list
*/
export async function cafeListing(req, res) {
try {
let cafeList = [];
let featuredCafeList = [];
req.body.user_id = req.user_id;
if (req.body.filter_flag == 0) {
cafeList = await cafeService.getAllCafeList(req.body);
featuredCafeList = await cafeService.getFeatureCafeList(req.body);
} else if (req.body.filter_flag == 1) {
cafeList = await cafeService.getFavoritesCafeList(req.body);
featuredCafeList = {};
} else {
cafeList = await cafeService.getAllCafeList(req.body);
featuredCafeList = {};
}
return res.status(200).send({
status: 200,
message: messages.cafe_found,
data: {
all_cafe: cafeList,
featured_list: featuredCafeList,
},
});
} catch (error) {
Helper.writeErrorLog(req, error);
console.log("error", error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
export async function searchCafe(req, res) {
try {
req.body.user_id = req.user_id;
req.body.filter_flag = 0;
let cafeList = await cafeService.getAllCafeList(req.body);
return res.status(200).send({
status: 200,
message: messages.cafe_found,
data: cafeList,
});
} catch (error) {
Helper.writeErrorLog(req, error);
console.log("error", error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
export async function searchCafeName(req, res) {
try {
req.body.user_id = req.user_id;
let cafeList = await cafeService.getSearchedCafe(req.body);
return res.status(200).send({
status: 200,
message: messages.cafe_found,
data: cafeList,
});
} catch (error) {
Helper.writeErrorLog(req, error);
console.log("error", error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
export async function searchCafeByName(req, res) {
try {
req.body.user_id = req.user_id;
let cafeList = await cafeService.getCafeByName(req.body);
return res.status(200).send({
status: 200,
message: messages.cafe_found,
data: cafeList,
});
} catch (error) {
Helper.writeErrorLog(req, error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
export async function favoriteCafe(req, res) {
try {
let updateData = {
is_favorite: req.body.is_favorite,
updated_at: moment().unix(),
};
let is_favorite = await cafeService.findFavoriteCafeById(
req.body.cafe_id,
req.user_id
);
if (is_favorite.length > 0) {
if (req.body.is_favorite == 1) {
await cafeService.favoriteCafeUpdate(
req.user_id,
req.body.cafe_id,
updateData
);
} else {
await cafeService.deleteFavoriteCafe(req.user_id, req.body.cafe_id);
}
} else {
await cafeService.favoriteCafeAdd({
user_id: req.user_id,
cafe_id: req.body.cafe_id,
is_favorite: req.body.is_favorite,
created_at: moment().unix(),
});
}
return res.status(202).send({
status: 202,
message: messages.user_found,
data: updateData,
});
} catch (error) {
Helper.writeErrorLog(req, error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
export async function requestCafe(req, res) {
try {
await Email.sendCafeRequestMail(req.body);
return res.status(202).send({
status: 202,
message: messages.request_created,
});
} catch (error) {
Helper.writeErrorLog(req, error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error.message,
});
}
}
export async function requestCafeOld(req, res) {
try {
req.body.approved = 1;
var length = 8;
let charset =
"@#$&*0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@#$&*0123456789abcdefghijklmnopqrstuvwxyz";
let password = "";
for (var i = 0, n = charset.length; i < length; ++i) {
password += charset.charAt(Math.floor(Math.random() * n));
}
req.body.password = await bcrypt.hash(
password,
parseInt(process.env.BCRYPT_SALT_ROUND) || 10
);
let is_cafe = await cafeService.findRequestCafe(req.body);
if (!is_cafe) {
await cafeService.requestCafe(req.body);
await Email.sendCafeRequestMail(
req.body.email,
req.body.cafe_name,
password
);
}
return res.status(202).send({
status: 202,
message: messages.request_created,
});
} catch (error) {
Helper.writeErrorLog(req, error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error.message,
});
}
}
export async function cafeFilterList(req, res) {
try {
let filterData = await cafeService.cafeFilterList(req.query);
// for (const data of filterData.docs) {
// data.image = await getPreSignedUrl(data.image)
// }
return res.status(200).send({
status: 200,
message: messages.data_found,
data: filterData,
});
} catch (error) {
Helper.writeErrorLog(req, error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
// get cafe category list
export async function getCafeItemCatgory(req, res) {
try {
let result = await cafeService.getCafeItemCatgory(req.query);
return res.status(200).send({
status: 200,
message: messages.data_found,
data: result,
});
} catch (error) {
console.log(error);
Helper.writeErrorLog(req, error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error.message,
});
}
}
// get cafe item list with pagination by category
export async function getCafeItemList(req, res) {
try {
let result = await cafeService.getCafeItemList(req.query);
return res.status(200).send({
status: 200,
message: messages.data_found,
data: result,
});
} catch (error) {
Helper.writeErrorLog(req, error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
// cafe details
export async function getCafeDetails(req, res) {
try {
req.body.user_id = req.user_id;
let result = await cafeService.getCafeDetails(req.body.cafe_id, req.body);
return res.status(200).send({
status: 200,
message: messages.data_found,
data: result,
});
} catch (error) {
Helper.writeErrorLog(req, error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
// cafe item details
export async function getCafeItemDetails(req, res) {
try {
let result = await cafeService.getCafeItemDetails(
parseInt(req.body.item_id)
);
return res.status(200).send({
status: 200,
message: messages.data_found,
data: result,
});
} catch (error) {
Helper.writeErrorLog(req, error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
// cafe suggested item list
export async function cafeItemSuggestedList(req, res) {
try {
let result = await cafeService.cafeItemSuggestedList(req.body);
return res.status(200).send({
status: 200,
message: messages.data_found,
data: result,
});
} catch (error) {
Helper.writeErrorLog(req, error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
export async function cafeGoToOrders(req, res) {
try {
let result = await cafeService.cafeGoToOrders(req.user_id);
return res.status(200).send({
status: 200,
message: messages.data_found,
data: result,
});
} catch (error) {
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
export async function cafeGoToOrder(req, res) {
try {
let result = await cafeService.cafeGoToOrder(
req.user_id,
req.params.cafe_id
);
return res.status(200).send({
status: 200,
message: messages.data_found,
data: result,
});
} catch (error) {
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
export async function createCafeGoToOrder(req, res) {
try {
req.body.loggedInUser = req.user_id;
let result = await cafeService.createGoToOrder(req.body);
return res.status(200).send({
status: 200,
message: messages.data_found,
data: result,
});
} catch (error) {
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
export async function updateCafeGoToOrder(req, res) {
try {
let result = await cafeService.updateGoToOrder(req.body);
return res.status(200).send({
status: 200,
message: messages.data_found,
data: result,
});
} catch (error) {
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
export async function removeCafeGoToOrder(req, res) {
try {
req.body.loggedInUser = req.user_id;
let result = await cafeService.removeGoToOrder(req.body);
return res.status(200).send({
status: 200,
message: messages.data_found,
data: result,
});
} catch (error) {
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}
}
/**
* Process payment and transfer to connected account
*/
export async function processPayment(req, res) {
try {
const { paymentIntentId } = req.body;
// 1. Confirm the existing payment intent
const paymentIntent = await stripe.paymentIntents.confirm(paymentIntentId);
// 2. Return the result
return res.json({
success: true,
paymentIntent: paymentIntent,
});
} catch (error) {
console.error("Payment processing error:", error);
return res.status(400).json({
success: false,
error: error.message,
});
}
}