{"id":50882329,"url":"https://github.com/marekzelinka/task-api","last_synced_at":"2026-06-15T14:01:29.438Z","repository":{"id":332617626,"uuid":"1129929756","full_name":"marekzelinka/task-api","owner":"marekzelinka","description":"Task Management REST API for managing tasks","archived":false,"fork":false,"pushed_at":"2026-02-18T20:02:38.000Z","size":226,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-02-18T20:05:00.240Z","etag":null,"topics":["async","fastapi","jwt","neon","postgresql","pydantic","python","ruff","sqlalchemy","sqlmodel","ty","uv"],"latest_commit_sha":null,"homepage":"https://task-management-api-green-rain-3367.fly.dev/docs","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marekzelinka.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2026-01-07T19:35:00.000Z","updated_at":"2026-02-18T20:02:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"a00b9165-213c-45a2-86d4-2f29c123f8fb","html_url":"https://github.com/marekzelinka/task-api","commit_stats":null,"previous_names":["marekzelinka/task-management-api","marekzelinka/task-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/marekzelinka/task-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marekzelinka%2Ftask-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marekzelinka%2Ftask-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marekzelinka%2Ftask-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marekzelinka%2Ftask-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marekzelinka","download_url":"https://codeload.github.com/marekzelinka/task-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marekzelinka%2Ftask-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34365597,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["async","fastapi","jwt","neon","postgresql","pydantic","python","ruff","sqlalchemy","sqlmodel","ty","uv"],"created_at":"2026-06-15T14:01:28.412Z","updated_at":"2026-06-15T14:01:29.432Z","avatar_url":"https://github.com/marekzelinka.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Task management REST API\n\nTask management REST API built with **FastAPI** and **SQLAlchemy**. This project manages a database of tasks, project, with user auth using oauth, using a robust **Python** stack designed for speed and developer ergonomics.\n\n## 🚀 Features\n\n- **High-Performance API**: Fully asynchronous endpoints leveraging `FastAPI` and `SQLAlchemy`.\n- **CRUD Operations**: Complete management for **Tasks**, **Projects**.\n- **Relational Data**: Complex relationships handled seamlessly via SQLAlchemy.\n- **Auto-Generated Documentation**: Interactive API docs available via **OpenAPI (Swagger UI)**.\n- **Modern Tooling**: Managed with `uv` for lightning-fast environment and dependency resolution.\n- **Code Quality**: Strict linting and formatting using `Ruff` and type checking using `ty`.\n- **Database Migrations**: Version-controlled schema changes with `Alembic`.\n\n## 🛠 Tech Stack\n\n- **Framework**: [FastAPI](https://fastapi.tiangolo.com/)\n- **ORM/Models**: [SQLAlchemy](https://www.sqlalchemy.org/) (Async SQLAlchemy + Pydantic)\n- **Database**: [SQLite](https://sqlite.org/)\n- **Migrations**: [Alembic](https://alembic.sqlalchemy.org/)\n- **Package Manager**: [uv](https://docs.astral.sh/uv/)\n- **Linter/Formatter**: [Ruff](https://docs.astral.sh/ruff/)\n- **Type Checker**: [ty](https://docs.astral.sh/ty/)\n\n- Command Runner (optional extension): [just](https://just.systems/)\n\n## 🏗 Setup\n\n### Prerequisites\n\nThis project uses the modern `pyproject.toml` standard for dependency management and requires the `uv` tool to manage the environment.\n\n**Ensure `uv` is installed** globally on your system. If not, follow the official installation guide for [`uv`](https://docs.astral.sh/uv/).\n\nCreate a [Neon account](https://console.neon.tech/signup) for serverless Postgres.\n\n### Installation\n\n1.  **Create environment and install dependencies:**\n\n    ```sh\n    uv sync\n    ```\n\n2.  **Set up Environment Variables:**\n\n    Copy the contents of [`.env.example`](./.env.example) to `.env` file in the root directory.\n    \n     ```sh\n    cp .env.example .env\n    ```\n\n3.  **Run Migrations:**\n\n    Initialize your SQLite database to the latest schema:\n\n    ```sh\n    uv run alembic upgrade head\n    ```\n\n### Running the Application\n\nStart the development server using `uv`:\n\n```sh\nuv run uvicorn app.main:app --reload\n```\n\nOnce started, access the interactive docs at: [http://localhost:8000/docs](http://localhost:8000/docs).\n\n### 💻 Local Development\n\n1. Setup your editor to work with [ruff](https://docs.astral.sh/ruff/editors/setup/) and [ty](https://docs.astral.sh/ty/editors/).\n\n2. Install the [justfile extension](https://just.systems/man/en/editor-support.html) for your editor, and use the provided `./justfile` to run commands.\n\n## Code Quality\n\n- Check for linting errors using `ruff check`: \n\n  ```sh\n  uv run ruff check --fix\n  ```\n\n- Format the code using `ruff format`: \n\n  ```sh\n  uv run ruff format\n  ```\n\n- Run typechecker using `pyrefly check`: \n\n  ```sh\n  uv run pyrefly check\n  ```\n\n## TODO\n\n- [x] user auth\n- [x] projects route \n- [x] projects have many tasks\n- [x] task belong to one project\n- [x] add `due_date` to tasks\n- [ ] bulk actions for tasks, DELETE and PATCH\n- [x] explore async SQLAlchemy\n- [x] Tags/Labels, table: Tag, fields:id, name, color_hex, user_id, relationship: Many-to-Many with task.\n- [ ] add color hex field to project\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarekzelinka%2Ftask-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarekzelinka%2Ftask-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarekzelinka%2Ftask-api/lists"}