Merge pull request 's3' (#7) from tmp2 into master

Reviewed-on: #7
suvo-patch-1
Subhodip Ghosh 2025-01-23 14:14:22 +00:00
commit 22c2affa00
3 changed files with 124 additions and 1 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;