JustPaste
HomeCategoriesAboutDonateContactTerms of UsePrivacy Policy
JustPaste

Free online notepad — write and share instantly

Navigate

  • Home
  • Timeline
  • Categories

Info

  • About
  • Donate
  • Contact

Legal

  • Terms of Use
  • Privacy Policy

© 2026 JustPaste.app. All rights reserved.

Made with ♥ by JustPaste

Untitled Page | JustPaste.app
18 days ago5 views
👨‍💻Programming

Untitled Page

// Opens the shared Mongoose connection used by the API and seed script.
const mongoose = require('mongoose');

const connectDB = async () => {
  const connection = await mongoose.connect(
    process.env.MONGODB_URI || 'mongodb://127.0.0.1:27017/taskflow'
  );
  console.log(`MongoDB connected: ${connection.connection.host}`);
  return connection;
};

module.exports = connectDB;
// Implements all REST operations and query filtering for TaskFlow tasks.
const mongoose = require('mongoose');
const Task = require('../models/Task');

const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

const buildFilter = ({ priority, status, search }) => {np
  const filter = {};
  if (priority) filter.priority = priority;
  if (status) filter.$or = [{ simpleStatus: status }, { detailedStatus: status }];
  if (search) {
    const matcher = new RegExp(escapeRegex(search), 'i');
    const conditions = [{ name: matcher }, { description: matcher }];
    if (filter.$or) filter.$and = [{ $or: filter.$or }, { $or: conditions }];
    else filter.$or = conditions;
  }
  return filter;
};

const getTasks = async (req, res, next) => {
  try {
    const tasks = await Task.find(buildFilter(req.query)).sort({ createdAt: 1 });
    res.json(tasks);
  } catch (error) {
    next(error);
  }
};

const createTask = async (req, res, next) => {
  try {
    const task = await Task.create(req.body);
    res.status(201).json(task);
  } catch (error) {
    next(error);
  }
};

const updateTask = async (req, res, next) => {
  try {
    if (!mongoose.isValidObjectId(req.params.id)) {
      return res.status(400).json({ message: 'Invalid task id' });
    }
    const task = await Task.findByIdAndUpdate(req.params.id, req.body, {
      new: true,
      runValidators: true,
      overwrite: req.method === 'PUT',
    });
    if (!task) return res.status(404).json({ message: 'Task not found' });
    return res.json(task);
  } catch (error) {
    return next(error);
  }
};

const deleteTask = async (req, res, next) => {
  try {
    if (!mongoose.isValidObjectId(req.params.id)) {
      return res.status(400).json({ message: 'Invalid task id' });
    }
    const task = await Task.findByIdAndDelete(req.params.id);
    if (!task) return res.status(404).json({ message: 'Task not found' });
    return res.json({ message: 'Task deleted' });
  } catch (error) {
    return next(error);
  }
};

module.exports = { getTasks, createTask, updateTask, deleteTask };
[
  { "name": "Design Homepage UI", "description": "Create wireframe and UI for the homepage", "priority": "High", "detailedStatus": "In Progress", "simpleStatus": "Done", "dueDate": "2024-04-22", "progress": 75 },
  { "name": "API Integration", "description": "Integrate backend APIs with frontend", "priority": "Medium", "detailedStatus": "To Do", "simpleStatus": "Pending", "dueDate": "2024-04-25", "progress": 40 },
  { "name": "Fix Dashboard Bugs", "description": "Resolve issues reported in dashboard", "priority": "High", "detailedStatus": "Review", "simpleStatus": "Pending", "dueDate": "2024-04-27", "progress": 60 },
  { "name": "Write Unit Tests", "description": "Add unit tests for components", "priority": "Low", "detailedStatus": "In Progress", "simpleStatus": "Done", "dueDate": "2024-04-21", "progress": 30 },
  { "name": "Update Documentation", "description": "Update project documentation", "priority": "Low", "detailedStatus": "To Do", "simpleStatus": "Pending", "dueDate": "2024-04-30", "progress": 20 },
  { "name": "Database Schema", "description": "Finalize MongoDB task collections", "priority": "High", "detailedStatus": "Done", "simpleStatus": "Done", "dueDate": "2024-04-18", "progress": 100 },
  { "name": "Responsive Layout", "description": "Make dashboard responsive on tablets", "priority": "Medium", "detailedStatus": "In Progress", "simpleStatus": "Done", "dueDate": "2024-05-02", "progress": 55 },
  { "name": "User Profile", "description": "Build the profile placeholder screen", "priority": "Low", "detailedStatus": "To Do", "simpleStatus": "Done", "dueDate": "2024-05-04", "progress": 10 },
  { "name": "Code Review", "description": "Review frontend component structure", "priority": "Medium", "detailedStatus": "Review", "simpleStatus": "Done", "dueDate": "2024-05-06", "progress": 85 },
  { "name": "Deployment Setup", "description": "Prepare the production environment", "priority": "High", "detailedStatus": "In Progress", "simpleStatus": "Pending", "dueDate": "2024-05-08", "progress": 45 },
  { "name": "Accessibility Audit", "description": "Check labels, contrast, and keyboard use", "priority": "Medium", "detailedStatus": "To Do", "simpleStatus": "Done", "dueDate": "2024-05-10", "progress": 15 },
  { "name": "Release Checklist", "description": "Complete the final release checklist", "priority": "Low", "detailedStatus": "Done", "simpleStatus": "Done", "dueDate": "2024-05-12", "progress": 100 }
]
// Defines the MongoDB shape and validation rules for a TaskFlow task.
const mongoose = require('mongoose');

const taskSchema = new mongoose.Schema(
  {
    name: { type: String, required: true, trim: true },
    description: { type: String, default: '', trim: true },
    priority: { type: String, enum: ['High', 'Medium', 'Low'], required: true },
    detailedStatus: {
      type: String,
      enum: ['To Do', 'In Progress', 'Review', 'Done'],
      required: true,
    },
    simpleStatus: { type: String, enum: ['Pending', 'Done'], required: true },
    dueDate: { type: Date, required: true },
    progress: { type: Number, min: 0, max: 100, required: true },
  },
  { timestamps: true }
);

module.exports = mongoose.model('Task', taskSchema);
← Back to timeline