Compare commits

..

1 Commits

Author SHA1 Message Date
359a136dbf added mock backend for sdk team 2024-10-19 01:32:36 +03:00
50 changed files with 144 additions and 802 deletions

View File

@@ -3,4 +3,4 @@
docker stop ms-mongo
docker volume remove ms_volume
docker volume create ms_volume
docker run --rm -v ms_volume:/data/db --name ms-mongo -p 27017:27017 -d mongo:8.0.3
docker run --rm -v ms_volume:/data/db --name ms-mongo -p 27017:27017 -d mongo:4.4.13

View File

@@ -1,19 +1,18 @@
version: "3"
volumes:
ms_volume8:
ms_volume:
services:
mongoDb:
image: mongo:8.0.3
image: mongo:4.4.13
volumes:
- ms_volume8:/data/db
- ms_volume:/data/db
restart: always
# ports:
# - 27017:27017
multy-stubs:
# build: .
image: bro.js/ms/bh:$TAG
build: .
restart: always
ports:
- 8044:8044

View File

@@ -44,12 +44,6 @@ app.use(require('./root'))
*/
app.use('/epja-2024-1', require('./routers/epja-2024-1'))
app.use('/todo', require('./routers/todo/routes'))
app.use('/dogsitters-finder', require('./routers/dogsitters-finder'))
app.use('/kazan-explore', require('./routers/kazan-explore'))
app.use('/edateam', require('./routers/edateam-legacy'))
app.use('/dry-wash', require('./routers/dry-wash'))
app.use('/freetracker', require('./routers/freetracker'))
app.use('/dhs-testing', require('./routers/dhs-testing'))
app.use(require('./error'))

View File

@@ -1,35 +0,0 @@
const router = require('express').Router();
router.get("/users", (request, response) => {
response.send(require("./json/users/users.json"))
})
router.post("/auth", (request, response) => {
const {phoneNumber, password} = request.body;
console.log(phoneNumber, password);
if (phoneNumber === '89999999999') {
response.send(require("./json/auth/dogsitter.success.json"))
}
else if (phoneNumber === '89555555555') {
response.status(400).send(require("./json/auth/error.json"))
}
else {
response.send(require("./json/auth/owner.success.json"))
}
})
router.post("/register", (request, response) => {
const {firstName, secondName, phoneNumber, password, role} = request.body;
console.log(phoneNumber, password, role);
if (phoneNumber === '89283244141' || phoneNumber === '89872855893') {
response.status(400).send(require("./json/register/error.json"))
}
else if (role === 'dogsitter') {
response.send(require("./json/register/dogsitter.success.json"))
}
else {
response.send(require("./json/register/owner.success.json"))
}
})
module.exports = router;

View File

@@ -1,12 +0,0 @@
{
"data": {
"id": 1,
"phoneNumber": 89283244141,
"firstName": "Вася",
"secondName": "Пупкин",
"role": "dogsitter",
"location": "Россия, республика Татарстан, Казань, улица Пушкина, 12",
"price": 1500,
"aboutMe": "Я люблю собак"
}
}

View File

@@ -1,3 +0,0 @@
{
"error": "Пользователь не найден"
}

View File

@@ -1,9 +0,0 @@
{
"data": {
"id": 3,
"phoneNumber": 89872855893,
"firstName": "Гадий",
"secondName": "Петрович",
"role": "owner"
}
}

View File

@@ -1,12 +0,0 @@
{
"data": {
"id": 5,
"phoneNumber": 89555555555,
"firstName": "Масяня",
"secondName": "Карлова",
"role": "dogsitter",
"location": "Россия, республика Татарстан, Казань, улица Пушкина, 12",
"price": 100,
"aboutMe": "Все на свете - собаки"
}
}

View File

@@ -1,3 +0,0 @@
{
"error": "Пользователь с таким номером телефона уже существует"
}

View File

@@ -1,9 +0,0 @@
{
"data": {
"id": 6,
"phoneNumber": 89888888888,
"firstName": "Генадий",
"secondName": "Паровозов",
"role": "owner"
}
}

View File

@@ -1,37 +0,0 @@
const router = require('express').Router()
const {MasterModel} = require('./model/master')
router.post('/master', async (req, res,next) => {
const {name, phone} = req.body
if (!name || !phone ){
throw new Error('Enter name and phone')
}
try {
const master = await MasterModel.create({name, phone})
res.status(200).send({success: true, body: master})
} catch (error) {
next(error)
}
})
router.get('/masters', async (req, res,next) => {
try {
const master = await MasterModel.find({})
res.status(200).send({success: true, body: master})
} catch (error) {
next(error)
}
})
router.get('/orders', (req, res) => {
res
.status(200)
.send(require(`./json/arm-orders/success.json`))
})
module.exports = router

