{"id":27946413,"url":"https://github.com/one-zero-eight/music-room","last_synced_at":"2026-04-30T13:33:55.545Z","repository":{"id":194962284,"uuid":"690000674","full_name":"one-zero-eight/music-room","owner":"one-zero-eight","description":"Book the music room at Sports Center and view the schedule: https://t.me/InnoMusicRoomBot","archived":false,"fork":false,"pushed_at":"2025-11-24T21:24:42.000Z","size":1260,"stargazers_count":1,"open_issues_count":10,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-28T08:47:15.803Z","etag":null,"topics":["fastapi","innohassle","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/one-zero-eight.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-09-11T10:46:45.000Z","updated_at":"2025-11-18T12:06:41.000Z","dependencies_parsed_at":"2023-09-16T00:40:50.473Z","dependency_job_id":"ef1951cb-2d62-4872-9009-8dbef897aa9d","html_url":"https://github.com/one-zero-eight/music-room","commit_stats":null,"previous_names":["one-zero-eight/innohassle-musicroom","one-zero-eight/music-room"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/one-zero-eight/music-room","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/one-zero-eight%2Fmusic-room","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/one-zero-eight%2Fmusic-room/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/one-zero-eight%2Fmusic-room/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/one-zero-eight%2Fmusic-room/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/one-zero-eight","download_url":"https://codeload.github.com/one-zero-eight/music-room/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/one-zero-eight%2Fmusic-room/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32466333,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fastapi","innohassle","python"],"created_at":"2025-05-07T13:54:45.921Z","updated_at":"2026-04-30T13:33:55.540Z","avatar_url":"https://github.com/one-zero-eight.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# InNoHassle Music room\n\n[![GitHub Actions pre-commit](https://img.shields.io/github/actions/workflow/status/one-zero-eight/InNoHassle-MusicRoom/pre-commit.yaml?label=pre-commit)](https://github.com/one-zero-eight/InNoHassle-MusicRoom/actions)\n\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=one-zero-eight_InNoHassle-MusicRoom\u0026metric=ncloc)](https://sonarcloud.io/summary/new_code?id=one-zero-eight_InNoHassle-MusicRoom)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=one-zero-eight_InNoHassle-MusicRoom\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=one-zero-eight_InNoHassle-MusicRoom)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=one-zero-eight_InNoHassle-MusicRoom\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=one-zero-eight_InNoHassle-MusicRoom)\n\n## Table of contents\n\nDid you know that GitHub supports table of\ncontents [by default](https://github.blog/changelog/2021-04-13-table-of-contents-support-in-markdown-files/) 🤔\n\n## About\n\nThis is the API for music room service in InNoHassle ecosystem.\n\n### Features\n\n- 🎵 Booking Music room\n- 📅 Schedule of Music room\n- 🔒 Roles and permissions\n\n### Technologies\n\n- [Python 3.12](https://www.python.org/downloads/) \u0026 [Poetry](https://python-poetry.org/docs/)\n- [FastAPI](https://fastapi.tiangolo.com/) \u0026 [Pydantic](https://docs.pydantic.dev/latest/)\n- [Aiogram 3](https://docs.aiogram.dev/en/latest/) \u0026 [aiogram-dialog](https://aiogram-dialog.readthedocs.io/)\n- Database and ORM: [PostgreSQL](https://www.postgresql.org/), [SQLAlchemy](https://www.sqlalchemy.org/),\n  [Alembic](https://alembic.sqlalchemy.org/en/latest/)\n- Formatting and linting: [Ruff](https://docs.astral.sh/ruff/), [prek](https://prek.j178.dev/)\n- Deployment: [Docker](https://www.docker.com/), [Docker Compose](https://docs.docker.com/compose/),\n  [GitHub Actions](https://github.com/features/actions)\n\n## Development\n\n### Set up for development\n\n1. Install [Python 3.12+](https://www.python.org/downloads/) \u0026 [Poetry](https://python-poetry.org/docs/)\n2. Install project dependencies with [Poetry](https://python-poetry.org/docs/cli/#options-2).\n   ```bash\n   poetry install\n   ```\n3. Start the API:\n   ```bash\n   poetry run python -m src.api\n   ```\n   \u003e Follow provided instructions if needed\n4. Start the Bot:\n   ```bash\n   poetry run python -m src.bot\n   ```\n   \u003e Follow provided instructions if needed\n\n\u003e [!IMPORTANT]\n\u003e For endpoints requiring authorization click \"Authorize\" button in Swagger UI\n\n\u003e [!TIP]\n\u003e Edit `settings.yaml` according to your needs, you can view schema in\n\u003e [config_schema.py](src/config_schema.py) and in [settings.schema.yaml](settings.schema.yaml)\n\n**Set up PyCharm integrations**\n\n1. Run configurations ([docs](https://www.jetbrains.com/help/pycharm/run-debug-configuration.html#createExplicitly)).\n   Right-click the `__main__.py` file in the project explorer, select `Run '__main__'` from the context menu.\n2. Ruff ([plugin](https://plugins.jetbrains.com/plugin/20574-ruff)).\n   It will lint and format your code. Make sure to enable `Use ruff format` option in plugin settings.\n3. Pydantic ([plugin](https://plugins.jetbrains.com/plugin/12861-pydantic)). It will fix PyCharm issues with\n   type-hinting.\n4. Conventional commits ([plugin](https://plugins.jetbrains.com/plugin/13389-conventional-commit)). It will help you\n   to write [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/).\n\n### Localization\n\n**Aiogram:**\n\nAll localized bot messages should be wrapped: `__(\"Hello world\"\")`\n\n1. Extract messages:\n   ```bash\n   poetry run pybabel extract -k __ --input-dirs=. -o locales/messages.pot\n   ```\n2. Update translations:\n   ```bash\n   poetry run pybabel update -i locales/messages.pot -d locales -D messages --ignore-pot-creation-date\n   ```\n3. Translate messages in created `.po` files\n4. Compile translations:\n   ```bash\n   poetry run pybabel compile -d locales -D messages\n   ```\n\n**Aiogram dialog:**\n\nAdd translations identifiers (strings inside `I18Format`) and their translations to `.ftl` files\n\n### Deployment\n\nWe use Docker with Docker Compose plugin to run the website on servers.\n\n1. Copy the file with environment variables: `cp .example.env .env`\n2. Change environment variables in the `.env` file\n3. Copy the file with settings: `cp settings.example.yaml settings.yaml`\n4. Change settings in the `settings.yaml` file according to your needs\n   (check [settings.schema.yaml](settings.schema.yaml) for more info)\n5. Install Docker with Docker Compose\n6. Build a Docker image: `docker compose build --pull`\n7. Run the container: `docker compose up --detach`\n8. Check the logs: `docker compose logs -f`\n\n# How to update dependencies\n\n## Project dependencies\n\n1. Run `poetry update` to update all dependencies (it may update nothing, so double-check)\n2. Run `poetry show --outdated --all` to check for outdated dependencies\n3. Run `poetry add \u003cpackage\u003e@latest` to add a new dependency if needed\n\n## Pre-commit hooks\n\n1. Run `uv run prek auto-update`\n\nAlso, Dependabot will help you to keep your dependencies up-to-date, see [dependabot.yml](.github/dependabot.yml).\n\n## Contributing\n\nWe are open to contributions of any kind.\nYou can help us with code, bugs, design, documentation, media, new ideas, etc.\nIf you are interested in contributing, please read\nour [contribution guide](https://github.com/one-zero-eight/.github/blob/main/CONTRIBUTING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fone-zero-eight%2Fmusic-room","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fone-zero-eight%2Fmusic-room","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fone-zero-eight%2Fmusic-room/lists"}