Maktaba is a comprehensive library management system designed for Rwandan high schools. It streamlines the management of books, members, and borrowing history, offering robust features for efficient library operations.
# Maktaba - Library Management System
Maktaba is a library management system designed to streamline the management of library resources, including books, members, and borrowing history, specifically tailored for Rwandan high schools.
## Features
- Member management (students and staff)
- Book management (adding, updating, categorizing)
- Borrowing and returning books
- Viewing borrowing history
- Authentication and access control for librarians
## Technologies Used
- Node.js
- Express.js
- MongoDB
- Mongoose
- JWT for authentication
## Getting Started
### Prerequisites
- Node.js and npm installed
- MongoDB installed and running
### Installation
1. Clone the repository:
```bash
git clone
github.com
cd maktaba
```
2. Install dependencies:
```bash
npm install
```
3. Create a `.env` file in the root directory and add the following:
```env
MONGO_URI=mongodb://localhost:27017/maktaba
JWT_SECRET=your_jwt_secret_key
PORT=5000
```
4. Start the server:
```bash
npm start
```
The server should now be running on `
localhost`.
## API Endpoints
### Authentication
- **POST /api/auth/register**: Register a new librarian
- **POST /api/auth/login**: Librarian login
- **POST /api/auth/logout**: Librarian logout
### Members
- **GET /api/members**: List all members
- **GET /api/members/{member_id}**: Get details of a specific member
- **POST /api/members**: Add a new member
- **PUT /api/members/{member_id}**: Update member information
- **DELETE /api/members/{member_id}**: Remove a member
### Books
- **GET /api/books**: List all books
- **GET /api/books/{book_id}**: Get details of a specific book
- **POST /api/books**: Add a new book
- **PUT /api/books/{book_id}**: Update book information
- **DELETE /api/books/{book_id}**: Remove a book
### Categories
- **GET /api/categories**: List all categories
- **GET /api/categories/{category_id}**: Get details of a specific category
- **POST /api/categories**: Add a new category
- * …