View File

@@ -1,8 +0,0 @@
const router = require('express').Router()
const armRouter = require('./arm')
router.use('/arm', armRouter)
module.exports = router

View File

@@ -1,35 +0,0 @@
{
"success": true,
"body": [
{
"id": "masters1",
"name": "Иван Иванов",
"schedule": [ {
"id": "order1",
"startWashTime": "2024-11-24T10:30:00.000Z",
"endWashTime": "2024-11-24T16:30:00.000Z"
},
{
"id": "order2",
"startWashTime": "2024-11-24T11:30:00.000Z",
"endWashTime": "2024-11-24T17:30:00.000Z"
}],
"phone": "+7 900 123 45 67"
},
{
"id": "masters12",
"name": "Иван Иванов",
"schedule": [ {
"id": "order1",
"startWashTime": "2024-11-24T10:30:00.000Z",
"endWashTime": "2024-11-24T16:30:00.000Z"
},
{
"id": "order2",
"startWashTime": "2024-11-24T11:30:00.000Z",
"endWashTime": "2024-11-24T17:30:00.000Z"
}],
"phone": "+7 900 123 45 67"
}
]
}

View File

@@ -1,25 +0,0 @@
{
"success": true,
"body": [
{
"id": "order1",
"carNumber": "A123BC",
"startWashTime": "2024-11-24T10:30:00.000Z",
"endWashTime": "2024-11-24T16:30:00.000Z",
"orderDate": "2024-11-24T08:41:46.366Z",
"status": "progress",
"phone": "79001234563",
"location": "Казань, ул. Баумана, 1"
},
{
"id": "order2",
"carNumber": "A245BC",
"startWashTime": "2024-11-24T11:30:00.000Z",
"endWashTime": "2024-11-24T17:30:00.000Z",
"orderDate": "2024-11-24T07:40:46.366Z",
"status": "progress",
"phone": "79001234567",
"location": "Казань, ул. Баумана, 43"
}
]
}

View File

@@ -1,20 +0,0 @@
const { Schema, model } = require('mongoose')
const schema = new Schema({
name: {type: String, required: true},
phone: {type: String, required: true,unique: true,},
created: {
type: Date, default: () => new Date().toISOString(),
},
})
schema.set('toJSON', {
virtuals: true,
versionKey: false,
})
schema.virtual('id').get(function () {
return this._id.toHexString()
})
exports.MasterModel = model('dry-wash-master', schema)

View File

@@ -1,30 +0,0 @@
const { Schema, model } = require('mongoose')
const schema = new Schema({
startWashTime: {type: String, required: true},
endWashTime: {type: String, required: true},
orderDate: {type: String, required: true},
location: {type: String, required: true},
phone: {type: String, required: true},
status: {type: String, required: true},
carNumber: {type: String, required: true},
created: {
type: Date, default: () => new Date().toISOString(),
},
updated: {
type: Date, default: () => new Date().toISOString(),
},
master: {type: Schema.Types.ObjectId, ref: 'dry-wash-master'},
notes: String,
})
schema.set('toJSON', {
virtuals: true,
versionKey: false,
})
schema.virtual('id').get(function () {
return this._id.toHexString()
})
exports.OrderModel = model('dry-wash-order', schema)

View File

@@ -1,60 +0,0 @@
{
"info": {
"_postman_id": "e91fbcf7-3c7b-420d-a49e-4dbb6199c14a",
"name": "dry-wash",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_exporter_id": "27705820"
},
"item": [
{
"name": "arm",
"item": [
{
"name": "create master",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"name\":\"Anton\",\n \"phone\": \"89172420577\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{host}}/arm/master",
"host": [
"{{host}}"
],
"path": [
"arm",
"master"
]
}
},
"response": []
},
{
"name": "get masters",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "{{host}}/arm/masters",
"host": [
"{{host}}"
],
"path": [
"arm",
"masters"
]
}
},
"response": []
}
]
}
]
}

View File

@@ -1,15 +0,0 @@
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;

View File

