From 75eb89406fabcfe3bca2ad9181eb7940500afb83 Mon Sep 17 00:00:00 2001 From: Truong Vo <41848815+vmtruong301296@users.noreply.github.com> Date: Tue, 17 Sep 2024 16:38:37 +0700 Subject: [PATCH] commit code --- .../Http/Controllers/CriteriasController.php | 76 +++++++++++++++++-- BACKEND/Modules/Admin/app/Models/Sprint.php | 38 +++++++++- .../Modules/Admin/app/Models/UserCriteria.php | 17 ++++- BACKEND/app/Services/JiraService.php | 2 +- FRONTEND/src/api/Admin.ts | 13 +++- 5 files changed, 135 insertions(+), 11 deletions(-) diff --git a/BACKEND/Modules/Admin/app/Http/Controllers/CriteriasController.php b/BACKEND/Modules/Admin/app/Http/Controllers/CriteriasController.php index b51ccca..06da33f 100644 --- a/BACKEND/Modules/Admin/app/Http/Controllers/CriteriasController.php +++ b/BACKEND/Modules/Admin/app/Http/Controllers/CriteriasController.php @@ -3,6 +3,8 @@ namespace Modules\Admin\app\Http\Controllers; use App\Http\Controllers\Controller; +use App\Models\User; +use App\Services\JiraService; use App\Traits\AnalyzeData; use App\Traits\HasFilterRequest; use App\Traits\HasOrderByRequest; @@ -22,6 +24,20 @@ class CriteriasController extends Controller use HasSearchRequest; use AnalyzeData; + protected $jiraService; + + public function __construct(JiraService $jiraService) + { + $this->jiraService = $jiraService; + } + + public function getAllUserJira() + { + $all_users = User::all(); + $users = $this->jiraService->getUsersByEmails($all_users); + return $users; + } + /** * Get all criterias of a sprint * @@ -31,13 +47,63 @@ class CriteriasController extends Controller public function getCriteriasForSprint($sprintId) { $sprint = Sprint::with('criterias')->find($sprintId); - // Nếu không tìm thấy sprint, trả về response lỗi if (!$sprint) { - return AbstractController::ResultError('Sprint not found', [], 404); - } + $allUser = self::getAllUserJira(); - // Trả về thông tin sprint và criterias - return AbstractController::ResultSuccess($sprint); + $issues = $this->jiraService->getAllIssueByIdSprint($sprintId); + $uniqueUsers = []; + // echo json_encode($issues); + // die; + if ($issues) { + $issues = $issues["issues"]; + foreach ($issues as $key => $issue) { + $assignee = $issue["fields"]["assignee"]; + if ($assignee) { + if (!in_array($assignee["accountId"], $uniqueUsers)) { + array_push($uniqueUsers, $assignee["accountId"]); + } + } + } + } + // echo json_encode(allUser) + // dd(); + + $filteredObjects = array_filter($allUser, function ($user) use ($uniqueUsers) { + $user = $user[0]; + return in_array($user['accountId'], $uniqueUsers); + }); + + $result = array_map(function ($item) { + $item = $item[0]; + return [ + 'accountId' => $item['accountId'], + 'emailAddress' => $item['emailAddress'], + 'displayName' => $item['displayName'], + ]; + }, $filteredObjects); + + //Get all user trong db => find info theo id + + //Get criteria for sprint + $criterias = Criteria::where('type', "SPRINT")->get(); + //Get criteria for user + $users = Criteria::where('type', "MEMBER")->get(); + echo json_encode($result); + echo json_encode($users); + dd(); + + + + $data = [ + "criterias" => $criterias, + "users" => $users + ]; + } else { + $users = $sprint->users()->get(); + $data = $sprint; + $data->users = $users; + } + return AbstractController::ResultSuccess($data); } public function convertDataReponse($criterias) diff --git a/BACKEND/Modules/Admin/app/Models/Sprint.php b/BACKEND/Modules/Admin/app/Models/Sprint.php index 2df4266..2d20128 100644 --- a/BACKEND/Modules/Admin/app/Models/Sprint.php +++ b/BACKEND/Modules/Admin/app/Models/Sprint.php @@ -2,6 +2,7 @@ namespace Modules\Admin\app\Models; +use App\Models\User; use Illuminate\Database\Eloquent\Model; class Sprint extends Model @@ -12,6 +13,39 @@ class Sprint extends Model public function criterias() { return $this->belongsToMany(Criteria::class, 'sprints_criterias') - ->withPivot('point', 'expect_result', 'actual_result', 'note'); + ->withPivot('point', 'expect_result', 'actual_result', 'note', "created_by"); } -} \ No newline at end of file + + // Định nghĩa một quan hệ với bảng users thông qua bảng users_criterias + public function users2() + { + return $this->hasManyThrough( + User::class, // Model đích + UserCriteria::class, // Model trung gian + 'sprint_id', // Khóa ngoại trong bảng users_criterias + 'email', // Trường để khớp trong bảng users + 'id', // Khóa chính trong bảng sprint + 'user_email' // Trường để khớp trong bảng users_criterias + ); + } + + public function users() + { + return $this->hasMany(UserCriteria::class) + ->leftjoin('users', 'users.email', '=', 'users_criterias.user_email') + ->leftjoin('criterias', 'criterias.id', '=', 'users_criterias.criteria_id') + ->select( + 'users.id as user_id', + 'users.name as user', + 'users.email as user_email', + + 'criteria_id', + 'users_criterias.point as point', + 'users_criterias.note as note', + 'users_criterias.created_by as created_by', + + 'criterias.name as name', + 'criterias.description as criteria_description', + ); + } +} diff --git a/BACKEND/Modules/Admin/app/Models/UserCriteria.php b/BACKEND/Modules/Admin/app/Models/UserCriteria.php index 10d3b49..473bdd6 100644 --- a/BACKEND/Modules/Admin/app/Models/UserCriteria.php +++ b/BACKEND/Modules/Admin/app/Models/UserCriteria.php @@ -2,10 +2,23 @@ namespace Modules\Admin\app\Models; +use App\Models\User; use Illuminate\Database\Eloquent\Model; class UserCriteria extends Model { protected $table = 'users_criterias'; - protected $fillable = ['user_id', 'criteria_id', 'sprint_id', 'point', 'note']; -} \ No newline at end of file + protected $fillable = ['user_id', 'criteria_id', 'sprint_id', 'point', 'note', 'user_email']; + + // Định nghĩa quan hệ với model User + public function user() + { + return $this->belongsTo(User::class, 'user_email', 'email'); + } + + // Định nghĩa quan hệ với model Sprint + public function sprint() + { + return $this->belongsTo(Sprint::class); + } +} diff --git a/BACKEND/app/Services/JiraService.php b/BACKEND/app/Services/JiraService.php index 786f43f..8d2f98b 100644 --- a/BACKEND/app/Services/JiraService.php +++ b/BACKEND/app/Services/JiraService.php @@ -297,7 +297,7 @@ class JiraService } public function getAllBoardByIdProjects($id) { - $response = $this->client->get('/rest/agile/1.0/board?projectKeyOrI=/' . $id); + $response = $this->client->get('/rest/agile/1.0/board?projectKeyOrId=' . $id); return json_decode($response->getBody()->getContents(), true); } public function getAllSprintByIdBoard($id) diff --git a/FRONTEND/src/api/Admin.ts b/FRONTEND/src/api/Admin.ts index c6eece4..ba9a499 100755 --- a/FRONTEND/src/api/Admin.ts +++ b/FRONTEND/src/api/Admin.ts @@ -43,4 +43,15 @@ export const handleTicket = API_URL + 'v1/admin/ticket/handle-ticket' export const getAllUsers = API_URL + 'v1/users' export const createOrUpdateUser = API_URL + 'v1/users/createOrUpdate' export const deleteUser = API_URL + 'v1/users/delete' -export const getQRCode = API_URL + 'v1/users/qrcode' \ No newline at end of file +export const getQRCode = API_URL + 'v1/users/qrcode' + +//SprintReview +export const getAllCriteriasBySprint = API_URL + 'v1/admin/criterias/sprints' + +export const getAllProject = API_URL + 'v1/admin/jira/all-project' +export const getAllBoardByIdProject = API_URL + 'v1/admin/jira/get-all-board-by-id-project' +export const getDetailProjectById = API_URL + 'v1/admin/jira/get-detail-project-by-id' +export const getAllSprintByIdBoard = API_URL + 'v1/admin/jira/get-all-sprint-by-id-board' +export const getAllIssuesByIdSprint = API_URL + 'v1/admin/jira/get-all-issue-by-id-sprint' + +export const updateSprintReview = API_URL + 'v1/admin/sprint-review/update' \ No newline at end of file