Skip to content

Build a Reusable Folder Management Module for Any Application ย #16

@abhishek-nexgen-dev

Description

@abhishek-nexgen-dev

๐Ÿ“– Description (In Simple Words)

We want to build a complete Folder Management System that developers can use in any project without writing it from scratch.

This folder system should let users:

  • โœ… Create folders (like Google Drive, Notion, etc.)

  • โœ๏ธ Rename folders

  • ๐Ÿ“ Organize folders inside folders (parent-child)

  • ๐Ÿ—‘๏ธ Move folders to trash (soft delete)

  • โ™ป๏ธ Restore deleted folders

  • โŒ Delete folders permanently

  • ๐Ÿ“Œ Pin or hide folders

  • ๐Ÿ‘๏ธ Show only visible folders

  • ๐Ÿ‘ค Use folders per user (based on authId)

  • It should be created using modular and class-based structure so any developer can just import the controller/service and use it right away.


๐Ÿš€ Why This Is Useful

  • This feature is useful in so many types of apps:

  • โœ… Note-taking or document tools (like Notion, Evernote)

  • โœ… File upload systems (like Google Drive, Dropbox)

  • โœ… Task or project managers (like Trello, Todoist)

  • โœ… School or learning systems (for organizing materials)

  • โœ… Admin dashboards (organizing reports or files)

๐Ÿง  Key Features

โœ… Must-Have Features

  • Create folders

  • Rename folders

  • Delete folders (soft)

  • Restore folders

  • Permanently delete folders

  • Organize folders under other folders

  • Show folders per logged-in user

๐Ÿ“Œ Useful Flags

  • isPinned: To highlight important folders

  • isHidden: To hide folders from view

  • isDeleted: To mark folders in trash

  • isArchived: (optional)

  • isShared: To Allow account folder authentication user

๐Ÿ” Security

  • Each folder belongs to one user via authId

  • No one else can access or edit it

๐Ÿ—๏ธ File Structure (Organized & Clean)

src/
โ””โ”€โ”€ features/
    โ””โ”€โ”€ Folder/
        โ””โ”€โ”€ v1/
            โ”œโ”€โ”€ Folder.controller.ts    // Handle API calls
            โ”œโ”€โ”€ Folder.service.ts       // Business logic
            โ”œโ”€โ”€ Folder.validators.ts    // Validate data
            โ”œโ”€โ”€ Folder.model.ts         // Folder schema/interface
            โ”œโ”€โ”€ Folder.constant.ts      // Common messages/flags
            โ”œโ”€โ”€ Folder.middleware.ts    // (Optional) Access control
            โ”œโ”€โ”€ Folder.demo.ts          // Example usage
            โ””โ”€โ”€ README.md               // Guide for devs

๐ŸŽฎ Controller Methods

router.post('/folders', folderController.create);        // Create
router.get('/folders', folderController.getAll);         // Get all folders
router.patch('/folders/:id/rename', folderController.rename);
router.patch('/folders/:id/restore', folderController.restore);
router.delete('/folders/:id', folderController.softDelete);  // Soft delete
router.delete('/folders/:id/permanent', folderController.permanentDelete);

๐Ÿ“ฆ Example Folder Schema (Folder.model.ts)

interface Folder {
  id: string;
  name: string;
  parentId?: string;
  Child_id?: [string]
  authId: string;
  isPinned: boolean;
  isHidden: boolean;
  isDeleted: boolean;
  createdAt: Date;
  updatedAt: Date;
}

โš™๏ธ Service Functions

class FolderService {
  static async createFolder(data) { ... }
  static async renameFolder(id, newName) { ... }
  static async moveFolder(id, newParentId) { ... }
  static async deleteFolder(id) { ... }       // soft delete
  static async restoreFolder(id) { ... }
  static async permanentlyDeleteFolder(id) { ... }
  static async getUserFolders(authId, filters?) { ... }
}

๐Ÿงช Smart Additions You Can Include (Optional But Powerful)

  • โœ… Folder Tree Generator โ€“ get nested structure like:
[
  { id: 1, name: "Docs", children: [{ id: 2, name: "Projects" }] }
]

โœ… Folder Sharing โ€“ mark folders as shared (isShared = true)

โœ… Sorting โ€“ sort by createdAt, name, pinned first

โœ… Recycle Bin View โ€“ filter all folders with isDeleted = true

โœ… Folder Activity Logs โ€“ who renamed, deleted, restored, and when

๐Ÿ“˜ README.md Should Include:

  • โœ… How to import controller/service

  • โœ… Sample API usage

  • โœ… Description of all flags

  • โœ… How to add your own logic (custom filters or roles)

  • โœ… How to integrate it into your app

๐Ÿ“Œ Final Usage Example

import { FolderController } from '@fastkit/folder';

const folderController = new FolderController();

router.post('/folders', verifyToken, folderController.create);
router.get('/folders', verifyToken, folderController.getAll);
  • You can even build your file management or note app folder tree using this module.

โœ… Expected Output

[x] Full-featured folder system that works in any project

[x] Flags like pinned/hidden/deleted

[x] Controller works out of the box

[x] Tree-ready folder support

[x] Scalable and modular

๐Ÿ™‹ Contributors Can Help Add:

  • ๐ŸŒ Tree view structure

  • ๐Ÿ” Folder sharing and permissions

  • ๐Ÿ“… Sorting folders

  • ๐Ÿ“ File upload inside folders (future)

๐Ÿงช Test Ideas

  • Create a folder

  • Move under another folder

  • Rename and restore

  • Filter only pinned folders

  • Show tree-like folder structure

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions