Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Post| /kindergarten #103

Merged
merged 10 commits into from
Feb 17, 2021
2 changes: 2 additions & 0 deletions server/controllers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const {
getKindergarten,
getSpecificKindergarten,
kindergartenSearch,
addKindergarten,
deleteKindergarten,
} = require('./kindergarten');
const { getUsers, logout, addUsers, login, getAuthUser } = require('./users');
Expand All @@ -20,6 +21,7 @@ module.exports = {
getLocations,
postLocations,
kindergartenSearch,
addKindergarten,
deleteKindergarten,
login,
addUsers,
Expand Down
29 changes: 29 additions & 0 deletions server/controllers/kindergarten/addKindergarten.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
const { addKindergartenQuery } = require('../../database/queries');
const { boomify } = require('../../utils');
const { addKindergartenSchema } = require('../../utils/validation');

const addKindergarten = async (req, res, next) => {
try {
const { userId } = req;
const validatdData = await addKindergartenSchema.validate(req.body, {
abortEarly: false,
});
const { rows: data } = await addKindergartenQuery({
...validatdData,
userId,
});
res.status(201).json({
statusCode: 201,
message: 'Kindergarten has been added successfully',
data: data[0],
});
} catch (error) {
next(
error.name === 'ValidationError'
? boomify(400, 'ValidationError', error.errors)
: error
);
}
};

module.exports = addKindergarten;
2 changes: 2 additions & 0 deletions server/controllers/kindergarten/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
const kindergartenSearch = require('./kindergartenSearch');
const getSpecificKindergarten = require('./getSpecificKindergarten');
const getKindergarten = require('./getKindergarten');
const addKindergarten = require('./addKindergarten');
const deleteKindergarten = require('./deleteKindergarten');

module.exports = {
kindergartenSearch,
getSpecificKindergarten,
getKindergarten,
addKindergarten,
deleteKindergarten,
};
2 changes: 2 additions & 0 deletions server/database/queries/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const {
getKindergartenById,
getKindergartenId,
getKindergartenSearch,
addKindergartenQuery,
deleteKindergartenQuery,
getKindergartensByUserId,
} = require('./kindergarten');
Expand All @@ -16,6 +17,7 @@ const {
const { getLocationsQuery, postLocationsQuery } = require('./locations');

module.exports = {
addKindergartenQuery,
getKindergartenQuery,
getKindergartenSearch,
getKindergartenById,
Expand Down
38 changes: 38 additions & 0 deletions server/database/queries/kindergarten/addKindergartenQuery.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
const { connection } = require('../../data');

const addKindergartenQuery = ({
kindergartenName,
userId,
coverImage,
description,
locationId,
phoneNumber,
latitude,
longitude,
minPrice,
maxPrice,
periods,
imagesGallery,
}) => {
const sql = {
text:
"INSERT INTO kindergartens (kindergarten_name, user_id, cover_image, description,location_id, phone_number, latitude, longitude, min_price, max_price, periods, image_gallery, request_status, is_enable) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9 , $10, $11 , $12, 'approved' , 'true') RETURNING * ",
values: [
kindergartenName,
userId,
coverImage,
description,
locationId,
phoneNumber,
latitude,
longitude,
minPrice,
maxPrice,
periods,
imagesGallery,
],
};
return connection.query(sql);
};

module.exports = addKindergartenQuery;
2 changes: 2 additions & 0 deletions server/database/queries/kindergarten/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ const getKindergartenQuery = require('./getKindergartenQuery');
const getKindergartenById = require('./getKindergartenById');
const getKindergartenId = require('./getKindergartenId');
const getKindergartenSearch = require('./getKindergartenSearch');
const addKindergartenQuery = require('./addKindergartenQuery');
const deleteKindergartenQuery = require('./deleteKindergarten');
const getKindergartensByUserId = require('./getKindergartensByUserId');

module.exports = {
deleteKindergartenQuery,
getKindergartenQuery,
addKindergartenQuery,
getKindergartenById,
getKindergartenId,
getKindergartenSearch,
Expand Down
2 changes: 2 additions & 0 deletions server/router/kindergarten.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ const {
getKindergarten,
getSpecificKindergarten,
kindergartenSearch,
addKindergarten,
deleteKindergarten,
} = require('../controllers');

router.get('/kindergarten', getKindergarten);
router.get('/kindergarten/:kindergartenId', getSpecificKindergarten);
router.get('/search', kindergartenSearch);
router.post('/kindergarten', verifyUser, addKindergarten);
router.delete('/kindergarten/:kindergartenId', verifyUser, deleteKindergarten);

module.exports = router;
17 changes: 17 additions & 0 deletions server/utils/validation/addKindergartenSchema.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const { object, string, number, mixed } = require('yup');

const addKindergartenSchema = object({
kindergartenName: string().required(),
coverImage: mixed().required(),
description: mixed().required(),
locationId: number(),
phoneNumber: number().positive().required(),
latitude: number(),
longitude: number(),
minPrice: number().positive(),
maxPrice: number().positive(),
periods: string(),
imagesGallery: string(),
});

module.exports = addKindergartenSchema;
2 changes: 2 additions & 0 deletions server/utils/validation/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ const kindergartenSearchSchema = require('./kindergartenSearchSchema');
const kindergartenIdSchema = require('./kindergartenIdSchema');
const locationSchema = require('./locationSchema');
const addCommentSchema = require('./addCommentSchema');
const addKindergartenSchema = require('./addKindergartenSchema');
const addUserSchema = require('./addUserSchema');

module.exports = {
kindergartenIdSchema,
addCommentSchema,
kindergartenSearchSchema,
addKindergartenSchema,
addUserSchema,
locationSchema,
};
39 changes: 39 additions & 0 deletions test/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,45 @@ describe('Testing get comments by kindergarten id query', () => {
.catch());
});

// test router Post /kindergarten
describe('Test the route POST /kindergarten', () => {
test('should return status code 201 and data length 1 when given POST /kindergarten', async () => {
expect.assertions(1);
const res = await request(app)
.post('/api/v1/kindergarten')
.set('Cookie', token)
.send({
kindergartenName: 'روضة الإبداع التعليمية',
userId: 1,
coverImage:
'https://scontent.fgza2-1.fna.fbcdn.net/v/t1.0-9/127563203_2816927261908481_825163598039189311_o.jpg _nc_cat=100&ccb=2&_nc_sid=e3f864&_nc_ohc=EOam1iTQLIcAX8jrnEj&_nc_ht=scontent.fgza2-1.fna&oh=e1cef81bf1cebbd72a6c1f1af651e01f&oe=604638FB',
description:
'نعملُ على إنشاء جيل رائع من خلال تطوير كافة مهاراتهم الفكرية والنفسية بأساليب علمية وتربوية',
locationId: 1,
phoneNumber: 599123456,
minPrice: 1000,
maxPrice: 2000,
periods: `[
['07:00:00', '11:00:00'],
['12:00:00', '16:00:00'],
]`,
imagesGallery: `[
'https://scontent.fgza2-1.fna.fbcdn.net/v/t1.0-9/126072436_2810042115930329_426976181002437064_o.jpg?_nc_cat=105&ccb=2&_nc_sid=730e14&_nc_ohc=UX2zxNzPBTYAX_XAYLE&_nc_ht=scontent.fgza2-1.fna&oh=72a8ef5d8369f7e183116f4423bad872&oe=604613F1',
'https://scontent.fgza2-1.fna.fbcdn.net/v/t1.0-0/p526x395/126362711_2810037339264140_8115186378406081155_o.jpg?_nc_cat=106&ccb=2&_nc_sid=730e14&_nc_ohc=1pa0nWqLMVQAX8xj-8Z&_nc_ht=scontent.fgza2-1.fna&tp=6&oh=43ba32d04a1478c83ca4cee8950955f9&oe=6045D9DF',
'https://scontent.fgza2-1.fna.fbcdn.net/v/t1.0-0/p180x540/125246489_2806470342954173_5557632858147020336_o.jpg?_nc_cat=106&ccb=2&_nc_sid=e3f864&_nc_ohc=ZGPkuyaJoUEAX9lkFkC&_nc_ht=scontent.fgza2-1.fna&tp=6&oh=0a5795c9d04ed69df0ecf950260a8240&oe=60475C85',
'https://scontent.fgza2-1.fna.fbcdn.net/v/t1.0-9/127711338_2816934215241119_820060672107449619_o.jpg?_nc_cat=110&ccb=2&_nc_sid=730e14&_nc_ohc=lj0hKeD_FswAX-IthGI&_nc_ht=scontent.fgza2-1.fna&oh=ff73fc70463202e07ef1ab8945b1aaf6&oe=6047D28E',
'https://scontent.fgza2-1.fna.fbcdn.net/v/t1.0-9/125969111_2810046942596513_7374678634903478541_o.jpg?_nc_cat=106&ccb=2&_nc_sid=730e14&_nc_ohc=26lBVKEuxXgAX-LkaQx&_nc_ht=scontent.fgza2-1.fna&oh=98b4dfd19c0ec101fab0c68fcafb2ed7&oe=60489661',
'https://scontent.fgza2-1.fna.fbcdn.net/v/t1.0-0/p526x395/126221172_2810852509182623_3908586823989526775_o.jpg?_nc_cat=104&ccb=2&_nc_sid=730e14&_nc_ohc=r4JC03VXovYAX-ZDyZv&_nc_ht=scontent.fgza2-1.fna&tp=6&oh=a04d43782df65a5367387fa7d876a6cc&oe=6047FCA7',
'https://scontent.fgza2-1.fna.fbcdn.net/v/t1.0-9/126420691_2810858432515364_8382015493325068832_o.jpg?_nc_cat=102&ccb=2&_nc_sid=730e14&_nc_ohc=8m_uU2uLr9kAX-TeYbI&_nc_ht=scontent.fgza2-1.fna&oh=8b17321eb157fe3c7a9d7c09ba6182bc&oe=604782E5',
'https://scontent.fgza2-1.fna.fbcdn.net/v/t1.0-9/126361201_2810861959181678_2949636133222938705_o.jpg?_nc_cat=107&ccb=2&_nc_sid=e3f864&_nc_ohc=xj63fLB5DpYAX8g2PTJ&_nc_ht=scontent.fgza2-1.fna&oh=88ac8fb67a2c9c87ee2ed8940f2c14fb&oe=60451FF9',
]`,
})
.expect(201);
const { message } = res.body;
expect(message).toBe('Kindergarten has been added successfully');
});
});

// test the route /kindergarten/:kindergartenId/comments
describe('Test the route POST /kindergarten/:kindergartenId/comments', () => {
test('should return status code 201 and data length 1 when given POST /kindergarten/2/comments', async () => {
Expand Down