From 4d585002d7a1a227e720f228940f18706219a3ed Mon Sep 17 00:00:00 2001 From: Julya Shapaeva Date: Sat, 8 Feb 2025 04:38:22 +0300 Subject: [PATCH 1/2] Add backend and DB settings --- server/routers/dogsitters-finder/auth.js | 74 +++++++++ server/routers/dogsitters-finder/const.js | 3 + server/routers/dogsitters-finder/index.js | 82 ++++++---- .../{ => legacy}/json/2fa/error.json | 0 .../{ => legacy}/json/2fa/success.json | 0 .../json/auth/dogsitter.success.json | 0 .../{ => legacy}/json/auth/error.json | 0 .../{ => legacy}/json/auth/owner.success.json | 0 .../json/register/dogsitter.success.json | 0 .../{ => legacy}/json/register/error.json | 0 .../json/register/owner.success.json | 0 .../{ => legacy}/json/users/users.json | 0 .../routers/dogsitters-finder/model/auth.js | 44 ++++++ .../dogsitters-finder/model/interaction.js | 24 +++ .../routers/dogsitters-finder/model/user.js | 83 ++++++++++ server/routers/dogsitters-finder/routes.js | 149 ++++++++++++++++++ 16 files changed, 424 insertions(+), 35 deletions(-) create mode 100644 server/routers/dogsitters-finder/auth.js create mode 100644 server/routers/dogsitters-finder/const.js rename server/routers/dogsitters-finder/{ => legacy}/json/2fa/error.json (100%) rename server/routers/dogsitters-finder/{ => legacy}/json/2fa/success.json (100%) rename server/routers/dogsitters-finder/{ => legacy}/json/auth/dogsitter.success.json (100%) rename server/routers/dogsitters-finder/{ => legacy}/json/auth/error.json (100%) rename server/routers/dogsitters-finder/{ => legacy}/json/auth/owner.success.json (100%) rename server/routers/dogsitters-finder/{ => legacy}/json/register/dogsitter.success.json (100%) rename server/routers/dogsitters-finder/{ => legacy}/json/register/error.json (100%) rename server/routers/dogsitters-finder/{ => legacy}/json/register/owner.success.json (100%) rename server/routers/dogsitters-finder/{ => legacy}/json/users/users.json (100%) create mode 100644 server/routers/dogsitters-finder/model/auth.js create mode 100644 server/routers/dogsitters-finder/model/interaction.js create mode 100644 server/routers/dogsitters-finder/model/user.js create mode 100644 server/routers/dogsitters-finder/routes.js diff --git a/server/routers/dogsitters-finder/auth.js b/server/routers/dogsitters-finder/auth.js new file mode 100644 index 0000000..f8c159d --- /dev/null +++ b/server/routers/dogsitters-finder/auth.js @@ -0,0 +1,74 @@ +const { Router } = require("express"); +const hash = require("pbkdf2-password")(); +const { promisify } = require("node:util"); +const jwt = require('jsonwebtoken') + +const { getAnswer } = require("../../utils/common"); + +const { AuthModel } = require("./model/todo/auth"); +const { TOKEN_KEY } = require('./const') +const { UserModel } = require("./model/todo/user"); + +const { requiredValidate } = require('./utils') + +const router = Router(); + +router.post( + "/signup", + requiredValidate("login", "password", "email"), + async (req, res, next) => { + const { login, password, email } = req.body + + const user = await AuthModel.findOne({ login }); + + if (user) { + throw new Error("Пользователь с таким логином уже существует"); + } + + hash({ password }, async function (err, pass, salt, hash) { + if (err) return next(err); + + const user = await UserModel.create({ login, email }); + await AuthModel.create({ login, hash, salt, userId: user.id }); + + res.json(getAnswer(null, { ok: true })) + }) + } +) + +function authenticate(login, pass, cb) { + AuthModel.findOne({ login }).populate('userId').exec().then((user) => { + if (!user) return cb(null, null) + + hash({ password: pass, salt: user.salt }, function (err, pass, salt, hash) { + if (err) return cb(err) + if (hash === user.hash) return cb(null, user) + cb(null, null) + }) + }) +} + +const auth = promisify(authenticate) + +router.post('/signin', requiredValidate('login', 'password'), async (req, res) => { + const { login, password } = req.body + + const user = await auth(login, password) + + if (!user) { + throw new Error("Неверный логин или пароль") + } + + const accessToken = jwt.sign({ + ...JSON.parse(JSON.stringify(user.userId)), + }, TOKEN_KEY, { + expiresIn: '12h' + }) + + res.json(getAnswer(null, { + user: user.userId, + token: accessToken, + })) +}) + +module.exports = router diff --git a/server/routers/dogsitters-finder/const.js b/server/routers/dogsitters-finder/const.js new file mode 100644 index 0000000..7828a91 --- /dev/null +++ b/server/routers/dogsitters-finder/const.js @@ -0,0 +1,3 @@ +exports.DSF_AUTH_PASSWD_MODEL_NAME = 'DSF_AUTH_PASSWD' +exports.DSF_AUTH_USER_MODEL_NAME = 'DSF_AUTH_USER' +exports.DSF_INTERACTION_MODEL_NAME = 'DSF_INTERACTION' diff --git a/server/routers/dogsitters-finder/index.js b/server/routers/dogsitters-finder/index.js index b34e6af..a618a12 100644 --- a/server/routers/dogsitters-finder/index.js +++ b/server/routers/dogsitters-finder/index.js @@ -1,40 +1,52 @@ -const router = require("express").Router(); +// const router = require("express").Router(); -router.get("/users", (request, response) => { - response.send(require("./json/users/users.json")); -}); +// 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("/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("/auth/2fa", (request, response) => { - const { code } = request.body; - if (code === "0000") { - response.send(require("./json/2fa/success.json")); - } else { - response.status(400).send(require("./json/2fa/error.json")); - } -}); +// router.post("/auth/2fa", (request, response) => { +// const { code } = request.body; +// if (code === "0000") { +// response.send(require("./json/2fa/success.json")); +// } else { +// response.status(400).send(require("./json/2fa/error.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")); - } -}); +// 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; +// module.exports = router; + +const { Router } = require('express') + +const router = Router() + +const userInteractionRouter = require('./routes') +const authRouter = require('./auth') + +router.use('/auth', authRouter) +router.use('/user-interaction', userInteractionRouter) + +module.exports = router diff --git a/server/routers/dogsitters-finder/json/2fa/error.json b/server/routers/dogsitters-finder/legacy/json/2fa/error.json similarity index 100% rename from server/routers/dogsitters-finder/json/2fa/error.json rename to server/routers/dogsitters-finder/legacy/json/2fa/error.json diff --git a/server/routers/dogsitters-finder/json/2fa/success.json b/server/routers/dogsitters-finder/legacy/json/2fa/success.json similarity index 100% rename from server/routers/dogsitters-finder/json/2fa/success.json rename to server/routers/dogsitters-finder/legacy/json/2fa/success.json diff --git a/server/routers/dogsitters-finder/json/auth/dogsitter.success.json b/server/routers/dogsitters-finder/legacy/json/auth/dogsitter.success.json similarity index 100% rename from server/routers/dogsitters-finder/json/auth/dogsitter.success.json rename to server/routers/dogsitters-finder/legacy/json/auth/dogsitter.success.json diff --git a/server/routers/dogsitters-finder/json/auth/error.json b/server/routers/dogsitters-finder/legacy/json/auth/error.json similarity index 100% rename from server/routers/dogsitters-finder/json/auth/error.json rename to server/routers/dogsitters-finder/legacy/json/auth/error.json diff --git a/server/routers/dogsitters-finder/json/auth/owner.success.json b/server/routers/dogsitters-finder/legacy/json/auth/owner.success.json similarity index 100% rename from server/routers/dogsitters-finder/json/auth/owner.success.json rename to server/routers/dogsitters-finder/legacy/json/auth/owner.success.json diff --git a/server/routers/dogsitters-finder/json/register/dogsitter.success.json b/server/routers/dogsitters-finder/legacy/json/register/dogsitter.success.json similarity index 100% rename from server/routers/dogsitters-finder/json/register/dogsitter.success.json rename to server/routers/dogsitters-finder/legacy/json/register/dogsitter.success.json diff --git a/server/routers/dogsitters-finder/json/register/error.json b/server/routers/dogsitters-finder/legacy/json/register/error.json similarity index 100% rename from server/routers/dogsitters-finder/json/register/error.json rename to server/routers/dogsitters-finder/legacy/json/register/error.json diff --git a/server/routers/dogsitters-finder/json/register/owner.success.json b/server/routers/dogsitters-finder/legacy/json/register/owner.success.json similarity index 100% rename from server/routers/dogsitters-finder/json/register/owner.success.json rename to server/routers/dogsitters-finder/legacy/json/register/owner.success.json diff --git a/server/routers/dogsitters-finder/json/users/users.json b/server/routers/dogsitters-finder/legacy/json/users/users.json similarity index 100% rename from server/routers/dogsitters-finder/json/users/users.json rename to server/routers/dogsitters-finder/legacy/json/users/users.json diff --git a/server/routers/dogsitters-finder/model/auth.js b/server/routers/dogsitters-finder/model/auth.js new file mode 100644 index 0000000..40a8a97 --- /dev/null +++ b/server/routers/dogsitters-finder/model/auth.js @@ -0,0 +1,44 @@ +const { Schema, model } = require("mongoose"); + +const { + DSF_AUTH_PASSWD_MODEL_NAME, + DSF_AUTH_USER_MODEL_NAME, +} = require("../../const"); + +const schema = new Schema({ + login: { + type: String, + required: true, + unique: true + }, + hash: { + type: String, + required: true + }, + salt: { + type: String, + required: true + }, + userId: { + type: Schema.Types.ObjectId, + ref: DSF_AUTH_USER_MODEL_NAME + }, + created: { + type: Date, + default: () => new Date().toISOString(), + }, +}); + +schema.set("toJSON", { + virtuals: true, + versionKey: false, + transform: function (doc, ret) { + delete ret._id; + }, +}); + +schema.virtual("id").get(function () { + return this._id.toHexString(); +}); + +exports.AuthModel = model(DSF_AUTH_PASSWD_MODEL_NAME, schema); diff --git a/server/routers/dogsitters-finder/model/interaction.js b/server/routers/dogsitters-finder/model/interaction.js new file mode 100644 index 0000000..95f202b --- /dev/null +++ b/server/routers/dogsitters-finder/model/interaction.js @@ -0,0 +1,24 @@ +const { Schema, model } = require("mongoose"); + +const { DSF_AUTH_USER_MODEL_NAME, DSF_INTERACTION_MODEL_NAME } = require("../../const"); + +const interactionSchema = new Schema({ + owner_id: { + type: Schema.Types.ObjectId, + ref: DSF_AUTH_USER_MODEL_NAME, + required: true + }, + dogsitter_id: { + type: Schema.Types.ObjectId, + ref: DSF_AUTH_USER_MODEL_NAME, + required: true + }, + timestamp: { + type: Date, + default: Date.now + } +}); + +interactionSchema.index({ owner_id: 1, dogsitter_id: 1 }); + +module.exports.Interaction = model(DSF_INTERACTION_MODEL_NAME, interactionSchema); \ No newline at end of file diff --git a/server/routers/dogsitters-finder/model/user.js b/server/routers/dogsitters-finder/model/user.js new file mode 100644 index 0000000..889c946 --- /dev/null +++ b/server/routers/dogsitters-finder/model/user.js @@ -0,0 +1,83 @@ +const { Schema, model } = require("mongoose"); + +const { DSF_AUTH_USER_MODEL_NAME } = require("../../const"); + +const userSchema = new Schema({ + phone_number: { + type: String, + required: true, + unique: true, + match: /^\+?\d{10,15}$/ + }, + first_name: { + type: String, + required: true, + trim: true + }, + second_name: { + type: String, + required: true, + trim: true + }, + role: { + type: String, + enum: ["dogsitter", "owner"], + required: true + }, + location: { + type: String, + required: function() { + return this.role === "dogsitter"; + } + }, + price: { + type: Number, + min: 0, + required: function() { + return this.role === "dogsitter"; + } + }, + about_me: { + type: String, + maxlength: 500 + }, + rating: { + type: Number, + min: 0, + max: 5, + default: 0 + }, + ratings: { + type: [Number], + default: [], + validate: { + validator: function(arr) { + return arr.every(v => v >= 0 && v <= 5); + }, + message: "Рейтинг должен быть в диапазоне от 0 до 5!" + } + }, + tg: { + type: String, + match: /^[a-zA-Z0-9_]{5,32}$/ + }, + created: { + type: Date, + default: Date.now + } +}); + +userSchema.virtual("id").get(function() { + return this._id.toHexString(); +}); + +userSchema.set("toJSON", { + virtuals: true, + versionKey: false, + transform: function(doc, ret) { + delete ret._id; + delete ret.__v; + } +}); + +module.exports.User = model(DSF_AUTH_USER_MODEL_NAME, userSchema); \ No newline at end of file diff --git a/server/routers/dogsitters-finder/routes.js b/server/routers/dogsitters-finder/routes.js new file mode 100644 index 0000000..f82bc47 --- /dev/null +++ b/server/routers/dogsitters-finder/routes.js @@ -0,0 +1,149 @@ +const { Router } = require('express') +const { expressjwt } = require('express-jwt') + +const { getAnswer } = require('../../utils/common') +const { User, Interaction } = require('./model') +const { TOKEN_KEY } = require('./const') +const { requiredValidate } = require('./utils') + +const router = Router() + +// Получение списка пользователей +router.get('/users', async (req, res) => { + + const users = await User.find() + .select('-__v -ratings -phone_number') + .lean() + + console.log('get users successfull') + + res.send(getAnswer(null, users)) +}) + +// Получение конкретного пользователя +router.get('/dogsitter-viewing', async (req, res) => { + const { userId } = req.params + + const user = await User.findById(userId) + .select('-__v -ratings') + .lean() + + if (!user) { + return res.status(404).send(getAnswer(new Error('Пользователь не найден'))) + } + + res.send(getAnswer(null, user)) +}) + +router.use(expressjwt({ secret: TOKEN_KEY, algorithms: ['HS256'] })) + +// Добавление оценки пользователю +router.post('/dogsitter-viewing/rating', requiredValidate('value'), async (req, res) => { + const { userId } = req.params + const { value } = req.body + const authUserId = req.auth.id + + try { + const user = await User.findById(userId) + if (!user) throw new Error('Пользователь не найден') + if (user.role !== 'dogsitter') throw new Error('Нельзя оценивать этого пользователя') + if (user.id === authUserId) throw new Error('Нельзя оценивать самого себя') + + user.ratings.push(Number(value)) + user.rating = user.ratings.reduce((a, b) => a + b, 0) / user.ratings.length + + const updatedUser = await user.save() + + res.send(getAnswer(null, { + id: updatedUser.id, + rating: updatedUser.rating.toFixed(1), + totalRatings: updatedUser.ratings.length + })) + + } catch (error) { + res.status(400).send(getAnswer(error)) + } +}) + +// Обновление информации пользователя +router.patch('/users', async (req, res) => { + const { userId } = req.params + const updates = req.body + + try { + const user = await User.findByIdAndUpdate(userId, updates, { new: true }) + .select('-__v -ratings') + + if (!user) throw new Error('Пользователь не найден') + res.send(getAnswer(null, user)) + + } catch (error) { + res.status(400).send(getAnswer(error)) + } +}) + +// Создание объекта взаимодействия +router.post('/interactions', + expressjwt({ secret: TOKEN_KEY, algorithms: ['HS256'] }), + requiredValidate('dogsitter_id'), + async (req, res) => { + try { + const { dogsitter_id } = req.body + const owner_id = req.auth.id // ID из JWT токена + + // Проверка существования пользователей + const [owner, dogsitter] = await Promise.all([ + User.findById(owner_id), + User.findById(dogsitter_id) + ]) + + if (!owner || owner.role !== 'owner') { + throw new Error('Владелец не найден или имеет неверную роль') + } + + if (!dogsitter || dogsitter.role !== 'dogsitter') { + throw new Error('Догситтер не найден или имеет неверную роль') + } + + // Создание взаимодействия + const interaction = await Interaction.create({ + owner_id, + dogsitter_id + }) + + res.send(getAnswer(null, { + id: interaction.id, + timestamp: interaction.timestamp + })) + + } catch (error) { + res.status(400).send(getAnswer(error)) + } + } +) + +router.get('/interactions/check', async (req, res) => { + const { owner_id, dogsitter_id } = req.query; + + if (!owner_id || !dogsitter_id) { + return res.status(400).send(getAnswer('Missing owner_id or dogsitter_id')); + } + + try { + // Поиск взаимодействий по owner_id и dogsitter_id + const interactions = await Interaction.find({ owner_id, dogsitter_id }) + .select('-__v') // Выбираем только нужные поля + .lean(); + + if (interactions.length === 0) { + return res.status(404).send(getAnswer('No interactions found')); + } + + res.send(getAnswer(null, interactions)); + } catch (error) { + console.error('Error checking interactions:', error); + res.status(500).send(getAnswer('Internal Server Error')); + } +}); + +module.exports = router \ No newline at end of file From 5e4a99529dd6d378179e2339bf691fc48e2190f6 Mon Sep 17 00:00:00 2001 From: Julya Shapaeva Date: Sat, 8 Feb 2025 04:44:17 +0300 Subject: [PATCH 2/2] Add backend and db settings --- server/routers/dogsitters-finder/index.js | 82 ++++++++----------- .../{legacy => }/json/2fa/error.json | 0 .../{legacy => }/json/2fa/success.json | 0 .../json/auth/dogsitter.success.json | 0 .../{legacy => }/json/auth/error.json | 0 .../{legacy => }/json/auth/owner.success.json | 0 .../json/register/dogsitter.success.json | 0 .../{legacy => }/json/register/error.json | 0 .../json/register/owner.success.json | 0 .../{legacy => }/json/users/users.json | 0 10 files changed, 34 insertions(+), 48 deletions(-) rename server/routers/dogsitters-finder/{legacy => }/json/2fa/error.json (100%) rename server/routers/dogsitters-finder/{legacy => }/json/2fa/success.json (100%) rename server/routers/dogsitters-finder/{legacy => }/json/auth/dogsitter.success.json (100%) rename server/routers/dogsitters-finder/{legacy => }/json/auth/error.json (100%) rename server/routers/dogsitters-finder/{legacy => }/json/auth/owner.success.json (100%) rename server/routers/dogsitters-finder/{legacy => }/json/register/dogsitter.success.json (100%) rename server/routers/dogsitters-finder/{legacy => }/json/register/error.json (100%) rename server/routers/dogsitters-finder/{legacy => }/json/register/owner.success.json (100%) rename server/routers/dogsitters-finder/{legacy => }/json/users/users.json (100%) diff --git a/server/routers/dogsitters-finder/index.js b/server/routers/dogsitters-finder/index.js index a618a12..c0cfd87 100644 --- a/server/routers/dogsitters-finder/index.js +++ b/server/routers/dogsitters-finder/index.js @@ -1,52 +1,38 @@ -// const router = require("express").Router(); +const router = require("express").Router(); -// router.get("/users", (request, response) => { -// response.send(require("./json/users/users.json")); -// }); +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("/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("/auth/2fa", (request, response) => { -// const { code } = request.body; -// if (code === "0000") { -// response.send(require("./json/2fa/success.json")); -// } else { -// response.status(400).send(require("./json/2fa/error.json")); -// } -// }); +router.post("/auth/2fa", (request, response) => { + const { code } = request.body; + if (code === "0000") { + response.send(require("./json/2fa/success.json")); + } else { + response.status(400).send(require("./json/2fa/error.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; - -const { Router } = require('express') - -const router = Router() - -const userInteractionRouter = require('./routes') -const authRouter = require('./auth') - -router.use('/auth', authRouter) -router.use('/user-interaction', userInteractionRouter) - -module.exports = router +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")); + } +}); \ No newline at end of file diff --git a/server/routers/dogsitters-finder/legacy/json/2fa/error.json b/server/routers/dogsitters-finder/json/2fa/error.json similarity index 100% rename from server/routers/dogsitters-finder/legacy/json/2fa/error.json rename to server/routers/dogsitters-finder/json/2fa/error.json diff --git a/server/routers/dogsitters-finder/legacy/json/2fa/success.json b/server/routers/dogsitters-finder/json/2fa/success.json similarity index 100% rename from server/routers/dogsitters-finder/legacy/json/2fa/success.json rename to server/routers/dogsitters-finder/json/2fa/success.json diff --git a/server/routers/dogsitters-finder/legacy/json/auth/dogsitter.success.json b/server/routers/dogsitters-finder/json/auth/dogsitter.success.json similarity index 100% rename from server/routers/dogsitters-finder/legacy/json/auth/dogsitter.success.json rename to server/routers/dogsitters-finder/json/auth/dogsitter.success.json diff --git a/server/routers/dogsitters-finder/legacy/json/auth/error.json b/server/routers/dogsitters-finder/json/auth/error.json similarity index 100% rename from server/routers/dogsitters-finder/legacy/json/auth/error.json rename to server/routers/dogsitters-finder/json/auth/error.json diff --git a/server/routers/dogsitters-finder/legacy/json/auth/owner.success.json b/server/routers/dogsitters-finder/json/auth/owner.success.json similarity index 100% rename from server/routers/dogsitters-finder/legacy/json/auth/owner.success.json rename to server/routers/dogsitters-finder/json/auth/owner.success.json diff --git a/server/routers/dogsitters-finder/legacy/json/register/dogsitter.success.json b/server/routers/dogsitters-finder/json/register/dogsitter.success.json similarity index 100% rename from server/routers/dogsitters-finder/legacy/json/register/dogsitter.success.json rename to server/routers/dogsitters-finder/json/register/dogsitter.success.json diff --git a/server/routers/dogsitters-finder/legacy/json/register/error.json b/server/routers/dogsitters-finder/json/register/error.json similarity index 100% rename from server/routers/dogsitters-finder/legacy/json/register/error.json rename to server/routers/dogsitters-finder/json/register/error.json diff --git a/server/routers/dogsitters-finder/legacy/json/register/owner.success.json b/server/routers/dogsitters-finder/json/register/owner.success.json similarity index 100% rename from server/routers/dogsitters-finder/legacy/json/register/owner.success.json rename to server/routers/dogsitters-finder/json/register/owner.success.json diff --git a/server/routers/dogsitters-finder/legacy/json/users/users.json b/server/routers/dogsitters-finder/json/users/users.json similarity index 100% rename from server/routers/dogsitters-finder/legacy/json/users/users.json rename to server/routers/dogsitters-finder/json/users/users.json