var express = require('express') var router = express.Router() const DB = require("../mongoDB.js"); const Song = require("../def/songs.js"); DB.getDB.then((DB)=>{ const getUserId = function(req){ const user_sid = req.cookies.user_sid || req.query.user_sid || req.body.user_sid; return DB.ObjectID(user_sid); } const getProfileId = (req)=>{ return DB.ObjectID(req.cookies.profile_id || req.query.profile_id || req.body.profile_id); } /** * @swagger * tags: * name: Songs * description: Song management */ /** * @swagger * /songs: * get: * summary: Get all songs * tags: [Songs] * security: * - cookieAuth: [] * responses: * 200: * description: OK */ router.get("/", async (req, res) => { let profileId = req.params.id; let songs = await DB.getSongs(); return res.json({ status: "ok", songs }); }); /** * @swagger * /songs: * post: * summary: Create a new song * tags: [Songs] * security: * - cookieAuth: [] * requestBody: * required: true * content: * application/json: * schema: * type: object * responses: * 200: * description: OK */ router.post("/", async (req, res) => { let post = { userid: getUserId(req), ...req.body } let postObj = new Song(post); let dbr = await DB.newSong(postObj); song = postObj.toObj(); song._id = dbr.insertedId; return res.json({ status: "ok", ...song }) }); /** * @swagger * /songs/{id}: * get: * summary: Get a specific song by ID * tags: [Songs] * security: * - cookieAuth: [] * parameters: * - in: path * name: id * required: true * schema: * type: string * responses: * 200: * description: OK */ router.get("/:id", async (req, res) => { let profileId = req.params.id; let profile = await DB.getProfile(profileId); return res.json({ status: "ok", ... profile }); }); async function songBelongsToUser(songId, userid){ // TODO: Verify ownserhip return true; } /** * @swagger * /songs/{id}: * delete: * summary: Delete a song * tags: [Songs] * security: * - cookieAuth: [] * parameters: * - in: path * name: id * required: true * schema: * type: string * responses: * 200: * description: OK */ router.delete("/:id", async (req, res) => { const userid = getUserId(req); const songId = req.params.id; if(!await songBelongsToUser(songId, userid)) return res.json({ status: "This profile is not yours." }); await DB.removeSong(songId); return res.json({ status: "ok" }); }); /** * @swagger * /songs/{id}: * post: * summary: Update a song * tags: [Songs] * security: * - cookieAuth: [] * parameters: * - in: path * name: id * required: true * schema: * type: string * requestBody: * required: true * content: * application/json: * schema: * type: object * properties: * content: * type: string * responses: * 200: * description: OK */ router.post("/:id", async (req, res) => { const userid = getUserId(req); const songId = req.params.id; const song = await DB.getSong(songId); const newContent = req.body.content; console.log("Updating song", newContent) if(!await songBelongsToUser(songId, userid)) return res.json({ status: "This post is not yours." }); await DB.updateSongContent(songId, newContent, song.content); return res.json({ status: "ok" }); }); }); module.exports = router