{"id":27946402,"url":"https://github.com/one-zero-eight/events","last_synced_at":"2025-05-07T13:54:44.776Z","repository":{"id":157665240,"uuid":"619172922","full_name":"one-zero-eight/events","owner":"one-zero-eight","description":"Schedule of academic classes, sports, cleaning, moodle dealines, etc. at Innopolis University.","archived":false,"fork":false,"pushed_at":"2025-02-03T17:33:47.000Z","size":1192,"stargazers_count":6,"open_issues_count":14,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-07T13:54:42.498Z","etag":null,"topics":["fastapi","innohassle","python"],"latest_commit_sha":null,"homepage":"https://api.innohassle.ru/events","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}},"created_at":"2023-03-26T13:42:20.000Z","updated_at":"2025-02-03T17:33:50.000Z","dependencies_parsed_at":"2023-10-16T11:06:36.607Z","dependency_job_id":"6ca27230-91e8-4fd3-957a-9b5522d3ba32","html_url":"https://github.com/one-zero-eight/events","commit_stats":null,"previous_names":["one-zero-eight/events"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/one-zero-eight%2Fevents","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/one-zero-eight%2Fevents/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/one-zero-eight%2Fevents/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/one-zero-eight%2Fevents/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/one-zero-eight","download_url":"https://codeload.github.com/one-zero-eight/events/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252892530,"owners_count":21820646,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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:40.596Z","updated_at":"2025-05-07T13:54:44.770Z","avatar_url":"https://github.com/one-zero-eight.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Events API | InNoHassle ecosystem\n\n\u003e https://api.innohassle.ru/events\n\n[![GitHub Actions pre-commit](https://img.shields.io/github/actions/workflow/status/one-zero-eight/InNoHassle-Events/pre-commit.yaml?label=pre-commit)](https://github.com/one-zero-eight/InNoHassle-Events/actions)\n\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=one-zero-eight_InNoHassle-Events\u0026metric=ncloc)](https://sonarcloud.io/summary/new_code?id=one-zero-eight_InNoHassle-Events)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=one-zero-eight_InNoHassle-Events\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=one-zero-eight_InNoHassle-Events)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=one-zero-eight_InNoHassle-Events\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=one-zero-eight_InNoHassle-Events)\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 events service in InNoHassle ecosystem. Lets...\n\n### Features\n\n- 📅 Event Aggregation\n    - 📚 [Core and Elective Courses](https://eduwiki.innopolis.university/index.php/All:Schedule)\n    - 🏋️ [Sports Classes](https://sport.innopolis.university)\n    - 🧹 [Dorm Cleaning](https://hotel.innopolis.university/studentaccommodation/)\n    - 🎵 [Music Room Booking](https://innohassle.ru/music-room)\n    - 📖 [Moodle Events](https://moodle.innopolis.university/)\n- 🌟 Personalized Schedule\n    - ⭐ Favorites Management\n    - 👀 Hide/Unhide Groups\n    - 🆔 Automatically add schedule based on your identity\n- 🔄 Schedule Export\n    - 🗓️ Schedule in [.ics format](https://icalendar.org/) to import into your calendar app\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/)\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/), [pre-commit](https://pre-commit.com/)\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/), [Poetry](https://python-poetry.org/docs/),\n   [Docker](https://docs.docker.com/engine/install/)\n2. Install project dependencies with [Poetry](https://python-poetry.org/docs/cli/#options-2).\n   ```bash\n   poetry install\n   ```\n3. Start development server:\n   ```bash\n   poetry run python -m src.api --reload\n   ```\n   \u003e Follow provided instructions if needed\n4. Open in the browser: http://localhost:8000\n   \u003e The api will be reloaded when you edit the code\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### Deployment\n\nWe use Docker with Docker Compose plugin to run the website on servers.\n\n1. Copy the file with environment variables: `cp .env.example .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. Deploy [Music room service](https://github.com/one-zero-eight/InNoHassle-MusicRoom)\n   \u003e Or just create a network for the music room service: `docker network create music-room`\n7. Build a Docker image: `docker compose build --pull`\n8. Run the container: `docker compose up --detach`\n9. Check the logs: `docker compose logs -f`\n\n## FAQ\n\n### How to update dependencies?\n\nProject dependencies\n\n1. Run `poetry update` to update all dependencies\n2. Run `poetry show --outdated` to check for outdated dependencies\n3. Run `poetry add \u003cpackage\u003e@latest` to add a new dependency if needed\n\nPre-commit hooks\n\n1. Run `poetry run pre-commit autoupdate`\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%2Fevents","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fone-zero-eight%2Fevents","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fone-zero-eight%2Fevents/lists"}