Skip to content

one-zero-eight/InNoHassle-Events

Repository files navigation

Events API | InNoHassle ecosystem

https://api.innohassle.ru/events

GitHub Actions pre-commit

Lines of Code Bugs Vulnerabilities

Table of contents

Did you know that GitHub supports table of contents by default 🤔

About

This is the API for events service in InNoHassle ecosystem.

Features

Technologies

Development

Getting started

  1. Install Python 3.11+

  2. Install Poetry

  3. Install project dependencies with Poetry.

    poetry install --no-root --with dev
  4. Set up pre-commit hooks:

    poetry run pre-commit install --install-hooks -t pre-commit -t commit-msg
  5. Set up project settings file (check settings.schema.yaml for more info).

    cp settings.example.yaml settings.yaml

    Edit settings.yaml according to your needs.

  6. Set up a PostgreSQL database instance.

    Using docker container
    • Set up database settings for docker-compose container in .env file:х
      cp .env.example .env
    • Set up a network for music room service if you have not done it yet.
      docker network create music-room
    • Run the database instance:
      docker compose up -d db
    • Make sure to set up the actual database connection in settings.yaml, for example:
      db_url: postgresql+asyncpg://postgres:postgres@localhost:5432/postgres
    Using pgAdmin
    • Connect to the PostgreSQL server using pgAdmin
    • Set up a new database in the server: Edit > New Object > New database
    • Use the database name in settings.yaml file, for example innohassle-events:
      db_url: postgresql+asyncpg://postgres:your_password@localhost:5432/innohassle-events

Set up PyCharm integrations

  1. Ruff (plugin). It will lint and format your code. Make sure to enable Use ruff format option in plugin settings.
  2. Pydantic (plugin). It will fix PyCharm issues with type-hinting.
  3. Conventional commits (plugin). It will help you to write conventional commits.

Run for development

  1. Run the database if you have not done it yet
  2. Upgrade the database schema using alembic:
    poetry run alembic upgrade head
  3. Run the ASGI server
    poetry run python -m src.api
    OR using uvicorn directly
    poetry run uvicorn src.api.app:app --use-colors --proxy-headers --forwarded-allow-ips=*

Now the API is running on http://localhost:8000. Good job!

Deployment

We use Docker with Docker Compose plugin to run the website on servers.

  1. Copy the file with environment variables: cp .env.example .env
  2. Change environment variables in the .env file
  3. Copy the file with settings: cp settings.example.yaml settings.yaml
  4. Change settings in the settings.yaml file according to your needs (check settings.schema.yaml for more info)
  5. Install Docker with Docker Compose
  6. Deploy Music room service

    Or just create a network for the music room service: docker network create music-room

  7. Build a Docker image: docker compose build --pull
  8. Run the container: docker compose up --detach
  9. Check the logs: docker compose logs -f

FAQ

How to update dependencies?

Project dependencies

  1. Run poetry update to update all dependencies
  2. Run poetry show --outdated to check for outdated dependencies
  3. Run poetry add <package>@latest to add a new dependency if needed

Pre-commit hooks

  1. Run poetry run pre-commit autoupdate

Contributing

We are open to contributions of any kind. You can help us with code, bugs, design, documentation, media, new ideas, etc. If you are interested in contributing, please read our contribution guide.