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 + workerVortex\Queue\Contracts\Job, DatabaseQueue, Queue::push, queue:work, queue:failed, queue:retry (incl. all), FailedJobStore + optional queue.failed_jobs_table.

  • Schedulingconfig/schedule.php tasks, Schedule::register(), five-field cron matching (CronExpression), CLI schedule:run.

  • Cache: RedisRedisCache + cache.stores.* driver redis (phpredis / ext-redis).

  • Cache: MemcachedMemcachedCache + driver memcached (ext-memcached).

  • Queue: RedisRedisQueue, QueueDriver contract, queue.driver / queue.redis, shared PhpRedisConnect with cache.

  • ORM: observersModel::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 scopesaddGlobalScope, 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 bindingRouter::model / Router::bind (+ Route::model / Route::bind); missing model or null resolver → 404.

  • Routing: resource groupsRouter::resource / Route::resource (REST index/store/show/update/destroy; optional create/edit).

  • HTTP: JSON API envelopeResponse::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 helpersVortex\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 codegenmake:migration, make:command, repl (debug / --force).

  • PSR-16 cachePsr16Cache + container Psr\SimpleCache\CacheInterface.

  • Packagingcomposer.lock policy for apps vs library vs skeleton (root README).

  • API cursor paginationQueryBuilder::cursorPaginate(), Cursor / CursorPaginator, toApiData() for JSON collections with Response::apiOk.

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

  • ORM persistence helpersModel::refresh(), firstOrCreate(), updateOrCreate().

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

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

  • Real-timeSSE (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 driversRedis (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 / selfparent), 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.