{"id":24914049,"url":"https://github.com/ahnaf19/hotel_transylvania","last_synced_at":"2026-04-13T22:33:42.695Z","repository":{"id":274422612,"uuid":"922495877","full_name":"Ahnaf19/hotel_transylvania","owner":"Ahnaf19","description":"This project compiles APIs for the `Hotel Transylvania`. Simple comprehensive APIs offering CRUD operations for both guests and rooms.","archived":false,"fork":false,"pushed_at":"2025-02-25T15:53:46.000Z","size":141,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-28T05:25:13.465Z","etag":null,"topics":["api","fastapi","fastapi-crud","github-actions","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/Ahnaf19.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}},"created_at":"2025-01-26T11:27:04.000Z","updated_at":"2025-03-20T16:40:40.000Z","dependencies_parsed_at":"2025-03-28T05:34:17.195Z","dependency_job_id":null,"html_url":"https://github.com/Ahnaf19/hotel_transylvania","commit_stats":null,"previous_names":["ahnaf19/hotel_transylvania"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Ahnaf19/hotel_transylvania","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahnaf19%2Fhotel_transylvania","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahnaf19%2Fhotel_transylvania/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahnaf19%2Fhotel_transylvania/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahnaf19%2Fhotel_transylvania/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ahnaf19","download_url":"https://codeload.github.com/Ahnaf19/hotel_transylvania/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahnaf19%2Fhotel_transylvania/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31774028,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T20:17:16.280Z","status":"ssl_error","status_checked_at":"2026-04-13T20:17:08.216Z","response_time":93,"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":["api","fastapi","fastapi-crud","github-actions","python"],"created_at":"2025-02-02T06:16:04.765Z","updated_at":"2026-04-13T22:33:42.684Z","avatar_url":"https://github.com/Ahnaf19.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Welcome to Hotel Transylvania!\n\n## Table of Contents\n\n1. [Introduction](#introduction)\n2. [Docker Build \u0026 Run](#docker-build--run)\n\n- [Prerequisites](#prerequisites)\n- [Build Docker Image](#build-docker-image)\n- [Run Docker Container](#run-docker-container)\n- [Stopping the Container](#stopping-the-container)\n- [Removing the Container](#removing-the-container)\n- [Removing the Docker Image](#removing-the-docker-image)\n\n3. [Project Setup](#project-setup)\n\n- [Create and Activate Virtual Environment](#create-and-activate-virtual-environment)\n- [Install Dependencies](#install-dependencies)\n- [Makefile Instructions](#makefile-instructions)\n- [Run Uvicorn Server](#run-uvicorn-server)\n- [Running .py \u0026 Pytest](#running-py--pytest)\n- [Generate Pytest Code Coverage](#generate-pytest-code-coverage)\n\n4. [Continuous Integration (CI)](#continuous-integration-ci)\n\n- [Implement GitHub Action Workflow for testing](#ci-implement-github-action-workflow-for-testing)\n- [Code Formatting \u0026 Linting with Pre-commit](#ci-code-formatting--linting-with-pre-commit-black-isort-mypy)\n- [Code Scanning with CodeQL](#ci-code-scanning-with-codeql)\n\n5. [Resources](#resources)\n6. [Collaborate \u0026 Contribute](#collaborate--contribute)\n7. [License](#license)\n\n## Introduction\n\nThis repository contains the codebase for a web application built using FastAPI and Uvicorn. The application consists of simple scalable APIs for guests and rooms, can be integrated to manage hotel reservations and related functionalities. This documentation guides through the processes of setting up the development environment, installing dependencies, running the server, executing tests and incorporating CI unit testing using github actions.\n\n\u003e [!NOTE]\n\u003e Developed on `python 3.10.16`. Also tested and worked on [`3.11.11`, `3.12.8`, `3.13.1`]\n\n![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54) ![FastAPI](https://img.shields.io/badge/FastAPI-005571?style=for-the-badge\u0026logo=fastapi) ![Pydantic](https://img.shields.io/badge/pydantic-4A91A2?style=for-the-badge\u0026logo=python\u0026logoColor=white) ![Pytest](https://img.shields.io/badge/pytest-0A9EDC?style=for-the-badge\u0026logo=pytest\u0026logoColor=white) ![Uvicorn](https://img.shields.io/badge/uvicorn-111111?style=for-the-badge\u0026logo=uvicorn\u0026logoColor=white) ![Loguru](https://img.shields.io/badge/loguru-FF9C00?style=for-the-badge\u0026logo=python\u0026logoColor=white) ![Makefile](https://img.shields.io/badge/makefile-075EAF?style=for-the-badge\u0026logo=gnu\u0026logoColor=white) ![Black](https://img.shields.io/badge/black-000000?style=for-the-badge\u0026logo=python\u0026logoColor=white) ![Pre-commit](https://img.shields.io/badge/pre--commit-FAAF3A?style=for-the-badge\u0026logo=pre-commit\u0026logoColor=white) ![CodeQL](https://img.shields.io/badge/codeql-006F99?style=for-the-badge\u0026logo=github-actions\u0026logoColor=white)\n![GitHub Actions](https://img.shields.io/badge/github%20actions-2088FF?style=for-the-badge\u0026logo=github-actions\u0026logoColor=white) ![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white) ![MVC Architecture](https://img.shields.io/badge/MVC%20Architecture-5C6BC0?style=for-the-badge\u0026logo=angular\u0026logoColor=white) ![MIT License](https://img.shields.io/badge/license-MIT-green?style=for-the-badge)\n\n\u003e [!TIP]\n\u003e Some essential topics are not integrated in this project. Check out the newly added resources in [Resources](#resources) for:\n\n- Newly created **FastAPI boilerplate**.\n- Use **FastAPI lifespan** when initiating app or alternatively use **startup, shutdown event**s.\n- Use of **background tasks** in FastAPI.\n- **Integrating databases**\n  - SQL Databases using SQLModel and SQLAlchemy\n    - PostgreSQL\n    - MySQL\n  - Non SQL:\n    - Redis (for caching) \u0026 redis-om (for persistent db)\n    - MongoDB\n    - AWS DynamoDB\n\nThis project highlights:\n\n1. `FastAPI` + `Uvicorn`: Lightning-fast API development for guests and rooms ⚡\n2. MVC Architecture (no V though :/ ): Structured for scalability 🔥\n   - separate application and tests directory\n   - clean module/package initiation at each submodule\n   - modular directory structure for required data, schemas, services and routers\n3. Clean Application\n   - Added multiple modular routers to the main\n   - can be switched to any other framework easily\n4. `Pydantic` + `Type Hints`: Strong data validation 💪\n5. OOP-based CRUD: Maintainable and reusable service layers 🛠\n6. Custom Exception Handling with `fastapi.HTTPException` 🚨\n7. Logging with `Loguru`: Simplified yet powerful logging 📝\n8. Automated Testing: `pytest` for unit tests 🔄\n9. Code Coverage: `pytest-cov` for generating coverage metrics 📊\n10. `GitHub Actions`: CI pipeline to ensure code quality ✅\n11. `Makefile` for Automation: Professional project workflow ⚙️\n12. Branch Protection Rules: PRs must pass checks before merging 🔐\n13. Code Analysis using `codeql`: GitHub Actions \u0026 Python code vulnerability check 🤖\n14. Code Auto-formatting \u0026 Linting with Pre-commit (check-yaml, end-of-file-fixer, trailing-whitespace, black, isort, mypy) 🎨\n15. Dockerized the repo 🐳\n\n🛠 Upcoming Enhancements:\n\n- [x] Code Coverage: `pytest-cov` for generating coverage metrics 📊\n- [x] Static Code Analysis using `codeql` 🤖\n- [x] Code Auto-formatting \u0026 Linting with Pre-commit (check-yaml, end-of-file-fixer, trailing-whitespace, black, isort, mypy) 🎨\n- [x] add GitHub Action for format checks ✅\n- [x] dockerize the repo \u0026 add resources 🐳\n\n\u003e [!TIP]\n\u003e Check the [Resources](#resources) section for a quick start on `FastAPI`, `Pydantic`, `Uvicorn`, `Loguru`, `Pytest`, `Pytest-cov`, `Makefile`, `CodeQL`, `pre-commit` and `GitHub Actions`.\n\n## Docker Build \u0026 Run\n\nTo build and run the application using Docker, follow these steps:\n\n### Prerequisites\n\nEnsure you have Docker installed on your machine. You can download it from [here](https://www.docker.com/products/docker-desktop).\n\n#### Build Docker Image\n\n\u003e [!IMPORTANT]\n\u003e `Docker Daemon` or `Docker Desktop` must be running while building Docker Image.\n\nNavigate to the root directory of the repo where the `Dockerfile` is located and run the following command to build the Docker image:\n\n```sh\ndocker build -t hotel_transylvania:latest .\n```\n\n#### Run Docker Container\n\nAfter building the Docker image, you can run it using the following command:\n\n```sh\ndocker run -dp 8000:8000 hotel_transylvania:latest\n```\n\nThis will start the application in a Docker container. The application can be accessed at `http://localhost:8000` e.g. `127.0.0.1:8000`\n\n\u003e [!NOTE]\n\u003e `-dp` (`-d` \u0026 `-p`) tag runs the container in detached mode (in the background, terminal is available to use right away) and container port `8000` is mapped to local port `8000`.\n\n#### Stopping the Container\n\nTo stop the running container, first find the container ID using:\n\n```sh\ndocker ps\n```\n\nThen stop the container using:\n\n```sh\ndocker stop \u003ccontainer_id\u003e\n```\n\n#### Removing the Container\n\n```sh\ndocker rm \u003ccontainer_id\u003e\n```\n\n#### Removing the Docker Image\n\nTo remove the Docker image, use:\n\n```sh\ndocker rmi hotel_transylvania:latest\n```\n\nThis will delete the Docker image from your local machine.\n\n\u003e [!TIP]\n\u003e Check the [Resources](#resources) `Dockerization` section for more.\n\n## Project Setup\n\n### Create and Activate Virtual Environment\n\n**Python Version**: Developed on `python 3.10.16`. Also tested and worked on [`3.11.11`, `3.12.8`, `3.13.1`]\n\n```\n# For Linux and macOS\npython3.10 -m venv {venv_name}\nsource {venv_name}/bin/activate\n\n# For Windows CMD\npython -m venv {venv_name}\n{venv_name}\\Scripts\\activate.bat\n\n# For Windows PowerShell\npython -m venv {venv_name}\n{venv_name}\\Scripts\\Activate.ps1\n```\n\n### Install Dependencies\n\n```\npip install --upgrade pip\npip install -r requirements.txt\n\n# for testing\npip install -r requirements_test.txt\n```\n\n### Makefile Instructions\n\nThe repository includes a `Makefile` to simplify common tasks.\n\n\u003e might need to install `Makefile` beforehand.\n\n#### Usage\n\nTo use the `Makefile`, run:\n\n```\nmake [target]\n```\n\nTry running `make help` to see all available `targets`.\n\n\u003e [!TIP]\n\u003e Check the [Resources](#resources) `Makefile` section for more.\n\n### Run Uvicorn Server\n\n```\nuvicorn app.main:app --reload\n```\n\n### Running .py \u0026 Pytest\n\na. run as module (-m)\n\n```\n# don't include .py extension\npython -m app.main\n\n# for running pytest explicitly, need to go for the alternative approach below\n```\n\n[alternatively]\n\nb. export the root directory to python path\n\n```\n# probably need to run at each new terminal session\n\n# for linux \u0026 macOS\nexport PYTHONPATH=\"/path/to/hotel_transylvania\"\n\n# for windows cmd\nset PYTHONPATH=/path/to/hotel_transylvania\n\n# for windows powershell\n$env:PYTHONPATH = \"/path/to/hotel_transylvania\"\n```\n\nnow can run:\n\n```\n# run .py\npython app/main.py\n\n# run pytest\npytest\npytest tests/\npytest tests/testfile.py\n```\n\n[alternatively: **configure pytest**]\n\nadd any one of `pytest.ini` or `tox.ini` or `setup.cfg` at root and add following:\n\n```\n[pytest]\npythonpath = .\n```\n\nNow, exporting the root path is not necessary, pytest would work. Try:\n\n```\n# run pytest\npytest\npytest tests/\npytest tests/test_file_name.py\n```\n\n### Generate Pytest Code Coverage\n\nGenerate code coverage report:\n\n```\npytest --cov=[repo dir]\n\n# for example:\npytest --cov=hotel_transylvania\n```\n\nGenerate code coverage report HTML:\n\n```\ncoverage HTML\n```\n\nThis would write HTML report to `htmlcov/index.html`\n\n### Continuous Integration (CI)\n\n- unit testing using GitHub Actions\n- Code formatting \u0026 linting with Pre-commit (black, isort, mypy)\n- Code scanning with CodeQL\n\n#### CI: Implement GitHub Action Workflow for testing\n\nTo automate the pytest testing using GitHub Actions, follow these steps:\n\n1. Create a `.github/workflows` directory in the root of your repository if it doesn't already exist.\n\n2. Inside the `.github/workflows` directory, create/add `.yml`/`.yaml` file that contains the workflow `CI` jobs. For example see: [unit_tests.yml](.github/workflows/unit_tests.yml)\n\n3. Add event triggers like on push/pull request and branch/file filters according to need.\n\nThis workflow will trigger on every push and pull request to the `main` branch. It will set up Python 3.10, install the dependencies, and run the jobs 1) `unit-tests` 2) `formatting-and-linting-checks`\n\n\u003e [!TIP]\n\u003e Check the [Resources](#resources) `CI/GitHub Actions` section for more.\n\n#### CI: Code Formatting \u0026 Linting with Pre-commit (black, isort, mypy)\n\nTo auto format the codebase, follow these steps:\n\n1. at repo `root/` create a `.pre-commit-config.yaml` file. For example see: [.pre-commit-config.yaml](.pre-commit-config.yaml)\n2. Add necessary repos and hooks to the `.yaml` file. In this repo following hooks are initiated:\n\n- `check-yaml`: Validates YAML files for syntax errors.\n- `end-of-file-fixer`: Ensures files end with a newline.\n- `trailing-whitespace`: Removes trailing whitespace from files.\n- `black`: Automatically formats code to adhere to PEP 8 standards.\n- `isort`: Sorts and organizes imports in the code.\n- `mypy`: Performs static type checking to ensure type correctness.\n\nDon't forget to add the latest version/revision available for all hooks.\n\n3. run the following commands to set up the hooks, configured hooks will be run at each commit.\n\n```\npre-commit install\npre-commit autoupdate\n```\n\n\u003e [!NOTE]\n\u003e after pre-commit hooks are installed, every time `git commit` is run, the specified hooks will automatically check and format the code before allowing the commit.\n\n\u003e [!WARNING]\n\u003e If any check fails, corresponding hook will block the commit, make the required changes to be committed next.\n\n\u003e [!TIP]\n\u003e Check the [Resources](#resources) `CI/pre-commit Hooks` section for more.\n\n##### Invoke Manual Format\n\n```\n# Format all directories\n[black | isort | mypy --format] .\n\n# Format a specific file or directory\n[black | isort | mypy --format] path/to/file_or_directory\n```\n\n##### Invoke Manual Check\n\nRun all pre-commit hooks:\n\n```\n# Check all formatting for all directories\npre-commit run --all-files\n\n# Run for a specific directory or file\npre-commit run --files path/to/file_or_directory\n\n# run explicit hook\npre-commit run black --all-files  # Only run Black\n```\n\nRun specific hook:\n\n```\n# Check formatting, import sorting, code style, and type checking for all directories\n[black --check | isort --check-only | flake8 | mypy] .\n\n# Check formatting, import sorting, code style, and type checking for a specific file or directory\n[black --check | isort --check-only | flake8 | mypy] path/to/file_or_directory\n```\n\n##### Add, modify and Update hooks\n\n\u003e [!NOTE]\n\u003e To add or modify hooks, write accordingly in the [.pre-commit-config.yaml](.pre-commit-config.yaml) file.\n\nAuto udate hooks:\n\n```\npre-commit autoupdate\n\n```\n\n#### CI: Code Scanning with CodeQL\n\nFrom the `security` tab of the repo, enable `code scanning alert` with `default` configuration.\n\n\u003e [!TIP]\n\u003e Check the [Resources](#resources) `CI/CodeQL` section for more.\n\nthis now enables:\n\n- Automated Security Scanning – Detects vulnerabilities and coding issues. ✅\n- Alerts for Security Issues – Displays issue type, severity, file location, and suggested fixes. ✅\n- PR \u0026 Push Scanning – Blocks insecure code from merging until fixed. ✅\n- Custom Query Support – Use CodeQL to define custom security checks. ✅\n- Integration with GitHub Actions – Automate scanning on every commit and PR. ✅\n- Security Insights \u0026 Compliance – Helps with secure coding practices and audits. ✅\n\n## Resources\n\n- FastAPI official \u003ca href=\"https://fastapi.tiangolo.com/learn/\"\u003edocumentation\u003c/a\u003e\n\n  - Use of **FastAPI lifespan** in app initiation --\u003e reference repository \u003ca href=\"https://github.com/Ahnaf19/fast-cart\"\u003efast-cart\u003c/a\u003e\n    - see \u003ca href=\"https://fastapi.tiangolo.com/advanced/events/\"\u003eevents-doc\u003c/a\u003e\n  - Use of **Background Tasks**\n    - see \u003ca href=\"https://fastapi.tiangolo.com/tutorial/background-tasks/\"\u003ebackground-tasks-doc\u003c/a\u003e\n  - **Integrating Databases**\n    - SQL db\n      - [`PostgreSQL`, `MySQL`]\n        - see \u003ca href=\"https://fastapi.tiangolo.com/tutorial/sql-databases/\"\u003esql-databases\u003c/a\u003e\n        - see \u003ca href=\"https://sqlmodel.tiangolo.com/\"\u003esqlmodel\u003c/a\u003e\n        - reference repository \u003ca href=\"https://github.com/Ahnaf19/fast-cart\"\u003efast-cart\u003c/a\u003e\n    - Non SQL db\n      - `Redis` (for caching) and `Redis-OM` (for persistent db)\n        - reference repository \u003ca href=\"https://github.com/Ahnaf19/fast-cart\"\u003efast-cart\u003c/a\u003e\n      - `AWS DynamoDB`\n        - reference repository \u003ca href=\"https://github.com/Ahnaf19/dynamodb_pycrud\"\u003edynamodb_pycrud\u003c/a\u003e (not integrated with FastAPI but shows how to interact with DynamoDB with `Boto3` SDK)\n      - `MongoDB`\n        - resource yet to be added\n\n- FastAPI boilerplate \u003ca href=\"https://github.com/Ahnaf19/fastapi-boilerplate\"\u003erepo\u003c/a\u003e for quickstart\n\n- learn basic usage of `fastAPI` \u0026 `Github Actions` from the following repo:\n\n  - \u003ca href=\"https://github.com/Ahnaf19/learn_fastapi\"\u003elearn_fastapi\u003c/a\u003e\n\n- Learn about `Makefile` quickly from these awesome resources:\n\n  - Guidance for installing it on: [\u003ca href=\"https://stackoverflow.com/questions/32127524/how-to-install-and-use-make-in-windows\"\u003eWindows\u003c/a\u003e, \u003ca href=\"https://askubuntu.com/questions/161104/how-do-i-install-make\"\u003elinux-unix\u003c/a\u003e]\n  - \u003ca href=\"https://makefiletutorial.com/\"\u003emakefile-tutorial\u003c/a\u003e\n  - \u003ca href=\"https://www.youtube.com/watch?v=Yt-UF7fNLJE\"\u003eyoutube-NeuralNine\u003c/a\u003e\n\n- Data validation with `pydantic` \u003ca href=\"https://docs.pydantic.dev/latest/api/base_model/\"\u003edocumentation-base_model\u003c/a\u003e\n\n- Custom exception handling with `fastapi.HTTPException` \u003ca href=\"https://fastapi.tiangolo.com/tutorial/handling-errors/\"\u003ehandling-errors\u003c/a\u003e\n\n- Logging with `loguru` \u003ca href=\"https://loguru.readthedocs.io/en/stable/\"\u003edocumentation\u003c/a\u003e\n\n- Running ASGI server with `uvicorn` \u003ca href=\"https://www.uvicorn.org/\"\u003edocumentation\u003c/a\u003e\n\n- Testing with `pytest`:\n\n  - Official \u003ca href=\"https://docs.pytest.org/en/7.1.x/\"\u003edocumentation\u003c/a\u003e\n  - basic usage of `pytest` from this repo: \u003ca href=\"https://github.com/Ahnaf19/learn_pytest\"\u003elearn_pytest\u003c/a\u003e\n\n- Pytest Code Coverage with `pytest-cov`:\n\n  - Coverage report generation with Pytest-cov \u003ca href=\"https://pytest-cov.readthedocs.io/en/latest/readme.html\"\u003edocumenation\u003c/a\u003e\n\n- CI:\n\n  - GitHub Actions\n\n    - \u003ca href=\"https://docs.github.com/en/actions/about-github-actions/understanding-github-actions#the-components-of-github-actions\"\u003eComponents\u003c/a\u003e of an Action\n    - Official GitHub Actions \u003ca href=\"https://docs.github.com/en/actions\"\u003edocumentation\u003c/a\u003e\n    - Learn \u003ca href=\"https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/triggering-a-workflow#about-workflow-triggers\"\u003etriggering a workflow\u003c/a\u003e\n    - \u003ca href=\"https://learnxinyminutes.com/yaml/\"\u003eLearn\u003c/a\u003e `yml` or `yaml` file\n    - Frequently used community actions:\n      - Clone repo in the workflow: \u003ca href=\"https://github.com/actions/checkout\"\u003eactions/checkout\u003c/a\u003e\n      - Set up python in the workflow: \u003ca href=\"https://github.com/actions/setup-python\"\u003eactions/setup-python\u003c/a\u003e\n\n  - Pre-commit Hooks (black, isort, mypy)\n\n    - Follow the official pre-commit \u003ca href=\"https://pre-commit.com/\"\u003equickstart documentation\u003c/a\u003e\n    - Find suitable \u003ca href=\"https://pre-commit.com/hooks.html\"\u003ehooks\u003c/a\u003e\n\n  - CodeQL\n\n    - GitHub security \u003ca href=\"https://docs.github.com/en/code-security/getting-started/github-security-features\"\u003efeatures\u003c/a\u003e\n    - CodeQL \u003ca href=\"https://docs.github.com/en/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning\"\u003edefault setup\u003c/a\u003e\n\n- Dockerization:\n  - Microsoft Documentation: \u003ca href=\"https://learn.microsoft.com/en-us/visualstudio/docker/tutorials/docker-tutorial?WT.mc_id=vscode_docker_aka_getstartedwithdocker\"\u003eCreate a docker app with vs code\u003c/a\u003e\n  - follow these awesome youtube videos for quick comprehension: [\u003ca href=\"https://www.youtube.com/watch?v=0TFWtfFY87U\"\u003evide01\u003c/a\u003e, \u003ca href=\"https://www.youtube.com/watch?v=gAkwW2tuIqE\"\u003evideo02\u003c/a\u003e]\n\n## Collaborate \u0026 Contribute\n\nBug reports, issues, forks and pull requests are always welcome!\n\n## License\n\nThis project is available as open source under the MIT License. See the [LICENSE](./LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahnaf19%2Fhotel_transylvania","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahnaf19%2Fhotel_transylvania","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahnaf19%2Fhotel_transylvania/lists"}