forked from kaverti/website
204 lines
6.9 KiB
JavaScript
204 lines
6.9 KiB
JavaScript
let express = require('express')
|
|
let router = express.Router()
|
|
const auth = require('../lib/auth')
|
|
const Errors = require('../lib/errors')
|
|
let { User, Ban, Relationship, Notification } = require('../models')
|
|
|
|
router.post('/send', auth, async(req, res, next) => {
|
|
try {
|
|
if(req.body.friend !== undefined) {
|
|
let queryObj = {
|
|
where: {username: req.userData.username}
|
|
}
|
|
let user = await User.findOne(queryObj)
|
|
let queryObj2 = {
|
|
where: {username: req.body.friend}
|
|
}
|
|
let user2 = await User.findOne(queryObj2)
|
|
if (!user) {
|
|
throw Errors.unknown
|
|
}
|
|
if(!user2) {
|
|
throw Errors.accountDoesNotExist
|
|
}
|
|
if(user.id === user2.id) {
|
|
throw Errors.friendSelf
|
|
}
|
|
let checkIfSent = await Relationship.findOne({
|
|
where: {friend1Id: user.id, friend2Id: user2.id}
|
|
})
|
|
if (checkIfSent) {
|
|
throw Errors.friendRequestAlreadySent
|
|
}
|
|
Relationship.create({friend1Id: user.id, friend2Id: user2.id, type: 'pending'})
|
|
Relationship.create({friend1Id: user2.id, friend2Id: user.id, type: 'pendingCanAccept'})
|
|
res.status(200)
|
|
res.json({success: true})
|
|
} else {
|
|
res.status(400)
|
|
res.json({success: false})
|
|
}
|
|
|
|
} catch (err) { next(err) }
|
|
})
|
|
|
|
router.put('/accept', auth, async(req, res, next) => {
|
|
try {
|
|
if(req.body.friend !== undefined) {
|
|
let queryObj = {
|
|
where: {username: req.userData.username}
|
|
}
|
|
let user = await User.findOne(queryObj)
|
|
let queryObj2 = {
|
|
where: {username: req.body.friend}
|
|
}
|
|
let user2 = await User.findOne(queryObj2)
|
|
if (!user) {
|
|
throw Errors.unknown
|
|
}
|
|
if(!user2) {
|
|
throw Errors.accountDoesNotExist
|
|
}
|
|
let checkIfSent = await Relationship.findOne({
|
|
where: {friend1Id: user.id, friend2Id: user2.id, type: 'pendingCanAccept'}
|
|
})
|
|
if (!checkIfSent) {
|
|
throw Errors.needToBeFriend
|
|
}
|
|
let checkIfSent2 = await Relationship.findOne({
|
|
where: {friend1Id: user2.id, friend2Id: user.id, type: 'pending'}
|
|
})
|
|
checkIfSent.update({type: 'accepted'})
|
|
checkIfSent2.update({type: 'accepted'})
|
|
res.status(200)
|
|
res.json({success: true})
|
|
} else {
|
|
res.status(400)
|
|
res.json({success: false})
|
|
}
|
|
|
|
} catch (err) { next(err) }
|
|
})
|
|
|
|
router.put('/remove', auth, async(req, res, next) => {
|
|
try {
|
|
if(req.body.friend !== undefined) {
|
|
let queryObj = {
|
|
where: {username: req.userData.username}
|
|
}
|
|
let user = await User.findOne(queryObj)
|
|
let queryObj2 = {
|
|
where: {username: req.body.friend}
|
|
}
|
|
let user2 = await User.findOne(queryObj2)
|
|
if (!user) {
|
|
throw Errors.unknown
|
|
}
|
|
if(!user2) {
|
|
throw Errors.accountDoesNotExist
|
|
}
|
|
let checkIfSent = await Relationship.findOne({
|
|
where: {friend1Id: user.id, friend2Id: user2.id}
|
|
})
|
|
if (!checkIfSent) {
|
|
throw Errors.needToBeFriend
|
|
}
|
|
let checkIfSent2 = await Relationship.findOne({
|
|
where: {friend1Id: user2.id, friend2Id: user.id}
|
|
})
|
|
checkIfSent.destroy()
|
|
checkIfSent2.destroy()
|
|
res.status(200)
|
|
res.json({success: true})
|
|
} else {
|
|
res.status(400)
|
|
res.json({success: false})
|
|
}
|
|
|
|
} catch (err) { next(err) }
|
|
})
|
|
|
|
router.get('/get/:username', auth, async(req, res, next) => {
|
|
try {
|
|
let queryObj = {
|
|
where: {username: req.userData.username}
|
|
}
|
|
let user = await User.findOne(queryObj)
|
|
if (!user) {
|
|
res.status(200)
|
|
res.json({success: false})
|
|
}
|
|
let queryObj2 = {
|
|
where: {username: req.params.username}
|
|
}
|
|
let user2 = await User.findOne(queryObj2)
|
|
if(!user2) {
|
|
throw Errors.accountDoesNotExist
|
|
}
|
|
let checkIfSent = await Relationship.findOne({
|
|
where: {friend1Id: user.id, friend2Id: user2.id},
|
|
include: [{ model: User, as: 'friend1', attributes: ['username', 'createdAt', 'id', 'color', 'picture', 'locked', 'admin', 'booster', 'executive', 'bot'] }, { model: User, as: 'friend2', attributes: ['username', 'createdAt', 'id', 'color', 'picture', 'locked', 'admin', 'booster', 'executive', 'bot'] } ]
|
|
})
|
|
if (checkIfSent) {
|
|
res.status(200)
|
|
res.json(checkIfSent.toJSON())
|
|
} else {
|
|
res.status(200)
|
|
res.json({type: 'notFriends'})
|
|
}
|
|
} catch (err) { next(err) }
|
|
})
|
|
|
|
router.get('/user/:username', auth, async(req, res, next) => {
|
|
try {
|
|
let queryObj = {
|
|
where: {username: req.params.username}
|
|
}
|
|
let user = await User.findOne(queryObj)
|
|
if (!user) {
|
|
res.status(200)
|
|
res.json({success: false})
|
|
}
|
|
if(!user) {
|
|
throw Errors.accountDoesNotExist
|
|
}
|
|
let checkIfSent = await Relationship.findAll({
|
|
where: {friend1Id: user.id, type: 'accepted'},
|
|
include: [{ model: User, as: 'friend2', attributes: ['username', 'description', 'picture', 'createdAt', 'id', 'color', 'picture', 'locked', 'admin', 'booster', 'executive', 'bot'] } ]
|
|
})
|
|
if (checkIfSent) {
|
|
res.status(200)
|
|
res.json(checkIfSent)
|
|
} else {
|
|
res.status(200)
|
|
res.json({type: 'notFriends'})
|
|
}
|
|
} catch (err) { next(err) }
|
|
})
|
|
|
|
router.get('/getAll', auth, async(req, res, next) => {
|
|
try {
|
|
let queryObj = {
|
|
where: {username: req.userData.username}
|
|
}
|
|
let user = await User.findOne(queryObj)
|
|
if (!user) {
|
|
res.status(200)
|
|
res.json({success: false})
|
|
}
|
|
let checkIfSent = await Relationship.findAll({
|
|
where: {friend1Id: user.id},
|
|
include: [{ model: User, as: 'friend1', attributes: ['username', 'createdAt', 'id', 'color', 'picture', 'locked', 'admin', 'booster', 'executive', 'bot'] }, { model: User, as: 'friend2', attributes: ['username', 'createdAt', 'id', 'color', 'picture', 'locked', 'admin', 'booster', 'executive', 'bot'] } ]
|
|
})
|
|
if (checkIfSent) {
|
|
res.status(200)
|
|
res.json(checkIfSent)
|
|
} else {
|
|
res.status(200)
|
|
res.json({})
|
|
}
|
|
|
|
} catch (err) { next(err) }
|
|
})
|
|
module.exports = router
|