Added Any response model
This commit is contained in:
parent
6c8e4ea339
commit
6b871f4adf
4 changed files with 64 additions and 114 deletions
|
@ -2,7 +2,6 @@
|
|||
|
||||
use Utopia\App;
|
||||
use Utopia\Exception;
|
||||
use Utopia\Response;
|
||||
use Utopia\Validator\Range;
|
||||
use Utopia\Validator\WhiteList;
|
||||
use Utopia\Validator\Text;
|
||||
|
@ -20,6 +19,7 @@ use Appwrite\Database\Validator\Collection;
|
|||
use Appwrite\Database\Validator\Authorization;
|
||||
use Appwrite\Database\Exception\Authorization as AuthorizationException;
|
||||
use Appwrite\Database\Exception\Structure as StructureException;
|
||||
use Appwrite\Utopia\Response;
|
||||
|
||||
App::post('/v1/database/collections')
|
||||
->desc('Create Collection')
|
||||
|
@ -148,71 +148,6 @@ App::get('/v1/database/collections/:collectionId')
|
|||
$response->json($collection->getArrayCopy());
|
||||
}, ['response', 'projectDB']);
|
||||
|
||||
// App::get('/v1/database/collections/:collectionId/logs')
|
||||
// ->desc('Get Collection Logs')
|
||||
// ->groups(['api', 'database'])
|
||||
// ->label('scope', 'collections.read')
|
||||
// ->label('sdk.platform', [APP_PLATFORM_SERVER])
|
||||
// ->label('sdk.namespace', 'database')
|
||||
// ->label('sdk.method', 'getCollectionLogs')
|
||||
// ->label('sdk.description', '/docs/references/database/get-collection-logs.md')
|
||||
// ->param('collectionId', '', function () { return new UID(); }, 'Collection unique ID.')
|
||||
// ->action(
|
||||
// function ($collectionId) use ($response, $register, $projectDB, $project) {
|
||||
// $collection = $projectDB->getDocument($collectionId, false);
|
||||
|
||||
// if (empty($collection->getId()) || Database::SYSTEM_COLLECTION_COLLECTIONS != $collection->getCollection()) {
|
||||
// throw new Exception('Collection not found', 404);
|
||||
// }
|
||||
|
||||
// $adapter = new AuditAdapter($register->get('db'));
|
||||
// $adapter->setNamespace('app_'.$project->getId());
|
||||
|
||||
// $audit = new Audit($adapter);
|
||||
|
||||
// $countries = Locale::getText('countries');
|
||||
|
||||
// $logs = $audit->getLogsByResource('database/collection/'.$collection->getId());
|
||||
|
||||
// $reader = new Reader(__DIR__.'/../../db/DBIP/dbip-country-lite-2020-01.mmdb');
|
||||
// $output = [];
|
||||
|
||||
// foreach ($logs as $i => &$log) {
|
||||
// $log['userAgent'] = (!empty($log['userAgent'])) ? $log['userAgent'] : 'UNKNOWN';
|
||||
|
||||
// $dd = new DeviceDetector($log['userAgent']);
|
||||
|
||||
// $dd->skipBotDetection(); // OPTIONAL: If called, bot detection will completely be skipped (bots will be detected as regular devices then)
|
||||
|
||||
// $dd->parse();
|
||||
|
||||
// $output[$i] = [
|
||||
// 'event' => $log['event'],
|
||||
// 'ip' => $log['ip'],
|
||||
// 'time' => strtotime($log['time']),
|
||||
// 'OS' => $dd->getOs(),
|
||||
// 'client' => $dd->getClient(),
|
||||
// 'device' => $dd->getDevice(),
|
||||
// 'brand' => $dd->getBrand(),
|
||||
// 'model' => $dd->getModel(),
|
||||
// 'geo' => [],
|
||||
// ];
|
||||
|
||||
// try {
|
||||
// $record = $reader->country($log['ip']);
|
||||
// $output[$i]['geo']['isoCode'] = strtolower($record->country->isoCode);
|
||||
// $output[$i]['geo']['country'] = $record->country->name;
|
||||
// $output[$i]['geo']['country'] = (isset($countries[$record->country->isoCode])) ? $countries[$record->country->isoCode] : Locale::getText('locale.country.unknown');
|
||||
// } catch (\Exception $e) {
|
||||
// $output[$i]['geo']['isoCode'] = '--';
|
||||
// $output[$i]['geo']['country'] = Locale::getText('locale.country.unknown');
|
||||
// }
|
||||
// }
|
||||
|
||||
// $response->json($output);
|
||||
// }
|
||||
// );
|
||||
|
||||
App::put('/v1/database/collections/:collectionId')
|
||||
->desc('Update Collection')
|
||||
->groups(['api', 'database'])
|
||||
|
@ -433,22 +368,17 @@ App::post('/v1/database/collections/:collectionId/documents')
|
|||
throw new Exception('Failed saving document to DB'.$exception->getMessage(), 500);
|
||||
}
|
||||
|
||||
$data = $data->getArrayCopy();
|
||||
|
||||
$webhooks
|
||||
->setParam('payload', $data)
|
||||
;
|
||||
|
||||
$audits
|
||||
->setParam('event', 'database.documents.create')
|
||||
->setParam('resource', 'database/document/'.$data['$id'])
|
||||
->setParam('data', $data)
|
||||
->setParam('data', $data->getArrayCopy())
|
||||
;
|
||||
|
||||
$response
|
||||
->setStatusCode(Response::STATUS_CODE_CREATED)
|
||||
->json($data)
|
||||
;
|
||||
|
||||
$response->dynamic($data, Response::MODEL_ANY);
|
||||
}, ['response', 'projectDB', 'webhooks', 'audits']);
|
||||
|
||||
App::get('/v1/database/collections/:collectionId/documents')
|
||||
|
@ -531,27 +461,7 @@ App::get('/v1/database/collections/:collectionId/documents/:documentId')
|
|||
throw new Exception('No document found', 404);
|
||||
}
|
||||
|
||||
$output = $document->getArrayCopy();
|
||||
|
||||
$paths = \explode('/', $request->getParam('q', ''));
|
||||
$paths = \array_slice($paths, 7, \count($paths));
|
||||
|
||||
if (\count($paths) > 0) {
|
||||
if (\count($paths) % 2 == 1) {
|
||||
$output = $document->getAttribute(\implode('.', $paths));
|
||||
} else {
|
||||
$id = (int) \array_pop($paths);
|
||||
$output = $document->search('$id', $id, $document->getAttribute(\implode('.', $paths)));
|
||||
}
|
||||
|
||||
$output = ($output instanceof Document) ? $output->getArrayCopy() : $output;
|
||||
|
||||
if (!\is_array($output)) {
|
||||
throw new Exception('No document found', 404);
|
||||
}
|
||||
}
|
||||
|
||||
$response->json($output);
|
||||
$response->dynamic($document, Response::MODEL_ANY);
|
||||
}, ['request', 'response', 'projectDB']);
|
||||
|
||||
App::patch('/v1/database/collections/:collectionId/documents/:documentId')
|
||||
|
@ -620,19 +530,13 @@ App::patch('/v1/database/collections/:collectionId/documents/:documentId')
|
|||
throw new Exception('Failed saving document to DB', 500);
|
||||
}
|
||||
|
||||
$data = $data->getArrayCopy();
|
||||
|
||||
$webhooks
|
||||
->setParam('payload', $data)
|
||||
;
|
||||
|
||||
$audits
|
||||
->setParam('event', 'database.documents.update')
|
||||
->setParam('resource', 'database/document/'.$data['$id'])
|
||||
->setParam('data', $data)
|
||||
->setParam('resource', 'database/document/'.$data->getId())
|
||||
->setParam('data', $data->getArrayCopy())
|
||||
;
|
||||
|
||||
$response->json($data);
|
||||
$response->dynamic($data, Response::MODEL_ANY);
|
||||
}, ['response', 'projectDB', 'webhooks', 'audits']);
|
||||
|
||||
App::delete('/v1/database/collections/:collectionId/documents/:documentId')
|
||||
|
@ -673,16 +577,10 @@ App::delete('/v1/database/collections/:collectionId/documents/:documentId')
|
|||
throw new Exception('Failed to remove document from DB', 500);
|
||||
}
|
||||
|
||||
$data = $document->getArrayCopy();
|
||||
|
||||
$webhooks
|
||||
->setParam('payload', $data)
|
||||
;
|
||||
|
||||
$audits
|
||||
->setParam('event', 'database.documents.delete')
|
||||
->setParam('resource', 'database/document/'.$data['$id'])
|
||||
->setParam('data', $data) // Audit document in case of malicious or disastrous action
|
||||
->setParam('resource', 'database/document/'.$document->getId())
|
||||
->setParam('data', $document->getArrayCopy()) // Audit document in case of malicious or disastrous action
|
||||
;
|
||||
|
||||
$response->noContent();
|
||||
|
|
|
@ -7,6 +7,7 @@ use Utopia\Swoole\Response as SwooleResponse;
|
|||
use Swoole\Http\Response as SwooleHTTPResponse;
|
||||
use Appwrite\Database\Document;
|
||||
use Appwrite\Utopia\Response\Model;
|
||||
use Appwrite\Utopia\Response\Model\Any;
|
||||
use Appwrite\Utopia\Response\Model\BaseList;
|
||||
use Appwrite\Utopia\Response\Model\Continent;
|
||||
use Appwrite\Utopia\Response\Model\Country;
|
||||
|
@ -34,6 +35,7 @@ use Appwrite\Utopia\Response\Model\Webhook;
|
|||
class Response extends SwooleResponse
|
||||
{
|
||||
// General
|
||||
const MODEL_ANY = 'any';
|
||||
const MODEL_LOG = 'log';
|
||||
const MODEL_LOG_LIST = 'logList';
|
||||
const MODEL_ERROR = 'error';
|
||||
|
@ -133,6 +135,7 @@ class Response extends SwooleResponse
|
|||
->setModel(new BaseList('Currencies List', self::MODEL_CURRENCY_LIST, 'currencies', self::MODEL_CURRENCY))
|
||||
->setModel(new BaseList('Phones List', self::MODEL_PHONE_LIST, 'phones', self::MODEL_PHONE))
|
||||
// Entities
|
||||
->setModel(new Any())
|
||||
->setModel(new Log())
|
||||
->setModel(new User())
|
||||
->setModel(new Session())
|
||||
|
@ -153,8 +156,6 @@ class Response extends SwooleResponse
|
|||
->setModel(new Language())
|
||||
->setModel(new Currency())
|
||||
->setModel(new Phone())
|
||||
// Currency
|
||||
// Phone
|
||||
// Verification
|
||||
// Recovery
|
||||
;
|
||||
|
@ -216,6 +217,10 @@ class Response extends SwooleResponse
|
|||
$model = $this->getModel($model);
|
||||
$output = [];
|
||||
|
||||
if($model->isAny()) {
|
||||
return $document->getArrayCopy();
|
||||
}
|
||||
|
||||
foreach($model->getRules() as $key => $rule) {
|
||||
if(!$document->isSet($key)) {
|
||||
if(!is_null($rule['default'])) {
|
||||
|
|
|
@ -4,6 +4,14 @@ namespace Appwrite\Utopia\Response;
|
|||
|
||||
abstract class Model
|
||||
{
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $any = false;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $rules = [];
|
||||
|
||||
/**
|
||||
|
@ -45,4 +53,9 @@ abstract class Model
|
|||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function isAny(): bool
|
||||
{
|
||||
return $this->any;
|
||||
}
|
||||
}
|
34
src/Appwrite/Utopia/Response/Model/Any.php
Normal file
34
src/Appwrite/Utopia/Response/Model/Any.php
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
namespace Appwrite\Utopia\Response\Model;
|
||||
|
||||
use Appwrite\Utopia\Response;
|
||||
use Appwrite\Utopia\Response\Model;
|
||||
|
||||
class Any extends Model
|
||||
{
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $any = true;
|
||||
|
||||
/**
|
||||
* Get Name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName():string
|
||||
{
|
||||
return 'Any';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Collection
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getType():string
|
||||
{
|
||||
return Response::MODEL_ANY;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue