Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 0 additions & 17 deletions backend/.env

This file was deleted.

38 changes: 38 additions & 0 deletions backend/controllers/galleryController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
const pool = require("../db");
const galleryTemplate = require("../emails/galleryTemp");
const { sendGalleryPublishedEmail } = require("../services/emailService");

exports.publishGallery = async (req, res) => {
try {
const { userEmail, userName, galleryName } = req.body;

if (!userEmail || !userName) {
return res.status(400).json({ message: "Missing user information" });
}

console.log(`📧 Sending email to: ${userEmail}`);
console.log(`👤 User: ${userName}`);
console.log(`🖼️ Gallery: ${galleryName}`);

await sendGalleryPublishedEmail(
userEmail,
userName,
galleryName || "Test Gallery",
galleryTemplate
);

console.log("✅ Email sent successfully!");

return res.json({
message: "Gallery published and email sent",
sentTo: userEmail,
galleryName: galleryName
});
} catch (err) {
console.error("❌ Publish error:", err);
res.status(500).json({
message: "Failed to send email",
error: err.message
});
}
};
15 changes: 15 additions & 0 deletions backend/emails/galleryTemp.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module.exports = function galleryPublishedTemplate(clientName, galleryName) {
return `
<div style="font-family: Arial; padding: 20px;">
<h2>Your Gallery Is Now Available</h2>
<p>Hello ${clientName},</p>
<p>Your gallery <strong>${galleryName}</strong> has been published.</p>
<p>Please log in to your dashboard to view and download your photos.</p>
<a href="${process.env.FRONTEND_URL}/Login"
style="display:inline-block;padding:10px 20px;background:#000;color:#fff;text-decoration:none;border-radius:5px;margin-top:10px;">
Log In
</a>
<p style="margin-top:20px;">Thank you for choosing our services.</p>
</div>
`;
};
4 changes: 2 additions & 2 deletions backend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions backend/routes/galleryRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const express = require("express");
const router = express.Router();
const { publishGallery } = require("../controllers/galleryController");

router.post("/galleries/:id/publish", publishGallery);

module.exports = router;
11 changes: 9 additions & 2 deletions backend/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,17 @@ pool.connect()
.then(() => console.log(" PostgreSQL connected"))
.catch(err => console.error("Database connection error:", err));

// Routes
// Auth Routes
const authRoutes = require("./routes/auth");
app.use("/api/auth", authRoutes);

const adminRoutes = require("./routes/admin");
app.use("/api/admin", adminRoutes);

const galleryRoutes = require("./routes/galleryRoutes");
app.use("/api", galleryRoutes);

// Test route
app.get("/test-db", async (req, res) => {
try {
const result = await pool.query("SELECT * FROM users LIMIT 5;");
Expand All @@ -41,4 +48,4 @@ app.get("/test-db", async (req, res) => {
});

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`🚀 Server running on port ${PORT}`));
app.listen(PORT, () => console.log(`🚀 Server running on port ${PORT}`));
31 changes: 31 additions & 0 deletions backend/services/emailService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
const nodemailer = require("nodemailer");

const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASS,
},
});

async function sendEmail(to, subject, html) {
return transporter.sendMail({
from: process.env.EMAIL_USER,
to,
subject,
html,
});
}

async function sendGalleryPublishedEmail(to, clientName, galleryName, template) {
return sendEmail(
to,
"Your Gallery Is Published",
template(clientName, galleryName)
);
}

module.exports = {
sendEmail,
sendGalleryPublishedEmail,
};
Loading