Skip to content

Latest commit

Β 

History

History
70 lines (51 loc) Β· 7.78 KB

File metadata and controls

70 lines (51 loc) Β· 7.78 KB

Roadmap

Planned and not-yet-built capabilities relative to what Vortex already ships (HTTP, routing, DB + migrations + models/query builder, validation, sessions/CSRF, mail, file cache, storage, sync events, console, Twig, pagination, rate limiting).

In progress / shipped slices

  • Authentication & authorization β€” Session Auth, Gate (abilities + model policies), RememberCookie + RememberFromCookie middleware, PasswordResetBroker (SQL tokens), Authenticate / AuthorizeAbility middleware, Twig auth_* and gate_allows.

  • Database queue + worker β€” Vortex\Queue\Contracts\Job, DatabaseQueue, Queue::push, queue:work, queue:failed, queue:retry (incl. all), FailedJobStore + optional queue.failed_jobs_table.

  • Scheduling β€” config/schedule.php tasks, Schedule::register(), five-field cron matching (CronExpression), CLI schedule:run.

  • Cache: Redis β€” RedisCache + cache.stores.* driver redis (phpredis / ext-redis).

  • Cache: Memcached β€” MemcachedCache + driver memcached (ext-memcached).

  • Queue: Redis β€” RedisQueue, QueueDriver contract, queue.driver / queue.redis, shared PhpRedisConnect with cache.

  • ORM: observers β€” Model::observe() with creating / updated / … hooks on create(), save(), delete().

  • ORM: casts β€” $casts on Model for int/float/bool/string/json/datetime.

  • ORM: soft deletes β€” $softDeletes / $deletedAtColumn, query scopes, restore / forceDelete.

  • ORM: global scopes β€” addGlobalScope, withoutGlobalScope(s); find / all via query().

  • ORM: eager with() β€” Model::eagerRelations() for batched belongsTo / hasMany / hasOne / belongsToMany; nested dot paths (e.g. author.country); Relation spec builders, Model::load(), QueryBuilder::eagerLoadOnto().

  • Routing: model binding β€” Router::model / Router::bind (+ Route::model / Route::bind); missing model or null resolver β†’ 404.

  • Routing: resource groups β€” Router::resource / Route::resource (REST index/store/show/update/destroy; optional create/edit).

  • HTTP: JSON API envelope β€” Response::apiOk / apiError, JsonResource (resolve(), pushResponseTransform / withResponseTransforms, transformResponse()), validationFailed(ValidationResult), Request::validationResponse / bodyValidationResponse, JsonShape / object / listOfObjects / listOfPrimitive + bodyShapeResponse, path/header API version helpers (splitVersionedPath, resolvedApiVersion, withPath), aligned negotiation errors + ErrorRenderer JSON.

  • Testing helpers β€” Vortex\Testing\KernelBrowser for in-process Kernel dispatch + Container::has().

  • Schema builder β€” extra column types (decimal, json, date, floatType, char, sized integers), Schema::hasTable, FK ON UPDATE, MySQL UNSIGNED on integers.

  • HTTP controllers β€” optional Controller base + invokable class routes + per-route middleware() chaining.

  • CLI codegen β€” make:migration, make:command, repl (debug / --force).

  • PSR-16 cache β€” Psr16Cache + container Psr\SimpleCache\CacheInterface.

  • Packaging β€” composer.lock policy for apps vs library vs skeleton (root README).

  • API cursor pagination β€” QueryBuilder::cursorPaginate(), Cursor / CursorPaginator, toApiData() for JSON collections with Response::apiOk.

  • ORM polymorphic relations β€” morphTo, morphMany, morphOne (lazy + eager, nested eager under morphTo via per–concrete-class grouping); MorphMap aliases for _type columns + getMorphClass().

  • ORM persistence helpers β€” Model::refresh(), firstOrCreate(), updateOrCreate().

  • JSON Schema β€” justinrainbow/json-schema, JsonSchemaValidator::validateArray() / validateDecoded(), Request::bodyJsonSchemaResponse() (requests); Response::apiOkValidated() / jsonValidated(), JsonResource::toValidatedResponse() / collectionValidatedResponse() (responses; JsonShape remains the lightweight default for bodies).

  • Container β€” Container::call(); constructor unions, self / parent, nullable / interface failures; tag / tagged, bindFor (contextual bindings).

  • Real-time β€” SSE (Response::serverSentEvents(), SseEmitter); Broadcaster (SyncBroadcaster, RedisBroadcaster + broadcasting.driver redis).

Next chunks (pick in order or parallel)

Concrete follow-ups; each is a shippable vertical slice:

  1. ORM / platform β€” further conveniences from Data & persistence as needed (e.g. chunk, custom primary keys).

Core platform

  • Authentication & authorization β€” Shipped for the current scope (session login, remember-me cookie, gates/policies, reset token broker; apps wire mail and routes).
  • Queues & workers β€” Shipped: SQL + Redis drivers, worker CLI, failed-job persistence + replay.
  • Scheduling β€” Shipped: schedule:run, config + programmatic tasks, cron lists/ranges, overlap guard via Cache::add and schedule.mutex_store (use a Redis-backed store for distributed mutexes).
  • Real-time β€” Shipped: SSE + SyncBroadcaster + optional RedisBroadcaster (broadcasting.driver redis). Optional later: WebSockets or full pub/sub.

Data & persistence

  • Cache drivers β€” Redis (phpredis) and Memcached (ext-memcached) behind Cache; file + null unchanged. PSR-16 CacheInterface via Psr16Cache on the default store.
  • ORM depth β€” Shipped: model observers, attribute casts, soft deletes, global scopes, batched with() (hasOne, morphTo / morphMany / morphOne, MorphMap), nested dot paths (morphTo nests per concrete type), refresh(), firstOrCreate(), updateOrCreate(). Remaining: richer conveniences as needed.
  • Schema builder β€” Shipped: more column types (decimal, json, date, floatType, integer sizes, char), Schema::hasTable, FK ON UPDATE, MySQL UNSIGNED on integer columns.

HTTP & API

  • API conveniences β€” Shipped: JsonResource (resolve(), pushResponseTransform / withResponseTransforms, transformResponse()), Response::apiOk/apiError/validationFailed, apiOkValidated / jsonValidated, Request validation + version + JsonShape and JSON Schema (JsonSchemaValidator, Request::bodyJsonSchemaResponse()), negotiated errors with error codes; cursor pagination (QueryBuilder::cursorPaginate(), CursorPaginator::toApiData()).
  • Routing DX β€” Shipped: route model binding, custom bind, Route::resource, invokable class routes, middleware() on the last route, optional Controller base helpers.

Developer experience

  • Container β€” Shipped: make() constructor injection (incl. union / nullable / self–parent), call(), has(), tag() / tagged(), bindFor() (contextual). Optional: deeper binding DSL if justified.
  • Tooling β€” Shipped: make:migration, make:command, repl (eval loop; not PsySH). Optional: richer debugging (no full debugbar by default).
  • Framework test kit β€” Shipped: KernelBrowser (Vortex\Testing) for consuming app PHPUnit tests.

Packaging

  • Lockfile policy β€” Shipped: documented in root README.md (Packaging and composer.lock). Apps commit a lock; the framework package omits it; skeleton apps should commit one for reproducible installs.

Items are not ordered by release; pick by impact and maintenance cost.