From 251ff2f06d8e118e3e81b0458d284fbf62af1934 Mon Sep 17 00:00:00 2001 From: Biswakalyan Bhuyan Date: Fri, 28 Jun 2024 18:00:44 +0530 Subject: adding the influencer page and adding the funcitons in it --- client/package-lock.json | 21 +++++++++++++++++---- client/package.json | 1 + client/src/Influencers.js | 28 +++++++++++++++++----------- server/server.js | 25 +++++++++++++++++-------- 4 files changed, 52 insertions(+), 23 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index a6fa0c1..8efb06a 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -12,6 +12,7 @@ "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "axios": "^1.7.2", + "dotenv": "^16.4.5", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.24.0", @@ -7763,12 +7764,15 @@ } }, "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { @@ -16403,6 +16407,15 @@ } } }, + "node_modules/react-scripts/node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", diff --git a/client/package.json b/client/package.json index 70e70ca..71228a9 100644 --- a/client/package.json +++ b/client/package.json @@ -7,6 +7,7 @@ "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "axios": "^1.7.2", + "dotenv": "^16.4.5", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.24.0", diff --git a/client/src/Influencers.js b/client/src/Influencers.js index a72d654..cfa28d9 100644 --- a/client/src/Influencers.js +++ b/client/src/Influencers.js @@ -1,16 +1,18 @@ import React, { useState, useEffect, useCallback } from 'react'; import axios from 'axios'; +require('dotenv').config(); -function Influencers({ adminPassword }) { +function Influencers() { const [profiles, setProfiles] = useState([]); const [newProfile, setNewProfile] = useState(''); + const adminPassword = process.env.ADMIN_PASSWROD; + const fetchProfiles = useCallback(async () => { try { - const response = await axios.get('http://localhost:5001/profiles', { - headers: { Authorization: `Bearer ${adminPassword}` } + const response = await axios.get('http://localhost:5001/influencers', { + headers: { 'x-admin-password': adminPassword } }); - console.log('Fetched profiles:', response.data); setProfiles(response.data); } catch (error) { console.error('Error fetching profiles:', error); @@ -23,11 +25,13 @@ function Influencers({ adminPassword }) { const addProfile = async () => { try { + const updatedProfiles = [...profiles, newProfile]; await axios.post( - 'http://localhost:5001/profiles', - { username: newProfile }, - { headers: { Authorization: `Bearer ${adminPassword}` } } + 'http://localhost:5001/influencers', + { profiles: updatedProfiles }, + { headers: { 'x-admin-password': adminPassword } } ); + setProfiles(updatedProfiles); setNewProfile(''); fetchProfiles(); } catch (error) { @@ -42,10 +46,10 @@ function Influencers({ adminPassword }) { formData.append('file', file); try { - await axios.post('http://localhost:5001/upload', formData, { + await axios.post('http://localhost:5001/import-influencers', formData, { headers: { 'Content-Type': 'multipart/form-data', - Authorization: `Bearer ${adminPassword}` + 'x-admin-password': adminPassword } }); fetchProfiles(); @@ -57,8 +61,8 @@ function Influencers({ adminPassword }) { const exportJson = async () => { try { - const response = await axios.get('http://localhost:5001/export', { - headers: { Authorization: `Bearer ${adminPassword}` }, + const response = await axios.get('http://localhost:5001/export-influencers', { + headers: { 'x-admin-password': adminPassword }, responseType: 'blob' }); const url = window.URL.createObjectURL(new Blob([response.data])); @@ -82,12 +86,14 @@ function Influencers({ adminPassword }) { placeholder="Enter Instagram username" /> +

Current Influencers

+

Import/Export Influencers

{ // Endpoint to get influencers app.get('/influencers', authenticate, (req, res) => { - const influencers = JSON.parse(fs.readFileSync(path.join(__dirname, 'influencers.json'), 'utf8')).profiles; - res.json(influencers); + try { + const influencersData = JSON.parse(fs.readFileSync(path.join(__dirname, 'influencers.json'), 'utf8')); + res.json(influencersData.profiles); + } catch (error) { + console.error('Error fetching influencers:', error); + res.status(500).json({ error: 'Error fetching influencers' }); + } }); -// Endpoint to update influencers +// Endpoint to update influencersData app.post('/influencers', authenticate, (req, res) => { - const { profiles } = req.body; - fs.writeFileSync(path.join(__dirname, 'influencers.json'), JSON.stringify({ profiles }, null, 2)); - res.status(200).json({ message: 'Influencers updated successfully' }); + try { + const { profiles } = req.body; + const influencersData = { profiles }; + fs.writeFileSync(path.join(__dirname, 'influencers.json'), JSON.stringify(updatedData, null, 2)); + } catch (error) { + console.error('Error updating influencers:', error); + res.status(500).json({ error: 'Error updating influencers' }); + } }); // Endpoint to export influencers JSON -- cgit v1.2.3-59-g8ed1b