Skip to content

Dareean/assignment-management

Repository files navigation

📚 Assignment Management API

A robust and scalable RESTful API for managing assignments, built with AdonisJS and MongoDB. This application provides full CRUD operations with secure token-based authentication.

🚀 Features

  • 🔐 Authentication System - User registration and login with token-based auth
  • 📝 CRUD Operations - Full Create, Read, Update, Delete for assignments
  • 🛡️ Security - Password hashing and token-based authorization
  • 📊 MongoDB Integration - Cloud database with MongoDB Atlas
  • 🎯 RESTful Design - Clean and predictable API endpoints

🛠️ Tech Stack

  • Framework: AdonisJS 5 (Node.js TypeScript Framework)
  • Database: MongoDB Atlas
  • Authentication: Custom Token-based
  • Language: TypeScript
  • Environment Variables: Env configuration

📁 Project Structure

assignment-management/ . ├── assignment-management/ ├── ├── app/ ├── │ ├── Controllers/ ├── │ │ └── Http/ ├── │ │ ├── AuthController.ts ├── │ │ └── AssignmentsController.ts ├── │ ├── Models/ ├── │ │ ├── Assignment.ts ├── │ │ └── User.ts ├── │ └── Services/ ├── │ └── MongoDBService.ts ├── ├── start/ ├── │ ├── routes.ts ├── │ ├── kernel.ts ├── │ ├── app.ts ├── │ └── env.ts ├── ├── config/ ├── │ ├── app.ts ├── │ ├── auth.ts ├── │ ├── bodyparser.ts ├── │ └── cors.ts ├── ├── bin/ ├── │ └── server.ts ├── ├── tests/ ├── ├── .env ├── ├── .env.example ├── ├── .gitignore ├── ├── package.json ├── ├── package-lock.json ├── ├── adonisrc.ts ├── ├── tsconfig.json └── └── README.md

text

⚡ Quick Start

Prerequisites

  • Node.js 18 or higher
  • MongoDB Atlas account
  • npm or yarn

Installation

  1. Clone the repository
    git clone https://github.com/your-username/assignment-management.git
    cd assignment-management

Install dependencies

bash npm install Environment Configuration Create .env file:

env NODE_ENV=development PORT=3333 APP_KEY=your-app-key-here HOST=localhost LOG_LEVEL=info MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/database Generate App Key

bash node ace generate:key Start the development server

bash node ace serve --watch Server will run at: http://localhost:3333

📚 API Documentation

Authentication Endpoints Register User http POST /register Content-Type: application/json

{ "email": "user@example.com", "password": "password123" } Login User http POST /login Content-Type: application/json

{ "email": "user@example.com", "password": "password123" } Response includes authentication token for subsequent requests.

Assignment Endpoints All assignment endpoints require Bearer Token authentication.

Get All Assignments http GET /assignments Authorization: Bearer your_token_here Get Assignment by ID http GET /assignments/:id Authorization: Bearer your_token_here Create Assignment http POST /assignments Authorization: Bearer your_token_here Content-Type: application/json

{ "title": "Assignment Title", "description": "Assignment description", "dueDate": "2024-12-31T23:59:59.000Z" } Update Assignment http PUT /assignments/:id Authorization: Bearer your_token_here Content-Type: application/json

{ "title": "Updated Title", "isCompleted": true } Delete Assignment http DELETE /assignments/:id Authorization: Bearer your_token_here

🔐 Authentication Flow

Register a new user at /register

Login with credentials at /login to receive token

Use the token in Authorization header for all assignment requests

Token format: Bearer token_randomstring_userid

🗃️ Database Models

User Model typescript { _id: ObjectId, email: string, password: string (hashed), createdAt: Date, updatedAt: Date } Assignment Model typescript { _id: ObjectId, title: string, description: string, dueDate: Date, isCompleted: boolean, userId: string, createdAt: Date, updatedAt: Date }

🧪 Testing the API

Use tools like:

Thunder Client (VS Code extension)

Postman

cURL

Example testing flow:

bash

1. Register user

curl -X POST http://localhost:3333/register
-H "Content-Type: application/json"
-d '{"email":"test@example.com","password":"password123"}'

2. Login and get token

curl -X POST http://localhost:3333/login
-H "Content-Type: application/json"
-d '{"email":"test@example.com","password":"password123"}'

3. Use token for assignments

curl -X GET http://localhost:3333/assignments
-H "Authorization: Bearer your_token_here"

🚀 Deployment

Build for Production bash node ace build Start Production Server bash node build/bin/server.js

🤝 Contributing

Fork the project

Create your feature branch (git checkout -b feature/AmazingFeature)

Commit your changes (git commit -m 'Add some AmazingFeature')

Push to the branch (git push origin feature/AmazingFeature)

Open a Pull Request

📝 License

This project is licensed under the MIT License.

👨‍💻 Author

Dareean A. Raffi

GitHub: @dareean

🙏 Acknowledgments AdonisJS team for the excellent framework

MongoDB for the cloud database service

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published