Bổ sung api Technical
This commit is contained in:
		
							parent
							
								
									a8a5de20dc
								
							
						
					
					
						commit
						1aeda710e1
					
				| 
						 | 
				
			
			@ -0,0 +1,173 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Modules\Admin\app\Http\Controllers;
 | 
			
		||||
 | 
			
		||||
use App\Http\Controllers\Controller;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use Modules\Admin\app\Models\Technical;
 | 
			
		||||
use Modules\Admin\app\Models\TechnicalUser;
 | 
			
		||||
use App\Traits\AnalyzeData;
 | 
			
		||||
use App\Traits\HasFilterRequest;
 | 
			
		||||
use App\Traits\HasOrderByRequest;
 | 
			
		||||
use App\Traits\HasSearchRequest;
 | 
			
		||||
 | 
			
		||||
class TechnicalController extends Controller
 | 
			
		||||
{
 | 
			
		||||
    use HasOrderByRequest;
 | 
			
		||||
    use HasFilterRequest;
 | 
			
		||||
    use HasSearchRequest;
 | 
			
		||||
    use AnalyzeData;
 | 
			
		||||
 | 
			
		||||
    public function getAllTechnical(Request $request)
 | 
			
		||||
    {
 | 
			
		||||
        $technicals = new Technical;
 | 
			
		||||
 | 
			
		||||
        // Order by
 | 
			
		||||
        $this->orderByRequest($technicals, $request);
 | 
			
		||||
 | 
			
		||||
        $technicals->orderBy('name', 'asc');
 | 
			
		||||
        // Filter
 | 
			
		||||
        $this->filterRequest(
 | 
			
		||||
            builder: $technicals,
 | 
			
		||||
            request: $request,
 | 
			
		||||
            filterKeys: [
 | 
			
		||||
                'name' => self::F_TEXT,
 | 
			
		||||
                'level' => self::F_TEXT,
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        $this->searchRequest(
 | 
			
		||||
            builder: $technicals,
 | 
			
		||||
            value: $request->get('search'),
 | 
			
		||||
            fields: [
 | 
			
		||||
                'name',
 | 
			
		||||
                'level'
 | 
			
		||||
            ]
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        $responseData = $technicals->get();
 | 
			
		||||
 | 
			
		||||
        return AbstractController::ResultSuccess($responseData);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function createTechnical(Request $request)
 | 
			
		||||
    {
 | 
			
		||||
        $request->validate([
 | 
			
		||||
            'name' => 'required|string|max:255',
 | 
			
		||||
            'level' => 'nullable|integer|min:1|max:3',
 | 
			
		||||
        ]);
 | 
			
		||||
        $technical = Technical::create([
 | 
			
		||||
            'name' => $request->name,
 | 
			
		||||
            'level' => $request->level,
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        return AbstractController::ResultSuccess($technical, "Technical created successfully!");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function deleteTechnical(Request $request)
 | 
			
		||||
    {
 | 
			
		||||
        $id = $request->input('id');
 | 
			
		||||
        $technical = Technical::find($id);
 | 
			
		||||
        if (!$technical) {
 | 
			
		||||
            return AbstractController::ResultError("Technical not found");
 | 
			
		||||
        }
 | 
			
		||||
        $technical->delete();
 | 
			
		||||
        return AbstractController::ResultSuccess("Technical deleted successfully!");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTechnicalsByUserId($userId)
 | 
			
		||||
    {
 | 
			
		||||
        $technicals = TechnicalUser::with('technical')
 | 
			
		||||
            ->where('user_id', $userId)
 | 
			
		||||
            ->get();
 | 
			
		||||
 | 
			
		||||
        if ($technicals->isEmpty()) {
 | 
			
		||||
            return AbstractController::ResultError("No technicals found for this user.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Chuẩn bị dữ liệu để trả về
 | 
			
		||||
        $technicalData = $technicals->map(function ($technicalUser) {
 | 
			
		||||
            return [
 | 
			
		||||
                'id' => $technicalUser->technical->id,
 | 
			
		||||
                'name' => $technicalUser->technical->name,
 | 
			
		||||
                'level' => $technicalUser->technical->level,
 | 
			
		||||
                'point' => $technicalUser->point,
 | 
			
		||||
                'updated_at' => $technicalUser->updated_at
 | 
			
		||||
            ];
 | 
			
		||||
        });
 | 
			
		||||
        return AbstractController::ResultSuccess($technicalData);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTechnicalsOfUser()
 | 
			
		||||
    {
 | 
			
		||||
        $userInfo = auth('admins')->user();
 | 
			
		||||
        $userId = $userInfo->id;
 | 
			
		||||
        $technicals = TechnicalUser::with('technical')
 | 
			
		||||
            ->where('user_id', $userId)
 | 
			
		||||
            ->get();
 | 
			
		||||
 | 
			
		||||
        if ($technicals->isEmpty()) {
 | 
			
		||||
            return AbstractController::ResultError("No technicals found for this user.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Chuẩn bị dữ liệu để trả về
 | 
			
		||||
        $technicalData = $technicals->map(function ($technicalUser) {
 | 
			
		||||
            return [
 | 
			
		||||
                'id' => $technicalUser->technical->id,
 | 
			
		||||
                'name' => $technicalUser->technical->name,
 | 
			
		||||
                'level' => $technicalUser->technical->level,
 | 
			
		||||
                'point' => $technicalUser->point,
 | 
			
		||||
                'updated_at' => $technicalUser->updated_at
 | 
			
		||||
            ];
 | 
			
		||||
        });
 | 
			
		||||
        return AbstractController::ResultSuccess($technicalData);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getListUserByTechnicalId($technicalId)
 | 
			
		||||
    {
 | 
			
		||||
        $users = TechnicalUser::with('user')
 | 
			
		||||
            ->where('technical_id', $technicalId)
 | 
			
		||||
            ->get();
 | 
			
		||||
 | 
			
		||||
        if ($users->isEmpty()) {
 | 
			
		||||
            return AbstractController::ResultError("No users found for this technical.");
 | 
			
		||||
        }
 | 
			
		||||
        $userData = $users->map(function ($technicalUser) {
 | 
			
		||||
            if ($technicalUser->user) {
 | 
			
		||||
                return [
 | 
			
		||||
                    'user_id' => $technicalUser->user->id ?? "",
 | 
			
		||||
                    'name' => $technicalUser->user->name,
 | 
			
		||||
                    'email' => $technicalUser->user->email,
 | 
			
		||||
                    'point' => $technicalUser->point
 | 
			
		||||
                ];
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return AbstractController::ResultSuccess($userData);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function updateTechnicalsUser(Request $request)
 | 
			
		||||
    {
 | 
			
		||||
        $userInfo = auth('admins')->user();
 | 
			
		||||
 | 
			
		||||
        $validatedData = $request->validate([
 | 
			
		||||
            'technicals' => 'required|array',
 | 
			
		||||
            'technicals.*.technical_id' => 'required|exists:technicals,id', // Phải tồn tại trong bảng technicals
 | 
			
		||||
            'technicals.*.point' => 'required|integer|min:0|max:3', // Điểm trong khoảng [0-3]
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        // Xóa hết các bản ghi hiện có của user trong bảng technical_users
 | 
			
		||||
        TechnicalUser::where('user_id', $userInfo->id)->delete();
 | 
			
		||||
 | 
			
		||||
        // Duyệt qua mảng technicals và thêm mới dữ liệu
 | 
			
		||||
        foreach ($validatedData['technicals'] as $technical) {
 | 
			
		||||
            TechnicalUser::create([
 | 
			
		||||
                'user_id' => $userInfo->id,
 | 
			
		||||
                'technical_id' => $technical['technical_id'],
 | 
			
		||||
                'point' => $technical['point']
 | 
			
		||||
            ]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return AbstractController::ResultSuccess('Technicals for user updated successfully.');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Modules\Admin\app\Models;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
			
		||||
use Illuminate\Database\Eloquent\Model;
 | 
			
		||||
 | 
			
		||||
class Technical extends Model
 | 
			
		||||
{
 | 
			
		||||
    use HasFactory;
 | 
			
		||||
 | 
			
		||||
    protected $fillable = ['name', 'level'];
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Modules\Admin\app\Models;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
			
		||||
use Illuminate\Database\Eloquent\Model;
 | 
			
		||||
 | 
			
		||||
class TechnicalUser extends Model
 | 
			
		||||
{
 | 
			
		||||
    use HasFactory;
 | 
			
		||||
 | 
			
		||||
    protected $table = 'technicals_users';
 | 
			
		||||
 | 
			
		||||
    // Các trường có thể được fill
 | 
			
		||||
    protected $fillable = [
 | 
			
		||||
        'user_id',
 | 
			
		||||
        'technical_id',
 | 
			
		||||
        'point',
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    // Quan hệ với bảng users
 | 
			
		||||
    public function user()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->belongsTo(User::class, 'user_id');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Quan hệ với bảng technicals
 | 
			
		||||
    public function technical()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->belongsTo(Technical::class, 'technical_id');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +17,7 @@ use Modules\Admin\app\Http\Controllers\TimekeepingController;
 | 
			
		|||
use Modules\Admin\app\Http\Controllers\TrackingController;
 | 
			
		||||
use Modules\Admin\app\Http\Controllers\CriteriasController;
 | 
			
		||||
use Modules\Admin\app\Http\Controllers\ProfileController;
 | 
			
		||||
use Modules\Admin\app\Http\Controllers\TechnicalController;
 | 
			
		||||
use Modules\Admin\app\Http\Controllers\TestCaseForSprintController;
 | 
			
		||||
use Modules\Admin\app\Http\Middleware\AdminMiddleware;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -173,6 +174,18 @@ Route::middleware('api')
 | 
			
		|||
                Route::get('/profiles-data', [ProfileController::class, 'getProfilesData'])->middleware('check.permission:admin.hr.staff.tester');
 | 
			
		||||
                Route::post('/profiles-data/update', [ProfileController::class, 'updateProfilesData'])->middleware('check.permission:admin.hr.staff.tester');
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            Route::group([
 | 
			
		||||
                'prefix' => 'technical',
 | 
			
		||||
            ], function () {
 | 
			
		||||
                Route::get('/get-all', [TechnicalController::class, 'getAllTechnical']);
 | 
			
		||||
                Route::post('/create', [TechnicalController::class, 'createTechnical'])->middleware('check.permission:admin');
 | 
			
		||||
                Route::get('/delete', [TechnicalController::class, 'deleteTechnical'])->middleware('check.permission:admin');
 | 
			
		||||
                Route::get('/get-tech-of-user', [TechnicalController::class, 'getTechnicalsOfUser']);
 | 
			
		||||
                Route::get('/get-tech-by-user-id/{userId}', [TechnicalController::class, 'getTechnicalsByUserId'])->middleware('check.permission:admin');
 | 
			
		||||
                Route::get('/get-list-user-by-tech-id/{technicalId}', [TechnicalController::class, 'getListUserByTechnicalId'])->middleware('check.permission:admin');
 | 
			
		||||
                Route::post('/technicals-user/update', [TechnicalController::class, 'updateTechnicalsUser']);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue