Files
KintoneAppBuilder/backend/README.en.md

160 lines
3.0 KiB
Markdown

# KintoneAppBuilder
## Features
- **FastAPI** with Python 3.8
- **React 16** with Typescript, Redux, and react-router
- Postgres
- SqlAlchemy with Alembic for migrations
- Pytest for backend tests
- Jest for frontend tests
- Perttier/Eslint (with Airbnb style guide)
- Docker compose for easier development
- Nginx as a reverse proxy to allow backend and frontend on the same port
## Development
The only dependencies for this project should be docker and docker-compose.
### Quick Start
Starting the project with hot-reloading enabled
(the first time it will take a while):
```bash
docker-compose up -d
```
To run the alembic migrations (for the users table):
```bash
docker-compose run --rm backend alembic upgrade head
```
And navigate to http://localhost:8000
_Note: If you see an Nginx error at first with a `502: Bad Gateway` page, you may have to wait for webpack to build the development server (the nginx container builds much more quickly)._
Auto-generated docs will be at
http://localhost:8000/api/docs
### Rebuilding containers:
```
docker-compose build
```
### Restarting containers:
```
docker-compose restart
```
### Bringing containers down:
```
docker-compose down
```
### Frontend Development
Alternatively to running inside docker, it can sometimes be easier
to use npm directly for quicker reloading. To run using npm:
```
cd frontend
npm install
npm start
```
This should redirect you to http://localhost:3000
### Frontend Tests
```
cd frontend
npm install
npm test
```
## Migrations
Migrations are run using alembic. To run all migrations:
```
docker-compose run --rm backend alembic upgrade head
```
To create a new migration:
```
alembic revision -m "create users table"
```
And fill in `upgrade` and `downgrade` methods. For more information see
[Alembic's official documentation](https://alembic.sqlalchemy.org/en/latest/tutorial.html#create-a-migration-script).
## Testing
There is a helper script for both frontend and backend tests:
```
./scripts/test.sh
```
### Backend Tests
```
docker-compose run backend pytest
```
any arguments to pytest can also be passed after this command
### Frontend Tests
```
docker-compose run frontend test
```
This is the same as running npm test from within the frontend directory
## Logging
```
docker-compose logs
```
Or for a specific service:
```
docker-compose logs -f name_of_service # frontend|backend|db
```
## Project Layout
```
backend
└── app
├── alembic
│ └── versions # where migrations are located
├── api
│ └── api_v1
│ └── endpoints
├── core # config
├── db # db models
├── tests # pytest
└── main.py # entrypoint to backend
frontend
└── public
└── src
├── components
│ └── Home.tsx
├── config
│ └── index.tsx # constants
├── __tests__
│ └── test_home.tsx
├── index.tsx # entrypoint
└── App.tsx # handles routing
```