{"id":28259784,"url":"https://github.com/likhithkp/melodify","last_synced_at":"2026-04-08T18:31:16.271Z","repository":{"id":268398903,"uuid":"904227160","full_name":"likhithkp/Melodify","owner":"likhithkp","description":"RESTful Music Library Management API that allows users within an organization to manage their collection of Artists, Tracks, and Albums. Each organization has a single Admin who oversees the system and its users. The API also provides functionality for users to mark their favorite Artists, Albums, and Tracks for quick access and personalization","archived":false,"fork":false,"pushed_at":"2024-12-20T12:11:21.000Z","size":136,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-07T14:00:46.001Z","etag":null,"topics":["api-rest","authentication","authorization","express","javascript","jwt","music-api","nodejs","postgresql","rbac","rbac-authorization","rbac-configuration","rbac-management","render","rest-api","rest-client","restful","restful-api","role-based-access-control","supabase"],"latest_commit_sha":null,"homepage":"https://enhanced-music-library-management-api-z77c.onrender.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/likhithkp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-12-16T13:40:52.000Z","updated_at":"2025-05-14T04:39:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"4a6a7d61-1dc8-4240-b438-fd277572348d","html_url":"https://github.com/likhithkp/Melodify","commit_stats":null,"previous_names":["likhithkp/enhanced-music-library-management-api","likhithkp/melodify"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/likhithkp/Melodify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/likhithkp%2FMelodify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/likhithkp%2FMelodify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/likhithkp%2FMelodify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/likhithkp%2FMelodify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/likhithkp","download_url":"https://codeload.github.com/likhithkp/Melodify/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/likhithkp%2FMelodify/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31568577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","authentication","authorization","express","javascript","jwt","music-api","nodejs","postgresql","rbac","rbac-authorization","rbac-configuration","rbac-management","render","rest-api","rest-client","restful","restful-api","role-based-access-control","supabase"],"created_at":"2025-05-20T03:12:54.320Z","updated_at":"2026-04-08T18:31:16.259Z","avatar_url":"https://github.com/likhithkp.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Enhanced Music Library Management API\n\n## Overview\n\n**Music Library Management API** that allows users within an organization to manage their collection of **Artists**, **Tracks**, and **Albums**. Each organization has a single Admin who oversees the system and its users. The API also provides functionality for users to mark their favorite Artists, Albums, and Tracks for quick access and personalization.\n\n\u003e ### Key Points:\n\u003e\n\u003e - **One Organization, One Admin**: Each organization has a single Admin with full control over the system.\n\u003e - **Role-Based Access Control**: Users have distinct roles (Admin, Editor, Viewer), with permissions tailored to their responsibilities.\n\u003e - **Entity Relationships**: Albums belong to Artists, and Tracks are associated with Albums and Artists.\n\u003e - **Favorites**: Users can personalize their experience by marking items as favorites for easy retrieval.\n\n## Features\n\n### Authentication and Authorization\n\n- Implement **authentication** and **role-based access control** using a method of your choice.\n- **Roles**:\n  - **Admin**: Full CRUD operations on all entities, including user management.\n  - **Editor**: Can edit and delete Artists, Albums, Tracks, and their own details (e.g., updating their password).\n  - **Viewer**: Read-only access to all entities.\n- The first user registered in the system automatically becomes an **Admin**.\n\n### Entity Management\n\n1. **Users**:  \n   Admins can manage users by adding, deleting, and updating their roles (except for other Admins).\n2. **Artists, Albums, Tracks**:  \n   Full CRUD operations based on role permissions.\n3. **Favorites**:  \n   Users can add or remove their favorite Artists, Albums, and Tracks.\n\n## Database Schema\n\n### 1. User Table\n\n| Column Name | Type    | Description                     |\n| ----------- | ------- | ------------------------------- |\n| `user_id`   | UUID    | Unique identifier for the user. |\n| `email`     | VARCHAR | User's email address.           |\n| `password`  | VARCHAR | Encrypted password.             |\n| `role`      | ENUM    | Role (Admin, Editor, Viewer).   |\n\n### 2. Artist Table\n\n| Column Name | Type    | Description                       |\n| ----------- | ------- | --------------------------------- |\n| `artist_id` | UUID    | Unique identifier for the artist. |\n| `name`      | VARCHAR | Name of the artist.               |\n| `grammy`    | BOOLEAN | Indicates Grammy award status.    |\n| `hidden`    | BOOLEAN | Visibility toggle.                |\n\n### 3. Album Table\n\n| Column Name | Type    | Description                      |\n| ----------- | ------- | -------------------------------- |\n| `album_id`  | UUID    | Unique identifier for the album. |\n| `artist_id`  | UUID    | Unique identifier for the album. |\n| `name`      | VARCHAR | Album name.                      |\n| `year`      | INTEGER | Release year.                    |\n| `hidden`    | BOOLEAN | Visibility toggle.               |\n\n### 4. Track Table\n\n| Column Name | Type    | Description                      |\n| ----------- | ------- | -------------------------------- |\n| `track_id`  | UUID    | Unique identifier for the track. |\n| `album_id`  | UUID    | Unique identifier for the album. |\n| `name`      | VARCHAR | Track name.                      |\n| `duration`  | INTEGER | Track duration in seconds.       |\n| `hidden`    | BOOLEAN | Visibility toggle.               |\n| `artist_id` | UUID    | Unique identifier for the artist. |\n\n### 5. Favorites Table\n\n| Column Name   | Type | Description                       |\n| ------------- | ---- | --------------------------------- |\n| `favorite_id` | UUID | Reference to the favorite entity. |\n| `category`    |string| artist, album or track.           |\n| `item_id`     | UUID | Reference to the item.            |\n| `user_id`     | UUID | Reference to the user.            |\n\n## Quick Summary of Endpoints:\n\n### Response Format\n\n- All responses are in **JSON format**.\n\n### Status Codes\n\nBelow is a brief summary of all the endpoints and their key response codes:\n\n0. [**GET https://enhanced-music-library-management-api-z77c.onrender.com/Logout**](#0-get-logout---logout-a-user): 200, 400\n1. [**POST https://enhanced-music-library-management-api-z77c.onrender.com/signup**](#1-post-signup---register-a-new-user): 201, 400, 409\n2. [**POST https://enhanced-music-library-management-api-z77c.onrender.com/login**](#2-post-login---login-a-user): 200, 400, 404\n3. [**GET https://enhanced-music-library-management-api-z77c.onrender.com/users**](#3-get-users---retrieve-all-users): 200, 400, 401\n4. [**POST https://enhanced-music-library-management-api-z77c.onrender.com/users/add-user**](#4-post-usersadd-user---create-a-new-user): 201, 400, 401, 403, 409\n5. [**DELETE https://enhanced-music-library-management-api-z77c.onrender.com/users/:id**](#5-delete-usersid---delete-a-user): 200, 400, 401, 403, 404\n6. [**PUT https://enhanced-music-library-management-api-z77c.onrender.com/users/update-password**](#6-put-usersupdate-password---update-user-password): 204, 400, 401, 403, 404\n7. [**GET https://enhanced-music-library-management-api-z77c.onrender.com/artists**](#7-get-artists---retrieve-all-artists): 200, 400, 401\n8. [**GET https://enhanced-music-library-management-api-z77c.onrender.com/artists/:id**](#8-get-artistsid---retrieve-an-artist): 200, 401, 403, 404\n9. [**POST https://enhanced-music-library-management-api-z77c.onrender.com/artists/add-artist**](#9-post-artistsadd-artist---create-a-new-artist): 201, 400, 401\n10. [**PUT https://enhanced-music-library-management-api-z77c.onrender.com/artists/:id**](#10-put-artistsid---update-an-artist): 204, 400, 401, 403, 404\n11. [**DELETE https://enhanced-music-library-management-api-z77c.onrender.com/artists/:id**](#11-delete-artistsid---delete-an-artist): 200, 400, 401, 403, 404\n12. [**GET https://enhanced-music-library-management-api-z77c.onrender.com/albums**](#12-get-albums---retrieve-all-albums): 200, 400, 401, 403, 404\n13. [**GET https://enhanced-music-library-management-api-z77c.onrender.com/albums/:id**](#13-get-albumsid---retrieve-an-album): 200, 401, 403, 404\n14. [**POST https://enhanced-music-library-management-api-z77c.onrender.com/albums/add-album**](#14-post-albumsadd-album---create-a-new-album): 201, 400, 401, 403, 400\n15. [**PUT https://enhanced-music-library-management-api-z77c.onrender.com/albums/:id**](#15-put-albumsid---update-an-album): 204, 400, 401, 403, 404\n16. [**DELETE https://enhanced-music-library-management-api-z77c.onrender.com/albums/:id**](#16-delete-albumsid---delete-an-album): 200, 400, 401, 403, 404\n17. [**GET https://enhanced-music-library-management-api-z77c.onrender.com/tracks**](#17-get-tracks---retrieve-all-tracks): 200, 400, 401, 403, 404\n18. [**GET https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:id**](#18-get-tracksid---retrieve-a-track): 200, 400, 401, 403, 404\n19. [**POST https://enhanced-music-library-management-api-z77c.onrender.com/tracks/add-track**](#19-post-tracksadd-track---create-a-new-track): 201, 400, 401, 403, 404\n20. [**PUT https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:id**](#20-put-tracksid---update-a-track): 204, 400, 401, 403, 404\n21. [**DELETE https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:id**](#21-delete-tracksid---delete-a-track): 200, 400, 401, 403, 404\n22. [**GET https://enhanced-music-library-management-api-z77c.onrender.com/favorites/:category**](#22-get-favoritescategory---retrieve-favorites): 200, 400, 401, 403\n23. [**POST https://enhanced-music-library-management-api-z77c.onrender.com/favorites/add-favorite**](#23-post-favoritesadd-favorite---add-a-favorite): 201, 400, 401, 403, 404\n24. [**DELETE https://enhanced-music-library-management-api-z77c.onrender.com/favorites/remove-favorite/:id**](#24-delete-favoritesremove-favoriteid---remove-a-favorite): 200, 400, 401, 403, 404\n\n## Endpoints\n\n#### Base URL: `your-hosted-url/api/v1`\n\n### 0. GET /logout - Logout a user\n\n- **Description**: This endpoint is used to logout a user from the system.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/logout\n```\n\n#### Responses:\n\n- **a. 200 - User Logged Out Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": null,\n  \"message\": \"User logged out successfully.\",\n  \"error\": null\n}\n```\n\n- **b. 400 - Bad Request**\n\n```json\n{\n  \"status\": 400,\n  \"data\": null,\n  \"message\": \"Bad Request\",\n  \"error\": null\n}\n```\n\n### 1. POST /signup - Register a new user\n\n- **Description**: This endpoint is used to register a new user in the system.\n\n#### Request Endpoint:\n\n```http\nPOST https://enhanced-music-library-management-api-z77c.onrender.com/signup\n```\n\n#### Request Body:\n\n```json\n{\n  \"email\": \"admin@example.com\",\n  \"password\": \"password\"\n}\n```\n\n#### Responses:\n\n- **a. 201 - User Created Successfully**\n\n  ```json\n  {\n    \"status\": 201,\n    \"data\": null,\n    \"message\": \"User created successfully.\",\n    \"error\": null\n  }\n  ```\n\n- **b. 400 - Bad Request**\n\n  ```json\n  {\n    \"status\": 400,\n    \"data\": null,\n    \"message\": \"Bad Request, Reason:${Missing Field}\",\n    \"error\": null\n  }\n  ```\n\n- **c. 409 - Email Already Exists**\n\n  ```json\n  {\n    \"status\": 409,\n    \"data\": null,\n    \"message\": \"Email already exists.\",\n    \"error\": null\n  }\n  ```\n\n### 2. POST /login - Login a user\n\n- **Description**: This endpoint is used to login a user in the system.\n\n#### Request Endpoint:\n\n```http\nPOST https://enhanced-music-library-management-api-z77c.onrender.com/login\n```\n\n#### Request Body:\n\n```json\n{\n  \"email\": \"admin@example.com\",\n  \"password\": \"securePassword123\"\n}\n```\n\n#### Responses:\n\n- **a. 200 - User Logged In Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": {\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n  },\n  \"message\": \"Login successful.\",\n  \"error\": null\n}\n```\n\n- **b. 400 - Bad Request**\n\n```json\n{\n  \"status\": 400,\n  \"data\": null,\n  \"message\": \"Bad Request, Reason:${Missing Field}\",\n  \"error\": null\n}\n```\n\n- **c. 404 - User Not Found**\n\n```json\n{\n  \"status\": 404,\n  \"data\": null,\n  \"message\": \"User not found.\",\n  \"error\": null\n}\n```\n\n### 3. GET /users - Retrieve All Users\n\n- **Description**: Retrieve a list of all users under the same Admin. This endpoint can only be accessed by the Admin user. Pagination is supported using `limit` and `offset`.\n\n#### Query Parameters:\n\n- `limit` (optional): Number of records to fetch. Default is 5.\n- `offset` (optional): Number of records to skip. Default is 0.\n- `role` (optional): Filter users by role (`Editor` or `Viewer`).\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/users?limit=5\u0026offset=0\u0026role=Editor\n```\n\nor\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/users\n```\n\n#### Responses:\n\n- **a. 200 - Users Fetched Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": [\n    {\n      \"user_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n      \"email\": \"editor1@example.com\",\n      \"role\": \"editor\",\n      \"created_at\": \"2024-12-03T10:00:00Z\"\n    },\n    ...4 more\n  ],\n  \"message\": \"Users retrieved successfully.\",\n  \"error\": null\n}\n```\n\n- **b. 400 - Bad Request**\n\n```json\n{\n  \"status\": 400,\n  \"data\": null,\n  \"message\": \"Bad Request\",\n  \"error\": null\n}\n```\n\n- **c. 401 - Unauthorized Access**\n\n```json\n{\n  \"status\": 401,\n  \"data\": null,\n  \"message\": \"Unauthorized Access\",\n  \"error\": null\n}\n```\n\n### 4. POST /users/add-user - Add a new user\n\n- **Description**: Only the Admin can create new users by providing their email, password, and role. The role cannot be \"admin\" when creating a new user, and users can only create other users with the \"editor\" or \"viewer\" roles.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nPOST https://enhanced-music-library-management-api-z77c.onrender.com/users/add-user\n```\n\n#### Request Body:\n\n```json\n{\n  \"status\": 409,\n  \"data\": null,\n  \"message\": null,\n  \"error\": \"Email already exists.\"\n}\n```\n\n#### Responses:\n\n- **a. 201 - User Created Successfully**\n\n```json\n{\n  \"status\": 201,\n  \"data\": null,\n  \"message\": \"User created successfully.\",\n  \"error\": null\n}\n```\n\n- **b. 400 - Bad Request**\n\n```json\n{\n  \"status\": 400,\n  \"data\": null,\n  \"message\": \"Bad Request\",\n  \"error\": null\n}\n```\n\n- **c. 401 - Unauthorized Access**\n\n```json\n{\n  \"status\": 401,\n  \"data\": null,\n  \"message\": \"Unauthorized Access\",\n  \"error\": null\n}\n```\n\n- **d. 403 - Forbidden Access**\n\n```json\n{\n  \"status\": 403,\n  \"data\": null,\n  \"message\": \"Forbidden Access/Operation not allowed.\",\n  \"error\": null\n}\n```\n\n- **e. 409 - Email Already Exists**\n\n```json\n{\n  \"status\": 409,\n  \"data\": null,\n  \"message\": \"Email already exists.\",\n  \"error\": null\n}\n```\n\n### 5. DELETE /users/:id - Delete a user\n\n- **Description**: Only the Admin can delete a user by providing their user ID.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nDELETE https://enhanced-music-library-management-api-z77c.onrender.com/users/:user_id\n```\n\nor\n\n```http\nDELETE https://enhanced-music-library-management-api-z77c.onrender.com/users/123e4567-e89b-12d3-a456-426614174000\n```\n\n#### Responses:\n\n- **a. 200 - User Deleted Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": null,\n  \"message\": \"User deleted successfully.\",\n  \"error\": null\n}\n```\n\n```json\n{\n  \"status\": 404,\n  \"data\": null,\n  \"message\": \"User not found.\",\n  \"error\": null\n}\n```\n\n### 6. PUT /users/update-password - Update user password\n\n- **Description**: The user of any role can update their password by providing the old password and a new password.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nPUT https://enhanced-music-library-management-api-z77c.onrender.com/users/update-password\n```\n\n#### Request Body:\n\n```json\n{\n  \"old_password\": \"oldPassword\",\n  \"new_password\": \"newPassword\"\n}\n```\n\n#### Responses:\n\n- **a. 204 - Password Updated Successfully**\n\n```json\n// No response body\n```\n\nor\n\n```\n\u003cempty response\u003e\n```\n\n### 7. GET /artists - Retrieve All Artists\n\n- **Description**: Retrieve a list of all artists.\n\nYou can filter artists by Grammy status, visibility, and control the number of records returned using limit and offset.\n\n#### Query Parameters:\n\n- `limit` : Number of records to fetch. Default is 5.\n- `offset` : Number of records to skip. Default is 0.\n- `grammy` : Filter artists by number of Grammy awards artist has won(0 or 10).\n- `hidden` : Filter artists by visibility status(true or false).\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/artists?limit=5\u0026offset=0\u0026grammy=10\u0026hidden=false\n```\n\nor\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/artists\n```\n\n#### Responses:\n\n- **a. 200 - Artists Fetched Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": [\n    {\n      \"artist_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n      \"name\": \"Adele\",\n      \"grammy\": 5,\n      \"hidden\": false,\n    },\n    ...4 more\n  ],\n  \"message\": \"Artists retrieved successfully.\",\n  \"error\": null\n}\n```\n\n### 8. GET /artists/:id - Retrieve an Artist\n\n- **Description**: Retrieve a single artist by providing their artist ID.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/artists/:artist_id\n```\n\nor\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/artists/123e4567-e89b-12d3-a456-426614174000\n```\n\n#### Responses:\n\n- **a. 200 - Artist Fetched Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": {\n    \"artist_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n    \"name\": \"Adele\",\n    \"grammy\": 5,\n    \"hidden\": false\n  },\n  \"message\": \"Artist retrieved successfully.\",\n  \"error\": null\n}\n```\n\n### 9. POST /artists/add-artist - Add a new Artist\n\n- **Description**: Add a new artist to the system.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nPOST https://enhanced-music-library-management-api-z77c.onrender.com/artists/add-artist\n```\n\n#### Request Body:\n\n```json\n{\n  \"name\": \"Eminem\",\n  \"grammy\": 15,\n  \"hidden\": false\n}\n```\n\n#### Responses:\n\n- **a. 201 - Artist Created Successfully**\n\n```json\n{\n  \"status\": 201,\n  \"data\": null,\n  \"message\": \"Artist created successfully.\",\n  \"error\": null\n}\n```\n\n### 10. PUT /artists/:id - Update an Artist\n\n- **Description**: Update an artist by providing their artist ID, details such as name, Grammy status, and visibility(hidden).\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nPUT https://enhanced-music-library-management-api-z77c.onrender.com/artists/:artist_id\n```\n\nor\n\n```http\nPUT https://enhanced-music-library-management-api-z77c.onrender.com/artists/123e4567-e89b-12d3-a456-426614174000\n```\n\n#### Request Body:\n\n```json\n{\n  \"name\": \"Eminem\",\n  \"grammy\": 18,\n  \"hidden\": false\n}\n```\n\nor any of the fields you want to update.\n\n```json\n{\n  \"name\": \"Eminem (Slim Shady)\"\n}\n```\n\n### 11. DELETE /artists/:id - Delete an Artist\n\n- **Description**: Delete an artist by providing their artist ID.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nDELETE https://enhanced-music-library-management-api-z77c.onrender.com/artists/:artist_id\n```\n\n#### Responses:\n\n- **a. 200 - Artist Deleted Successfully**\n\n  ```json\n  {\n    \"status\": 200,\n    \"data\": {\n      \"artist_id\": \"123e4567-e89b-12d3-a456-426614174000\"\n    },\n    \"message\": \"Artist:${artist_name} deleted successfully.\",\n    \"error\": null\n  }\n  ```\n\n### 12. GET /albums - Retrieve All Albums\n\n- **Description**: Retrieve a list of all albums, can filter the albums by artist and visibility(hidden), and control the number of records returned using limit and offset.\n\n#### Query Parameters:\n\n- `limit` : Number of records to fetch. Default is 5.\n- `offset` : Number of records to skip. Default is 0.\n- `artist_id` : Filter albums by artist ID.\n- `hidden` : Filter albums by visibility status(true or false).\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/albums?limit=5\u0026offset=0\u0026artist_id=123e4567-e89b-12d3-a456-426614174000\u0026hidden=false\n```\n\nor\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/albums\n```\n\n#### Responses:\n\n- **a. 200 - Albums Fetched Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": [\n    {\n      \"album_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n      \"artist_name\": \"Eminem\",\n      \"name\": \"Recovery\",\n      \"year\": 2010,\n      \"hidden\": false,\n    },\n    ...4 more\n  ],\n  \"message\": \"Albums retrieved successfully.\",\n  \"error\": null\n}\n```\n\n### 13. GET /albums/:id - Retrieve an Album\n\n- **Description**: Retrieve a single album by providing its album ID.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/albums/:album_id\n```\n\nor\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/albums/123e4567-e89b-12d3-a456-426614174000\n```\n\n#### Responses:\n\n- **a. 200 - Album Fetched Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": {\n    \"album_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n    \"artist_name\": \"Eminem\",\n    \"name\": \"Recovery\",\n    \"year\": 2010,\n    \"hidden\": false\n  },\n  \"message\": \"Album retrieved successfully.\",\n  \"error\": null\n}\n```\n\n### 14. POST /albums/add-album - Add a new Album\n\n- **Description**: Add a new album to the system.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nPOST https://enhanced-music-library-management-api-z77c.onrender.com/albums/add-album\n```\n\n#### Request Body:\n\n```json\n{\n  \"artist_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n  \"name\": \"Marshall Mathers LP\",\n  \"year\": 2000,\n  \"hidden\": false\n}\n```\n\n#### Responses:\n\n- **a. 201 - Album Created Successfully**\n\n```json\n{\n  \"status\": 201,\n  \"data\": null,\n  \"message\": \"Album created successfully.\",\n  \"error\": null\n}\n```\n\n### 15. PUT /albums/:id - Update an Album\n\n- **Description**: Update an album by providing its album ID, details such as name, year, and visibility(hidden).\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nPUT https://enhanced-music-library-management-api-z77c.onrender.com/albums/:album_id\n```\n\nor\n\n```http\nPUT https://enhanced-music-library-management-api-z77c.onrender.com/albums/123e4567-e89b-12d3-a456-426614174000\n```\n\n#### Request Body:\n\n```json\n{\n  \"name\": \"Marshall Mathers LP 2\",\n  \"year\": 2013,\n  \"hidden\": false\n}\n```\n\nor any of the fields you want to update.\n\n```json\n{\n  \"name\": \"Marshall Mathers LP 2\"\n}\n```\n\n### 16. DELETE /albums/:id - Delete an Album\n\n- **Description**: Delete an album by providing its album ID.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\n\nDELETE https://enhanced-music-library-management-api-z77c.onrender.com/albums/:album_id\n```\n\nor\n\n```http\n\nDELETE https://enhanced-music-library-management-api-z77c.onrender.com/albums/123e4567-e89b-12d3-a456-426614174000\n```\n\n#### Responses:\n\n- **a. 200 - Album Deleted Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": null,\n  \"message\": \"Album:${album_name} deleted successfully.\",\n  \"error\": null\n}\n```\n\n### 17. GET /tracks - Retrieve All Tracks\n\n- **Description**: Retrieve a list of all tracks, can filter the tracks by artist, album, and visibility(hidden), and control the number of records returned using limit and offset.\n\n#### Query Parameters:\n\n- `limit` : Number of records to fetch. Default is 5.\n- `offset` : Number of records to skip. Default is 0.\n- `artist_id` : Filter tracks by artist ID.\n- `album_id` : Filter tracks by album ID.\n- `hidden` : Filter tracks by visibility status(true or false).\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/tracks?limit=5\u0026offset=0\u0026artist_id=123e4567-e89b-12d3-a456-426614174000\u0026album_id=123e4567-e89b-12d3-a456-426614174000\u0026hidden=false\n```\n\nor\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/tracks\n```\n\n#### Responses:\n\n- **a. 200 - Tracks Fetched Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": [\n    {\n      \"track_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n      \"artist_name\": \"Eminem\",\n      \"album_name\": \"Recovery\",\n      \"name\": \"Not Afraid\",\n      \"duration\": 263,\n      \"hidden\": false,\n    },\n    ...4 more\n  ],\n  \"message\": \"Tracks retrieved successfully.\",\n  \"error\": null\n}\n```\n\n### 18. GET /tracks/:id - Retrieve a Track\n\n- **Description**: Retrieve a single track by providing its track ID.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:track_id\n```\n\nor\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/tracks/123e4567-e89b-12d3-a456-426614174000\n```\n\n#### Responses:\n\n- **a. 200 - Track Fetched Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": {\n    \"track_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n    \"artist_name\": \"Eminem\",\n    \"album_name\": \"Recovery\",\n    \"name\": \"Not Afraid\",\n    \"duration\": 263,\n    \"hidden\": false\n  },\n  \"message\": \"Track retrieved successfully.\",\n  \"error\": null\n}\n```\n\n### 19. POST /tracks/add-track - Add a new Track\n\n- **Description**: Add a new track to the system.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nPOST https://enhanced-music-library-management-api-z77c.onrender.com/tracks/add-track\n```\n\n#### Request Body:\n\n```json\n{\n  \"artist_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n  \"album_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n  \"name\": \"Not Afraid\",\n  \"duration\": 263,\n  \"hidden\": false\n}\n```\n\n#### Responses:\n\n- **a. 201 - Track Created Successfully**\n\n```json\n{\n  \"status\": 201,\n  \"data\": null,\n  \"message\": \"Track created successfully.\",\n  \"error\": null\n}\n```\n\n### 20. PUT /tracks/:id - Update a Track\n\n- **Description**: Update a track by providing its track ID, details such as name, duration, and visibility(hidden).\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nPUT https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:track_id\n```\n\nor\n\n```http\nPUT https://enhanced-music-library-management-api-z77c.onrender.com/tracks/123e4567-e89b-12d3-a456-426614174000\n```\n\n#### Request Body:\n\n```json\n{\n  \"name\": \"Not Afraid (Explicit)\",\n  \"duration\": 263,\n  \"hidden\": false\n}\n```\n\nor any of the fields you want to update.\n\n```json\n{\n  \"name\": \"Not Afraid (Explicit)\"\n}\n```\n\n### 21. DELETE /tracks/:id - Delete a Track\n\n- **Description**: Delete a track by providing its track ID.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\n\nDELETE https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:track_id\n```\n\nor\n\n```http\nDELETE https://enhanced-music-library-management-api-z77c.onrender.com/tracks/123e4567-e89b-12d3-a456-426614174000\n```\n\n#### Responses:\n\n- **a. 200 - Track Deleted Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": null,\n  \"message\": \"Track:${track_name} deleted successfully.\",\n  \"error\": null\n}\n```\n\n### 22. GET /favorites/:category - Retrieve Favorites\n\n- **Description**: Retrieve the user's favorite items based on the category(artist, album, or track) provided.\n\n#### Query Parameters:\n\n- `category` : Category of favorites to retrieve (artist, album, track).\n- `limit` : Number of records to fetch. Default is 5.\n- `offset` : Number of records to skip. Default is 0.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/favorites/:category?limit=5\u0026offset=0\n```\n\nor\n\n```http\nGET https://enhanced-music-library-management-api-z77c.onrender.com/favorites/artist\n```\n\n#### Responses:\n\n- **a. 200 - Favorites Fetched Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": [\n    {\n      \"favorite_id\": \"123e4567-e89b-12d3-a456-426614174000\",\n      \"category\": \"artist\",\n      \"item_id\": \"123e4567-e89b-12d3-a456-426614174000\", // item_id based on category type (artist_id, album_id, track_id)\n      \"name\": \"Eminem\",\n      \"created_at\": \"2024-12-03T10:00:00Z\"\n    },\n    ...4 more\n  ],\n  \"message\": \"Favorites retrieved successfully.\",\n  \"error\": null\n}\n```\n\n### 23. POST /favorites/add-favorite - Add a Favorite\n\n- **Description**: Add a new favorite item to the user's list.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nPOST https://enhanced-music-library-management-api-z77c.onrender.com/favorites/add-favorite\n```\n\n#### Request Body:\n\n```json\n{\n  \"category\": \"artist\", // artist, album, track\n  \"item_id\": \"123e4567-e89b-12d3-a456-426614174000\" // item_id based on category type (artist_id, album_id, track_id)\n}\n```\n\n#### Responses:\n\n- **a. 201 - Favorite Added Successfully**\n\n```json\n{\n  \"status\": 201,\n  \"data\": null,\n  \"message\": \"Favorite added successfully.\",\n  \"error\": null\n}\n```\n\n### 24. DELETE /favorites/remove-favorite/:id - Remove a Favorite\n\n- **Description**: Remove a favorite item from the user's list by providing its favorite ID.\n\n#### Request Headers:\n\n```json\n{\n  \"Authorization\": \"Bearer \u003ctoken\u003e\"\n}\n```\n\n#### Request Endpoint:\n\n```http\nDELETE https://enhanced-music-library-management-api-z77c.onrender.com/favorites/remove-favorite/:favorite_id\n```\n\nor\n\n```http\nDELETE https://enhanced-music-library-management-api-z77c.onrender.com/favorites/remove-favorite/123e4567-e89b-12d3-a456-426614174000\n```\n\n#### Responses:\n\n- **a. 200 - Favorite Removed Successfully**\n\n```json\n{\n  \"status\": 200,\n  \"data\": null,\n  \"message\": \"Favorite removed successfully.\",\n  \"error\": null\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flikhithkp%2Fmelodify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flikhithkp%2Fmelodify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flikhithkp%2Fmelodify/lists"}