diff --git a/app/Http/Controllers/TaskStatusController.php b/app/Http/Controllers/TaskStatusController.php index 188312faa512..01f6756a3970 100644 --- a/app/Http/Controllers/TaskStatusController.php +++ b/app/Http/Controllers/TaskStatusController.php @@ -1,4 +1,13 @@ task_status_repo = $task_status_repo; } - + /** - * @OA\Get( - * path="/api/v1/task_statuses", - * operationId="getTaskStatuses", - * tags={"task_status"}, - * summary="Gets a list of task statuses", - * description="Lists task statuses", - * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), - * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), - * @OA\Parameter(ref="#/components/parameters/include"), - * @OA\Parameter(ref="#/components/parameters/index"), - * @OA\Response( - * response=200, - * description="A list of task statuses", - * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), - * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), - * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), - * @OA\JsonContent(ref="#/components/schemas/TaskStatus"), - * ), - * @OA\Response( - * response=422, - * description="Validation error", - * @OA\JsonContent(ref="#/components/schemas/ValidationError"), - - * ), - * @OA\Response( - * response="default", - * description="Unexpected Error", - * @OA\JsonContent(ref="#/components/schemas/Error"), - * ), - * ) + * index + * + * @param TaskStatusFilters $filters + * @return Response */ public function index(TaskStatusFilters $filters) { @@ -82,44 +63,12 @@ class TaskStatusController extends BaseController return $this->listResponse($task_status); } + /** - * Show the form for creating a new resource. - * - * @param CreateTaskStatusRequest $request The request + * create * + * @param CreateTaskStatusRequest $request * @return Response - * - * - * - * @OA\Get( - * path="/api/v1/task_statuses/create", - * operationId="getTaskStatussCreate", - * tags={"task_status"}, - * summary="Gets a new blank TaskStatus object", - * description="Returns a blank object with default values", - * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), - * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), - * @OA\Parameter(ref="#/components/parameters/include"), - * @OA\Response( - * response=200, - * description="A blank TaskStatus object", - * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), - * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), - * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), - * @OA\JsonContent(ref="#/components/schemas/TaskStatus"), - * ), - * @OA\Response( - * response=422, - * description="Validation error", - * @OA\JsonContent(ref="#/components/schemas/ValidationError"), - * - * ), - * @OA\Response( - * response="default", - * description="Unexpected Error", - * @OA\JsonContent(ref="#/components/schemas/Error"), - * ), - * ) */ public function create(CreateTaskStatusRequest $request) { @@ -132,49 +81,11 @@ class TaskStatusController extends BaseController * Store a newly created resource in storage. * * @param StoreTaskStatusRequest $request The request - * * @return Response * - * - * - * @OA\Post( - * path="/api/v1/task_statuses", - * operationId="storeTaskStatus", - * tags={"task_status"}, - * summary="Adds a TaskStatus", - * description="Adds a TaskStatusto the system", - * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), - * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), - * @OA\Parameter(ref="#/components/parameters/include"), - * @OA\RequestBody( - * description="The task_status request", - * required=true, - * @OA\JsonContent(ref="#/components/schemas/TaskStatus"), - * ), - * @OA\Response( - * response=200, - * description="Returns the saved TaskStatus object", - * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), - * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), - * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), - * @OA\JsonContent(ref="#/components/schemas/TaskStatus"), - * ), - * @OA\Response( - * response=422, - * description="Validation error", - * @OA\JsonContent(ref="#/components/schemas/ValidationError"), - * - * ), - * @OA\Response( - * response="default", - * description="Unexpected Error", - * @OA\JsonContent(ref="#/components/schemas/Error"), - * ), - * ) - */ + */ public function store(StoreTaskStatusRequest $request) { - // nlog($request->all()); $task_status = TaskStatusFactory::create(auth()->user()->company()->id, auth()->user()->id); $task_status->fill($request->all()); @@ -185,46 +96,6 @@ class TaskStatusController extends BaseController } /** - * @OA\Get( - * path="/api/v1/task_statuses/{id}", - * operationId="showTaskStatus", - * tags={"task_status"}, - * summary="Shows a TaskStatus Term", - * description="Displays an TaskStatusby id", - * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), - * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), - * @OA\Parameter(ref="#/components/parameters/include"), - * @OA\Parameter( - * name="id", - * in="path", - * description="The TaskStatusHashed ID", - * example="D2J234DFA", - * required=true, - * @OA\Schema( - * type="string", - * format="string", - * ), - * ), - * @OA\Response( - * response=200, - * description="Returns the TaskStatusobject", - * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), - * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), - * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), - * @OA\JsonContent(ref="#/components/schemas/TaskStatus"), - * ), - * @OA\Response( - * response=422, - * description="Validation error", - * @OA\JsonContent(ref="#/components/schemas/ValidationError"), - * - * ), - * @OA\Response( - * response="default", - * description="Unexpected Error", - * @OA\JsonContent(ref="#/components/schemas/Error"), - * ), - * ) * @param ShowTaskStatusRequest $request * @param TaskStatus $task_status * @return Response|mixed @@ -235,46 +106,6 @@ class TaskStatusController extends BaseController } /** - * @OA\Get( - * path="/api/v1/task_statuses/{id}/edit", - * operationId="editTaskStatuss", - * tags={"task_status"}, - * summary="Shows an TaskStatusfor editting", - * description="Displays an TaskStatusby id", - * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), - * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), - * @OA\Parameter(ref="#/components/parameters/include"), - * @OA\Parameter( - * name="id", - * in="path", - * description="The TaskStatusHashed ID", - * example="D2J234DFA", - * required=true, - * @OA\Schema( - * type="string", - * format="string", - * ), - * ), - * @OA\Response( - * response=200, - * description="Returns the TaskStatus object", - * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), - * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), - * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), - * @OA\JsonContent(ref="#/components/schemas/TaskStatus"), - * ), - * @OA\Response( - * response=422, - * description="Validation error", - * @OA\JsonContent(ref="#/components/schemas/ValidationError"), - * - * ), - * @OA\Response( - * response="default", - * description="Unexpected Error", - * @OA\JsonContent(ref="#/components/schemas/Error"), - * ), - * ) * @param EditTaskStatusRequest $request * @param TaskStatus $payment * @return Response|mixed @@ -289,56 +120,18 @@ class TaskStatusController extends BaseController * * @param UpdateTaskStatusRequest $request The request * @param TaskStatus $task_status The payment term - * * @return Response - * - * - * @OA\Put( - * path="/api/v1/task_statuses/{id}", - * operationId="updateTaskStatus", - * tags={"task_status"}, - * summary="Updates a TaskStatus Term", - * description="Handles the updating of an TaskStatus Termby id", - * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), - * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), - * @OA\Parameter(ref="#/components/parameters/include"), - * @OA\Parameter( - * name="id", - * in="path", - * description="The TaskStatusHashed ID", - * example="D2J234DFA", - * required=true, - * @OA\Schema( - * type="string", - * format="string", - * ), - * ), - * @OA\Response( - * response=200, - * description="Returns the TaskStatusobject", - * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), - * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), - * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), - * @OA\JsonContent(ref="#/components/schemas/TaskStatus"), - * ), - * @OA\Response( - * response=422, - * description="Validation error", - * @OA\JsonContent(ref="#/components/schemas/ValidationError"), - * - * ), - * @OA\Response( - * response="default", - * description="Unexpected Error", - * @OA\JsonContent(ref="#/components/schemas/Error"), - * ), - * ) */ public function update(UpdateTaskStatusRequest $request, TaskStatus $task_status) { + $task_status->fill($request->all()); + $reorder = $task_status->isDirty('status_order'); $task_status->save(); + if ($reorder) + $this->task_status_repo->reorder($task_status); + return $this->itemResponse($task_status->fresh()); } @@ -347,50 +140,9 @@ class TaskStatusController extends BaseController * * @param DestroyTaskStatusRequest $request * @param TaskStatus $task_status - * - * @return Response - * - * + * @return Response + * * @throws \Exception - * @OA\Delete( - * path="/api/v1/task_statuses/{id}", - * operationId="deleteTaskStatus", - * tags={"task_statuss"}, - * summary="Deletes a TaskStatus Term", - * description="Handles the deletion of an TaskStatus by id", - * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), - * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), - * @OA\Parameter(ref="#/components/parameters/include"), - * @OA\Parameter( - * name="id", - * in="path", - * description="The TaskStatusHashed ID", - * example="D2J234DFA", - * required=true, - * @OA\Schema( - * type="string", - * format="string", - * ), - * ), - * @OA\Response( - * response=200, - * description="Returns a HTTP status", - * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), - * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), - * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), - * ), - * @OA\Response( - * response=422, - * description="Validation error", - * @OA\JsonContent(ref="#/components/schemas/ValidationError"), - * - * ), - * @OA\Response( - * response="default", - * description="Unexpected Error", - * @OA\JsonContent(ref="#/components/schemas/Error"), - * ), - * ) */ public function destroy(DestroyTaskStatusRequest $request, TaskStatus $task_status) { @@ -401,54 +153,8 @@ class TaskStatusController extends BaseController /** * Perform bulk actions on the list view. - * - * @return Collection - * - * - * @OA\Post( - * path="/api/v1/task_statuses/bulk", - * operationId="bulkTaskStatuss", - * tags={"task_status"}, - * summary="Performs bulk actions on an array of task statuses", - * description="", - * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), - * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), - * @OA\Parameter(ref="#/components/parameters/index"), - * @OA\RequestBody( - * description="TaskStatus Ter,s", - * required=true, - * @OA\MediaType( - * mediaType="application/json", - * @OA\Schema( - * type="array", - * @OA\Items( - * type="integer", - * description="Array of hashed IDs to be bulk 'actioned", - * example="[0,1,2,3]", - * ), - * ) - * ) - * ), - * @OA\Response( - * response=200, - * description="The TaskStatus Terms response", - * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), - * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), - * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), - * @OA\JsonContent(ref="#/components/schemas/TaskStatus"), - * ), - * @OA\Response( - * response=422, - * description="Validation error", - * @OA\JsonContent(ref="#/components/schemas/ValidationError"), - - * ), - * @OA\Response( - * response="default", - * description="Unexpected Error", - * @OA\JsonContent(ref="#/components/schemas/Error"), - * ), - * ) + * @param ActionTaskStatusRequest $request + * @return Response */ public function bulk(ActionTaskStatusRequest $request) { diff --git a/app/Http/Requests/TaskStatus/UpdateTaskStatusRequest.php b/app/Http/Requests/TaskStatus/UpdateTaskStatusRequest.php index 2861bb1a9551..e7a0b757c9ef 100644 --- a/app/Http/Requests/TaskStatus/UpdateTaskStatusRequest.php +++ b/app/Http/Requests/TaskStatus/UpdateTaskStatusRequest.php @@ -33,11 +33,6 @@ class UpdateTaskStatusRequest extends Request { $rules = []; - // 26/10/2021 we disable this as it prevent updating existing task status meta data where the same name already exists - // if ($this->input('name')) { - // $rules['name'] = Rule::unique('task_statuses')->where('company_id', auth()->user()->company()->id)->ignore($this->task_status->id); - // } - return $rules; } diff --git a/app/Models/TaskStatus.php b/app/Models/TaskStatus.php index 8e30f5fa43ac..3b23281de1c0 100644 --- a/app/Models/TaskStatus.php +++ b/app/Models/TaskStatus.php @@ -63,7 +63,7 @@ class TaskStatus extends BaseModel public $timestamps = true; /** - * @var array + * @var array */ protected $fillable = [ 'name', diff --git a/app/Repositories/TaskStatusRepository.php b/app/Repositories/TaskStatusRepository.php index 8692ed51fd35..0ff8904d0c79 100644 --- a/app/Repositories/TaskStatusRepository.php +++ b/app/Repositories/TaskStatusRepository.php @@ -53,4 +53,18 @@ class TaskStatusRepository extends BaseRepository return $task_status; } + + public function reorder(TaskStatus $task_status) + { + + TaskStatus::query() + ->where('company_id', $task_status->company_id) + ->orderByRaw('ISNULL(status_order), status_order ASC') + ->orderBy('updated_at', 'DESC') + ->cursor() + ->each(function ($task_status, $index) { + $task_status->update(['status_order' => $index+1]); + }); + + } } diff --git a/tests/Feature/TaskStatusApiTest.php b/tests/Feature/TaskStatusApiTest.php index 4ce96974699c..780ba4c12e0c 100644 --- a/tests/Feature/TaskStatusApiTest.php +++ b/tests/Feature/TaskStatusApiTest.php @@ -11,6 +11,7 @@ namespace Tests\Feature; +use App\Models\TaskStatus; use App\Utils\Traits\MakesHash; use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Testing\DatabaseTransactions; @@ -28,6 +29,8 @@ class TaskStatusApiTest extends TestCase use DatabaseTransactions; use MockAccountData; + public $faker; + protected function setUp() :void { parent::setUp(); @@ -41,6 +44,38 @@ class TaskStatusApiTest extends TestCase Model::reguard(); } + public function testSorting() + { + TaskStatus::factory()->count(5)->create([ + 'company_id' => $this->company->id, + 'user_id' => $this->user->id + ]); + + + $t = TaskStatus::where('company_id', '=', $this->company->id)->orderBy('id', 'desc'); + + $this->assertEquals(10, $t->count()); + $task_status = $t->first(); + + $id = $task_status->id; + + nlog("setting {$id} to index 1"); + + $data = [ + 'status_order' => 1, + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->put('/api/v1/task_statuses/'.$task_status->hashed_id, $data); + + $t = TaskStatus::where('company_id', '=', $this->company->id)->orderBy('status_order', 'asc')->first(); + + $this->assertEquals($id, $t->id); + + } + public function testTaskStatusGetFilter() { $response = $this->withHeaders([