Make presenters work with the api
This commit is contained in:
@@ -15,8 +15,11 @@ namespace CachetHQ\Cachet\Http\Controllers\Api;
|
||||
|
||||
use CachetHQ\Cachet\Http\Controllers\AbstractController as BaseController;
|
||||
use Illuminate\Contracts\Pagination\Paginator;
|
||||
use Illuminate\Contracts\Support\Arrayable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Response;
|
||||
use McCool\LaravelAutoPresenter\Facades\AutoPresenter;
|
||||
|
||||
abstract class AbstractApiController extends BaseController
|
||||
{
|
||||
@@ -37,9 +40,9 @@ abstract class AbstractApiController extends BaseController
|
||||
/**
|
||||
* The HTTP response data.
|
||||
*
|
||||
* @var array
|
||||
* @var mixed
|
||||
*/
|
||||
protected $data = [];
|
||||
protected $data = null;
|
||||
|
||||
/**
|
||||
* The HTTP response status code.
|
||||
@@ -83,7 +86,7 @@ abstract class AbstractApiController extends BaseController
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
protected function setData(array $data)
|
||||
protected function setData($data)
|
||||
{
|
||||
$this->data = $data;
|
||||
|
||||
@@ -104,6 +107,30 @@ abstract class AbstractApiController extends BaseController
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Respond with an item response.
|
||||
*
|
||||
* @param mixed
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function item($item)
|
||||
{
|
||||
return $this->setData(AutoPresenter::decorate($item))->respond();
|
||||
}
|
||||
|
||||
/**
|
||||
* Respond with a collection response.
|
||||
*
|
||||
* @param \Illuminate\Support\Collection $collection
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function collection(Collection $collection)
|
||||
{
|
||||
return $this->setData(AutoPresenter::decorate($collection))->respond();
|
||||
}
|
||||
|
||||
/**
|
||||
* Respond with a pagination response.
|
||||
*
|
||||
@@ -134,7 +161,7 @@ abstract class AbstractApiController extends BaseController
|
||||
],
|
||||
];
|
||||
|
||||
return $this->setMetaData($pagination)->setData($paginator->items())->respond();
|
||||
return $this->setMetaData($pagination)->setData(AutoPresenter::decorate($paginator->getCollection()))->respond();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -57,7 +57,7 @@ class MetricController extends AbstractApiController
|
||||
*/
|
||||
public function getMetric($id)
|
||||
{
|
||||
return $this->metric->findOrFail($id);
|
||||
return $this->item($this->metric->findOrFail($id));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -69,7 +69,7 @@ class MetricController extends AbstractApiController
|
||||
*/
|
||||
public function getMetricPoints($id)
|
||||
{
|
||||
return $this->metric->points($id);
|
||||
return $this->collection($this->metric->points($id));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,11 +13,13 @@
|
||||
|
||||
namespace CachetHQ\Cachet\Models;
|
||||
|
||||
use CachetHQ\Cachet\Facades\Setting;
|
||||
use DateInterval;
|
||||
use DateTime;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Config;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Jenssegers\Date\Date;
|
||||
use McCool\LaravelAutoPresenter\HasPresenter;
|
||||
use Watson\Validating\ValidatingTrait;
|
||||
|
||||
/**
|
||||
@@ -31,7 +33,7 @@ use Watson\Validating\ValidatingTrait;
|
||||
* @property \Carbon\Carbon $created_at
|
||||
* @property \Carbon\Carbon $updated_at
|
||||
*/
|
||||
class Metric extends Model
|
||||
class Metric extends Model implements HasPresenter
|
||||
{
|
||||
use ValidatingTrait;
|
||||
|
||||
@@ -88,8 +90,8 @@ class Metric extends Model
|
||||
*/
|
||||
public function getValues($hour)
|
||||
{
|
||||
$dateTime = new DateTime();
|
||||
$dateTime->sub(new DateInterval('PT'.$hour.'H'));
|
||||
$dateTimeZone = Setting::get('app_timezone');
|
||||
$dateTime = (new Date())->setTimezone($dateTimeZone)->sub(new DateInterval('PT'.$hour.'H'));
|
||||
|
||||
$hourInterval = $dateTime->sub(new DateInterval('PT'.$hour.'H'))->format('YmdH');
|
||||
|
||||
@@ -140,4 +142,14 @@ class Metric extends Model
|
||||
{
|
||||
return $this->display_chart === 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the presenter class.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPresenterClass()
|
||||
{
|
||||
return 'CachetHQ\Cachet\Presenters\MetricPresenter';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
namespace CachetHQ\Cachet\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use McCool\LaravelAutoPresenter\HasPresenter;
|
||||
use Watson\Validating\ValidatingTrait;
|
||||
|
||||
/**
|
||||
@@ -23,7 +24,7 @@ use Watson\Validating\ValidatingTrait;
|
||||
* @property \Carbon\Carbon $created_at
|
||||
* @property \Carbon\Carbon $updated_at
|
||||
*/
|
||||
class MetricPoint extends Model
|
||||
class MetricPoint extends Model implements HasPresenter
|
||||
{
|
||||
use ValidatingTrait;
|
||||
|
||||
@@ -52,4 +53,14 @@ class MetricPoint extends Model
|
||||
{
|
||||
return $this->belongsTo('CachetHQ\Cachet\Models\Metric', 'id', 'metric_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the presenter class.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPresenterClass()
|
||||
{
|
||||
return 'CachetHQ\Cachet\Presenters\MetricPointPresenter';
|
||||
}
|
||||
}
|
||||
|
||||
74
app/Presenters/MetricPointPresenter.php
Normal file
74
app/Presenters/MetricPointPresenter.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Cachet.
|
||||
*
|
||||
* (c) James Brooks <james@cachethq.io>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace CachetHQ\Cachet\Presenters;
|
||||
|
||||
use CachetHQ\Cachet\Facades\Setting;
|
||||
use Illuminate\Contracts\Support\Arrayable;
|
||||
use Jenssegers\Date\Date;
|
||||
use McCool\LaravelAutoPresenter\BasePresenter;
|
||||
|
||||
class MetricPointPresenter extends BasePresenter implements Arrayable
|
||||
{
|
||||
/**
|
||||
* Time zone setting.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $tz;
|
||||
|
||||
/**
|
||||
* Create a incident presenter instance.
|
||||
*
|
||||
* @param object $resource
|
||||
*/
|
||||
public function __construct($resource)
|
||||
{
|
||||
parent::__construct($resource);
|
||||
|
||||
$this->tz = Setting::get('app_timezone');
|
||||
}
|
||||
|
||||
/**
|
||||
* Present formatted date time.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function created_at()
|
||||
{
|
||||
return (new Date($this->wrappedObject->created_at))
|
||||
->setTimezone($this->tz)->toDateTimeString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Present formatted date time.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function updated_at()
|
||||
{
|
||||
return (new Date($this->wrappedObject->updated_at))
|
||||
->setTimezone($this->tz)->toDateTimeString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the presenter instance to an array.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function toArray()
|
||||
{
|
||||
return array_merge($this->wrappedObject->toArray(), [
|
||||
'created_at' => $this->created_at(),
|
||||
'updated_at' => $this->updated_at(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
74
app/Presenters/MetricPresenter.php
Normal file
74
app/Presenters/MetricPresenter.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Cachet.
|
||||
*
|
||||
* (c) James Brooks <james@cachethq.io>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace CachetHQ\Cachet\Presenters;
|
||||
|
||||
use CachetHQ\Cachet\Facades\Setting;
|
||||
use Illuminate\Contracts\Support\Arrayable;
|
||||
use Jenssegers\Date\Date;
|
||||
use McCool\LaravelAutoPresenter\BasePresenter;
|
||||
|
||||
class MetricPresenter extends BasePresenter implements Arrayable
|
||||
{
|
||||
/**
|
||||
* Time zone setting.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $tz;
|
||||
|
||||
/**
|
||||
* Create a incident presenter instance.
|
||||
*
|
||||
* @param object $resource
|
||||
*/
|
||||
public function __construct($resource)
|
||||
{
|
||||
parent::__construct($resource);
|
||||
|
||||
$this->tz = Setting::get('app_timezone');
|
||||
}
|
||||
|
||||
/**
|
||||
* Present formatted date time.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function created_at()
|
||||
{
|
||||
return (new Date($this->wrappedObject->created_at))
|
||||
->setTimezone($this->tz)->toDateTimeString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Present formatted date time.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function updated_at()
|
||||
{
|
||||
return (new Date($this->wrappedObject->updated_at))
|
||||
->setTimezone($this->tz)->toDateTimeString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the presenter instance to an array.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function toArray()
|
||||
{
|
||||
return array_merge($this->wrappedObject->toArray(), [
|
||||
'created_at' => $this->created_at(),
|
||||
'updated_at' => $this->updated_at(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user