OpenMusic API is a RESTful API project for managing albums, songs, users, playlists, collaborations, and authentications using Hapi.js, PostgreSQL, and ESLint for code linting.
Before running this project, make sure you have installed:
- Node.js
- PostgreSQL
-
Clone this repository:
git clone https://github.com/TearsAchly/OpenMusic-API-V2.git cd openmusic-api-v2
-
Install dependencies:
npm install
-
Database configuration:
Make sure PostgreSQL is running and create a database named
AlbumsAndSongs
. Then adjust the.env
file to your database settings:PGUSER=<YOUR_DB_USER> PGPASSWORD=<YOUR_DB_PASSWORD> PGDATABASE=AlbumsAndSongs PGHOST=localhost PGPORT=5432 ACCESS_TOKEN_KEY=your_access_token_secret_key REFRESH_TOKEN_KEY=your_refresh_token_secret_key ACCESS_TOKEN_AGE=3600
-
Run database migration:
npm run migrate up || npx run migrate up
-
Run server:
npm start
-
Linting code:
To ensure your code is free from linting issues, run:
npx eslint .
- eslint.config.mjs: ESLint configuration.
- migrations: Directory for database migration scripts.
- package.json: Npm configuration file.
- src/api: Directory containing handlers, indexes, and routes for albums, songs, users, playlists, collaborations, and authentications.
- src/exceptions: Directory containing custom error classes.
- src/server.js: The main file for running the Hapi.js server.
- src/services: Directory containing services for interacting with the PostgreSQL database.
- src/token: Directory containing token management utility.
- src/validator: Directory containing validation schemes using Joi.
-
Albums
POST /albums
: Adds a new album.GET /albums
: Gets a list of albums.GET /albums/{albumId}
: Gets album details.PUT /albums/{albumId}
: Updates the album.DELETE /albums/{albumId}
: Deletes an album.
-
Songs
POST /songs
: Adds new songs.GET /songs
: Gets a list of songs.GET /songs/{songId}
: Gets song details.PUT /songs/{songId}
: Updates songs.DELETE /songs/{songId}
: Deletes a song.
-
Users
POST /users
: Adds a new user.GET /users/{userId}
: Gets user details.
-
Playlists
POST /playlists
: Adds a new playlist.GET /playlists
: Gets a list of playlists.GET /playlists/{playlistId}
: Gets playlist details.PUT /playlists/{playlistId}
: Updates a playlist.DELETE /playlists/{playlistId}
: Deletes a playlist.
-
Collaborations
POST /collaborations
: Adds a new collaboration.DELETE /collaborations
: Deletes a collaboration.
-
Authentications
POST /authentications
: Logs in a user.PUT /authentications
: Refreshes authentication token.DELETE /authentications
: Logs out a user.
Please open a pull request or submit an issue to contribute to this project.
This project is licensed under the MIT license. See the LICENSE file for more information.