Simplify PR

This commit is contained in:
Matej Bačo 2025-09-02 11:11:31 +02:00
parent 31b8e3361d
commit 6b8a4a03c3
19 changed files with 63 additions and 82 deletions

View file

@ -426,7 +426,7 @@ $http->on(Constant::EVENT_REQUEST, function (SwooleRequest $swooleRequest, Swool
App::setResource('swooleResponse', fn () => $swooleResponse);
$request = new Request($swooleRequest);
$response = new Response($swooleResponse, $request);
$response = new Response($swooleResponse);
if (Files::isFileLoaded($request->getURI())) {
$time = (60 * 60 * 24 * 365 * 2); // 45 days cache

View file

@ -504,7 +504,7 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats,
$server->onOpen(function (int $connection, SwooleRequest $request) use ($server, $register, $stats, &$realtime, $logError) {
$app = new App('UTC');
$request = new Request($request);
$response = new Response(new SwooleResponse(), $request);
$response = new Response(new SwooleResponse());
Console::info("Connection open (user: {$connection})");
@ -625,8 +625,7 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server,
$server->onMessage(function (int $connection, string $message) use ($server, $register, $realtime, $containerId) {
try {
$request = new Request(new SwooleRequest());
$response = new Response(new SwooleResponse(), $request);
$response = new Response(new SwooleResponse());
$projectId = $realtime->connections[$connection]['projectId'];
$database = getConsoleDB();

View file

@ -4,12 +4,14 @@ namespace Appwrite\Platform\Modules\Compute;
use Appwrite\Event\Build;
use Appwrite\Extend\Exception;
use Appwrite\Utopia\Response;
use Utopia\Database\Database;
use Utopia\Database\Document;
use Utopia\Database\Exception\Duplicate;
use Utopia\Database\Helpers\ID;
use Utopia\Database\Helpers\Permission;
use Utopia\Database\Helpers\Role;
use Utopia\Database\Query;
use Utopia\Database\Validator\Authorization;
use Utopia\Platform\Action;
use Utopia\Swoole\Request;
@ -19,6 +21,47 @@ use Utopia\VCS\Exception\RepositoryNotFound;
class Base extends Action
{
/**
* Helper to apply select queries
*
* Method to respect request select queries in response format,
* to prevent default rule values from being applied on not-selected attributes
*
* @param Request $request
* @param Document $document
* @return void
*/
public function applySelectQueries(Request $request, Response $response, Document $document): void
{
$queries = $request->getParam('queries', []);
$queries = Query::parseQueries($queries);
$selectQueries = Query::groupByType($queries)['selections'] ?? [];
// No select queries means no filtering out
if (empty($selectQueries)) {
return;
}
$attributes = [];
foreach ($selectQueries as $query) {
foreach ($query->getValues() as $attribute) {
$attributes[] = $attribute;
}
}
// TODO: Apply for all models? pass model as param?
foreach ($response->getRules() as $ruleName => $rule) {
if (\str_starts_with($ruleName, '$')) {
continue;
}
if (!\in_array($ruleName, $attributes)) {
$response->removeRule($ruleName);
}
}
}
public function redeployVcsFunction(Request $request, Document $function, Document $project, Document $installation, Database $dbForProject, Build $queueForBuilds, Document $template, GitHub $github, bool $activate, string $referenceType = 'branch', string $reference = ''): Document
{
$deploymentId = ID::unique();

View file

@ -8,11 +8,9 @@ use Appwrite\Event\Func;
use Appwrite\Event\Realtime;
use Appwrite\Event\StatsUsage;
use Appwrite\Event\Webhook;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response\Model\Execution;
use Exception;
use Executor\Executor;
use Swoole\Http\Request as SwooleRequest;
use Utopia\CLI\Console;
use Utopia\Config\Config;
use Utopia\Database\Database;
@ -617,7 +615,7 @@ class Functions extends Action
$execution = $dbForProject->updateDocument('executions', $executionId, $execution);
$executionModel = new Execution();
$realtimeExecution = $executionModel->filter(new Document($execution->getArrayCopy()), new Request(new SwooleRequest()));
$realtimeExecution = $executionModel->filter(new Document($execution->getArrayCopy()));
$realtimeExecution = $realtimeExecution->getArrayCopy(\array_keys($executionModel->getRules()));
$queueForEvents

View file

@ -3,9 +3,7 @@
namespace Appwrite\SDK;
use Appwrite\SDK\Response as SDKResponse;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Swoole\Http\Request as HttpRequest;
use Swoole\Http\Response as HttpResponse;
class Method
@ -103,8 +101,7 @@ class Method
protected function validateResponseModel(string|array $responseModel): void
{
$request = new Request(new HttpRequest());
$response = new Response(new HttpResponse(), $request);
$response = new Response(new HttpResponse());
if (!\is_array($responseModel)) {
$responseModel = [$responseModel];

View file

@ -403,9 +403,8 @@ class Response extends SwooleResponse
* Response constructor.
*
* @param SwooleHTTPResponse $response Native response to be passed to parent constructor
* @param Request $request Relevant request object, useful for some response filters
*/
public function __construct(SwooleHTTPResponse $response, protected Request $request)
public function __construct(SwooleHTTPResponse $response)
{
$this
// General
@ -720,7 +719,7 @@ class Response extends SwooleResponse
$model = $this->getModel($model);
$output = [];
$data = $model->filter($data, $this->request);
$data = $model->filter($data);
if ($model->isAny()) {
$this->payload = $data->getArrayCopy();

View file

@ -2,9 +2,7 @@
namespace Appwrite\Utopia\Response;
use Appwrite\Utopia\Request;
use Utopia\Database\Document;
use Utopia\Database\Query;
abstract class Model
{
@ -47,11 +45,10 @@ abstract class Model
/**
* Filter Document Structure
* @param Document $document Document to apply filter on
* @param Request $request Relevant request object, useful for select query filtering
*
* @return Document
*/
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
return $document;
}
@ -190,44 +187,4 @@ abstract class Model
{
return $this->public;
}
/**
* Apply Select Queries
*
* Helper method to respect request select queries,
* to prevent default rule values from being applied on not-selected attributes
*
* @param Document $document
* @param Request $request
* @return void
*/
public function applySelectQueries(Document $document, Request $request): void
{
$queries = $request->getParam('queries', []);
$queries = Query::parseQueries($queries);
$selectQueries = Query::groupByType($queries)['selections'] ?? [];
// No select queries means no filtering out
if (empty($selectQueries)) {
return;
}
$attributes = [];
foreach ($selectQueries as $query) {
foreach ($query->getValues() as $attribute) {
$attributes[] = $attribute;
}
}
foreach ($this->getRules() as $ruleName => $rule) {
if (\str_starts_with($ruleName, '$')) {
continue;
}
if (!\in_array($ruleName, $attributes)) {
$this->removeRule($ruleName);
}
}
}
}

View file

@ -2,7 +2,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Utopia\Database\Document;
@ -81,7 +80,7 @@ class AttributeRelationship extends Attribute
*
* @return Document
*/
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$options = $document->getAttribute('options');
if (!\is_null($options)) {

View file

@ -2,7 +2,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
use Utopia\Database\Document;
@ -94,7 +93,7 @@ class ColumnIndex extends Model
return Response::MODEL_COLUMN_INDEX;
}
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$columns = $document->getAttribute('attributes', []);
$document

View file

@ -2,7 +2,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Utopia\Database\Document;
@ -81,7 +80,7 @@ class ColumnRelationship extends Column
*
* @return Document
*/
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$options = $document->getAttribute('options');
if (!\is_null($options)) {

View file

@ -2,7 +2,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
use Utopia\Database\Document;
@ -192,7 +191,7 @@ class Deployment extends Model
return 'Deployment';
}
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$this->applySelectQueries($document, $request);
return $document;

View file

@ -2,7 +2,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
use Utopia\Database\DateTime;
@ -157,7 +156,7 @@ class Execution extends Model
*
* @return Document
*/
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$document->removeAttribute('resourceType');
$document->setAttribute('functionId', $document->getAttribute('resourceId', ''));

View file

@ -2,7 +2,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
use Utopia\Database\Document;
@ -110,7 +109,7 @@ class Migration extends Model
return Response::MODEL_MIGRATION;
}
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$errors = $document->getAttribute('errors', []);
if (empty($errors)) {

View file

@ -3,7 +3,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Auth\Auth;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
use Utopia\Config\Config;
@ -341,7 +340,7 @@ class Project extends Model
*
* @return Document
*/
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
// SMTP
$smtp = $document->getAttribute('smtp', []);

View file

@ -3,7 +3,6 @@
namespace Appwrite\Utopia\Response\Model;
use Ahc\Jwt\JWT;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
use Utopia\Database\Document;
@ -60,7 +59,7 @@ class ResourceToken extends Model
;
}
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$expire = $document->getAttribute('expire');

View file

@ -2,7 +2,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
use Utopia\Database\Document;
@ -112,7 +111,7 @@ class Table extends Model
/**
* Process Document before returning it to the client for backwards compatibility!
*/
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$columns = $document->getAttribute('attributes', []);
if (!empty($columns) && \is_array($columns)) {

View file

@ -2,7 +2,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
use Utopia\Database\Document;
@ -56,7 +55,7 @@ class Team extends Model
*
* @return Document
*/
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$prefs = $document->getAttribute('prefs');
if ($prefs instanceof Document) {

View file

@ -2,7 +2,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
use Utopia\Database\Document;
@ -148,7 +147,7 @@ class User extends Model
*
* @return string
*/
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$prefs = $document->getAttribute('prefs');
if ($prefs instanceof Document) {

View file

@ -2,7 +2,6 @@
namespace Appwrite\Utopia\Response\Model;
use Appwrite\Utopia\Request;
use Appwrite\Utopia\Response;
use Appwrite\Utopia\Response\Model;
use Utopia\Database\Document;
@ -70,7 +69,7 @@ class Variable extends Model
* @param Document $document
* @return Document
*/
public function filter(Document $document, Request $request): Document
public function filter(Document $document): Document
{
$secret = $document->getAttribute('secret');
if ($secret === true) {