first commit

This commit is contained in:
Noor E Ilahi
2026-01-09 12:54:53 +05:30
commit 7ccf44f7da
1070 changed files with 113036 additions and 0 deletions

View File

@@ -0,0 +1,281 @@
<?php
namespace App\Http\Controllers\Api;
use App\Enums\Role;
use App\Http\Requests\Status\DestroyStatusRequest;
use App\Http\Requests\TaskComment\CreateTaskCommentRequest;
use App\Http\Requests\TaskComment\DestroyTaskCommentRequest;
use App\Http\Requests\TaskComment\ListTaskCommentRequest;
use App\Http\Requests\TaskComment\ShowTaskCommentRequestStatus;
use App\Http\Requests\TaskComment\UpdateTaskCommentRequest;
use Filter;
use App\Models\TaskComment;
use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Throwable;
class TaskCommentController extends ItemController
{
protected const MODEL = TaskComment::class;
/**
* @api {post} /task-comment/create Create Task Comment
* @apiDescription Create a new task comment
*
* @apiVersion 4.0.0
* @apiName CreateTaskComment
* @apiGroup TaskComments
*
*
* @apiPermission task_comment_create
* @apiPermission task_comment_full_access
* @apiParam {Integer} task_id ID of the task
* @apiParam {String} comment The content of the comment
*
* @apiParamExample {json} Request Example:
* {
* "task_id": 1,
* "comment": "This is a new comment"
* }
*
* @apiSuccess {Integer} id ID of the created comment
* @apiSuccess {Integer} task_id ID of the task
* @apiSuccess {Integer} user_id ID of the user who created the comment
* @apiSuccess {String} comment The content of the comment
* @apiSuccess {String} created_at Creation timestamp
* @apiSuccess {String} updated_at Last update timestamp
*
* @apiSuccessExample {json} Response Example:
* HTTP/1.1 201 Created
* {
* "id": 1,
* "task_id": 1,
* "user_id": 1,
* "comment": "This is a new comment",
* "created_at": "2024-07-09T10:00:00.000000Z",
* "updated_at": "2024-07-09T10:00:00.000000Z"
* }
*
* @apiUse 400Error
* @apiUse UnauthorizedError
*/
public function create(CreateTaskCommentRequest $request): JsonResponse
{
Filter::listen(
Filter::getRequestFilterName(),
static function (array $data) use ($request) {
$data['user_id'] = $request->user()->id;
return $data;
}
);
return $this->_create($request);
}
/**
* @api {post} /task-comment/edit Edit Task Comment
* @apiDescription Edit an existing task comment
*
* @apiVersion 4.0.0
* @apiName EditTaskComment
* @apiGroup TaskComments
*
*
* @apiParam {Integer} id ID of the comment to edit
* @apiParam {String} comment The updated content of the comment
*
* @apiParamExample {json} Request Example:
* {
* "id": 1,
* "comment": "This is the updated comment"
* }
*
* @apiSuccess {Integer} id ID of the edited comment
* @apiSuccess {Integer} task_id ID of the task
* @apiSuccess {Integer} user_id ID of the user who edited the comment
* @apiSuccess {String} comment The updated content of the comment
* @apiSuccess {String} created_at Creation timestamp
* @apiSuccess {String} updated_at Last update timestamp
* @apiSuccess {String} deleted_at Deletion timestamp (if applicable, otherwise null)
*
* @apiSuccessExample {json} Response Example:
* HTTP/1.1 200 OK
* {
* "id": 1,
* "task_id": 1,
* "user_id": 1,
* "content": "2344",
* "created_at": "2024-05-03T10:45:36.000000Z",
* "updated_at": "2024-05-03T10:45:36.000000Z",
* "deleted_at": null
* }
*
* @apiUse 400Error
* @apiUse UnauthorizedError
*/
public function edit(UpdateTaskCommentRequest $request): JsonResponse
{
return $this->_edit($request);
}
/**
* @api {any} /task-comment/list List Task Comments
* @apiDescription Get list of Task Comments
*
* @apiVersion 4.0.0
* @apiName GetTaskCommentList
* @apiGroup Task Comments
*
* @apiPermission task_comment_list
* @apiPermission task_comment_full_access
*
* @apiParam {Integer} [task_id] Optional task ID to filter comments
*
* @apiParamExample {json} Request Example:
* {
* "task_id": 1
* }
*
* @apiSuccess {Integer} id ID of the comment
* @apiSuccess {Integer} task_id ID of the task
* @apiSuccess {Integer} user_id ID of the user who created the comment
* @apiSuccess {String} content Content of the comment
* @apiSuccess {String} created_at Creation timestamp
* @apiSuccess {String} updated_at Last update timestamp
* @apiSuccess {String} deleted_at Deletion timestamp (if applicable, otherwise null)
* @apiSuccess {Object} user User who created the comment
*
* @apiSuccessExample {json} Response Example:
* HTTP/1.1 200 OK
* {
* "id": 1,
* "task_id": 1,
* "user_id": 1,
* "content": "2344",
* "created_at": "2024-05-03T10:45:36.000000Z",
* "updated_at": "2024-05-03T10:45:36.000000Z",
* "deleted_at": null,
* "user": {
* "id": 1,
* "full_name": "Admin",
* "email": "admin@cattr.app",
* "url": "",
* "company_id": 1,
* "avatar": "",
* "screenshots_active": 1,
* "manual_time": 0,
* "computer_time_popup": 300,
* "blur_screenshots": false,
* "web_and_app_monitoring": true,
* "screenshots_interval": 5,
* "active": 1,
* "deleted_at": null,
* "created_at": "2023-10-26T10:26:17.000000Z",
* "updated_at": "2024-02-15T19:06:42.000000Z",
* "timezone": null,
* "important": 0,
* "change_password": 0,
* "role_id": 0,
* "user_language": "en",
* "type": "employee",
* "invitation_sent": false,
* "nonce": 0,
* "client_installed": 0,
* "permanent_screenshots": 0,
* "last_activity": "2023-10-26 10:26:17",
* "online": false,
* "can_view_team_tab": true,
* "can_create_task": true
* }
* }
*
* @apiUse 400Error
* @apiUse UnauthorizedError
*/
public function index(ListTaskCommentRequest $request): JsonResponse
{
Filter::listen(
Filter::getQueryFilterName(),
static function ($query) use ($request) {
if (!$request->user()->can('edit', TaskComment::class)) {
$query = $query->whereHas(
'task',
static fn (Builder $taskQuery) => $taskQuery->where(
'user_id',
'=',
$request->user()->id
)
);
}
return $query->with('user');
}
);
return $this->_index($request);
}
/**
* @apiDeprecated since 1.0.0
* @throws Throwable
* @api {post} /task-comment/show Show
* @apiDescription Show Task Comment
*
* @apiVersion 1.0.0
* @apiName ShowTaskComment
* @apiGroup Task Comment
*
* @apiPermission task_comment_show
* @apiPermission task_comment_full_access
*/
public function show(ShowTaskCommentRequestStatus $request): JsonResponse
{
return $this->_show($request);
}
/**
* @apiDeprecated since 4.0.0
* @api {post} /task-comment/remove Destroy Task Comment
* @apiDescription Destroy a Task Comment
*
* @apiVersion 4.0.0
* @apiName DestroyTaskComment
* @apiGroup Task Comment
*
* @apiPermission task_comment_remove
* @apiPermission task_comment_full_access
*
* @apiParam {Integer} id ID of the task comment to destroy
*
* @apiParamExample {json} Request Example:
* {
* "id": 1
* }
*
* @apiSuccess {Integer} status Response status code
* @apiSuccess {Boolean} success Response success status
* @apiSuccess {String} message Success message
*
* @apiUse 400Error
* @apiUse UnauthorizedError
*/
public function destroy(DestroyTaskCommentRequest $request): JsonResponse
{
$user = $request->user();
Filter::listen(
Filter::getQueryFilterName(),
static fn($query) => $user->hasRole([Role::ADMIN, Role::MANAGER]) ? $query :
$query->where(['user_id' => $user->id])
->whereHas('task', static fn($taskQuery) => $taskQuery->where(['user_id' => $user->id]))
);
return $this->_destroy($request);
}
}