@@ -1,112 +0,0 @@
{
"data": [
{
"src": "pancakes_meat",
"alt": "Фотография блинчиков с мясом, сыром и луком",
"href": "?=dish01",
"name": "Блинчики с мясом, сыром и лучком",
"category": [
"Ужины"
]
},
{
"src": "cheesecakes",
"alt": "Фотография сырников из творога",
"href": "?=dish02",
"name": "Сырники из творога",
"category": [
"Завтраки"
]
},
{
"src": "borsch",
"alt": "Фотография борща",
"href": "?=dish03",
"name": "Борщ",
"category": [
"Супы"
]
},
{
"src": "vareniki",
"alt": "Фотография вареников",
"href": "?=dish04",
"name": "Ленивые вареники",
"category": [
"Ужины"
]
},
{
"src": "rice_porridge",
"alt": "Фотография рисовой каши",
"href": "?=dish05",
"name": "Рисовая каша",
"category": [
"Завтраки"
]
},
{
"src": "cutlets",
"alt": "Фотография котлет по-киевски",
"href": "?=dish06",
"name": "Котлеты по-киевски",
"category": [
"Обеды"
]
},
{
"src": "draniki",
"alt": "Фотография драников",
"href": "?=dish07",
"name": "Драники",
"category": [
"Обеды"
]
},
{
"src": "meringue",
"alt": "Фотография безе",
"href": "?=dish08",
"name": "Безе",
"category": [
"Выпечка и десерты"
]
},
{
"src": "goulash",
"alt": "Фотография гуляша",
"href": "?=dish09",
"name": "Гуляш",
"category": [
"Мясо"
]
},
{
"src": "pancakes_cherries",
"alt": "Фотография блинчиков с вишней и творожным сыром",
"href": "?=dish10",
"name": "Блинчики с вишней и творожным сыром",
"category": [
"Завтраки"
]
},
{
"src": "canned_soup",
"alt": "Фотография супа из рыбных консервов",
"href": "?=dish11",
"name": "Суп из рыбных консервов",
"category": [
"Супы"
]
},
{
"src": "salad",
"alt": "Фотография салата",
"href": "?=dish12",
"name": "Салат \"Весенний\"",
"category": [
"Салаты"
]
}
]
}

View File

@@ -1,58 +0,0 @@
{
"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" }
]
}

View File

@@ -1,30 +0,0 @@
{
"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"
}
]
}
}

View File

@@ -7,4 +7,6 @@ router.use('/cats', require('./cats/index'))
router.use('/ecliptica', require('./ecliptica/index'))
router.use('/sdk', require('./sdk/index'))
module.exports = router

View File

@@ -0,0 +1,123 @@
const router = require('express').Router();
const { v4: uuidv4 } = require('uuid');
const workout1 = {
id: uuidv4(),
title: "Toned upper body",
exercises: [
{ title: "Push ups", repsOrDuration: 12, isTimeBased: false },
{ title: "Plank", repsOrDuration: 4, isTimeBased: true },
{ title: "Bicep curl", repsOrDuration: 12, isTimeBased: false, weight: 5 },
{ title: "Bicep curl", repsOrDuration: 12, isTimeBased: false, weight: 5 },
{ title: "Bicep curl", repsOrDuration: 12, isTimeBased: false, weight: 5 },
{ title: "Bicep curl", repsOrDuration: 12, isTimeBased: false, weight: 5 },
],
tags: ['Weights', 'Arms', 'Abs', 'Chest', 'Back']
};
const workout2 = {
id: uuidv4(),
title: "Tom Platz's legs",
exercises: [
{ title: "Squats", repsOrDuration: 12, isTimeBased: false, weight: 40 },
{ title: "Leg Press", repsOrDuration: 4, isTimeBased: false, weight: 65 },
{ title: "Lunges", repsOrDuration: 2, isTimeBased: true }
],
tags: ['Weights', 'Legs']
};
const workout3 = {
id: uuidv4(),
title: "HIIT",
exercises: [
{ title: "Jumping rope", repsOrDuration: 100, isTimeBased: false },
{ title: "Burpees", repsOrDuration: 3, isTimeBased: true },
{ title: "Jumping Jacks", repsOrDuration: 50, isTimeBased: false }
],
tags: ['Cardio']
}
const savedWorkouts = [workout1, workout3];
const trainingWorkouts = [workout2];
router.post('/workout', (req, res) => {
const newWorkout = { ...req.body, id: uuidv4() };
savedWorkouts.push(newWorkout);
res.status(201).json(newWorkout);
});
router.get('/workouts', (req, res) => {
res.json(savedWorkouts);
});
router.post('/training/workout', (req, res) => {
const newWorkout = { ...req.body, id: uuidv4() };
trainingWorkouts.push(newWorkout);
res.status(201).json(newWorkout);
});
const trainings = [{ id: uuidv4(), calories: 450, date: new Date("Thu Oct 03 2024 10:05:24 GMT+0300 (Moscow Standard Time)"), emoji: "fuzzy", hours: 1, minutes: 30, isWorkoutSaved: true, workout: workout1.id }];
const days = [
new Date("Thu Oct 03 2024 10:05:24 GMT+0300 (Moscow Standard Time)"),
];
router.post('/training', (req, res) => {
const newTraining = { ...req.body, id: uuidv4() };
trainings.push(newTraining);
days.push(newTraining.date);
res.status(201).json(newTraining);
});
router.get('/training', (req, res) => {
const { date } = req.query;
if (!date) {
return res.status(400).json({ message: 'Date query parameter is required' });
}
const formattedDate = new Date(date);
const result = trainings.find(t => new Date(t.date).toDateString() === formattedDate.toDateString());
if (result) {
res.json(result);
} else {
res.status(404).json({ message: 'Training not found for the specified date' });
}
});
router.get('/training/workout', (req, res) => {
const { id } = req.query;
if (!id) {
return res.status(400).json({ message: 'Id query parameter is required' });
}
const result = trainingWorkouts.find(w => w.id === id);
if (result) {
res.json(result);
} else {
res.status(404).json({ message: 'Training with such workout not found' });
}
});
router.get('/workout', (req, res) => {
const { id } = req.query;
if (!id) {
return res.status(400).json({ message: 'Id query parameter is required' });
}
const result = savedWorkouts.find(w => w.id === id);
if (result) {
res.json(result);
} else {
res.status(404).json({ message: 'Workout not found' });
}
});
router.get('/trainings', (req, res) => {
res.json(trainings);
});
router.get('/days', (req, res) => {
res.json(days);
})
module.exports = router;

