cubash-archive/routes/relationship.js

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