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

Metadata

Metadata

Assignees

No one assigned
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions