Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions app/Contracts/Interfaces/StudentInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -177,5 +177,8 @@ public function StudentFinish(): mixed;
public function countAlumni(): mixed;

public function getStudentBySession(int $session): mixed;

public function getSynced(Request $request): mixed;
public function sync(mixed $id): mixed;
public function multipleDelete(array $ids): mixed;
}
1 change: 1 addition & 0 deletions app/Contracts/Interfaces/UserInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,6 @@ public function addCourseToSubcribedUser(int $course): void;
public function addSubCourseToSubcribedUser(int $courseId, mixed $subCourseId): void;
public function where(string $string, mixed $id): mixed;
public function get(Request $request): mixed;
public function getUser(Request $request): mixed;

}
50 changes: 46 additions & 4 deletions app/Contracts/Repositories/StudentRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

namespace App\Contracts\Repositories;

use Carbon\Carbon;
use App\Contracts\Interfaces\StudentInterface;
use App\Enum\InternshipTypeEnum;
use App\Enum\StudentStatusEnum;
use App\Helpers\SearchHelper;
use App\Models\Student;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Enum\StudentStatusEnum;
use App\Enum\InternshipTypeEnum;
use App\Contracts\Interfaces\StudentInterface;
use Illuminate\Support\Facades\Auth;

class StudentRepository extends BaseRepository implements StudentInterface
Expand Down Expand Up @@ -743,4 +744,45 @@ public function getStudentByMentorDevision(Request $request): mixed
}
return collect();
}

public function sync(mixed $id): mixed
{
$student = $this->model->query()
->where('id', $id)
->first();

if (!$student) {
return 'not_found';
}

if ($student->status !== StudentStatusEnum::ACCEPTED->value) {
return 'not_accepted';
}

if ($student->is_synced) {
return 'already_synced';
}

$student->update([
'is_synced' => true,
]);

return $student;
}

public function getSynced(Request $request): mixed
{
$query = $this->model->query()
->where('status', StudentStatusEnum::ACCEPTED->value)
->where('is_synced', false);

SearchHelper::apply($query, $request->search, [
'name',
'email',
'school'
]);

return $query->paginate($request->limit ?? 10);
}

}
12 changes: 12 additions & 0 deletions app/Contracts/Repositories/UserRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,18 @@ public function get(Request $request): mixed
->get();
}

public function getUser(Request $request): mixed
{
return $this->model->query()
->when($request->email, function ($query) use ($request) {
$query->where(function ($subQuery) use ($request) {
$subQuery->where('name', 'LIKE', '%' . $request->email . '%')
->orWhere('email', 'LIKE', '%' . $request->email . '%');
});
})
->paginate(10);
}

public function store(array $data): mixed
{
return $this->model->query()->create($data);
Expand Down
19 changes: 19 additions & 0 deletions app/Helpers/SearchHelper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Helpers;

class SearchHelper
{
public static function apply($query, $search, array $columns, $limit = 10)
{
if ($search) {
$query->where(function ($query) use ($search, $columns) {
foreach ($columns as $column) {
$query->orWhere($column, 'LIKE', "%{$search}%");
}
});
}

return $query->limit($limit);
}
}
8 changes: 8 additions & 0 deletions app/Http/Controllers/Api/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ public function __construct(UserInterface $user ,StudentInterface $student)
$this->user = $user;
$this->student = $student;
}
//get user with paginate
public function getUser(Request $request)
{
$users = $this->user->getUser($request);

return ResponseHelper::success(UserResource::collection($users)
);
}

public function index()
{
Expand Down
49 changes: 48 additions & 1 deletion app/Http/Controllers/StudentController.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
use App\Contracts\Interfaces\StudentInterface;
use App\Contracts\Interfaces\StudentSessionInterface;
use App\Contracts\Interfaces\UserInterface;
use App\Models\Student;
use App\Helpers\ResponseHelper;
use App\Http\Requests\StoreStudentRequest;
use App\Http\Requests\UpdateStudentRequest;
use App\Http\Resources\StudentResource;
use App\Models\Student;
use App\Models\User;
use App\Services\StudentService;
use Illuminate\Http\JsonResponse;
Expand Down Expand Up @@ -57,6 +58,52 @@ public function getStudents(): JsonResponse
return response()->json($response, 200);
}

//sinkron data siswa aktif
public function getSyncedStudents(Request $request)
{
try {
$students = $this->student->getSynced($request);

return ResponseHelper::success([
'total' => $students->total(),
'result' => StudentResource::collection($students),
]);

} catch (\Exception $e ) {
return ResponseHelper::error(
null, $e->getMessage()
);
}
}

//post sinkron
public function sync(Request $request)
{
try {
$student = $this->student->sync($request->student_id);

if ($student === 'not_found') {
return ResponseHelper::error(null, 'Student tidak ditemukan');
}

if ($student === 'not_accepted') {
return ResponseHelper::error(null, 'Student belum accepted');
}

if ($student === 'already_synced') {
return ResponseHelper::error(null, 'Student sudah disinkronkan');
}

return ResponseHelper::success(
['result' => new StudentResource($student)],
'Student berhasil disinkronkan'
);

} catch (\Exception $e) {
return ResponseHelper::error(null, $e->getMessage());
}
}

public function changeSessionStudent(Request $request,int $session)
{
$studentIds = $request->input('students', '[]');
Expand Down
8 changes: 4 additions & 4 deletions app/Providers/GlobalViewLoaderProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ public function register(): void
*/
public function boot(): void
{
$divisions = Division::all();
$institutions = Institution::all();
view()->share('divisions', $divisions);
view()->share('institutions', $institutions);
// $divisions = Division::all();
// $institutions = Institution::all();
// view()->share('divisions', $divisions);
// view()->share('institutions', $institutions);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('students', function (Blueprint $table) {
$table->boolean('is_synced')->default(false);
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('students', function (Blueprint $table) {
$table->dropColumn('is_synced');
});
}
};
5 changes: 5 additions & 0 deletions routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@
Route::middleware('auth:sanctum')->group(function () {
Route::put('journal/update/{journal}', [JournalController::class, 'update']);
Route::get('users', [UserController::class, 'index']);
//get all user with paginate
Route::get('user', [UserController::class, 'getUser']);
//data siswa sinkron
Route::get('student/sync', [StudentController::class, 'getSyncedStudents']);
Route::post('student/sync', [StudentController::class, 'sync']);
Route::post('permision', [PermissionController::class, 'store']);
Route::get('profile', [ProfileController::class, 'index']);
Route::get('journals', [JournalController::class, 'index']);
Expand Down
Loading