Skip to content

reZerOR/Library-Management-System-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Library Management System API

Description

A comprehensive backend API for managing library operations including book management, member management, and borrowing services. Built with Node.js, Express.js, TypeScript, and Prisma ORM, this system provides a robust solution for libraries to digitize their operations.

Live URL

live server

Technology Stack & Packages

Core Technologies

  • Node.js
  • Express.js
  • TypeScript
  • PostgreSQL
  • Prisma ORM

Dependencies

{
  "dependencies": {
    "@prisma/client": "^5.22.0",
    "cors": "^2.8.5",
    "express": "^4.21.1"
  }
}

Dev Dependencies

{
  "devDependencies": {
    "@types/cors": "^2.8.17",
    "@types/express": "^5.0.0",
    "@types/node": "^22.9.0",
    "prisma": "^5.22.0",
    "tsx": "^4.19.2",
    "typescript": "^5.6.3"
  }
}

Setup Instructions

  1. Clone the repository

    git clone <repository-url>
    cd <repository>
  2. Install dependencies

    npm install
  3. Environment Setup Create a .env file in the root directory and add the following:

    DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE"
    DIRECT_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE"
  4. Database Setup

    npx prisma migrate dev
  5. Run the Application

    • For development:
      npm run dev
    • For production:
      npm run build
      npm start

Key Features & Functionality

1. Book Management

  • Create, Read, Update, and Delete books
  • Track total and available copies
  • Manage book metadata (title, genre, published year)

2. Member Management

  • Register new library members
  • Update member information
  • Track membership details
  • Remove members from the system

3. Borrowing System

  • Borrow books with automatic availability tracking
  • Return books with date tracking
  • View overdue books
  • 14-day borrowing period

API Documentation

Book Endpoints

1. Create Book

POST /api/books

Request Body:

{
  "title": "To Kill a Mockingbird",
  "genre": "Fiction",
  "publishedYear": 1960,
  "totalCopies": 10,
  "availableCopies": 10
}

Response (201):

{
  "success": true,
  "status": 201,
  "message": "Book created successfully",
  "data": {
    "bookId": "a24df67b-1234-5678-9101-b2a3c5d7f9b1",
    "title": "To Kill a Mockingbird",
    "genre": "Fiction",
    "publishedYear": 1960,
    "totalCopies": 10,
    "availableCopies": 10
  }
}

2. Get All Books

GET /api/books

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Books retrieved successfully",
  "data": [
    {
      "bookId": "a24df67b-1234-5678-9101-b2a3c5d7f9b1",
      "title": "To Kill a Mockingbird",
      "genre": "Fiction",
      "publishedYear": 1960,
      "totalCopies": 10,
      "availableCopies": 10
    }
  ]
}

3. Get Book by ID

GET /api/books/:bookId

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Book retrieved successfully",
  "data": {
    "bookId": "a24df67b-1234-5678-9101-b2a3c5d7f9b1",
    "title": "To Kill a Mockingbird",
    "genre": "Fiction",
    "publishedYear": 1960,
    "totalCopies": 10,
    "availableCopies": 10
  }
}

4. Update Book

PUT /api/books/:bookId

Request Body:

{
  "title": "To Kill a Mockingbird - Revised",
  "genre": "Classic Fiction",
  "publishedYear": 1961,
  "totalCopies": 12,
  "availableCopies": 8
}

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Book updated successfully",
  "data": {
    "bookId": "a24df67b-1234-5678-9101-b2a3c5d7f9b1",
    "title": "To Kill a Mockingbird - Revised",
    "genre": "Classic Fiction",
    "publishedYear": 1961,
    "totalCopies": 12,
    "availableCopies": 8
  }
}

5. Delete Book

DELETE /api/books/:bookId

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Book successfully deleted"
}

Member Endpoints

1. Create Member

POST /api/members

Request Body:

{
  "name": "Alice Johnson",
  "email": "alice@example.com",
  "phone": "123-456-7890",
  "membershipDate": "2024-01-01T00:00:00.000Z"
}

Response (201):

{
  "success": true,
  "status": 201,
  "message": "Member created successfully",
  "data": {
    "memberId": "8765-4321-1098",
    "name": "Alice Johnson",
    "email": "alice@example.com",
    "phone": "123-456-7890",
    "membershipDate": "2024-01-01T00:00:00.000Z"
  }
}

2. Get All Members

GET /api/members

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Members retrieved successfully",
  "data": [
    {
      "memberId": "8765-4321-1098",
      "name": "Alice Johnson",
      "email": "alice@example.com",
      "phone": "123-456-7890",
      "membershipDate": "2024-01-01T00:00:00.000Z"
    }
  ]
}

3. Get Member by ID

GET /api/members/:memberId

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Member retrieved successfully",
  "data": {
    "memberId": "8765-4321-1098",
    "name": "Alice Johnson",
    "email": "alice@example.com",
    "phone": "123-456-7890",
    "membershipDate": "2024-01-01T00:00:00.000Z"
  }
}

4. Update Member

PUT /api/members/:memberId

Request Body:

{
  "name": "Alice Johnson",
  "email": "alice.johnson@example.com",
  "phone": "098-765-4321"
}

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Member updated successfully",
  "data": {
    "memberId": "8765-4321-1098",
    "name": "Alice Johnson",
    "email": "alice.johnson@example.com",
    "phone": "098-765-4321"
  }
}

5. Delete Member

DELETE /api/members/:memberId

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Member successfully deleted"
}

Borrow & Return Endpoints

1. Borrow Book

POST /api/borrow

Request Body:

{
  "bookId": "a24df67b-1234-5678-9101-b2a3c5d7f9b1",
  "memberId": "a24df67b-1234-5678-9101-b2a3c5d7f098"
}

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Book borrowed successfully",
  "data": {
    "borrowId": "a24df67b-1234-5678-9101-b2a3c5d7f",
    "bookId": "a24df67b-1234-5678-9101-b2a3c5d7f9b1",
    "memberId": "8765-4321-1098",
    "borrowDate": "2024-09-01T10:00:00.000Z"
  }
}

2. Return Book

POST /api/return

Request Body:

{
  "borrowId": "a24df67b-1234-5678-9101-b2a3c5d7f"
}

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Book returned successfully"
}

3. Get Overdue Books

GET /api/borrow/overdue

Response (200):

{
  "success": true,
  "status": 200,
  "message": "Overdue borrow list fetched",
  "data": [
    {
      "borrowId": "b1234",
      "bookTitle": "To Kill a Mockingbird",
      "borrowerName": "John Doe",
      "overdueDays": 5
    }
  ]
}

Error Responses

All endpoints may return error responses in the following format:

{
  "success": false,
  "status": 400,
  "message": "Error message description"
}

Common status codes:

  • 400: Bad Request
  • 404: Not Found
  • 500: Internal Server Error

Known Issues/Bugs

  1. Email Validation

    • The system currently lacks email validation for member registration
    • Future updates will implement proper email format validation
  2. Book Availability Tracking

    • The availableCopies count is not automatically decremented when books are borrowed
    • Manual update of available copies is required