V17 request filter switch compared raw strings against Method enum
cases which never matched in PHP 8.1+. Use Method::tryFrom() to convert
the parsed method string to the enum before the switch.
Also updates utopia-php/database with skipValidation for internal
metadata document updates.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Use PermissionType->value when constructing Permission objects (Documents/Create,
Upsert, Transactions/Create, Storage/Files/Create)
- Convert Method enum to string in Realtime adapter implode and interpolation
- Use Attribute/Index object property access in VectorsDB Collections/Create
- Update utopia-php/database with Structure Float case, TenantFilter alias fix,
and Document::getTenant() type cast removal
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Handles numeric string (millisecond timestamp) values in castingBefore
by passing them directly to UTCDateTime instead of NativeDateTime.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Query::groupByType() now returns a GroupedQueries readonly class instead
of an associative array. All bracket access ($grouped['filters'], etc.)
must use arrow syntax ($grouped->filters).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The Pool adapter was only syncing write hooks (Permissions, Tenancy) for
plural document operations (createDocuments, updateDocuments) but not
singular ones (createDocument, updateDocument). This caused permission
rows to never be inserted for single-document creates, making newly
created users invisible to subsequent queries on SQL databases.
Also removes stale PHPStan baseline entries and fixes redundant null
coalesce in FunctionCache.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When --release=yes, the Appwrite spec version is not needed since
the release flow uses the SDK version from config. This moves the
version prompt and validation behind a !$createRelease guard and
hoists the release block before the spec/SDK generation setup.
Revert auth types in Bulk/Upsert.php back to [AuthType::ADMIN, AuthType::KEY]
and remove duplicate query filter in Databases/XList.php that were accidentally
introduced during the 1.9.x merge.
https://claude.ai/code/session_01JLPDurUgyj7qViA8JqQFTH
remove duplicate inject('user') from XList in DocumentsDB/VectorsDB
- DocumentsDB and VectorsDB Transactions/Operations/Create.php were
missing ->inject('user') needed by parent action method
- DocumentsDB and VectorsDB Collections/Documents/XList.php had
duplicate ->inject('user') calls - removed the extra one
https://claude.ai/code/session_01JLPDurUgyj7qViA8JqQFTH
The parent action methods in Databases/Collections/Documents require a
User $user parameter, but 10 child classes in DocumentsDB (6) and
VectorsDB (4) were missing the ->inject('user') call in their
constructor inject chains. This caused fatal errors when those
endpoints were hit during E2E tests.
Files fixed:
- DocumentsDB: Delete, Get, Update, XList, Attribute/Increment, Attribute/Decrement
- VectorsDB: Delete, Get, Update, XList
https://claude.ai/code/session_01JLPDurUgyj7qViA8JqQFTH
Since setDocumentType('users', User::class) is registered on all
database instances, getDocument('users', ...) already returns User
instances. The new User($doc->getArrayCopy()) pattern was redundant
and could lose internal state managed by the database layer.
https://claude.ai/code/session_01JLPDurUgyj7qViA8JqQFTH