Book Library API
Overview
The Book Library API is a RESTful API built using Go, Fiber, Postgres SQL, and Slog for logging. The API manages a collection of books and keeps track of a user's progress with each book. Authentication is handled using Auth0.
Features
- Create, read, update, and delete books
- Register and login users
- Add and update progress for a user and book
- Authentication using Auth0
Technologies
- Go 1.19
- Fiber 2.23
- Postgres SQL 14.2
- Slog 1.8
- Auth0
Getting Started
Prerequisites
- Go 1.19 or higher
- Postgres SQL 14.2 or higher
- Auth0 account (to-be-added)
Installation
- Clone the repository: `git clone (https://github.com/jvanrhyn/bookshelf)
- Create a Postgres database and update the
database.yml
file with your credentials
- Run
go mod download
to download dependencies
- Run
go run main.go
to start the API
Environment
Your application requires several environment variables to function correctly. These variables should be added to
a .env
file in the root directory of your project.
The required environment variables are:
DB_USER
: The username for your Postgres database.
DB_PASS
: The password for your Postgres database.
DB_NAME
: The name of your Postgres database.
DB_HOST
: The host of your Postgres database.
DB_PORT
: The port of your Postgres database.
AUTH0_DOMAIN
: Your Auth0 domain.
AUTH0_CLIENT_ID
: Your Auth0 client ID.
AUTH0_CLIENT_SECRET
: Your Auth0 client secret.
Here is a sample .env
file:
API Endpoints
POST /books
: Create a new book
GET /books/:id
: Retrieve a book by ID
GET /books/isbn/:isbn
: Retrieve a book by ISBN
PUT /books/:id
: Update a book
DELETE /books/:id
: Delete a book
POST /users
: Register a new user
POST /login
: Login a user
GET /users/:id
: Retrieve a user's profile
GET /users/email/:email
: Retrieve a user's profile by email
POST /progress
: Add a new progress entry
GET /progress/:book_id
: Retrieve a user's progress for a book
PUT /progress/:book_id
: Update a user's progress for a book
Authentication
- Use the
Authorization
header with a valid Auth0 token to authenticate requests
Contributing
Contributions are welcome! Please open a pull request with your changes.
License
MIT License
Johan van Rhyn