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.
- One Organization, One Admin: Each organization has a single Admin with full control over the system.
- Role-Based Access Control: Users have distinct roles (Admin, Editor, Viewer), with permissions tailored to their responsibilities.
- Entity Relationships: Albums belong to Artists, and Tracks are associated with Albums and Artists.
- Favorites: Users can personalize their experience by marking items as favorites for easy retrieval.
- Implement authentication and role-based access control using a method of your choice.
- Roles:
- Admin: Full CRUD operations on all entities, including user management.
- Editor: Can edit and delete Artists, Albums, Tracks, and their own details (e.g., updating their password).
- Viewer: Read-only access to all entities.
- The first user registered in the system automatically becomes an Admin.
- Users:
Admins can manage users by adding, deleting, and updating their roles (except for other Admins). - Artists, Albums, Tracks:
Full CRUD operations based on role permissions. - Favorites:
Users can add or remove their favorite Artists, Albums, and Tracks.
Column Name | Type | Description |
---|---|---|
user_id |
UUID | Unique identifier for the user. |
email |
VARCHAR | User's email address. |
password |
VARCHAR | Encrypted password. |
role |
ENUM | Role (Admin, Editor, Viewer). |
Column Name | Type | Description |
---|---|---|
artist_id |
UUID | Unique identifier for the artist. |
name |
VARCHAR | Name of the artist. |
grammy |
BOOLEAN | Indicates Grammy award status. |
hidden |
BOOLEAN | Visibility toggle. |
Column Name | Type | Description |
---|---|---|
album_id |
UUID | Unique identifier for the album. |
artist_id |
UUID | Unique identifier for the album. |
name |
VARCHAR | Album name. |
year |
INTEGER | Release year. |
hidden |
BOOLEAN | Visibility toggle. |
Column Name | Type | Description |
---|---|---|
track_id |
UUID | Unique identifier for the track. |
album_id |
UUID | Unique identifier for the album. |
name |
VARCHAR | Track name. |
duration |
INTEGER | Track duration in seconds. |
hidden |
BOOLEAN | Visibility toggle. |
artist_id |
UUID | Unique identifier for the artist. |
Column Name | Type | Description |
---|---|---|
favorite_id |
UUID | Reference to the favorite entity. |
category |
string | artist, album or track. |
item_id |
UUID | Reference to the item. |
user_id |
UUID | Reference to the user. |
- All responses are in JSON format.
Below is a brief summary of all the endpoints and their key response codes:
- GET https://enhanced-music-library-management-api-z77c.onrender.com/Logout: 200, 400
- POST https://enhanced-music-library-management-api-z77c.onrender.com/signup: 201, 400, 409
- POST https://enhanced-music-library-management-api-z77c.onrender.com/login: 200, 400, 404
- GET https://enhanced-music-library-management-api-z77c.onrender.com/users: 200, 400, 401
- POST https://enhanced-music-library-management-api-z77c.onrender.com/users/add-user: 201, 400, 401, 403, 409
- DELETE https://enhanced-music-library-management-api-z77c.onrender.com/users/:id: 200, 400, 401, 403, 404
- PUT https://enhanced-music-library-management-api-z77c.onrender.com/users/update-password: 204, 400, 401, 403, 404
- GET https://enhanced-music-library-management-api-z77c.onrender.com/artists: 200, 400, 401
- GET https://enhanced-music-library-management-api-z77c.onrender.com/artists/:id: 200, 401, 403, 404
- POST https://enhanced-music-library-management-api-z77c.onrender.com/artists/add-artist: 201, 400, 401
- PUT https://enhanced-music-library-management-api-z77c.onrender.com/artists/:id: 204, 400, 401, 403, 404
- DELETE https://enhanced-music-library-management-api-z77c.onrender.com/artists/:id: 200, 400, 401, 403, 404
- GET https://enhanced-music-library-management-api-z77c.onrender.com/albums: 200, 400, 401, 403, 404
- GET https://enhanced-music-library-management-api-z77c.onrender.com/albums/:id: 200, 401, 403, 404
- POST https://enhanced-music-library-management-api-z77c.onrender.com/albums/add-album: 201, 400, 401, 403, 400
- PUT https://enhanced-music-library-management-api-z77c.onrender.com/albums/:id: 204, 400, 401, 403, 404
- DELETE https://enhanced-music-library-management-api-z77c.onrender.com/albums/:id: 200, 400, 401, 403, 404
- GET https://enhanced-music-library-management-api-z77c.onrender.com/tracks: 200, 400, 401, 403, 404
- GET https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:id: 200, 400, 401, 403, 404
- POST https://enhanced-music-library-management-api-z77c.onrender.com/tracks/add-track: 201, 400, 401, 403, 404
- PUT https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:id: 204, 400, 401, 403, 404
- DELETE https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:id: 200, 400, 401, 403, 404
- GET https://enhanced-music-library-management-api-z77c.onrender.com/favorites/:category: 200, 400, 401, 403
- POST https://enhanced-music-library-management-api-z77c.onrender.com/favorites/add-favorite: 201, 400, 401, 403, 404
- DELETE https://enhanced-music-library-management-api-z77c.onrender.com/favorites/remove-favorite/:id: 200, 400, 401, 403, 404
- Description: This endpoint is used to logout a user from the system.
{
"Authorization": "Bearer <token>"
}
GET https://enhanced-music-library-management-api-z77c.onrender.com/logout
- a. 200 - User Logged Out Successfully
{
"status": 200,
"data": null,
"message": "User logged out successfully.",
"error": null
}
- b. 400 - Bad Request
{
"status": 400,
"data": null,
"message": "Bad Request",
"error": null
}
- Description: This endpoint is used to register a new user in the system.
POST https://enhanced-music-library-management-api-z77c.onrender.com/signup
{
"email": "admin@example.com",
"password": "password"
}
-
a. 201 - User Created Successfully
{ "status": 201, "data": null, "message": "User created successfully.", "error": null }
-
b. 400 - Bad Request
{ "status": 400, "data": null, "message": "Bad Request, Reason:${Missing Field}", "error": null }
-
c. 409 - Email Already Exists
{ "status": 409, "data": null, "message": "Email already exists.", "error": null }
- Description: This endpoint is used to login a user in the system.
POST https://enhanced-music-library-management-api-z77c.onrender.com/login
{
"email": "admin@example.com",
"password": "securePassword123"
}
- a. 200 - User Logged In Successfully
{
"status": 200,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
},
"message": "Login successful.",
"error": null
}
- b. 400 - Bad Request
{
"status": 400,
"data": null,
"message": "Bad Request, Reason:${Missing Field}",
"error": null
}
- c. 404 - User Not Found
{
"status": 404,
"data": null,
"message": "User not found.",
"error": null
}
- 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
andoffset
.
limit
(optional): Number of records to fetch. Default is 5.offset
(optional): Number of records to skip. Default is 0.role
(optional): Filter users by role (Editor
orViewer
).
{
"Authorization": "Bearer <token>"
}
GET https://enhanced-music-library-management-api-z77c.onrender.com/users?limit=5&offset=0&role=Editor
or
GET https://enhanced-music-library-management-api-z77c.onrender.com/users
- a. 200 - Users Fetched Successfully
{
"status": 200,
"data": [
{
"user_id": "123e4567-e89b-12d3-a456-426614174000",
"email": "editor1@example.com",
"role": "editor",
"created_at": "2024-12-03T10:00:00Z"
},
...4 more
],
"message": "Users retrieved successfully.",
"error": null
}
- b. 400 - Bad Request
{
"status": 400,
"data": null,
"message": "Bad Request",
"error": null
}
- c. 401 - Unauthorized Access
{
"status": 401,
"data": null,
"message": "Unauthorized Access",
"error": null
}
- 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.
{
"Authorization": "Bearer <token>"
}
POST https://enhanced-music-library-management-api-z77c.onrender.com/users/add-user
{
"status": 409,
"data": null,
"message": null,
"error": "Email already exists."
}
- a. 201 - User Created Successfully
{
"status": 201,
"data": null,
"message": "User created successfully.",
"error": null
}
- b. 400 - Bad Request
{
"status": 400,
"data": null,
"message": "Bad Request",
"error": null
}
- c. 401 - Unauthorized Access
{
"status": 401,
"data": null,
"message": "Unauthorized Access",
"error": null
}
- d. 403 - Forbidden Access
{
"status": 403,
"data": null,
"message": "Forbidden Access/Operation not allowed.",
"error": null
}
- e. 409 - Email Already Exists
{
"status": 409,
"data": null,
"message": "Email already exists.",
"error": null
}
- Description: Only the Admin can delete a user by providing their user ID.
{
"Authorization": "Bearer <token>"
}
DELETE https://enhanced-music-library-management-api-z77c.onrender.com/users/:user_id
or
DELETE https://enhanced-music-library-management-api-z77c.onrender.com/users/123e4567-e89b-12d3-a456-426614174000
- a. 200 - User Deleted Successfully
{
"status": 200,
"data": null,
"message": "User deleted successfully.",
"error": null
}
{
"status": 404,
"data": null,
"message": "User not found.",
"error": null
}
- Description: The user of any role can update their password by providing the old password and a new password.
{
"Authorization": "Bearer <token>"
}
PUT https://enhanced-music-library-management-api-z77c.onrender.com/users/update-password
{
"old_password": "oldPassword",
"new_password": "newPassword"
}
- a. 204 - Password Updated Successfully
// No response body
or
<empty response>
- Description: Retrieve a list of all artists.
You can filter artists by Grammy status, visibility, and control the number of records returned using limit and offset.
limit
: Number of records to fetch. Default is 5.offset
: Number of records to skip. Default is 0.grammy
: Filter artists by number of Grammy awards artist has won(0 or 10).hidden
: Filter artists by visibility status(true or false).
{
"Authorization": "Bearer <token>"
}
GET https://enhanced-music-library-management-api-z77c.onrender.com/artists?limit=5&offset=0&grammy=10&hidden=false
or
GET https://enhanced-music-library-management-api-z77c.onrender.com/artists
- a. 200 - Artists Fetched Successfully
{
"status": 200,
"data": [
{
"artist_id": "123e4567-e89b-12d3-a456-426614174000",
"name": "Adele",
"grammy": 5,
"hidden": false,
},
...4 more
],
"message": "Artists retrieved successfully.",
"error": null
}
- Description: Retrieve a single artist by providing their artist ID.
{
"Authorization": "Bearer <token>"
}
GET https://enhanced-music-library-management-api-z77c.onrender.com/artists/:artist_id
or
GET https://enhanced-music-library-management-api-z77c.onrender.com/artists/123e4567-e89b-12d3-a456-426614174000
- a. 200 - Artist Fetched Successfully
{
"status": 200,
"data": {
"artist_id": "123e4567-e89b-12d3-a456-426614174000",
"name": "Adele",
"grammy": 5,
"hidden": false
},
"message": "Artist retrieved successfully.",
"error": null
}
- Description: Add a new artist to the system.
{
"Authorization": "Bearer <token>"
}
POST https://enhanced-music-library-management-api-z77c.onrender.com/artists/add-artist
{
"name": "Eminem",
"grammy": 15,
"hidden": false
}
- a. 201 - Artist Created Successfully
{
"status": 201,
"data": null,
"message": "Artist created successfully.",
"error": null
}
- Description: Update an artist by providing their artist ID, details such as name, Grammy status, and visibility(hidden).
{
"Authorization": "Bearer <token>"
}
PUT https://enhanced-music-library-management-api-z77c.onrender.com/artists/:artist_id
or
PUT https://enhanced-music-library-management-api-z77c.onrender.com/artists/123e4567-e89b-12d3-a456-426614174000
{
"name": "Eminem",
"grammy": 18,
"hidden": false
}
or any of the fields you want to update.
{
"name": "Eminem (Slim Shady)"
}
- Description: Delete an artist by providing their artist ID.
{
"Authorization": "Bearer <token>"
}
DELETE https://enhanced-music-library-management-api-z77c.onrender.com/artists/:artist_id
-
a. 200 - Artist Deleted Successfully
{ "status": 200, "data": { "artist_id": "123e4567-e89b-12d3-a456-426614174000" }, "message": "Artist:${artist_name} deleted successfully.", "error": null }
- 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.
limit
: Number of records to fetch. Default is 5.offset
: Number of records to skip. Default is 0.artist_id
: Filter albums by artist ID.hidden
: Filter albums by visibility status(true or false).
{
"Authorization": "Bearer <token>"
}
GET https://enhanced-music-library-management-api-z77c.onrender.com/albums?limit=5&offset=0&artist_id=123e4567-e89b-12d3-a456-426614174000&hidden=false
or
GET https://enhanced-music-library-management-api-z77c.onrender.com/albums
- a. 200 - Albums Fetched Successfully
{
"status": 200,
"data": [
{
"album_id": "123e4567-e89b-12d3-a456-426614174000",
"artist_name": "Eminem",
"name": "Recovery",
"year": 2010,
"hidden": false,
},
...4 more
],
"message": "Albums retrieved successfully.",
"error": null
}
- Description: Retrieve a single album by providing its album ID.
{
"Authorization": "Bearer <token>"
}
GET https://enhanced-music-library-management-api-z77c.onrender.com/albums/:album_id
or
GET https://enhanced-music-library-management-api-z77c.onrender.com/albums/123e4567-e89b-12d3-a456-426614174000
- a. 200 - Album Fetched Successfully
{
"status": 200,
"data": {
"album_id": "123e4567-e89b-12d3-a456-426614174000",
"artist_name": "Eminem",
"name": "Recovery",
"year": 2010,
"hidden": false
},
"message": "Album retrieved successfully.",
"error": null
}
- Description: Add a new album to the system.
{
"Authorization": "Bearer <token>"
}
POST https://enhanced-music-library-management-api-z77c.onrender.com/albums/add-album
{
"artist_id": "123e4567-e89b-12d3-a456-426614174000",
"name": "Marshall Mathers LP",
"year": 2000,
"hidden": false
}
- a. 201 - Album Created Successfully
{
"status": 201,
"data": null,
"message": "Album created successfully.",
"error": null
}
- Description: Update an album by providing its album ID, details such as name, year, and visibility(hidden).
{
"Authorization": "Bearer <token>"
}
PUT https://enhanced-music-library-management-api-z77c.onrender.com/albums/:album_id
or
PUT https://enhanced-music-library-management-api-z77c.onrender.com/albums/123e4567-e89b-12d3-a456-426614174000
{
"name": "Marshall Mathers LP 2",
"year": 2013,
"hidden": false
}
or any of the fields you want to update.
{
"name": "Marshall Mathers LP 2"
}
- Description: Delete an album by providing its album ID.
{
"Authorization": "Bearer <token>"
}
DELETE https://enhanced-music-library-management-api-z77c.onrender.com/albums/:album_id
or
DELETE https://enhanced-music-library-management-api-z77c.onrender.com/albums/123e4567-e89b-12d3-a456-426614174000
- a. 200 - Album Deleted Successfully
{
"status": 200,
"data": null,
"message": "Album:${album_name} deleted successfully.",
"error": null
}
- 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.
limit
: Number of records to fetch. Default is 5.offset
: Number of records to skip. Default is 0.artist_id
: Filter tracks by artist ID.album_id
: Filter tracks by album ID.hidden
: Filter tracks by visibility status(true or false).
{
"Authorization": "Bearer <token>"
}
GET https://enhanced-music-library-management-api-z77c.onrender.com/tracks?limit=5&offset=0&artist_id=123e4567-e89b-12d3-a456-426614174000&album_id=123e4567-e89b-12d3-a456-426614174000&hidden=false
or
GET https://enhanced-music-library-management-api-z77c.onrender.com/tracks
- a. 200 - Tracks Fetched Successfully
{
"status": 200,
"data": [
{
"track_id": "123e4567-e89b-12d3-a456-426614174000",
"artist_name": "Eminem",
"album_name": "Recovery",
"name": "Not Afraid",
"duration": 263,
"hidden": false,
},
...4 more
],
"message": "Tracks retrieved successfully.",
"error": null
}
- Description: Retrieve a single track by providing its track ID.
{
"Authorization": "Bearer <token>"
}
GET https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:track_id
or
GET https://enhanced-music-library-management-api-z77c.onrender.com/tracks/123e4567-e89b-12d3-a456-426614174000
- a. 200 - Track Fetched Successfully
{
"status": 200,
"data": {
"track_id": "123e4567-e89b-12d3-a456-426614174000",
"artist_name": "Eminem",
"album_name": "Recovery",
"name": "Not Afraid",
"duration": 263,
"hidden": false
},
"message": "Track retrieved successfully.",
"error": null
}
- Description: Add a new track to the system.
{
"Authorization": "Bearer <token>"
}
POST https://enhanced-music-library-management-api-z77c.onrender.com/tracks/add-track
{
"artist_id": "123e4567-e89b-12d3-a456-426614174000",
"album_id": "123e4567-e89b-12d3-a456-426614174000",
"name": "Not Afraid",
"duration": 263,
"hidden": false
}
- a. 201 - Track Created Successfully
{
"status": 201,
"data": null,
"message": "Track created successfully.",
"error": null
}
- Description: Update a track by providing its track ID, details such as name, duration, and visibility(hidden).
{
"Authorization": "Bearer <token>"
}
PUT https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:track_id
or
PUT https://enhanced-music-library-management-api-z77c.onrender.com/tracks/123e4567-e89b-12d3-a456-426614174000
{
"name": "Not Afraid (Explicit)",
"duration": 263,
"hidden": false
}
or any of the fields you want to update.
{
"name": "Not Afraid (Explicit)"
}
- Description: Delete a track by providing its track ID.
{
"Authorization": "Bearer <token>"
}
DELETE https://enhanced-music-library-management-api-z77c.onrender.com/tracks/:track_id
or
DELETE https://enhanced-music-library-management-api-z77c.onrender.com/tracks/123e4567-e89b-12d3-a456-426614174000
- a. 200 - Track Deleted Successfully
{
"status": 200,
"data": null,
"message": "Track:${track_name} deleted successfully.",
"error": null
}
- Description: Retrieve the user's favorite items based on the category(artist, album, or track) provided.
category
: Category of favorites to retrieve (artist, album, track).limit
: Number of records to fetch. Default is 5.offset
: Number of records to skip. Default is 0.
{
"Authorization": "Bearer <token>"
}
GET https://enhanced-music-library-management-api-z77c.onrender.com/favorites/:category?limit=5&offset=0
or
GET https://enhanced-music-library-management-api-z77c.onrender.com/favorites/artist
- a. 200 - Favorites Fetched Successfully
{
"status": 200,
"data": [
{
"favorite_id": "123e4567-e89b-12d3-a456-426614174000",
"category": "artist",
"item_id": "123e4567-e89b-12d3-a456-426614174000", // item_id based on category type (artist_id, album_id, track_id)
"name": "Eminem",
"created_at": "2024-12-03T10:00:00Z"
},
...4 more
],
"message": "Favorites retrieved successfully.",
"error": null
}
- Description: Add a new favorite item to the user's list.
{
"Authorization": "Bearer <token>"
}
POST https://enhanced-music-library-management-api-z77c.onrender.com/favorites/add-favorite
{
"category": "artist", // artist, album, track
"item_id": "123e4567-e89b-12d3-a456-426614174000" // item_id based on category type (artist_id, album_id, track_id)
}
- a. 201 - Favorite Added Successfully
{
"status": 201,
"data": null,
"message": "Favorite added successfully.",
"error": null
}
- Description: Remove a favorite item from the user's list by providing its favorite ID.
{
"Authorization": "Bearer <token>"
}
DELETE https://enhanced-music-library-management-api-z77c.onrender.com/favorites/remove-favorite/:favorite_id
or
DELETE https://enhanced-music-library-management-api-z77c.onrender.com/favorites/remove-favorite/123e4567-e89b-12d3-a456-426614174000
- a. 200 - Favorite Removed Successfully
{
"status": 200,
"data": null,
"message": "Favorite removed successfully.",
"error": null
}