FastAPI project Template generator  to make your life easier 🧬 🚀
['asyncpg', 'backend-service', 'cookiecutter', 'cookiecutter-template', 'docker', 'fastapi', 'fastapi-docker', 'fastapi-sqlalchemy', 'fastapi-template', 'poetry-python', 'sqlmodel']
FastAPI project Template generator  to make your life easier 🧬 🚀
 FastAPI Genesis 🧬 - Project Template Generator 🚀
Simple FastAPI project template with Docker, Alembic, PostgreSQL, Poetry and pre-commit to kickstart your new projects.
## How to use it 🤓
Go to the directory where you want to create your project and run:
```bash
pip install cookiecutter
cookiecutter https://github.com/Lolomgrofl/fastapi-genesis.git
```
## What's included in the template 🎉
- Here is an explanation of the directory structure of the template:
```
├── .github                 <- GitHub deployment workflow
│
├── alembic                 <- Alembic migrations
│
├── app                     <- Source code of the application (the main package)
│   ├── daos                <- Data Access Objects (DAOs) to interact with the database
│   ├── models              <- SQLAlchemy models (the database schema)
│   ├── routers             <- FastAPI routers (endpoints)
│   ├── schemas             <- Pydantic schemas for request and response models
│   ├── services            <- Business logic layer (services)
│   ├── db.py               <- Database initialization and session management code
│   ├── main.py             <- FastAPI application instance and startup code
│   └── settings.py         <- Settings management code (using pydantic settings)
│
├── scripts                 <- Scripts to perform various tasks like alembic migrations, etc.
│
├── static                  <- Static files like images, documents, etc.
│
├── tests                   <- Unit tests, one subdirectory per application module
│
├── .env                    <- Environment variables. Should not be committed to VCS
│
├── .gitignore              <- Files and directories to be ignored by git
│
├── .pre-commit-config.yaml <- Configuration of pre-commit hooks (see https://pre-commit.com/)
│
├── alembic.ini             <- Alembic configuration file
│
├── docker-compose.yml      <- Docker compose configuration file
│
├── Dockerfile              <- Dockerfile for building the image of the application
│
├── Makefile                <- Makefile with useful commands for development and project setup
│
├── pyproject.toml          <- Python dependencies for Poetry (see https://python-poetry.org/)
│
├── README.md               <- File with useful information about the project and how to use it
```
## Features 🧩
- **Docker** and **docker-compose** for local development
- **FastAPI** application with **uvicorn** server
- **AsyncPG** for asynchronous access to PostgreSQL
- **Pydantic** for data validation
- **Poetry** for managing Python dependencies
- **Alembic** for database migrations
- **Pre-commit** hooks for code formatting and linting
- **JWT** token authentication
- **SQLAlchemy** models
- **CORS** (Cross Origin Resource Sharing)
- **GitOps** ( GitHub Workflows)
## User flow as an example of how to use the template 💡
- It consists of the following steps:
```
    - Register a new user
    - Login with the new user
    - Change password
    - Get all users
    - Delete user by id
    - Delete all users
```
- This following example will show you the pattern and good practices to follow in order to continue developing your application.
## Cookiecutter parameters explained 🍪
- `repo_name`: Name of the project repository (e.g. `my_project`)
- `app_container_name`: Name of the Docker container for the FastAPI application server inside `docker-compose.yaml` file
- `app_service_port`: Port on the host machine to which the FastAPI application will be exposed inside `docker-compose.yaml` file and `Dockerfile`
- `db_container_name`: Name of the Docker container for the PostgreSQL database server inside `docker-compose.yaml` file
- `db_service_port`: Port on the host machine to which the PostgreSQL database server will be exposed inside `docker-compose.yaml` file
- `pgadmin_container_name`: Name of the Docker container for the pgAdmin web interface inside `docker-compose.yaml` file
- `pgadmin_service_port`: Port on the host machine to which the pgAdmin web interface will be exposed inside `docker-compose.yaml` file
- `network_name`: Name of the Docker network that will be created inside `docker-compose.yaml` file
# GLHF 🚀
## License
This project is licensed under the terms of the MIT license.