diff --git a/src/controllers/website/web-builder.ts b/src/controllers/website/web-builder.ts index 3e3d3d2..2aa8302 100644 --- a/src/controllers/website/web-builder.ts +++ b/src/controllers/website/web-builder.ts @@ -35,15 +35,50 @@ export class WebBuilder { next(error.message); } } - // get wbesite data - async getWebsiteData( + // get wbesite By userid + async getAllWebsitesOfUser( + req: Request, + res: Response, + next: NextFunction + ): Promise { + try { + const { userId } = req.body; + + const cachedKey = `website:${userId}`; + const cachedWebsite = await getCache(cachedKey); + + if (cachedWebsite) { + res.status(200).json({ + message: "webiste data fetched (cache)", + getWebsiteData: cachedWebsite, + }); + return; + } + + const website = await this.prisma.website.findMany({ + where: { userId: userId }, + }); + + if (!website || website.length === 0) { + res.status(404).json({ message: "Website not availabel to display" }); + return; + } + + res.status(200).json(website); + return; + } catch (error) { + next(error.message); + } + } + + // get wbesite BySlug + async getWebsiteBySlug( req: Request, res: Response, next: NextFunction ): Promise { try { - console.log("hitted"); const { slug } = req.params; const cachedKey = `website:${slug}`; diff --git a/src/routes/website/web-builder.ts b/src/routes/website/web-builder.ts index c0c7e7f..bd45574 100644 --- a/src/routes/website/web-builder.ts +++ b/src/routes/website/web-builder.ts @@ -22,9 +22,16 @@ router websiteControllers.createWebsite.bind(websiteControllers) ); +router + .route("/api/v1/get-all-websites/:id") + .get( + userId, + websiteControllers.getAllWebsitesOfUser.bind(websiteControllers) + ); + router .route("/api/v1/get-website/:slug") - .get(websiteControllers.getWebsiteData.bind(websiteControllers)); + .get(websiteControllers.getWebsiteBySlug.bind(websiteControllers)); router .route("/api/v1/update-website/:id") diff --git a/src/services/email-service.ts b/src/services/email-service.ts index 5b17923..3be993f 100644 --- a/src/services/email-service.ts +++ b/src/services/email-service.ts @@ -31,7 +31,9 @@ class MailServer { constructor() { this.defaultEmailConfig = { - service: "gmail", + host: "smtp.gmail.com", + port: 465, + secure: true, auth: { user: process.env.ACCOUNTS_EMAIL__DEFAULTS_EMAIL || "", password: process.env.ACCOUNTS_EMAIL__AUTH_PASSWORD || "", @@ -110,35 +112,36 @@ class MailServer { tls: { rejectUnauthorized: true }, }; - // Add service if provided if (email?.service) { config.service = email.service; } else { - // Add host/port if service is not provided if (email?.host) config.host = email.host; if (email?.port) config.port = email.port; if (typeof email?.secure === "boolean") config.secure = email.secure; } - // Add auth credentials if (email?.auth?.user && email?.auth?.password) { config.auth = { user: email.auth.user, pass: email.auth.password, }; + } else { + return false; } const transporter = nodemailer.createTransport(config); - let transporter_status: boolean; - await transporter - .verify() - .then(() => (transporter_status = true)) - .catch(() => (transporter_status = false)); - - return Promise.resolve(transporter_status); + try { + await transporter.verify(); + console.log("Email configuration verified successfully"); + return true; + } catch (verifyError) { + console.error("Email verification failed:", verifyError); + return false; + } } catch (error) { - return Promise.reject(error); + console.error("Email verification error:", error); + return false; } } @@ -188,8 +191,7 @@ class MailServer { return this.send_email(emailData); } - - // email for + // email for async sendEmailWithCustomCredentials( emailCredentials: EmailCredentials,