move old to legacy folder
This commit is contained in:
288
.bzr/legacy/task-boss/controllers.js
Normal file
288
.bzr/legacy/task-boss/controllers.js
Normal file
@@ -0,0 +1,288 @@
|
||||
/* eslint-disable no-restricted-syntax */
|
||||
|
||||
const hash = require('pbkdf2-password')()
|
||||
|
||||
const { getDB } = require('../../../utils/mongo')
|
||||
// eslint-disable-next-line import/order
|
||||
const ObjectId = require('mongodb').ObjectID
|
||||
|
||||
let db = null
|
||||
|
||||
const connect = async () => {
|
||||
db = await getDB('task-boss')
|
||||
}
|
||||
|
||||
const _idToId = (data) => {
|
||||
const { _id, ...rest } = data
|
||||
|
||||
return {
|
||||
id: _id,
|
||||
...rest,
|
||||
}
|
||||
}
|
||||
|
||||
const DEPTS_COLLECTION = 'depts4'
|
||||
const PEOPLES_COLLECTION = 'peoples4'
|
||||
const USERS_COLL = 'users3'
|
||||
|
||||
const getDepts = async () => {
|
||||
if (db === null) throw new Error('no db connection')
|
||||
|
||||
const deptsCollection = db.collection(DEPTS_COLLECTION)
|
||||
|
||||
let responseData = null
|
||||
|
||||
try {
|
||||
responseData = await deptsCollection.aggregate([{
|
||||
$lookup: {
|
||||
from: 'peoples',
|
||||
let: {
|
||||
id_fio_resp: '$idFio',
|
||||
},
|
||||
pipeline: [
|
||||
{
|
||||
$match:
|
||||
{
|
||||
$expr:
|
||||
{
|
||||
$eq: ['$id', '$$id_fio_resp'],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
id: '$_id',
|
||||
_id: 0,
|
||||
family: 1,
|
||||
name: 1,
|
||||
secondName: 1,
|
||||
email: 1,
|
||||
phone: 1,
|
||||
},
|
||||
}],
|
||||
as: 'responsible',
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: '$responsible',
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
id: '$_id',
|
||||
_id: 0,
|
||||
parentId: '$parentDept',
|
||||
name: 1,
|
||||
qty: {
|
||||
$size: '$employees',
|
||||
},
|
||||
responsible: '$responsible',
|
||||
notes: '$note',
|
||||
tasks: {
|
||||
inWork: '0',
|
||||
newTasks: '0',
|
||||
},
|
||||
},
|
||||
},
|
||||
]).toArray()
|
||||
} catch (e) {
|
||||
console.log(e.message)
|
||||
}
|
||||
|
||||
if (!responseData || responseData?.length === 0) {
|
||||
responseData = require('./stubs/depts.json').body
|
||||
}
|
||||
|
||||
return responseData
|
||||
}
|
||||
|
||||
const getDeptData = async (deptId) => {
|
||||
if (db === null) throw new Error('no db connection')
|
||||
|
||||
const deptsCollection = db.collection(DEPTS_COLLECTION)
|
||||
const data = await deptsCollection.aggregate([
|
||||
{
|
||||
$match: {
|
||||
_id: new ObjectId(deptId),
|
||||
},
|
||||
},
|
||||
{
|
||||
$lookup: {
|
||||
from: 'peoples',
|
||||
pipeline: [{
|
||||
$project: {
|
||||
id: '$_id',
|
||||
_id: 0,
|
||||
family: 1,
|
||||
name: 1,
|
||||
secondName: 1,
|
||||
email: 1,
|
||||
phone: 1,
|
||||
},
|
||||
}],
|
||||
localField: 'idFio',
|
||||
foreignField: 'id',
|
||||
as: 'responsible',
|
||||
},
|
||||
},
|
||||
{
|
||||
$unwind: '$responsible',
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
id: '$_id',
|
||||
_id: 0,
|
||||
parentId: '$parentDept',
|
||||
name: 1,
|
||||
qty: {
|
||||
$size: '$employees',
|
||||
},
|
||||
responsible: '$responsible',
|
||||
notes: '$note',
|
||||
tasks: {
|
||||
inWork: '0',
|
||||
newTasks: '0',
|
||||
},
|
||||
},
|
||||
},
|
||||
]).toArray()
|
||||
|
||||
if (data.length === 0) {
|
||||
throw new Error('No data')
|
||||
}
|
||||
|
||||
return _idToId(data[0])
|
||||
}
|
||||
|
||||
const dropDocuments = async (id) => {
|
||||
try {
|
||||
const deptsCollection = db.collection(DEPTS_COLLECTION)
|
||||
|
||||
const data = await deptsCollection.find({
|
||||
parentDept: id,
|
||||
}).toArray()
|
||||
|
||||
data.forEach((element) => {
|
||||
dropDocuments(element._id)
|
||||
})
|
||||
|
||||
deptsCollection.deleteOne({
|
||||
_id: new ObjectId(id),
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
|
||||
const deleteDeptById = async (body) => {
|
||||
if (db === null) throw new Error('no db connection');
|
||||
try {
|
||||
// eslint-disable-next-line guard-for-in
|
||||
for (let deptId in body) {
|
||||
dropDocuments(deptId)
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
|
||||
const getPeoplesData = async () => {
|
||||
if (db === null) throw new Error('no db connection')
|
||||
|
||||
const peoplesCollection = db.collection(PEOPLES_COLLECTION)
|
||||
const data = await peoplesCollection.find().toArray()
|
||||
|
||||
if (data.length === 0) {
|
||||
const newData = require('./stubs/peoples/success.json').data
|
||||
|
||||
peoplesCollection.insertMany(newData)
|
||||
|
||||
return _idToId(newData)
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
const createDept = async ({ form, peoples }) => {
|
||||
if (db === null) throw new Error('no db connection')
|
||||
|
||||
const deptsCollection = db.collection(DEPTS_COLLECTION)
|
||||
|
||||
const data = await deptsCollection.find({
|
||||
name: form.name,
|
||||
}).toArray()
|
||||
|
||||
if (data.length > 0) throw new Error('duplication of stirng')
|
||||
|
||||
const employees = []
|
||||
peoples.forEach((item) => employees.push({
|
||||
id: item.id,
|
||||
}))
|
||||
const dataToInsert = {
|
||||
...form, employees,
|
||||
}
|
||||
deptsCollection.insertMany([dataToInsert])
|
||||
|
||||
return dataToInsert
|
||||
}
|
||||
const authenticate = async (login, pass, fn) => {
|
||||
if (db === null) return fn(new Error('no db connection'))
|
||||
const usersCollection = db.collection(USERS_COLL)
|
||||
const users = await usersCollection.find({
|
||||
login,
|
||||
}).toArray()
|
||||
if (!users.length) return fn(new Error('невозможно найти пользователя'))
|
||||
const [user] = users
|
||||
|
||||
hash({
|
||||
password: pass, salt: user.salt,
|
||||
}, (err, pass, salt, hash) => {
|
||||
if (err) return fn(err)
|
||||
if (hash === user.hash) return fn(null, user)
|
||||
fn(new Error('неверный пароль'))
|
||||
})
|
||||
}
|
||||
|
||||
const setUsers = async (dataUsers) => {
|
||||
if (db === null) throw new Error('no db connection')
|
||||
|
||||
const usersCollection = db.collection(USERS_COLL)
|
||||
const data = await usersCollection.find({
|
||||
$or: [{
|
||||
login: dataUsers.login,
|
||||
}, {
|
||||
mail: dataUsers.mail,
|
||||
}],
|
||||
}).toArray()
|
||||
|
||||
if (data.length === 0) {
|
||||
hash({
|
||||
password: dataUsers.password, saltLength: 15,
|
||||
}, (err, pass, salt, hash) => {
|
||||
const users = {
|
||||
}
|
||||
const { login, password, mail } = {
|
||||
...dataUsers,
|
||||
}
|
||||
users.login = login
|
||||
users.name = login
|
||||
users.mail = mail
|
||||
users.hash = hash
|
||||
users.salt = salt
|
||||
usersCollection.insertMany([users])
|
||||
})
|
||||
|
||||
return dataUsers
|
||||
}
|
||||
if (data.length !== 0) throw new Error('Почта или логин уже существует')
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
connect,
|
||||
getDepts,
|
||||
getDeptData,
|
||||
getPeoplesData,
|
||||
createDept,
|
||||
setUsers,
|
||||
deleteDeptById,
|
||||
authenticate,
|
||||
}
|
||||
Reference in New Issue
Block a user