Ver código fonte

Add list child folder api

https://youtrack.weseek.co.jp/issue/GW-7833
- Update create bookmark folder method
- Update and rename method fid folder by user id
- Add method to find child folder
- Update list bookmark folder route
- Add list-child route
Mudana-Grune 3 anos atrás
pai
commit
a05c377400

+ 14 - 7
packages/app/src/server/models/bookmark-folder.ts

@@ -18,12 +18,13 @@ export interface BookmarkFolderDocument extends Document {
   _id: Types.ObjectId
   name: string
   owner: Types.ObjectId
-  parent?: IBookmarkFolderDocument
+  parent?: BookmarkFolderDocument
 }
 
 export interface BookmarkFolderModel extends Model<BookmarkFolderDocument>{
   createByParameters(params: IBookmarkFolderDocument): IBookmarkFolderDocument
-  findByUser(user: string): IBookmarkFolderDocument[]
+  findParentFolderByUserId(user: Types.ObjectId | string): IBookmarkFolderDocument[]
+  findChildFolderById(parentBookmarkFolder: Types.ObjectId | string): Promise<IBookmarkFolderDocument[]>
   deleteFolderAndChildren(bookmarkFolderId: string): void
 }
 
@@ -34,14 +35,20 @@ const bookmarkFolderSchema = new Schema<BookmarkFolderDocument, BookmarkFolderMo
 });
 
 
-bookmarkFolderSchema.statics.createByParameters = async function(params: IBookmarkFolderDocument): Promise<IBookmarkFolderDocument> {
-  const bookmarkFolder = await this.create(params) as unknown as IBookmarkFolderDocument;
+bookmarkFolderSchema.statics.createByParameters = async function(params: IBookmarkFolderDocument): Promise<BookmarkFolderDocument> {
+  const bookmarkFolder = await this.create(params) as unknown as BookmarkFolderDocument;
   return bookmarkFolder;
 };
 
-bookmarkFolderSchema.statics.findByUser = async function(userId: string): Promise<BookmarkFolderDocument[]> {
-  // TODO: Get all folder structure
-  return this.find({ owner: userId });
+bookmarkFolderSchema.statics.findParentFolderByUserId = async function(userId: Types.ObjectId | string): Promise<BookmarkFolderDocument[]> {
+  const bookmarks = this.find({ owner: userId }, { parent: null }) as unknown as BookmarkFolderDocument[];
+  return bookmarks;
+};
+
+bookmarkFolderSchema.statics.findChildFolderById = async function(parentFolderId: Types.ObjectId | string): Promise<BookmarkFolderDocument[]> {
+  const parentFolder = this.findById(parentFolderId) as unknown as BookmarkFolderDocument;
+  const childFolders = this.find({ parent: parentFolder.id });
+  return childFolders;
 };
 
 bookmarkFolderSchema.statics.deleteFolderAndChildren = async function(boookmarkFolderId: string): Promise<void> {

+ 9 - 3
packages/app/src/server/routes/apiv3/bookmark-folder.ts

@@ -1,4 +1,4 @@
-import { body } from 'express-validator';
+import { body, param } from 'express-validator';
 
 import { apiV3FormValidator } from '~/server/middlewares/apiv3-form-validator';
 import loggerFactory from '~/utils/logger';
@@ -13,6 +13,7 @@ const router = express.Router();
 
 const validator = {
   bookmarkFolder: [
+    param('parentId').isString().withMessage('parentId is required'),
     body('name').isString().withMessage('name must be a string'),
     body('parent').optional({ nullable: true }),
   ],
@@ -43,12 +44,17 @@ module.exports = (crowi) => {
     }
   });
 
-  // List all bookmark folders
+  // List all main bookmark folders
   router.get('/list', accessTokenParser, loginRequiredStrictly, async(req, res) => {
-    const bookmarkFolders = await BookmarkFolder.findByUser(req.user?._id);
+    const bookmarkFolders = await BookmarkFolder.findParentFolderByUserId(req.user?._id);
     return res.apiv3({ bookmarkFolders });
   });
 
+  router.post('/list-child/', accessTokenParser, loginRequiredStrictly, async(req, res) => {
+    const { parentId } = req.body;
+    const bookmarkFolders = await BookmarkFolder.findChildFolderById(parentId);
+    return res.apiv3({ bookmarkFolders });
+  });
 
   // Delete bookmark folder and children
   router.delete('/', accessTokenParser, loginRequiredStrictly, async(req, res) => {