75 lines
2.0 KiB
JavaScript
75 lines
2.0 KiB
JavaScript
// src/controllers/media.controller.js
|
|
const { getPageConnection } = require('../services/tokenStore.service');
|
|
const { getIGMedia, getMediaDetails } = require('../services/media.service');
|
|
|
|
/**
|
|
* GET /api/social/media
|
|
* Get Instagram media posts for connected account
|
|
* Query params: limit (default 50), after (pagination cursor)
|
|
*/
|
|
async function listMedia(req, res) {
|
|
console.log('📸 Media list endpoint hit');
|
|
const userId =req.query.userId
|
|
const { limit = 50, after } = req.query;
|
|
|
|
try {
|
|
const { pageToken, igUserId } = await getPageConnection(userId);
|
|
|
|
if (!pageToken || !igUserId) {
|
|
return res.status(400).json({ error: 'Connect a channel first' });
|
|
}
|
|
|
|
const media = await getIGMedia(igUserId, pageToken, parseInt(limit), after);
|
|
console.log(`✅ Fetched ${media.data.length} media items`);
|
|
|
|
return res.json({
|
|
data: media.data,
|
|
paging: media.paging,
|
|
count: media.data.length
|
|
});
|
|
} catch (error) {
|
|
console.error('💥 Media list error:', error.message);
|
|
return res.status(500).json({
|
|
error: error.message,
|
|
details: error.response?.data
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* GET /api/social/media/:mediaId
|
|
* Get details of a specific media post
|
|
*/
|
|
async function getMedia(req, res) {
|
|
console.log('📸 Single media endpoint hit');
|
|
const userId =req.query.userId
|
|
const { mediaId } = req.params;
|
|
|
|
if (!mediaId) {
|
|
return res.status(400).json({ error: 'mediaId parameter required' });
|
|
}
|
|
|
|
try {
|
|
const { pageToken, igUserId } = await getPageConnection(userId);
|
|
|
|
if (!pageToken || !igUserId) {
|
|
return res.status(400).json({ error: 'Connect a channel first' });
|
|
}
|
|
|
|
const media = await getMediaDetails(mediaId, pageToken);
|
|
console.log('✅ Media details fetched');
|
|
|
|
return res.json(media);
|
|
} catch (error) {
|
|
console.error('💥 Media details error:', error.message);
|
|
return res.status(500).json({
|
|
error: error.message,
|
|
details: error.response?.data
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
listMedia,
|
|
getMedia
|
|
}; |