https://github.com/jmrashed/fastapi-python-starter-api
fastapi-python-starter-api
https://github.com/jmrashed/fastapi-python-starter-api
Last synced: 10 months ago
JSON representation
fastapi-python-starter-api
- Host: GitHub
- URL: https://github.com/jmrashed/fastapi-python-starter-api
- Owner: jmrashed
- Created: 2022-10-10T21:27:08.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2023-03-08T09:09:02.000Z (almost 3 years ago)
- Last Synced: 2025-01-07T20:14:40.808Z (11 months ago)
- Language: TypeScript
- Size: 858 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# azapi
## Features
* FastAPI
* React Admin
* SQLAlchemy and Alembic
* Pre-commit hooks (black, autoflake, isort, flake8, prettier)
* Github Action
* Dependabot config
* Docker images
## Good to know
The frontend of this project uses React Admin. Follow the quick tutorial to understand how [React Admin](https://marmelab.com/react-admin/Tutorial.html) works.
## Step 1: Getting started
Start a local development instance with docker-compose
```bash
docker-compose up -d
# Run database migration
docker-compose exec backend alembic upgrade head
# Create database used for testing
docker-compose exec postgres createdb apptest -U postgres
```
Now you can navigate to the following URLs:
- Backend OpenAPI docs: http://localhost:8000/docs/
- Frontend: http://localhost:3000
### Step 2: Setup pre-commit hooks and database
Keep your code clean by using the configured pre-commit hooks. Follow the [instructions here to install pre-commit](https://pre-commit.com/). Once pre-commit is installed, run this command to install the hooks into your git repository:
```bash
pre-commit install
```
### Local development
The backend setup of docker-compose is set to automatically reload the app whenever code is updated. However, for frontend it's easier to develop locally.
```bash
docker-compose stop frontend
cd frontend
yarn
yarn start
```
If you want to develop against something other than the default host, localhost:8000, you can set the `REACT_APP_API_BASE` environment variable:
```bash
export REACT_APP_API_BASE=http://mydomain.name:8000
yarn start
```
Don't forget to edit the `.env` file and update the `BACKEND_CORS_ORIGINS` value (add `http://mydomain:3000` to the allowed origins).
### Rebuilding containers
If you add a dependency, you'll need to rebuild your containers like this:
```bash
docker-compose up -d --build
```
### Rengerate front-end API package
Instead of writing frontend API client manually, OpenAPI Generator is used. Typescript bindings for the backend API can be recreated with this command:
```bash
yarn genapi
```
### Database migrations
These two are the most used commands when working with alembic. For more info, follow through [Alembic's tutorial](https://alembic.sqlalchemy.org/en/latest/tutorial.html).
```bash
# Auto generate a revision
docker-compose exec backend alembic revision --autogenerate -m 'message'
# Apply latest changes
docker-compose exec backend alembic upgrade head
```
### Backend tests
Backend uses a hardcoded database named apptest, first ensure that it's created
```bash
docker-compose exec postgres createdb apptest -U postgres
```
Then you can run tests with this command:
```bash
docker-compose exec backend pytest
```
### Single docker image
There's a monolith/single docker image that uses FastAPI to serve static assets. You can use this image to deploy direct to Heroku, Fly.io or anywhere where you can run a Dockerfile without having to build a complicated setup out of separate frontend and backend images.
## Recipes
#### Build and upload docker images to a repository
Configure the [**build-push-action**](https://github.com/marketplace/actions/build-and-push-docker-images) in `.github/workflows/test.yaml`.
## Credits
Created with [FastAPI Starter](https://github.com/gaganpreet/fastapi-starter)