|
|
@@ -1,33 +1,35 @@
|
|
|
-import express, { Request } from 'express';
|
|
|
import { body } from 'express-validator';
|
|
|
|
|
|
import { apiV3FormValidator } from '~/server/middlewares/apiv3-form-validator';
|
|
|
import loggerFactory from '~/utils/logger';
|
|
|
|
|
|
-import Crowi from '../../crowi';
|
|
|
import BookmarkFolder from '../../models/bookmark-folder';
|
|
|
|
|
|
-import { ApiV3Response } from './interfaces/apiv3-response';
|
|
|
-
|
|
|
const logger = loggerFactory('growi:routes:apiv3:bookmark-folder');
|
|
|
|
|
|
+const express = require('express');
|
|
|
+
|
|
|
+const router = express.Router();
|
|
|
+
|
|
|
const validator = {
|
|
|
bookmarkFolder: [
|
|
|
body('name').isString().withMessage('name must be a string'),
|
|
|
- body('owner').isMongoId().withMessage('owner must be a mongo ID'),
|
|
|
- body('parent').optional().isMongoId().withMessage('parent must be a mongo ID'),
|
|
|
+ body('parent').optional({ nullable: true }),
|
|
|
],
|
|
|
};
|
|
|
|
|
|
-module.exports = (crowi: Crowi) => {
|
|
|
- const loginRequiredStrictly = require('../../middlewares/login-required')(crowi);
|
|
|
+module.exports = (crowi) => {
|
|
|
const accessTokenParser = require('../../middlewares/access-token-parser')(crowi);
|
|
|
- const router = express.Router();
|
|
|
- router.post('/', accessTokenParser, loginRequiredStrictly, validator.bookmarkFolder, apiV3FormValidator, async(req: Request, res: ApiV3Response) => {
|
|
|
+ const loginRequiredStrictly = require('../../middlewares/login-required')(crowi);
|
|
|
+
|
|
|
+ // Create new bookmark folder
|
|
|
+ router.post('/', accessTokenParser, loginRequiredStrictly, validator.bookmarkFolder, apiV3FormValidator, async(req, res) => {
|
|
|
+ const owner = req.user?._id;
|
|
|
+ const { name, parent } = req.body;
|
|
|
const data = {
|
|
|
- name: req.body.name,
|
|
|
- owner: req.body.owner,
|
|
|
- parent: req.body.parent,
|
|
|
+ name,
|
|
|
+ owner,
|
|
|
+ parent,
|
|
|
};
|
|
|
|
|
|
try {
|
|
|
@@ -41,5 +43,24 @@ module.exports = (crowi: Crowi) => {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ // List all bookmark folders
|
|
|
+ router.get('/list', accessTokenParser, loginRequiredStrictly, async(req, res) => {
|
|
|
+ const bookmarkFolders = await BookmarkFolder.findByUser(req.user?._id);
|
|
|
+ return res.apiv3({ bookmarkFolders });
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ // Delete bookmark folder and children
|
|
|
+ router.delete('/', accessTokenParser, loginRequiredStrictly, async(req, res) => {
|
|
|
+ const { boookmarkFolderId } = req.body;
|
|
|
+ try {
|
|
|
+ await BookmarkFolder.deleteFolderAndChildren(boookmarkFolderId);
|
|
|
+ return res.apiv3();
|
|
|
+ }
|
|
|
+ catch (err) {
|
|
|
+ logger.error(err);
|
|
|
+ return res.apiv3Err(err, 500);
|
|
|
+ }
|
|
|
+ });
|
|
|
return router;
|
|
|
};
|