Merge pull request #29 from jbrooksuk/write-api-started
Write api started
This commit is contained in:
@@ -1,11 +1,28 @@
|
||||
<?php
|
||||
|
||||
class ApiController extends \Dingo\Api\Routing\Controller {
|
||||
protected $auth;
|
||||
|
||||
public function __construct(Dingo\Api\Auth\Shield $auth) {
|
||||
$this->auth = $auth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all components
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Collection
|
||||
*/
|
||||
public function getComponents() {
|
||||
return Component::all();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a single component
|
||||
*
|
||||
* @param int $id
|
||||
*
|
||||
* @return Component
|
||||
*/
|
||||
public function getComponent($id) {
|
||||
if ($component = Component::find($id)) {
|
||||
return $component;
|
||||
@@ -19,10 +36,42 @@
|
||||
return $component->incidents;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new component
|
||||
*
|
||||
* @return Component
|
||||
*/
|
||||
public function postComponents() {
|
||||
$component = new Component(Input::all());
|
||||
$component->user_id = $this->auth->user()->id;
|
||||
if ($component->isValid()) {
|
||||
try {
|
||||
$component->saveOrFail();
|
||||
return $component;
|
||||
} catch (Exception $e) {
|
||||
App::abort(500, $e->getMessage());
|
||||
}
|
||||
} else {
|
||||
App::abort(404, $component->getErrors()->first());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all incidents
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Collection
|
||||
*/
|
||||
public function getIncidents() {
|
||||
return Incident::all();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a single incident
|
||||
*
|
||||
* @param int $id
|
||||
*
|
||||
* @return Incident
|
||||
*/
|
||||
public function getIncident($id) {
|
||||
if ($incident = Incident::find($id)) {
|
||||
return $incident;
|
||||
@@ -31,4 +80,55 @@
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new incident
|
||||
*
|
||||
* @return Incident
|
||||
*/
|
||||
public function postIncidents() {
|
||||
$incident = new Incident(Input::all());
|
||||
$incident->user_id = $this->auth->user()->id;
|
||||
return $this->saveIncident($incident);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing incident
|
||||
*
|
||||
* @param int $id
|
||||
*
|
||||
* @return Incident
|
||||
*/
|
||||
public function putIncident($id) {
|
||||
$incident = $this->getIncident($id);
|
||||
|
||||
$incident->fill(Input::all());
|
||||
|
||||
return $this->saveIncident($incident);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function for saving the incident, and returning appropriate error codes
|
||||
*
|
||||
* @param Incident $incident
|
||||
*
|
||||
* @return Incident
|
||||
*/
|
||||
private function saveIncident($incident) {
|
||||
if ($incident->isValid()) {
|
||||
try {
|
||||
$component = $incident->parent;
|
||||
if (!$component) {
|
||||
App::abort(400, 'Invalid component specified');
|
||||
}
|
||||
|
||||
$incident->saveOrFail();
|
||||
return $incident;
|
||||
} catch (Exception $e) {
|
||||
App::abort(500, $e->getMessage());
|
||||
}
|
||||
} else {
|
||||
App::abort(404, $incident->getErrors()->first());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class UserIdColumnForComponents extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('components', function(Blueprint $table)
|
||||
{
|
||||
$table->unsignedInteger('user_id')->nullable();
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('SET NULL')->onUpdate('NO ACTION');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('components', function(Blueprint $table)
|
||||
{
|
||||
$table->dropColumn('user_id');
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class UserIdColumnForIncidents extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('incidents', function(Blueprint $table)
|
||||
{
|
||||
$table->unsignedInteger('user_id')->nullable();
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('SET NULL')->onUpdate('NO ACTION');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('incidents', function(Blueprint $table)
|
||||
{
|
||||
$table->dropColumn('user_id');
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,18 @@
|
||||
<?php
|
||||
|
||||
use Watson\Validating\ValidatingTrait;
|
||||
|
||||
class Component extends Eloquent implements Dingo\Api\Transformer\TransformableInterface {
|
||||
use ValidatingTrait;
|
||||
|
||||
protected $rules = [
|
||||
'user_id' => 'required|integer',
|
||||
'name' => 'required',
|
||||
'status' => 'required|integer'
|
||||
];
|
||||
|
||||
protected $fillable = ['name', 'description', 'status'];
|
||||
|
||||
/**
|
||||
* Lookup all of the incidents reported on the component.
|
||||
* @return Illuminate\Database\Eloquent\Relations
|
||||
|
||||
@@ -1,6 +1,21 @@
|
||||
<?php
|
||||
|
||||
use Watson\Validating\ValidatingTrait;
|
||||
|
||||
class Incident extends Eloquent implements Dingo\Api\Transformer\TransformableInterface {
|
||||
use ValidatingTrait;
|
||||
use \Illuminate\Database\Eloquent\SoftDeletingTrait;
|
||||
|
||||
protected $rules = [
|
||||
'user_id' => 'required|integer',
|
||||
'component' => 'required|integer',
|
||||
'name' => 'required',
|
||||
'status' => 'required|integer',
|
||||
'message' => 'required',
|
||||
];
|
||||
|
||||
protected $fillable = ['component', 'name', 'status', 'message'];
|
||||
|
||||
/**
|
||||
* An incident belongs to a component.
|
||||
* @return Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
|
||||
@@ -8,4 +8,11 @@
|
||||
Route::get('incidents', 'ApiController@getIncidents');
|
||||
Route::get('incidents/{id}', 'ApiController@getIncident');
|
||||
|
||||
Route::group(['protected' => true], function() {
|
||||
Route::post('components', 'ApiController@postComponents');
|
||||
Route::post('incidents', 'ApiController@postIncidents');
|
||||
|
||||
Route::put('incidents/{id}', 'ApiController@putIncident');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user