View File

@@ -1,23 +0,0 @@
const Router = require('express').Router;
const router = Router()
const timer = (_req, _res, next) => {
setTimeout(() => next(), 500)
}
router.use(timer)
router.get(
'/active',
(req, res) =>
res.send(require(`./json/active-order-success.json`))
)
router.get(
'/history',
(req, res) =>
res.send(require(`./json/history-success.json`))
)
module.exports = router

View File

@@ -1,6 +0,0 @@
{
"success": false,
"errors": [
"Не получилось получить заказ с id = 123123"
]
}

View File

@@ -1,46 +0,0 @@
{
"success": true,
"body": {
"id": "1212",
"createdAt": "2024-11-29 13:24:08",
"updatedAt": "2024-11-29 13:24:10",
"status": "in_progress",
"timeline": [
{
"color": "gray",
"children": "Москва"
},
{
"children": "Владимир, 25.10.2024 18:02"
},
{
"children": "Нижний новгород, 25.10.2024 12:21"
},
{
"children": "Казань, 25.10.2024 03:00"
}
],
"statistics": [
{
"key": "address-from",
"value": "г. Казань, ул Ильи Давыдова, стр. 87а"
},
{
"key": "address-to",
"value": "г. Москва, ул. Тверская, д. 12"
},
{
"key": "delivery",
"value": "26.10.2024 23:08"
},
{
"key": "cost",
"value": "100500₽"
},
{
"key": "customer",
"value": "ООО \"Сидоров\""
}
]
}
}

View File

@@ -1,9 +0,0 @@
{
"success": false,
"body": {
"history": []
},
"errors": [
"Что-то пошло не так"
]
}

View File

