diff --git a/api-docs/members-api.md b/api-docs/members-api.md new file mode 100644 index 0000000..aea3fe0 --- /dev/null +++ b/api-docs/members-api.md @@ -0,0 +1,306 @@ +# Library Management System API Documentation + + +### Base URL + +``` +http://localhost:8080/api +``` + +# Members API Endpoints + +### Overview + +The Members API provides endpoints to manage library members. This includes functionalities to retrieve, add, update, and delete members. The API supports pagination, sorting, and detailed member information. + + +### 1. **Get All Members** + +**Endpoint:** `/members` +**Method:** `GET` +**Description:** Retrieves a paginated, sorted list of all members in the library. + +**Query Parameters:** + +- `page` (Integer) : The page number of the result set (starting from 0). Default is `0`. +- `size` (Integer) : The number of members per page. Default is `5`. +- `sortBy` (String) : The field by which to sort the results (e.g., `name`, `memberId`, `email`). Default is `name`. +- `sortDir` (String) : The direction of sorting, either `asc` (ascending) or `desc` (descending). Default is `asc`. + +**Example Requests:** + +1. **Basic Request:** + ``` + GET /members + ``` + Retrieves the first 5 members sorted by `name` in ascending order. + +2. **Pagination:** + + Pagination allows the API to split the data into multiple pages. Use `page` to +specify the page number (starting from 0), and `size` to define how many items are returned per page. + + **Example:** + ``` + GET /members?page=0&size=7 + ``` + Retrieves the first 7 members (on the first page). + ``` + GET /members?page=1&size=7 + ``` + Retrieves the next 7 members (on the second page). + +3. **Sorting:** + + ``` + GET /members?sortBy=memberId&sortDir=desc + ``` + Retrieves members sorted by `memberId` in descending order. + + ``` + GET /members?sortBy=email&sortDir=asc + ``` + + Retrieves members sorted by the `email` field in ascending order. + + **Supported Values for sortBy Query Parameter:** + + | **Value** | **Description** | + |--------------------------|----------------------------------------------------------- | + | `memberId` | Unique identifier for a member | + | `name` | Member's name | + | `email` | Member's email | + | `membershipDate` | The date the member joined | + | `role` | Role of the member (ADMIN, USER, LIBRARIAN) | + +4. **Pagination + Sorting:** + + ``` + GET /members?page=0&size=5&sortBy=membershipDate&sortDir=asc + ``` + Retrieves the first page with 5 members, sorted by `membershipDate` in ascending order. + +**Success Response:** +- **Code:** `200 OK` +- **Content:** + ```json + { + "content": [ + { + "memberId": 1, + "name": "John Doe", + "email": "johndoe@example.com", + "password": "jack@11", + "role": "USER", + "membershipDate": "2025-10-04T00:00:00.000+00:00" + } + ], + "pageable": { + "pageNumber": 0, + "pageSize": 1, + "sort": { + "empty": false, + "sorted": true, + "unsorted": false + }, + "offset": 0, + "paged": true, + "unpaged": false + }, + "last": true, + "totalPages": 1, + "totalElements": 1, + "size": 1, + "number": 0, + "sort": { + "empty": false, + "sorted": true, + "unsorted": false + }, + "numberOfElements": 1, + "first": true, + "empty": false + } + ``` + +**Error Responses:** +- **Code:** `400 BAD REQUEST` +- **Message:** `The specified 'sortBy' value is invalid.` +- **Content:** + ```json + { + "timestamp": "2024-10-04T10:00:00Z", + "message": "The specified 'sortBy' value is invalid.", + "details": "/api/members" + } + ``` + +
+ +--- + +
+ +### 2. **Get Member by ID** + +**Endpoint:** `/members/{id}` +**Method:** `GET` +**Description:** Retrieves the details of a member by their ID. + +**Path Parameters:** +- `id` (Integer) : The unique identifier of the member. + +**Success Response:** +- **Code:** `200 OK` +- **Content:** + ```json + { + "memberId": 1, + "name": "John Doe", + "email": "johndoe@example.com", + "password": "jack@11", + "role": "USER", + "membershipDate": "2025-10-04T00:00:00.000+00:00" + } + ``` + +**Error Responses:** +- **Code:** `404 NOT FOUND` +- **Message:** `Member not found` +- **Content:** + ```json + { + "timestamp": "2024-10-04T12:51:41.374+00:00", + "message": "Member not found", + "details": "/api/members/{id}" + } + ``` + +
+ +--- + +
+ +### 3. **Add a New Member** + +**Endpoint:** `/members` +**Method:** `POST` +**Description:** Adds a new member to the library. + +**Request Body:** +```json +{ + "name": "John Doe", + "email": "johndoe@example.com", + "password": "jack@11", + "role": "USER", + "membershipDate": "2025-10-04" +} +``` + +**Success Response:** +- **Code:** `201 CREATED` +- **Content:** + ```json + { + "memberId": 1, + "name": "John Doe", + "email": "johndoe@example.com", + "password": "jack@11", + "role": "USER", + "membershipDate": "2025-10-04T00:00:00.000+00:00" + } + ``` + +**Error Responses:** +- None + +
+ +--- + +
+ +### 4. **Update Member Details** + +**Endpoint:** `/members/{id}` +**Method:** `PUT` +**Description:** Updates the details of an existing member by their ID. + +**Path Parameters:** +- `id` (Integer) : The unique identifier of the member. + +**Request Body:** +```json +{ + "name": "Updated Name", + "email": "updatedemail@example.com", + "password": "Updated Password", + "role": "Updated Role", + "membershipDate": "2025-10-04" +} +``` + +**Success Response:** +- **Code:** `200 OK` +- **Content:** + ```json + { + "memberId": 1, + "name": "Updated Name", + "email": "updatedemail@example.com", + "password": "Updated Password", + "role": "Updated Role", + "membershipDate": "2025-10-04T00:00:00.000+00:00" + } + ``` + +**Error Responses:** +- **Code:** `404 NOT FOUND` +- **Message:** `Member not found` +- **Content:** + ```json + { + "timestamp": "2024-10-04T10:00:00Z", + "message": "Member not found", + "details": "/api/members/{id}" + } + ``` + +
+ +--- + +
+ +### 5. **Delete Member** + +**Endpoint:** `/members/{id}` +**Method:** `DELETE` +**Description:** Deletes a member from the library by their ID. + +**Path Parameters:** +- `id` (Integer) : The unique identifier of the member. + +**Success Response:** +- **Code:** `204 NO CONTENT` + +**Error Responses:** +- **Code:** `404 NOT FOUND` +- **Message:** `Member not found` +- **Content:** + ```json + { + "timestamp": "2024-10-04T10:00:00Z", + "message": "Member not found", + "details": "/api/members/{id}" + } + ``` + + +
+
+
+
+