Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
```


Expand All @@ -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
Expand Down
Loading