mirror of
https://bitbucket.org/studiotem/jandl-taskmanager-app.git
synced 2026-10-21 14:29:34 +00:00
180 lines
6.3 KiB
PHP
180 lines
6.3 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\BlockerController;
|
|
use App\Http\Controllers\MasterTaskController;
|
|
use App\Http\Controllers\SubTaskController;
|
|
use App\Http\Controllers\TeamController;
|
|
use App\Http\Controllers\UserController;
|
|
use App\Http\Resources\BlockerResource;
|
|
use App\Http\Resources\MasterTaskCollection;
|
|
use App\Http\Resources\MasterTaskResource;
|
|
use App\Http\Resources\ProjectCollection;
|
|
use App\Http\Resources\SubTaskCollection;
|
|
use App\Http\Resources\SubTaskResource;
|
|
use App\Http\Resources\TeamCollection;
|
|
use App\Http\Resources\TeamResource;
|
|
use App\Http\Resources\TimeblockResource;
|
|
use App\Http\Resources\UserCollection;
|
|
use App\Http\Resources\UserResource;
|
|
use App\Models\Blocker;
|
|
use App\Models\MasterTask;
|
|
use App\Models\Project;
|
|
use App\Models\SubTask;
|
|
use App\Models\Team;
|
|
use App\Models\Timeblock;
|
|
use App\Models\User;
|
|
use Illuminate\Support\Facades\Route;
|
|
use Illuminate\Http\Request;
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| API Routes
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Here is where you can register API routes for your application. These
|
|
| routes are loaded by the RouteServiceProvider within a group which
|
|
| is assigned the "api" middleware group. Enjoy building your API!
|
|
|
|
|
*/
|
|
|
|
Route::middleware(['auth:sanctum', 'abilities:full-access'])->group(function () {
|
|
Route::get('/user', function (Request $request) {
|
|
return $request->user();
|
|
});
|
|
|
|
Route::get('/v1/teams', function () {
|
|
return new TeamCollection(Team::all());
|
|
});
|
|
|
|
|
|
Route::get('/v1/teams/{id}', function ($id) {
|
|
return new TeamResource(Team::find($id));
|
|
});
|
|
Route::post('/v1/teams', TeamController::class . '@store');
|
|
Route::put('/v1/teams/{id}', TeamController::class . '@update');
|
|
Route::delete('/v1/teams/{id}', TeamController::class . '@delete');
|
|
|
|
Route::get('/v1/employees', function () {
|
|
return new UserCollection(User::all());
|
|
});
|
|
Route::get('/v1/employees/{id}', function ($id) {
|
|
return new UserResource(User::find($id));
|
|
});
|
|
|
|
Route::get('/v1/projects', function () {
|
|
return new ProjectCollection(Project::all());
|
|
});
|
|
|
|
Route::get('/v1/mastertasks', function () {
|
|
return new MasterTaskCollection( MasterTask::all());
|
|
});
|
|
|
|
Route::get('/v1/mastertasks/{id}', function ($id) {
|
|
return new MasterTaskResource( MasterTask::find($id));
|
|
});
|
|
|
|
Route::get('/v1/mastertasks',MasterTaskController::class . '@index');
|
|
Route::post('/v1/mastertasks', MasterTaskController::class . '@store');
|
|
Route::put('/v1/mastertasks/{id}', MasterTaskController::class . '@update');
|
|
Route::delete('/v1/mastertasks/{id}', MasterTaskController::class . '@delete');
|
|
|
|
Route::get('/v1/mastertasks/{id}/subtasks', function ($id) {
|
|
return new SubTaskCollection( SubTask::published()->whereHas('mastertask', function ($query) use ($id) {
|
|
$query->where('id', $id);
|
|
})->get());
|
|
});
|
|
|
|
Route::post('/v1/mastertasks/{id}/subtasks', SubTaskController::class . '@store');
|
|
Route::put('/v1/subtasks/{id}', SubTaskController::class . '@update');
|
|
|
|
Route::get('/v1/subtasks/{id}', function ($id) {
|
|
$subtask = SubTask::find($id);
|
|
|
|
if (!$subtask) {
|
|
return response()->json(['message' => 'Subtask not found.'], 404);
|
|
}
|
|
|
|
return new SubTaskResource($subtask);
|
|
});
|
|
Route::post('/v1/subtasks/{id}/timesheet', SubTaskController::class . '@submitTimesheet');
|
|
|
|
Route::get('/v1/subtasks',SubTaskController::class . '@index');
|
|
|
|
Route::delete('/v1/subtasks/{id}', SubTaskController::class . '@delete');
|
|
|
|
// zobrazovanie blockerov je na urovni /subtasks ednpointu
|
|
Route::get('/v1/blockers/{id}', function ($id) {
|
|
return new BlockerResource(Blocker::find($id));
|
|
});
|
|
Route::post('/v1/blockers', BlockerController::class . '@store');
|
|
Route::put('/v1/blockers/{id}', BlockerController::class . '@update');
|
|
Route::delete('/v1/blockers/{id}', BlockerController::class . '@delete');
|
|
|
|
Route::put('/v1/users/{id}', UserController::class . '@update');
|
|
|
|
Route::get('/v1/search', function (Request $request) {
|
|
$search = $request->all()['q'];
|
|
|
|
$projectIDs = Project::where('name', 'like', '%' . $search . '%')->orWhere('code', 'like', '%' . $search . '%')->get()->pluck('id');
|
|
|
|
$userIDs = User::where('firstname', 'like', '%' . $search . '%')->orWhere('lastname', 'like', '%' . $search . '%')->get()->pluck('id');
|
|
|
|
$teams = Team::whereHas('users', function($q) use($userIDs) {
|
|
$q->whereIn('user_id', $userIDs);
|
|
})->orWhere('name', 'like', '%' . $search . '%' )->get();
|
|
|
|
$mastertasks = MasterTask::with(['subtasks' => function($query) {
|
|
$query->where('is_draft', false);
|
|
}])->where('title', 'like', '%' . $search . '%')->orWhereIn('project_id', $projectIDs)->orWhereIn('team_id', $teams->pluck('id'))->get();
|
|
|
|
$subtasks = $mastertasks->pluck('subtasks')->flatten();
|
|
|
|
return [
|
|
'teams' => new TeamCollection($teams),
|
|
'mastertasks' => new MasterTaskCollection($mastertasks),
|
|
'subtasks' => new SubTaskCollection($subtasks),
|
|
];
|
|
});
|
|
|
|
Route::put('/v1/timeblocks/{id}', function ($id, Request $request) {
|
|
$is_finished = $request->all()['data']['is_finished'];
|
|
|
|
$timeblock = Timeblock::find($id);
|
|
|
|
$timeblock->is_finished = $is_finished;
|
|
$timeblock->save();
|
|
|
|
return new TimeblockResource($timeblock);
|
|
});
|
|
});
|
|
|
|
Route::middleware(['auth:sanctum', 'abilities:password-reset'])->group(function () {
|
|
Route::post('/v1/users/reset', UserController::class . '@resetPassword');
|
|
});
|
|
|
|
Route::post('/v1/users/forgot', UserController::class . '@sendPasswordResetLink');
|
|
|
|
|
|
Route::post('/v1/tokens/create', function (Request $request) {
|
|
$user = User::where('email', $request->all()['data']['email'])->first();
|
|
|
|
if (!$user)
|
|
return response()->json(['message' => 'E-mail address doesnt exist.'], 401);
|
|
|
|
if (! Hash::check($request->all()['data']['password'], $user->password))
|
|
return response()->json(['message' => 'Incorrect password.'], 401);
|
|
|
|
$token = $user->createToken($user->email . '-' . now(), ['full-access']);
|
|
|
|
return ['token' => $token->plainTextToken, 'user' => new UserResource($user)];
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|