diff --git a/server/routers/epja-2024-1/ecliptica/index.js b/server/routers/epja-2024-1/ecliptica/index.js index 9db8617..bd9aecf 100644 --- a/server/routers/epja-2024-1/ecliptica/index.js +++ b/server/routers/epja-2024-1/ecliptica/index.js @@ -1,6 +1,12 @@ +const express = require('express'); +const cors = require('cors'); + +const plantsRouter = require('./plants/getPlants'); +const calendarRouter = require('./plants_calendar/index'); + const router = require('express').Router(); -const plantsRouter = require('express').Router(); + module.exports = router; - -router.use('/plants',plantsRouter) \ No newline at end of file +router.use('/plants',plantsRouter) +router.use('/plants_calendar',calendarRouter) diff --git a/server/routers/epja-2024-1/ecliptica/plants/getPlants.js b/server/routers/epja-2024-1/ecliptica/plants/getPlants.js index aeb89e4..6e4acc6 100644 --- a/server/routers/epja-2024-1/ecliptica/plants/getPlants.js +++ b/server/routers/epja-2024-1/ecliptica/plants/getPlants.js @@ -1,133 +1,145 @@ -const express = require('express'); -const axios = require('axios'); -const FormData = require('form-data'); -const plantsRouter = express.Router(); -const app = express(); -const port = process.env.PORT || 3000; -const cors = require('cors'); -const CONFIG = require('./config'); -const {config} = require("../../../bro.config"); -app.use(cors()); - -app.listen(port, () => { - console.log(`Server is running on port ${port}`); +const { exec } = require('child_process'); +exec('npm list axios', (err, stdout, stderr) => { + if (stderr.includes('empty')) { + console.log('Installing axios...'); + exec('npm install axios', (error, stdout, stderr) => { + if (error) { + console.error('Error installing axios:', error); + } else { + console.log('Axios installed successfully'); + startApp(); + } + }); + } else { + startApp(); + } }); -async function getAccessToken() { - const formData = new FormData(); - formData.append('grant_type', 'client_credentials'); - formData.append('client_id', CONFIG.CLIENT_ID); - formData.append('client_secret', CONFIG.CLIENT_SECRET); +function startApp() { + const express = require('express'); + const axios = require('axios'); + const FormData = require('form-data'); + const plantsRouter = express.Router(); + const cors = require('cors'); + const CONFIG = require('./config'); - try { - const response = await axios.post('https://open.plantbook.io/api/v1/token/', formData, { - headers: { 'Content-Type': 'multipart/form-data' } - }); - if (response.data && response.data.access_token) { - console.log('Access token retrieved:', response.data.access_token); - return response.data.access_token; - } else { - console.error('Error: access_token not found in response'); + plantsRouter.use(cors()); + + async function getAccessToken() { + const formData = new FormData(); + formData.append('grant_type', 'client_credentials'); + formData.append('client_id', CONFIG.CLIENT_ID); + formData.append('client_secret', CONFIG.CLIENT_SECRET); + + try { + const response = await axios.post('https://open.plantbook.io/api/v1/token/', formData, { + headers: {'Content-Type': 'multipart/form-data'} + }); + if (response.data && response.data.access_token) { + console.log('Access token retrieved:', response.data.access_token); + return response.data.access_token; + } else { + console.error('Error: access_token not found in response'); + return null; + } + + } catch (error) { + console.error('Error fetching access token:', error.response ? error.response.data : error.message); return null; } - - } catch (error) { - console.error('Error fetching access token:', error.response ? error.response.data : error.message); - return null; } -} -async function fetchPlantData(plantId) { - const accessToken = await getAccessToken(); - if (!accessToken) { - return null; + async function fetchPlantData(plantId) { + const accessToken = await getAccessToken(); + if (!accessToken) { + return null; + } + try { + const response = await axios.get(`https://open.plantbook.io/api/v1/plant/detail/${encodeURIComponent(plantId)}/`, { + headers: { + 'Authorization': `Bearer ${accessToken}` + } + }); + return response.data; + } catch (error) { + console.error('Error fetching plant data:', error.response ? error.response.data : error.message); + return null; + } } - try { - const response = await axios.get(`https://open.plantbook.io/api/v1/plant/detail/${encodeURIComponent(plantId)}/`, { - headers: { - 'Authorization': `Bearer ${accessToken}` - } - }); - return response.data; - } catch (error) { - console.error('Error fetching plant data:', error.response ? error.response.data : error.message); - return null; - } -} -plantsRouter.get('/list', async (req, res) => { - const accessToken = await getAccessToken(); - if (!accessToken) { - res.status(500).send({ message: 'Error obtaining access token' }); - return; - } - try { - const alias = req.query.alias || 'monstera'; - const response = await axios.get('https://open.plantbook.io/api/v1/plant/search', { - headers: { - 'Authorization': `Bearer ${accessToken}` - }, - params: { - alias: alias - } - }); + plantsRouter.get('/list', async (req, res) => { + const accessToken = await getAccessToken(); + if (!accessToken) { + res.status(500).send({message: 'Error obtaining access token'}); + return; + } + try { + const alias = req.query.alias || 'monstera'; + const response = await axios.get('https://open.plantbook.io/api/v1/plant/search', { + headers: { + 'Authorization': `Bearer ${accessToken}` + }, + params: { + alias: alias + } + }); - const plantsList = response.data.results; + const plantsList = response.data.results; - const plants = await Promise.all(plantsList.map(async (plant) => { - const plantDetails = await fetchPlantData(plant.pid); - return { - id: plant.pid, - alias: plant.alias, - display_name: plant.display_name, - image_url: plantDetails ? plantDetails.image_url : null, - max_light: plantDetails ? plantDetails.max_light : null, - min_light: plantDetails ? plantDetails.min_light : null, - max_temp: plantDetails ? plantDetails.max_temp : null, - min_temp: plantDetails ? plantDetails.min_temp : null, - max_env_humid: plantDetails ? plantDetails.max_env_humid : null, - min_env_humid: plantDetails ? plantDetails.min_env_humid : null, - max_soil_moist: plantDetails ? plantDetails.max_soil_moist : null, - min_soil_moist: plantDetails ? plantDetails.min_soil_moist : null, - max_soil_ec: plantDetails ? plantDetails.max_soil_ec : null, - min_soil_ec: plantDetails ? plantDetails.min_soil_ec : null, + const plants = await Promise.all(plantsList.map(async (plant) => { + const plantDetails = await fetchPlantData(plant.pid); + return { + id: plant.pid, + alias: plant.alias, + display_name: plant.display_name, + image_url: plantDetails ? plantDetails.image_url : null, + max_light: plantDetails ? plantDetails.max_light : null, + min_light: plantDetails ? plantDetails.min_light : null, + max_temp: plantDetails ? plantDetails.max_temp : null, + min_temp: plantDetails ? plantDetails.min_temp : null, + max_env_humid: plantDetails ? plantDetails.max_env_humid : null, + min_env_humid: plantDetails ? plantDetails.min_env_humid : null, + max_soil_moist: plantDetails ? plantDetails.max_soil_moist : null, + min_soil_moist: plantDetails ? plantDetails.min_soil_moist : null, + max_soil_ec: plantDetails ? plantDetails.max_soil_ec : null, + min_soil_ec: plantDetails ? plantDetails.min_soil_ec : null, + }; + })); + + res.send({results: plants}); + } catch (error) { + console.error('Error fetching plant list:', error.response ? error.response.data : error.message); + res.status(500).send({message: 'Error fetching plant list'}); + } + }); + + plantsRouter.get('/:id', async (req, res) => { + const plantId = req.params.id; + const plantData = await fetchPlantData(plantId); + + if (plantData) { + const detailedPlantData = { + id: plantData.pid, + display_name: plantData.display_name, + alias: plantData.alias, + max_light: plantData.max_light, + min_light: plantData.min_light, + max_temperature: plantData.max_temp, + min_temperature: plantData.min_temp, + max_humidity: plantData.max_env_humid, + min_humidity: plantData.min_env_humid, + max_soil_moisture: plantData.max_soil_moist, + min_soil_moisture: plantData.min_soil_moist, + max_soil_ec: plantData.max_soil_ec, + min_soil_ec: plantData.min_soil_ec, + image_url: plantData.image_url }; - })); - res.send({ results: plants }); - } catch (error) { - console.error('Error fetching plant list:', error.response ? error.response.data : error.message); - res.status(500).send({ message: 'Error fetching plant list' }); - } -}); + res.send(detailedPlantData); + } else { + res.status(404).send({message: 'Plant not found'}); + } + }); -plantsRouter.get('/:id', async (req, res) => { - const plantId = req.params.id; - const plantData = await fetchPlantData(plantId); - - if (plantData) { - // Construct a response based on the plantData structure - const detailedPlantData = { - id: plantData.pid, - display_name: plantData.display_name, - alias: plantData.alias, - max_light: plantData.max_light, - min_light: plantData.min_light, - max_temperature: plantData.max_temp, - min_temperature: plantData.min_temp, - max_humidity: plantData.max_env_humid, - min_humidity: plantData.min_env_humid, - max_soil_moisture: plantData.max_soil_moist, - min_soil_moisture: plantData.min_soil_moist, - max_soil_ec: plantData.max_soil_ec, - min_soil_ec: plantData.min_soil_ec, - image_url: plantData.image_url - }; - - res.send(detailedPlantData); - } else { - res.status(404).send({ message: 'Plant not found' }); - } -}); - -app.use('/plants', plantsRouter); + module.exports = plantsRouter; +} \ No newline at end of file diff --git a/server/routers/epja-2024-1/ecliptica/plants_calendar/index.js b/server/routers/epja-2024-1/ecliptica/plants_calendar/index.js index 20cdeb1..156997f 100644 --- a/server/routers/epja-2024-1/ecliptica/plants_calendar/index.js +++ b/server/routers/epja-2024-1/ecliptica/plants_calendar/index.js @@ -1,10 +1,7 @@ const express = require('express'); const cors = require('cors'); -const app = express(); -const port = 5000; - -app.use(cors()); +const plantsRouter = express.Router() const plants = [ { @@ -13,7 +10,6 @@ const plants = [ frequency: 3, startDate: "2024-10-09", }, - { name: "Sunflower", image: "https://avatars.mds.yandex.net/i?id=31da587c9aabc83ad3615023f91d7284781be06c-10701700-images-thumbs&n=13", @@ -22,6 +18,7 @@ const plants = [ }, ]; + const calculateWateringDates = (startDate, frequency) => { const dates = []; const start = new Date(startDate); @@ -39,10 +36,8 @@ const plantsWithDates = plants.map(plant => ({ wateringDates: calculateWateringDates(plant.startDate, plant.frequency), })); -app.get('/api/plants', (req, res) => { +plantsWithDates.get('/api/plants', (req, res) => { res.json(plantsWithDates); }); -app.listen(port, () => { - console.log(`Server running on http://localhost:${port}`); -}); \ No newline at end of file +module.exports = plantsRouter; \ No newline at end of file diff --git a/server/routers/epja-2024-1/index.js b/server/routers/epja-2024-1/index.js index e29e690..146b465 100644 --- a/server/routers/epja-2024-1/index.js +++ b/server/routers/epja-2024-1/index.js @@ -3,6 +3,7 @@ const router = express.Router() router.use('/enterfront', require('./enterfront/index')) + router.use('/ecliptica', require('./ecliptica/index')) module.exports = router