@@ -1,187 +0,0 @@
{
"success": true,
"body": {
"history": [
{
"key": 1,
"number": "12324",
"cost": 15000,
"dateEnd": 1685998800000,
"customer": "ООО \"Иванов\"",
"cityFrom": "Псков",
"cityTo": "Мурманск"
},
{
"key": 2,
"number": "12323",
"cost": 10000,
"dateEnd": 1686085200000,
"customer": "ООО \"Попов\"",
"cityFrom": "Астрахань",
"cityTo": "Ставрополь"
},
{
"key": 3,
"number": "12325",
"cost": 12000,
"dateEnd": 1686171600000,
"customer": "ООО \"Сидоров\"",
"cityFrom": "Москва",
"cityTo": "Казань"
},
{
"key": 4,
"number": "12326",
"cost": 9000,
"dateEnd": 1686258000000,
"customer": "ООО \"Петров\"",
"cityFrom": "Новосибирск",
"cityTo": "Томск"
},
{
"key": 5,
"number": "12327",
"cost": 13000,
"dateEnd": 1686344400000,
"customer": "ООО \"Смирнов\"",
"cityFrom": "Омск",
"cityTo": "Тюмень"
},
{
"key": 6,
"number": "12328",
"cost": 14000,
"dateEnd": 1686430800000,
"customer": "ООО \"Кузнецов\"",
"cityFrom": "Саратов",
"cityTo": "Самара"
},
{
"key": 7,
"number": "12329",
"cost": 11000,
"dateEnd": 1686517200000,
"customer": "ООО \"Васильев\"",
"cityFrom": "Краснодар",
"cityTo": "Сочи"
},
{
"key": 8,
"number": "12330",
"cost": 8000,
"dateEnd": 1686603600000,
"customer": "ООО \"Зайцев\"",
"cityFrom": "Пермь",
"cityTo": "Екатеринбург"
},
{
"key": 9,
"number": "12331",
"cost": 7000,
"dateEnd": 1686690000000,
"customer": "ООО \"Морозов\"",
"cityFrom": "Челябинск",
"cityTo": "Уфа"
},
{
"key": 10,
"number": "12332",
"cost": 16000,
"dateEnd": 1686776400000,
"customer": "ООО \"Павлов\"",
"cityFrom": "Волгоград",
"cityTo": "Ростов-на-Дону"
},
{
"key": 11,
"number": "12333",
"cost": 9000,
"dateEnd": 1686862800000,
"customer": "ООО \"Фролов\"",
"cityFrom": "Калининград",
"cityTo": "Смоленск"
},
{
"key": 12,
"number": "12334",
"cost": 15500,
"dateEnd": 1686949200000,
"customer": "ООО \"Богданов\"",
"cityFrom": "Нижний Новгород",
"cityTo": "Киров"
},
{
"key": 13,
"number": "12335",
"cost": 13500,
"dateEnd": 1687035600000,
"customer": "ООО \"Григорьев\"",
"cityFrom": "Тверь",
"cityTo": "Ярославль"
},
{
"key": 14,
"number": "12336",
"cost": 12500,
"dateEnd": 1687122000000,
"customer": "ООО \"Дмитриев\"",
"cityFrom": "Сургут",
"cityTo": "Ханты-Мансийск"
},
{
"key": 15,
"number": "12337",
"cost": 14500,
"dateEnd": 1687208400000,
"customer": "ООО \"Михайлов\"",
"cityFrom": "Иркутск",
"cityTo": "Братск"
},
{
"key": 16,
"number": "12338",
"cost": 10500,
"dateEnd": 1687294800000,
"customer": "ООО \"Романов\"",
"cityFrom": "Владивосток",
"cityTo": "Хабаровск"
},
{
"key": 17,
"number": "12339",
"cost": 9500,
"dateEnd": 1687381200000,
"customer": "ООО \"Федоров\"",
"cityFrom": "Якутск",
"cityTo": "Магадан"
},
{
"key": 18,
"number": "12340",
"cost": 8500,
"dateEnd": 1687467600000,
"customer": "ООО \"Жуков\"",
"cityFrom": "Симферополь",
"cityTo": "Севастополь"
},
{
"key": 19,
"number": "12341",
"cost": 11500,
"dateEnd": 1687554000000,
"customer": "ООО \"Николаев\"",
"cityFrom": "Барнаул",
"cityTo": "Бийск"
},
{
"key": 20,
"number": "12342",
"cost": 10000,
"dateEnd": 1687640400000,
"customer": "ООО \"Орлов\"",
"cityFrom": "Кемерово",
"cityTo": "Новокузнецк"
}
]
}
}

View File

@@ -1,5 +0,0 @@
const router = require('express').Router();
router.use('/performer', require('./dashboard-performer'))
module.exports = router;

View File

@@ -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;

View File

@@ -2,6 +2,7 @@
{
"id": 1,
"phone_number": 89283244141,
"password": "1234",
"first_name": "Вася",
"second_name": "Пупкин",
"role": "dogsitter",
@@ -12,6 +13,7 @@
{
"id": 2,
"phone_number": 89272844541,
"password": "1234",
"first_name": "Ваня",
"second_name": "Пуськин",
"role": "dogsitter",
@@ -22,6 +24,7 @@
{
"id": 3,
"phone_number": 89872855893,
"password": "12345",
"first_name": "Гадий",
"second_name": "Петрович",
"role": "owner"
@@ -29,9 +32,10 @@
{
"id": 4,
"phone_number": 89872844591,
"password": "12345",
"first_name": "Галкин",
"second_name": "Максим",
"role": "dogsitter",
"role": ["owner", "dogsitter"],
"location": "Россия, республика Татарстан, Казань, проспект Ямашева, 83",
"price": 1000000,
"about_me": "Миллион алых роз"