From 48192b1729f9c86b68d070b346caa821f85c908f Mon Sep 17 00:00:00 2001 From: MahdiiMax Date: Sat, 29 Aug 2026 22:07:00 +0330 Subject: [PATCH 1/2] docs: add changelog --- CHANGELOG.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..70092e9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,62 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/), +and this project adheres to [Semantic Versioning](https://semver.org/). + +## [1.2.0] - 2026-08-28 + +### Added + +- `GET /tasks/stats` endpoint with aggregate counts by status/priority, + overdue, due-today, and completed-this-week +- Sorting support on the task listing via a whitelisted `?sort=` parameter + (`-` prefix for descending order) +- `per_page` pagination control (1–100, default 10) +- Continuous integration pipeline (Pint + Pest suite, including a PostgreSQL + matrix) via GitHub Actions +- CI status badge in the README +- Project `color` cast to the `ProjectColor` enum + +### Changed + +- PHPUnit config split into `phpunit.xml` (SQLite) and `phpunit.pgsql.xml` + (PostgreSQL) for the driver matrix +- Composer package renamed from `laravel/laravel` to `mahdiimax/taskify` +- Task `status`, `priority`, and `due_date` cast to enums / datetime +- Task filtering extracted into a reusable `filter()` query scope using + driver-aware `whereLike()` + +### Fixed + +- Delete endpoints return a proper empty `204 No Content` response +- Redundant manual `Hash::make()` removed in favor of the `hashed` cast +- Eager loading added to prevent N+1 queries on task resources + +## [1.1.0] - 2026-08-14 + +### Added + +- Projects: full CRUD with soft delete & restore +- Color-coded projects via the `ProjectColor` enum +- `project_id` on tasks, with filtering by project scoped to the owner +- Exposed `project_id` in the task resource + +## [1.0.0] - 2026-08-06 + +### Added + +- Sanctum token authentication (24h expiry, logout revocation) +- Full task CRUD with soft delete & restore (`trashed` / `restore`) +- Task filtering by `status` / `priority` and case-insensitive `search` +- Per-user task isolation via policies +- Rate limiting (auth 5/min, API 60/min) +- Interactive OpenAPI docs via Scramble +- Pest feature tests: auth, revocation, token expiry, filtering, rate limits +- PostgreSQL + Docker / pgAdmin setup + +[Unreleased]: https://github.com/MahdiiMax/taskify/compare/1.1.0...develop +[1.2.0]: https://github.com/MahdiiMax/taskify/compare/1.1.0...1.2.0 +[1.1.0]: https://github.com/MahdiiMax/taskify/compare/1.0.0...1.1.0 +[1.0.0]: https://github.com/MahdiiMax/taskify/releases/tag/1.0.0 From 1f1d1fad4197a66beb1609b8aa011c35a0c81e04 Mon Sep 17 00:00:00 2001 From: MahdiiMax Date: Sat, 29 Aug 2026 22:08:38 +0330 Subject: [PATCH 2/2] docs: refresh README for v1.2.0 features and testing --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 285355e..c6647da 100644 --- a/README.md +++ b/README.md @@ -22,10 +22,12 @@ - 🔐 **Sanctum token auth** — 24-hour token expiry, revocable via logout - 📝 **Full CRUD** with soft delete & restore -- 🔍 **Smart filtering** — exact `status`/`priority` filters + case-insensitive search +- 🔍 **Smart filtering** — exact `status`/`priority`/`project_id` filters + case-insensitive search, plus `?sort=` ordering and `?per_page=` pagination +- 📊 **Statistics** — `GET /tasks/stats` aggregates by status/priority, overdue, due-today, and completed-this-week - 👤 **Per-user isolation** — tasks and projects are private to their owner - 📁 **Projects** — organize tasks into color-coded projects with full CRUD, soft delete & restore - 🚦 **Rate limiting** — auth (5/min) & API (60/min) +- ✅ **CI pipeline** — Pint style checks + Pest test suite across SQLite & PostgreSQL - 📚 **Interactive docs** via Scramble - 🗃️ **PostgreSQL** + Docker setup included @@ -106,10 +108,10 @@ composer test # or: php artisan test The suite runs on in-memory SQLite — no DB server needed. ⚠️ *SQLite is more lenient than PostgreSQL; run the suite against real Postgres before release to catch driver-specific issues.* -If you want to run tests in your own PostgreSQL server: +Run the suite against a real PostgreSQL server (adjust the credentials in `phpunit.pgsql.xml` to match your database): ```bash -php artisan test --env=pgsql +vendor/bin/pest --configuration=phpunit.pgsql.xml ``` @@ -131,6 +133,7 @@ php artisan test --env=pgsql tests/ ├── Feature/Api/V1/ # AuthTest, TaskTest, ProjectTest + └── phpunit.pgsql.xml # PostgreSQL test configuration (CI) ## 📜 API Reference