The goal of the application is to develop a scalable and high-performance web application using FastAPI. The application is a platform for managing tasks and projects in an organization. The application will implement a user system with differentiated access rights, the ability to create tasks, assign executors, and track the progress of tasks.
- Registration and authorization of users:
- Users can register in the system by providing a name, email address, password and other additional data.
- Registered users can log in to the system using a username and password.
- Login must be accomplished by generating a JWT token, which will be used to authenticate users when making API requests.
- Authorized users can create projects by specifying the title, description, tech stack, start date and constraint date of the project.
- Users can view a list of all projects, as well as detailed information about each project.
- Each project can have a responsible mentor who has the right to appoint executors of tasks within the project.
- Each project can be compiled as report and sent as email
- Within each project, can be created tasks that need to be completed.
- The creator and mentor of the project can indicate the title, description, executor and status (completed/not completed) of each task.
- install dependencies using uv
$ uv sync --all-groups
- configure environment variables in
.envfile - create migration in db
$ alembic upgrade head
- start app in virtual environment
$ gunicorn -c gunicorn.conf.py asgi:app
- configure environment variables in
.envfile - building the docker image
$ docker compose build
- start service
$ docker compose up -d
| variables | description |
|---|---|
DEBUG |
debug mode, only allowed 1(True)/0(False) |
TESTING |
testing mode, only allowed 1(True)/0(False) |
HOST |
app host |
PORT |
app port |
DOCS_URL |
docs url, undefined by default |
REDOC_URL |
redoc url, undefined by default |
JWT_SECRET_KEY |
a secret key for jwt encoding |
JWT_ALGORITHM |
jwt encoding algorithm |
ACCESS_TOKEN_EXPIRES |
access token lifetime in minutes |
REFRESH_TOKEN_EXPIRES |
refresh token lifetime in minutes |
PG_USER |
PGSQL user |
PG_PASSWORD |
PGSQL user password |
PG_HOST |
hostname or an IP address of PGSQL database |
PG_PORT |
port from PG database |
PG_DB |
PGSQL database |
PG_USER_TEST |
PGSQL test user |
PG_PASSWORD_TEST |
PGSQL test user password |
PG_HOST_TEST |
hostname or an IP address of PGSQL test database |
PG_PORT_TEST |
port from PGSQL test database |
PG_DB_TEST |
PGSQL test database |
PGADMIN_PORT |
PGAdmin port |
PGADMIN_DEFAULT_EMAIL |
PGAdmin default email |
PGADMIN_DEFAULT_PASSWORD |
PGAdmin default pssword |
RMQ_HOST |
RMQ host |
RMQ_PORT |
RMQ port |
RMQ_ADMINISTRATION_PORT |
RMQ admin port |
RMQ_USER |
RMQ user |
RMQ_PASSWORD |
RMQ password |
REDIS_HOST |
redis host |
REDIS_PORT |
redis port |
REDIS_DB |
redis db |
EMAIL_HOST |
email host |
EMAIL_PORT |
email port |
EMAIL_USERNAME |
email username |
EMAIL_PASSWORD |
email password |
EMAIL_SENDER |
email sender |
FastAPIPostgreSQL,SQLAlchemyandAlembicFaststreamandRabbitMQuvicornandgunicornpytest-asynciodockeranddocker-compose
