Compare commits

...

14 Commits

Author SHA1 Message Date
julyashap fb868bfefc Change path to json 2024-05-26 16:29:12 +03:00
julyashap 086c94c58a Update json/users.json 2024-05-26 16:28:54 +03:00
julyashap 92cabfa048 Add dogsitters-finder to server/index.json and server/routers 2024-05-25 11:12:21 +03:00
Deolys 7809806b83 Merge pull request 'webstar-project stubs api' (#3) from webstar-branch into master
Reviewed-on: https://git.inno-js.ru/bro-students/multy-stub/pulls/3
Reviewed-by: primakov <primakovpro@gmail.com>
2024-05-22 22:47:01 +03:00
Deolys 1aa0c36c84 post login fixed 2024-05-22 22:42:58 +03:00
Deolys 7c3132c54b webstar-project stubs api 2024-05-22 15:11:46 +03:00
primakov 8fc85a7de8 Merge pull request 'fix problems with edateam stubs index.js' (#2) from edateam_branch into master
Reviewed-on: https://git.inno-js.ru/bro-students/multy-stub/pulls/2
Reviewed-by: primakov <primakovpro@gmail.com>
2024-05-19 21:14:14 +03:00
NewPerson cb8b2cc5aa fix problems with edateam stubs index.js 2024-05-19 21:07:33 +03:00
primakov 6651215eeb a bit refresh deployment 2024-05-19 20:50:15 +03:00
primakov 80f8cef142 Merge pull request 'edateam_branch' (#1) from edateam_branch into master
Reviewed-on: https://git.inno-js.ru/bro-students/multy-stub/pulls/1
Reviewed-by: primakov <primakovpro@gmail.com>
2024-05-19 12:48:51 +03:00
WlfromB 5a57291523 index.js + edateam app use 2024-05-19 03:04:19 +03:00
WlfromB 39ab269f07 edateam stubs add 2024-05-19 03:01:32 +03:00
primakov 7cb23080bf search examples 2024-05-18 15:31:34 +03:00
primakov d74e4a8624 r-and-m jsons 2024-05-18 13:40:25 +03:00
19 changed files with 868 additions and 81 deletions
+4 -2
View File
@@ -1,14 +1,16 @@
FROM 'node:18'
FROM node:18
RUN mkdir -p /usr/src/app/server/
WORKDIR /usr/src/app/
COPY ./server /usr/src/app/server
COPY ./package.json /usr/src/app/package.json
COPY ./package-lock.json /usr/src/app/package-lock.json
COPY ./.serverrc.js /usr/src/app/.serverrc.js
# COPY ./.env /usr/src/app/.env
RUN npm i --only=prod
# RUN npm i --omit=dev
RUN npm ci
EXPOSE 8044
CMD ["npm", "run", "up:prod"]
-79
View File
@@ -9,7 +9,6 @@
"version": "1.0.1",
"license": "MIT",
"dependencies": {
"@types/express": "^4.17.21",
"bcrypt": "^5.1.0",
"body-parser": "^1.19.0",
"cookie-parser": "^1.4.5",
@@ -279,23 +278,6 @@
"node": ">= 10"
}
},
"node_modules/@types/body-parser": {
"version": "1.19.5",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
"integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
"dependencies": {
"@types/connect": "*",
"@types/node": "*"
}
},
"node_modules/@types/connect": {
"version": "3.4.38",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
"integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
@@ -309,33 +291,6 @@
"@types/node": "*"
}
},
"node_modules/@types/express": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
"integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
"dependencies": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.33",
"@types/qs": "*",
"@types/serve-static": "*"
}
},
"node_modules/@types/express-serve-static-core": {
"version": "4.17.41",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz",
"integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==",
"dependencies": {
"@types/node": "*",
"@types/qs": "*",
"@types/range-parser": "*",
"@types/send": "*"
}
},
"node_modules/@types/http-errors": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
"integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA=="
},
"node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -350,45 +305,11 @@
"@types/node": "*"
}
},
"node_modules/@types/mime": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="
},
"node_modules/@types/node": {
"version": "18.17.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.1.tgz",
"integrity": "sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw=="
},
"node_modules/@types/qs": {
"version": "6.9.10",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz",
"integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw=="
},
"node_modules/@types/range-parser": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
"integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="
},
"node_modules/@types/send": {
"version": "0.17.4",
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
"integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
"dependencies": {
"@types/mime": "^1",
"@types/node": "*"
}
},
"node_modules/@types/serve-static": {
"version": "1.15.5",
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
"integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
"dependencies": {
"@types/http-errors": "*",
"@types/mime": "*",
"@types/node": "*"
}
},
"node_modules/abab": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
+4
View File
@@ -55,6 +55,10 @@ app.use('/example', require('./routers/example'))
// app.use('/task-boss', require('./routers/task-boss'))
// app.use('/car-wash', require('./routers/car-wash'))
app.use('/zoom-bar', require('./routers/zoom-bar'))
app.use('/r-and-m', require('./routers/r-and-m'))
app.use('/edateam', require('./routers/edateam'))
app.use('/webstar-project', require('./routers/webstar-project'))
app.use('/dogsitters-finder', require('./routers/dogsitters-finder'))
//app.use('/basket', require('./routers/basket'))
//app.use('/easy-project', require('./routers/easy-project'))
//app.use('/sugarbun', require('./routers/sugarbun'))
@@ -0,0 +1,9 @@
const { response } = require('express');
const router = require('express').Router();
router.get("/users", (request, response) => {
response.send(require("./json/users.json"))
})
module.exports = router;
@@ -0,0 +1,43 @@
[
{
"id": 1,
"phone_number": 89283244141,
"password": "1234",
"first_name": "Вася",
"second_name": "Пупкин",
"role": "dogsitter",
"location": "Россия, республика Татарстан, Казань, улица Пушкина, 12",
"price": 1500,
"about_me": "Я люблю собак"
},
{
"id": 2,
"phone_number": 89272844541,
"password": "1234",
"first_name": "Ваня",
"second_name": "Пуськин",
"role": "dogsitter",
"location": "Россия, республика Татарстан, Казань, улица Абсалямова, 19",
"price": 1000000,
"about_me": "Я не люблю собак. И вообще я котоман."
},
{
"id": 3,
"phone_number": 89872855893,
"password": "12345",
"first_name": "Гадий",
"second_name": "Петрович",
"role": "owner"
},
{
"id": 4,
"phone_number": 89872844591,
"password": "12345",
"first_name": "Галкин",
"second_name": "Максим",
"role": ["owner", "dogsitter"],
"location": "Россия, республика Татарстан, Казань, проспект Ямашева, 83",
"price": 1000000,
"about_me": "Миллион алых роз"
}
]
+15
View File
@@ -0,0 +1,15 @@
const router = require('express').Router();
router.get('/recipe-data', (request, response) => {
response.send(require('./json/recipe-data/success.json'));
});
router.get('/userpage-data', (req, res)=>{
res.send(require('./json/userpage-data/success.json'));
});
router.get('/homepage-data', (req, res)=>{
res.send(require('./json/homepage-data/success.json'));
});
module.exports = router;
@@ -0,0 +1,76 @@
{
"data": [
{
"src": "pancakes_meat",
"alt": "Фотография блинчиков с мясом, сыром и луком",
"href": "?=dish01",
"name": "Блинчики с мясом, сыром и лучком"
},
{
"src": "cheesecakes",
"alt": "Фотография сырников из творога",
"href": "?=dish02",
"name": "Сырники из творога"
},
{
"src": "borsch",
"alt": "Фотография борща",
"href": "?=dish03",
"name": "Борщ"
},
{
"src": "vareniki",
"alt": "Фотография вареников",
"href": "?=dish04",
"name": "Ленивые вареники"
},
{
"src": "rice_porridge",
"alt": "Фотография рисовой каши",
"href": "?=dish05",
"name": "Рисовая каша"
},
{
"src": "cutlets",
"alt": "Фотография котлет по-киевски",
"href": "?=dish06",
"name": "Котлеты по-киевски"
},
{
"src": "draniki",
"alt": "Фотография драников",
"href": "?=dish07",
"name": "Драники"
},
{
"src": "meringue",
"alt": "Фотография безе",
"href": "?=dish08",
"name": "Безе"
},
{
"src": "goulash",
"alt": "Фотография гуляша",
"href": "?=dish09",
"name": "Гуляш"
},
{
"src": "pancakes_cherries",
"alt": "Фотография блинчиков с вишней и творожным сыром",
"href": "?=dish10",
"name": "Блинчики с вишней и творожным сыром"
},
{
"src": "canned_soup",
"alt": "Фотография супа из рыбных консервов",
"href": "?=dish11",
"name": "Суп из рыбных консервов"
},
{
"src": "salad",
"alt": "Фотография салата",
"href": "?=dish12",
"name": "Салат \"Весенний\""
}
]
}
@@ -0,0 +1,58 @@
{
"name":"Блинчики с вишней и творожным сыром",
"stages":
[
"Смешать муку, молоко, яйца, сахар и соль в миске",
"Добавить вишню в тесто и перемешать",
"Вылить тесто на разогретую сковороду и обжарить с двух сторон до золотистого цвета",
"Подавать блинчики, украсив творожным сыром сверху"
],
"table":
[
{ "ingredient": "1",
"weight": "500 гр",
"price1": "500р.",
"price2": "439р.",
"price3": "600р." },
{ "ingredient": "Ингредиент 2",
"weight": "2 шт",
"price1": "120р.",
"price2": "150р.",
"price3": "130р." },
{ "ingredient": "Ингредиент 3",
"weight": "500 гр",
"price1": "12р.",
"price2": "12.99р.",
"price3": "10р." },
{ "ingredient": "Ингредиент 4",
"weight": "500 гр",
"price1": "500р.",
"price2": "439р.",
"price3": "600р." },
{ "ingredient": "Ингредиент 5",
"weight": "500 гр",
"price1": "500р.",
"price2": "439р.",
"price3": "600р." },
{ "ingredient": "Ингредиент 6",
"weight": "500 гр",
"price1": "500р.",
"price2": "439р.",
"price3": "600р." }
],
"tags":
[
{ "name": "#блины", "href": "#01" },
{ "name": "#вишня", "href": "#02" },
{ "name": "#молоко"," href": "#03" }
]
}
@@ -0,0 +1,30 @@
{
"data":{
"id":1,
"loginname":"Логин пользователя",
"datesignin":"2024/05/18",
"favoritedishes":
[
{"id":1,
"dishlink":"?=dish1",
"dishname":"Блюдо1"
},
{"id":2,
"dishlink":"?=dish2",
"dishname":"Блюдо2"
},
{"id":3,
"dishlink":"?=dish3",
"dishname":"Блюдо3"
},
{"id":4,
"dishlink":"?=dish4",
"dishname":"Блюдо4"
},
{"id":5,
"dishlink":"?=dish5",
"dishname":"Блюдо5"
}
]
}
}
+17
View File
@@ -0,0 +1,17 @@
const router = require('express').Router();
router.get('/landing-data', (request, response) => {
response.send(require('./json/landing-data/success.json'));
});
router.post('/search', (req, res) => {
const { search } = req.body;
if (search === 'Morty') {
return res.send(require('./json/seach/alive.success.json'));
}
res.send(require('./json/seach/success.json'));
})
module.exports = router;
@@ -0,0 +1,3 @@
{
"error": "not found"
}
@@ -0,0 +1,40 @@
{
"data": [
{
"id": "0.9212559272707432",
"title": "Рик Санчез",
"subTitle": "Главный герой",
"body": "Он ученый-изобретатель, который путешествует по разным мирам и измерениям, используя свою уникальную машину для путешествий. Рик обладает острым умом и нестандартным мышлением, что позволяет ему решать самые сложные проблемы. Он также известен своим цинизмом и сарказмом, что делает его персонажем с ярким характером.",
"image": "rick",
"link": "https://en.wikipedia.org/wiki/Rick_Sanchez"
},
{
"id": "0.44732992281434125",
"title": "Морти Смит",
"subTitle": "Внук Рика",
"body": "Обычный подросток, который часто оказывается втянутым в приключения своего дедушки. Морти часто испытывает трудности с принятием решений и не всегда понимает, что происходит вокруг него. Однако, несмотря на свою неопытность, Морти часто оказывается ключевым элементом в решении сложных ситуаций.",
"image": "morty",
"link": "https://en.wikipedia.org/wiki/morty"
},
{
"id": "0.9858955616085823",
"title": "Бет Смит",
"subTitle": "Мать Морти",
"body": "Бет Смит также является мамой Морти. Она врач и мать-одиночка, которая старается поддерживать свою семью. Бет часто оказывается в конфликте с Риком из-за его безответственного поведения и постоянных приключений. Однако, несмотря на все трудности, Бет всегда готова прийти на помощь своей семье.",
"image": "beth",
"link": "https://en.wikipedia.org/wiki/beth"
},
{
"id": "0.1590784370756242",
"title": "Джерри Смит",
"subTitle": "Отец Морти",
"body": "Джерри Смит - муж Бет. Он обычный человек, который старается справиться с жизнью в семье, полной необычных персонажей. Джерри часто оказывается в тени Рика и Морти, но он всегда готов поддержать свою семью в трудные моменты.",
"image": "jerry",
"link": "https://en.wikipedia.org/wiki/beth"
},
{
"id": "0.29021795027285324",
"body": "Семья Смитов - это только часть персонажей, представленных в сериале \"Rick and Morty\". В сериале также присутствуют множество других интересных и запоминающихся персонажей, каждый из которых имеет свою уникальную историю и характер. На этой странице вы сможете узнать больше о каждом персонаже, его истории и роли в сериале. Мы также предлагаем вам возможность ознакомиться с интересными фактами о создании сериала и его персонажах. Присоединяйтесь к нам и погрузитесь в увлекательный мир \"Rick and Morty\"!"
}
]
}
@@ -0,0 +1,24 @@
{
"data": [
{
"id": 14,
"name": "Morty",
"status": "alive",
"species": "Alien",
"type": "",
"gender": "Male",
"origin": {
"name": "unknown",
"url": ""
},
"location": {
"name": "Citadel of Ricks",
"url": "https://rickandmortyapi.com/api/location/3"
},
"image": "https://rickandmortyapi.com/api/character/avatar/14.jpeg",
"episode": ["https://rickandmortyapi.com/api/episode/10"],
"url": "https://rickandmortyapi.com/api/character/14",
"created": "2017-11-04T20:51:31.373Z"
}
]
}
@@ -0,0 +1,24 @@
{
"data": [
{
"id": 14,
"name": "Alien Morty",
"status": "unknown",
"species": "Alien",
"type": "",
"gender": "Male",
"origin": {
"name": "unknown",
"url": ""
},
"location": {
"name": "Citadel of Ricks",
"url": "https://rickandmortyapi.com/api/location/3"
},
"image": "https://rickandmortyapi.com/api/character/avatar/14.jpeg",
"episode": ["https://rickandmortyapi.com/api/episode/10"],
"url": "https://rickandmortyapi.com/api/character/14",
"created": "2017-11-04T20:51:31.373Z"
}
]
}
+136
View File
@@ -0,0 +1,136 @@
const router = require('express').Router();
const authMiddleware = require('./middleware/auth-middleware');
router.get('/cards-data', (request, response) => {
response.send(require('./json/cards-data/success.json'))
})
router.get('/messages', (request, response) => {
response.send(require('./json/messages/success.json'))
})
router.get('/user', authMiddleware, (request, response) => {
const email = request.userEmail;
try {
const usersData = require('./json/users-data/success.json');
const userData = usersData.data.find(user => user.email === email);
if (userData) {
return response.json(userData.favourites);
}
response.status(404).send('User not found');
} catch (error) {
console.error('Error reading file:', error);
response.status(500).send('Internal server error');
}
})
router.get('/cards-data/:id', (request, response) => {
const cardId = request.params.id;
try {
const cardsData = require('./json/cards-data/success.json');
const cardData = cardsData.data.find(card => card.id === cardId);
if (cardData) {
return response.json(cardData);
}
response.status(404).send('Card not found');
} catch (error) {
console.error('Error reading file:', error);
response.status(500).send('Internal server error');
}
})
router.get('/messages/:id', (request, response) => {
const cardId = request.params.id;
try {
const cardsData = require('./json/messages/success.json');
const cardData = cardsData.data.find(card => card.id === cardId);
if (cardData) {
return response.json(cardData);
}
response.status(404).send('Card not found');
} catch (error) {
console.error('Error reading file:', error);
response.status(500).send('Internal server error');
}
})
router.post('/login', (request, response) => {
const { email, password } = request.body.loginData;
try {
const users = require('./json/users-data/success.json');
const user = users.data.find(user => user.email === email && user.password === password);
if (!user) {
return response.status(401).send('Invalid credentials');
}
const responseObject = {
email: user.email,
}
if (user.cardId){
responseObject.cardId = user.cardId || "";
}
return response.json(responseObject);
} catch (error) {
console.error('Error reading file:', error);
response.status(500).send('Internal server error');
}
})
router.post('/register', async (request, response) => {
const { _name, email, password, confirmPassword } = request.body.registerData;
try {
if (password !== confirmPassword) {
return response.status(400).send('Passwords do not match');
}
const users = require('./json/users-data/success.json');
const existingUser = users.data.find(user => user.email === email);
if (existingUser) {
return response.status(400).send('User with this email already exists');
}
return response.json({ email: email});
} catch (error) {
console.error('Error registering user:', error);
response.status(500).send('Internal server error');
}
});
router.post('/favourite', async (request, response) => {
const { cardId, email } = request.body;
try {
const users = require('./json/users-data/success.json');
const user = users.data.find(user => user.email === email);
if (!user) {
return response.status(404).send('User not found');
}
const index = user.favourites.indexOf(cardId);
if (index !== -1) {
return response.status(200).send('Card removed from favourites successfully');
}
response.status(200).send('Card added to favourites successfully');
} catch (error) {
console.error('Error adding card to favourites:', error);
response.status(500).send('Internal server error');
}
});
module.exports = router;
@@ -0,0 +1,172 @@
{
"data": [
{
"id": "1",
"ownerId": "user1@gmail.com",
"sliderImages": ["site1", "site2", "site3"],
"title": "Верстка сайтов любой сложности. Мобильная разработка",
"tags": ["Сайты", "Под ключ", "Десктоп"],
"profileData": {
"name": "Yuji Itadori",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "site1",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
},
{
"id": "2",
"ownerId": "admin@admin.ru",
"sliderImages": ["site2", "site1", "site3"],
"title": "Дизайн сайтов. Разработка сайтов под ключ",
"tags": ["Сайты", "Под ключ", "Десктоп"],
"profileData": {
"name": "Admin",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "site2",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
},
{
"id": "3",
"ownerId": "user2@gmail.com",
"sliderImages": ["site3", "site1", "site3"],
"title": "FullStack разработка приложений на React",
"tags": ["Сайты", "Под ключ", "Десктоп"],
"profileData": {
"name": "Secret Guest",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "site3",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
},
{
"id": "4",
"ownerId": "super@star.ru",
"sliderImages": ["site1", "site1", "site3"],
"title": "Верстка сайтов любой сложности. Мобильная разработка",
"tags": ["Сайты", "Под ключ", "Десктоп"],
"profileData": {
"name": "Hatsune Miku",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "site3",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
},
{
"id": "5",
"ownerId": "sb@sb.ru",
"sliderImages": ["site2", "site1", "site3"],
"title": "Дизайн сайтов. Разработка сайтов под ключ",
"tags": ["Дизайн", "Под ключ"],
"profileData": {
"name": "СберТян",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "site3",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
},
{
"id": "6",
"ownerId": "tin@tin.ru",
"sliderImages": ["site3", "site1", "site3"],
"title": "FullStack разработка приложений на React",
"tags": ["Сайты", "Под ключ", "Мобильные устройства"],
"profileData": {
"name": "Помощник Олег",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "site3",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
}
]
}
@@ -0,0 +1,149 @@
{
"data": [
{
"id": "1",
"ownerId": "user1@gmail.ru",
"onModerating": true,
"sliderImages": ["site1", "site2", "site3"],
"title": "Верстка сайтов любой сложности. Мобильная разработка",
"tags": ["Сайты", "Под ключ", "Десктоп"],
"profileData": {
"name": "Yuji Itadori",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "site2",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
},
{
"id": "2",
"ownerId": "admin@admin.ru",
"onModerating": true,
"sliderImages": ["site2", "site1", "site3"],
"title": "Дизайн сайтов. Разработка сайтов под ключ",
"tags": ["Сайты", "Под ключ", "Десктоп"],
"profileData": {
"name": "Admin",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "profilePicture1",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
},
{
"id": "3",
"ownerId": "user2@gmail.com",
"onModerating": true,
"sliderImages": ["site3", "site1", "site3"],
"title": "FullStack разработка приложений на React",
"tags": ["Сайты", "Под ключ", "Десктоп"],
"profileData": {
"name": "Secret Guest",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "profilePicture1",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
},
{
"id": "4",
"ownerId": "super@star.ru",
"onModerating": true,
"sliderImages": ["site1", "site1", "site3"],
"title": "Верстка сайтов любой сложности. Мобильная разработка",
"tags": ["Сайты", "Под ключ", "Десктоп"],
"profileData": {
"name": "Hatsune Miku",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "profilePicture1",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
},
{
"id": "5",
"ownerId": "sb@sb.ru",
"onModerating": false,
"sliderImages": ["site2", "site1", "site3"],
"title": "Дизайн сайтов. Разработка сайтов под ключ",
"tags": ["Дизайн", "Под ключ"],
"profileData": {
"name": "СберТян",
"geolocation": "г. Казань",
"description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita nemo cumque, magni doloremque aspernatur illo nisi magnam! Perspiciatis, aspernatur excepturi dolores autem, ut sequi dolore vitae doloremque ratione expedita velit molestias quidem hic quod culpa corrupti vel ad.",
"profilePicture": "profilePicture1",
"backgroundImage": "backgroundImage1"
},
"articles": [
{
"id": "1",
"label": "Верстка статичного сайта",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site1"
},
{
"id": "2",
"label": "Разработка простого мобильного приложения",
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt",
"imageUrl": "site2"
}
]
}
]
}
@@ -0,0 +1,50 @@
{
"data": [
{
"name": "Yuji Itadori",
"email": "user1@gmail.com",
"password": "12345",
"cardId": "1",
"favourites": [
"1",
"2",
"6"
]
},
{
"name": "Admin",
"email": "admin@admin.ru",
"password": "*****",
"cardId": "2",
"favourites": []
},
{
"name": "Secret Guest",
"email": "user2@gmail.com",
"password": "qwer",
"cardId": "3",
"favourites": []
},
{
"name": "Hatsune Miku",
"email": "super@star.ru",
"password": "12345",
"cardId": "4",
"favourites": []
},
{
"name": "СберТян",
"email": "sb@sb.ru",
"password": "12345",
"cardId": "5",
"favourites": []
},
{
"name": "Помощник Олег",
"email": "tin@tin.ru",
"password": "12345",
"cardId": "6",
"favourites": []
}
]
}
@@ -0,0 +1,14 @@
const authMiddleware = (req, res, next) => {
const email = (req.headers.authorization || "").replace("Bearer ", "");
if (email) {
req.userEmail = email;
next();
} else {
return res.status(403).json({
message: "Access Denied",
});
}
};
module.exports = authMiddleware