commit code

This commit is contained in:
Truong Vo 2024-09-17 16:38:37 +07:00
parent 80d2191b7c
commit 75eb89406f
5 changed files with 135 additions and 11 deletions

View File

@ -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)

View File

@ -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");
}
}
// Đị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',
);
}
}

View File

@ -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'];
}
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);
}
}

View File

@ -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)

View File

@ -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'
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'