From 02891fe301177a69c9144cd0a249b249188a2292 Mon Sep 17 00:00:00 2001 From: bogap <58374268+bogap@users.noreply.github.com> Date: Sat, 12 Oct 2024 23:03:52 +0300 Subject: [PATCH 1/4] corrected --- server/routers/epja-2024-1/ecliptica/index.js | 12 ++ .../epja-2024-1/ecliptica/plants/config.js | 6 + .../epja-2024-1/ecliptica/plants/getPlants.js | 145 ++++++++++++++++++ .../ecliptica/plants_calendar/index.js | 43 ++++++ server/routers/epja-2024-1/index.js | 2 + 5 files changed, 208 insertions(+) create mode 100644 server/routers/epja-2024-1/ecliptica/index.js create mode 100644 server/routers/epja-2024-1/ecliptica/plants/config.js create mode 100644 server/routers/epja-2024-1/ecliptica/plants/getPlants.js create mode 100644 server/routers/epja-2024-1/ecliptica/plants_calendar/index.js diff --git a/server/routers/epja-2024-1/ecliptica/index.js b/server/routers/epja-2024-1/ecliptica/index.js new file mode 100644 index 0000000..bd9aecf --- /dev/null +++ b/server/routers/epja-2024-1/ecliptica/index.js @@ -0,0 +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(); + +module.exports = router; + +router.use('/plants',plantsRouter) +router.use('/plants_calendar',calendarRouter) diff --git a/server/routers/epja-2024-1/ecliptica/plants/config.js b/server/routers/epja-2024-1/ecliptica/plants/config.js new file mode 100644 index 0000000..8b9b0c3 --- /dev/null +++ b/server/routers/epja-2024-1/ecliptica/plants/config.js @@ -0,0 +1,6 @@ +const CONFIG = { + CLIENT_ID: 'kD2JXj1faSCYAWdT4B069wQAx89CZAkXmzTinRvH', + CLIENT_SECRET: 'bJq7Uiwua52tHiLP80N60hALNtQX2wcE4Mj6yNA9OzG2iZbgHuqyeAs6WSWX6MNJdfv0Nqzb7OHta8qPZr4zxWBLTauleaMfraln3xFEvbXLDpi1Lcrwe7DxfgsQQ1E4', +}; + +module.exports = CONFIG; \ No newline at end of file diff --git a/server/routers/epja-2024-1/ecliptica/plants/getPlants.js b/server/routers/epja-2024-1/ecliptica/plants/getPlants.js new file mode 100644 index 0000000..6e4acc6 --- /dev/null +++ b/server/routers/epja-2024-1/ecliptica/plants/getPlants.js @@ -0,0 +1,145 @@ +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(); + } +}); + +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'); + + 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; + } + } + + 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; + } + } + + 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 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(detailedPlantData); + } else { + res.status(404).send({message: 'Plant not found'}); + } + }); + + 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 new file mode 100644 index 0000000..156997f --- /dev/null +++ b/server/routers/epja-2024-1/ecliptica/plants_calendar/index.js @@ -0,0 +1,43 @@ +const express = require('express'); +const cors = require('cors'); + +const plantsRouter = express.Router() + +const plants = [ + { + name: "Rose", + image: "https://ervanarium.com.br/wp-content/uploads/2019/03/cactus-3142589_1920.jpg", + frequency: 3, + startDate: "2024-10-09", + }, + { + name: "Sunflower", + image: "https://avatars.mds.yandex.net/i?id=31da587c9aabc83ad3615023f91d7284781be06c-10701700-images-thumbs&n=13", + frequency: 3, + startDate: "2024-10-05", + }, +]; + + +const calculateWateringDates = (startDate, frequency) => { + const dates = []; + const start = new Date(startDate); + + for (let i = 0; i < 30; i += frequency) { + const nextWateringDate = new Date(start); + nextWateringDate.setDate(start.getDate() + i); + dates.push(nextWateringDate.toISOString().split('T')[0]); + } + return dates; +}; + +const plantsWithDates = plants.map(plant => ({ + ...plant, + wateringDates: calculateWateringDates(plant.startDate, plant.frequency), +})); + +plantsWithDates.get('/api/plants', (req, res) => { + res.json(plantsWithDates); +}); + +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 232b81d..1d45c43 100644 --- a/server/routers/epja-2024-1/index.js +++ b/server/routers/epja-2024-1/index.js @@ -6,4 +6,6 @@ router.use('/enterfront', require('./enterfront/index')) router.use('/cats', require('./cats/index')) +router.use('/ecliptica', require('./ecliptica/index')) + module.exports = router -- 2.45.2 From 637939e9afadf1229a335e09b2a53e34c0d356e9 Mon Sep 17 00:00:00 2001 From: bogap <58374268+bogap@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:36:13 +0300 Subject: [PATCH 2/4] corrected --- package-lock.json | 36 ++- package.json | 1 + .../epja-2024-1/ecliptica/plants/getPlants.js | 273 +++++++++--------- 3 files changed, 164 insertions(+), 146 deletions(-) diff --git a/package-lock.json b/package-lock.json index b0fb7f7..17504e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.1", "license": "MIT", "dependencies": { + "axios": "^1.7.7", "bcrypt": "^5.1.0", "body-parser": "^1.19.0", "cookie-parser": "^1.4.5", @@ -608,12 +609,14 @@ } }, "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/balanced-match": { @@ -1985,15 +1988,16 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -3788,6 +3792,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", @@ -4878,6 +4888,16 @@ "node": ">=12.0.0" } }, + "node_modules/wait-on/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/package.json b/package.json index dd132a6..d0936e6 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "license": "MIT", "homepage": "https://bitbucket.org/online-mentor/multi-stub#readme", "dependencies": { + "axios": "^1.7.7", "bcrypt": "^5.1.0", "body-parser": "^1.19.0", "cookie-parser": "^1.4.5", diff --git a/server/routers/epja-2024-1/ecliptica/plants/getPlants.js b/server/routers/epja-2024-1/ecliptica/plants/getPlants.js index 6e4acc6..508fd01 100644 --- a/server/routers/epja-2024-1/ecliptica/plants/getPlants.js +++ b/server/routers/epja-2024-1/ecliptica/plants/getPlants.js @@ -1,145 +1,142 @@ -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(); - } - }); +const express = require ('express'); +const axios = require ('axios'); +const plantsRouter = express.Router (); +const CONFIG = require ('./config'); + +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 { - startApp(); + 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; + } +} + +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; + } +} + +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 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'}); + } }); -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'); +plantsRouter.get ('/:id', async (req, res) => { + const plantId = req.params.id; + const plantData = await fetchPlantData (plantId); - plantsRouter.use(cors()); + 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, + }; - 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); + res.send (detailedPlantData); + } else { + res.status (404).send ({message: 'Plant not found'}); + } +}); - 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; - } - } - - 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; - } - } - - 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 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(detailedPlantData); - } else { - res.status(404).send({message: 'Plant not found'}); - } - }); - - module.exports = plantsRouter; -} \ No newline at end of file +module.exports = plantsRouter; -- 2.45.2 From 4bf3d662ec07cd712deb3467ab6cbdd03b354aa4 Mon Sep 17 00:00:00 2001 From: bogap <58374268+bogap@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:38:49 +0300 Subject: [PATCH 3/4] a --- server/routers/epja-2024-1/ecliptica/plants/getPlants.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server/routers/epja-2024-1/ecliptica/plants/getPlants.js b/server/routers/epja-2024-1/ecliptica/plants/getPlants.js index 508fd01..c99cb9f 100644 --- a/server/routers/epja-2024-1/ecliptica/plants/getPlants.js +++ b/server/routers/epja-2024-1/ecliptica/plants/getPlants.js @@ -3,6 +3,7 @@ const axios = require ('axios'); const plantsRouter = express.Router (); const CONFIG = require ('./config'); + async function getAccessToken () { const formData = new FormData (); formData.append ('grant_type', 'client_credentials'); -- 2.45.2 From 76558a7eefcd54149544dbe7ab305114351445d3 Mon Sep 17 00:00:00 2001 From: bogap <58374268+bogap@users.noreply.github.com> Date: Tue, 15 Oct 2024 14:08:47 +0300 Subject: [PATCH 4/4] remove imports --- server/routers/epja-2024-1/ecliptica/index.js | 1 - server/routers/epja-2024-1/ecliptica/plants_calendar/index.js | 1 - server/routers/epja-2024-1/index.js | 1 - 3 files changed, 3 deletions(-) diff --git a/server/routers/epja-2024-1/ecliptica/index.js b/server/routers/epja-2024-1/ecliptica/index.js index bd9aecf..c23107a 100644 --- a/server/routers/epja-2024-1/ecliptica/index.js +++ b/server/routers/epja-2024-1/ecliptica/index.js @@ -1,5 +1,4 @@ const express = require('express'); -const cors = require('cors'); const plantsRouter = require('./plants/getPlants'); const calendarRouter = require('./plants_calendar/index'); 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 156997f..b92fcf6 100644 --- a/server/routers/epja-2024-1/ecliptica/plants_calendar/index.js +++ b/server/routers/epja-2024-1/ecliptica/plants_calendar/index.js @@ -1,5 +1,4 @@ const express = require('express'); -const cors = require('cors'); const plantsRouter = express.Router() diff --git a/server/routers/epja-2024-1/index.js b/server/routers/epja-2024-1/index.js index 1d45c43..5b0e565 100644 --- a/server/routers/epja-2024-1/index.js +++ b/server/routers/epja-2024-1/index.js @@ -1,7 +1,6 @@ const express = require('express') const router = express.Router() - router.use('/enterfront', require('./enterfront/index')) router.use('/cats', require('./cats/index')) -- 2.45.2