mongoose + tests

This commit is contained in:
Primakov Alexandr Alexandrovich
2024-10-16 11:06:23 +03:00
parent 2cfcd7347b
commit 4b0d9b4dbc
1295 changed files with 4579 additions and 1719 deletions

View File

@@ -1,11 +1,9 @@
const express = require('express');
const plantsRouter = require('./plants/getPlants')
const calendarRouter = require('./plants_calendar/index')
const plantsRouter = require('./plants/getPlants');
const calendarRouter = require('./plants_calendar/index');
const router = require('express').Router()
const router = require('express').Router();
module.exports = router;
module.exports = router
router.use('/plants',plantsRouter)
router.use('/plants_calendar',calendarRouter)

View File

@@ -1,6 +1,6 @@
const CONFIG = {
CLIENT_ID: 'kD2JXj1faSCYAWdT4B069wQAx89CZAkXmzTinRvH',
CLIENT_SECRET: 'bJq7Uiwua52tHiLP80N60hALNtQX2wcE4Mj6yNA9OzG2iZbgHuqyeAs6WSWX6MNJdfv0Nqzb7OHta8qPZr4zxWBLTauleaMfraln3xFEvbXLDpi1Lcrwe7DxfgsQQ1E4',
};
}
module.exports = CONFIG;
module.exports = CONFIG

View File

@@ -1,14 +1,14 @@
const express = require ('express');
const axios = require ('axios');
const plantsRouter = express.Router ();
const CONFIG = require ('./config');
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);
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 (
@@ -17,27 +17,27 @@ async function getAccessToken () {
{
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;
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;
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;
)
return null
}
}
async function fetchPlantData (plantId) {
const accessToken = await getAccessToken ();
const accessToken = await getAccessToken ()
if (!accessToken) {
return null;
return null
}
try {
const response = await axios.get (
@@ -47,25 +47,25 @@ async function fetchPlantData (plantId) {
Authorization: `Bearer ${accessToken}`,
},
}
);
return response.data;
)
return response.data
} catch (error) {
console.error (
'Error fetching plant data:',
error.response ? error.response.data : error.message
);
return null;
)
return null
}
}
plantsRouter.get ('/list', async (req, res) => {
const accessToken = await getAccessToken ();
const accessToken = await getAccessToken ()
if (!accessToken) {
res.status (500).send ({message: 'Error obtaining access token'});
return;
res.status (500).send ({message: 'Error obtaining access token'})
return
}
try {
const alias = req.query.alias || 'monstera';
const alias = req.query.alias || 'monstera'
const response = await axios.get (
'https://open.plantbook.io/api/v1/plant/search',
{
@@ -76,13 +76,13 @@ plantsRouter.get ('/list', async (req, res) => {
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);
const plantDetails = await fetchPlantData (plant.pid)
return {
id: plant.pid,
alias: plant.alias,
@@ -98,23 +98,23 @@ plantsRouter.get ('/list', async (req, res) => {
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});
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.status (500).send ({message: 'Error fetching plant list'})
}
});
})
plantsRouter.get ('/:id', async (req, res) => {
const plantId = req.params.id;
const plantData = await fetchPlantData (plantId);
const plantId = req.params.id
const plantData = await fetchPlantData (plantId)
if (plantData) {
const detailedPlantData = {
@@ -132,12 +132,12 @@ plantsRouter.get ('/:id', async (req, res) => {
max_soil_ec: plantData.max_soil_ec,
min_soil_ec: plantData.min_soil_ec,
image_url: plantData.image_url,
};
}
res.send (detailedPlantData);
res.send (detailedPlantData)
} else {
res.status (404).send ({message: 'Plant not found'});
res.status (404).send ({message: 'Plant not found'})
}
});
})
module.exports = plantsRouter;
module.exports = plantsRouter

View File

@@ -1,4 +1,4 @@
const express = require('express');
const express = require('express')
const plantsRouter = express.Router()
@@ -15,28 +15,28 @@ const plants = [
frequency: 3,
startDate: "2024-10-05",
},
];
]
const calculateWateringDates = (startDate, frequency) => {
const dates = [];
const start = new Date(startDate);
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]);
const nextWateringDate = new Date(start)
nextWateringDate.setDate(start.getDate() + i)
dates.push(nextWateringDate.toISOString().split('T')[0])
}
return dates;
};
return dates
}
const plantsWithDates = plants.map(plant => ({
...plant,
wateringDates: calculateWateringDates(plant.startDate, plant.frequency),
}));
}))
plantsRouter.get('/api/plants', (req, res) => {
res.json(plantsWithDates);
});
res.json(plantsWithDates)
})
module.exports = plantsRouter;
module.exports = plantsRouter