160 lines
3.0 KiB
Markdown
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
|
|
```
|