diff --git a/src/routes/api/getGalleryImage.js b/src/routes/api/getGalleryImage.js new file mode 100644 index 0000000..293dba7 --- /dev/null +++ b/src/routes/api/getGalleryImage.js @@ -0,0 +1,36 @@ +const GalleryImage = require('../../models/getGalleyImage'); + +const getGalleryImage = async (req, res) => { + try { + // Extract query parameters for filtering (if provided) + const { gameName, userId, gameID} = req.query; + + // Build a filter object based on the query parameters + const filter = {}; + + if (gameName) { + filter.gameName = gameName; + } + + if (userId) { + filter.userId = userId; + } + if (gameID) { + filter.gameID = gameID; + } + + // Fetch gallery images with filters and selected fields + const galleryImages = await GalleryImage.find(filter).select('gameName userId gameID screenshotUrl'); // Select only these fields + + if (!galleryImages.length) { + return res.status(404).json({ message: 'No images found' }); + } + + return res.status(200).json(galleryImages); // Return the filtered gallery images with selected fields + } catch (error) { + console.error('Error fetching images:', error.message); + return res.status(500).json({ error: 'Something went wrong' }); + } +}; + +module.exports = getGalleryImage; \ No newline at end of file diff --git a/src/routes/api/saveGalleryImage.js b/src/routes/api/saveGalleryImage.js new file mode 100644 index 0000000..1e35dd8 --- /dev/null +++ b/src/routes/api/saveGalleryImage.js @@ -0,0 +1,78 @@ +const GalleryImage = require('../../models/imageGallery'); +const axios = require('axios'); +const FormData = require('form-data'); // Import form-data for Node.js + +const saveGalleryImage = async (req, res) => { + try { + const { userId, gameName, gameID, screenShot } = req.body; + + // Validate base64 format + const isValidBase64 = validateBase64(screenShot); + if (!isValidBase64) { + return res.status(400).json({ error: 'Invalid base64 image data' }); + } + + // Extract image details + const imageData = extractImageDataFromBase64(screenShot); + const contentType = imageData.contentType || 'image/jpeg'; // Default to JPEG + + // Convert base64 to buffer + const buffer = Buffer.from(screenShot.replace(/^data:image\/(png|jpg|jpeg);base64,/, ''), 'base64'); + + // Create FormData + const formData = new FormData(); + formData.append('file1', buffer, { filename: 'screenshot.jpg', contentType }); + formData.append('folder', 'gameGallery'); + formData.append('bucket', 'polly-bs'); + + // Upload image to external API using axios + const uploadResponse = await axios.post( + 'https://preschool-curriculum.in/api/one/v1/file/upload', + formData, + { + headers: { + ...formData.getHeaders(), // Add form-data headers like Content-Type boundary + // Add any necessary authentication headers if required + }, + } + ); + + if (uploadResponse.status !== 200) { + throw new Error('Image upload failed: ' + uploadResponse.statusText); + } + + // Extract and store the uploaded image URL from the response + const screenshotUrl = uploadResponse.data.urls[0]; + + // Create and save gallery image data + const galleryImageData = new GalleryImage({ + userId, + gameName, + gameID, + screenshotUrl, + message: 'Image received', + }); + await galleryImageData.save(); + + return res.status(200).json(galleryImageData); + } catch (error) { + console.error('Error:', error.message); + return res.status(500).json({ error: 'Something went wrong' }); + } +}; + +// Validate base64 image +function validateBase64(base64String) { + const regex = /^data:image\/(png|jpg|jpeg);base64,/; + return regex.test(base64String); +} + +// Extract image data (like content type) from base64 string +function extractImageDataFromBase64(base64String) { + const matches = base64String.match(/^data:image\/(png|jpg|jpeg);base64,/); + return { + contentType: matches ? `image/${matches[1]}` : 'image/jpeg', + }; +} + +module.exports = saveGalleryImage; diff --git a/src/routes/v1/api.route.js b/src/routes/v1/api.route.js index b674cef..5f2984f 100644 --- a/src/routes/v1/api.route.js +++ b/src/routes/v1/api.route.js @@ -32,7 +32,8 @@ const aiFeedbackOnReportWithFollowup = require("../api/aiFeedbackOnReportWithFol const aiTextToSpeech = require("../api/aiTextToSpeech"); const aiEvaluateImageToStar = require("../api/aiEvaluateImageToStar"); const getGameInfo = require("../api/getGameInfo"); - +const saveGalleryImage = require("../api/saveGalleryImage"); +const getGalleryImage = require("../api/getGalleryImage"); const router = express.Router(); @@ -197,7 +198,15 @@ router.get("/ping", (req, res) => { getGameInfo(req, res); }); + // Save Drawing Game Gallery Image + router.post("/saveGalleryImage", (req, res) => { + saveGalleryImage(req, res); + }); + // Get Drawing Game Gallery Image + router.get("/getGalleryImage", (req, res) => { + getGalleryImage(req, res); + }); module.exports = router;