69 lines
2.1 KiB
PHP
69 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Carbon\Carbon;
|
|
|
|
use App\Models\Project;
|
|
|
|
class ProjectController extends Controller
|
|
{
|
|
/**
|
|
* GET /Projects
|
|
* Query params:
|
|
* - projectNumber (string)
|
|
* - projectName (string)
|
|
* - updatedSince (date-time)
|
|
* - createdSince (date-time)
|
|
*/
|
|
public function index(Request $request) {
|
|
$q = Project::with(['departments', 'profiles']);
|
|
|
|
if ($num = $request->query('projectNumber')) {
|
|
$q->where('project_number', $num);
|
|
}
|
|
if ($name = $request->query('projectName')) {
|
|
$q->where('project_name', $name);
|
|
}
|
|
if ($sinceUp = $request->query('updatedSince')) {
|
|
$q->where('updated_at', '>=', Carbon::parse($sinceUp));
|
|
}
|
|
if ($sinceCr = $request->query('createdSince')) {
|
|
$q->where('created_at', '>=', Carbon::parse($sinceCr));
|
|
}
|
|
|
|
$out = $q->get()->map(function ($p) {
|
|
return [
|
|
'Id' => $p->id,
|
|
'ProjectName' => $p->project_name,
|
|
'ProjectNumber' => $p->project_number,
|
|
'Departments' => $p->departments->pluck('id')->all(),
|
|
'UserIds' => $p->profiles->pluck('id')->all(),
|
|
'Updated' => $p->updated_at->toIso8601String().'Z',
|
|
'Created' => $p->created_at->toIso8601String().'Z',
|
|
];
|
|
});
|
|
|
|
return response()->json($out);
|
|
}
|
|
|
|
/**
|
|
* GET /Projects/{id}
|
|
*/
|
|
public function show(int $id) {
|
|
$p = Project::with(['departments', 'profiles'])->findOrFail($id);
|
|
|
|
return response()->json([
|
|
'Id' => $p->id,
|
|
'ProjectName' => $p->project_name,
|
|
'ProjectNumber' => $p->project_number,
|
|
'Departments' => $p->departments->pluck('id')->all(),
|
|
'UserIds' => $p->profiles->pluck('id')->all(),
|
|
'Updated' => $p->updated_at->toIso8601String().'Z',
|
|
'Created' => $p->created_at->toIso8601String().'Z',
|
|
]);
|
|
}
|
|
}
|