MIF_E31211871/Laravel/app/Http/Controllers/API/ApiAuth.php

174 lines
5.8 KiB
PHP

<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use App\Models\Pickup;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
use App\Mail\VerifMail;
class ApiAuth extends Controller
{
// private VerifMail $verifMail;
// Required apikey mobile
public function __construct()
{
// $this->verifMail = new VerifMail();
}
public function loginUser(Request $request)
{
$validadte = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required',
]);
$dataEmail = $request->email;
if ($validadte->fails()) {
return $this->sendMassage($validadte->errors()->first(), 400, false);
} else {
$customer = User::where('email', $dataEmail)->first();
if ($customer) {
if (Hash::check($request->password, $customer->password)) {
$token = Str::random(200);
User::where('email', $dataEmail)->update([
'token' => $token,
]);
$dataCustomer = User::where('email', $dataEmail)->first();
return $this->sendMassage($dataCustomer, 200, true);
}
return $this->sendMassage('Password salah', 400, false);
}
return $this->sendMassage('Username tidak ditemukan', 400, false);
}
}
public function loginPegawai(Request $request)
{
$validadte = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required',
]);
$dataEmail = $request->email;
if ($validadte->fails()) {
return $this->sendMassage($validadte->errors()->first(), 400, false);
} else {
$customer = User::where('email', $dataEmail)->first();
if ($customer) {
if (Hash::check($request->password, $customer->password)) {
$token = Str::random(200);
User::where('email', $dataEmail)->update([
'token' => $token,
]);
$dataCustomer = User::where('email', $dataEmail)->first();
return $this->sendMassage($dataCustomer, 200, true);
}
return $this->sendMassage('Password salah', 400, false);
}
return $this->sendMassage('Username tidak ditemukan', 400, false);
}
}
public function registerUser(Request $request)
{
$validadte = Validator::make($request->all(), [
'nama' => 'required',
'email' => 'required|email',
]);
$RandomNumber = rand(10000, 99999);
if ($validadte->fails()) {
return $this->sendMassage($validadte->errors()->first(), 400, false);
} else {
$dataEmail = $request->input('email');
$customer = User::where('email', $dataEmail)->first();
if ($customer) {
return $this->sendMassage('Akun yang anda gunakan telah terdapat pada list', 400, false);
} else {
$isRegister = User::create([
'id_user' => "IDCUST" . $RandomNumber,
'nama' => $request->input('nama'),
'no_telepon' => $request->input('no_telepon'),
'alamat' => $request->input('alamat'),
'email' => $request->input('email'),
'id_role' => "1",
'password' => Hash::make($request->input('password')),
'longitude' => $request->input('longitude'),
'latitude' => $request->input('latitude'),
]);
if (isset($isRegister)) {
$dataUser = [
'email' => $dataEmail,
'kode' => null
];
return $this->sendMassage("Selamat anda berhasil registrasi", 200, true);
}
}
}
}
function infoPegawai(Request $request)
{
$cekPegawaiFree = User::where('user.id_role', 2)
->get()
->pluck('id_user')->toArray();
$cekPegawaiNotFree = User::leftJoin('pickup', 'user.id_user', '=', 'pickup.id_pegawai')
->where('user.id_role', 2)
->where(function ($query) {
$query->orWhere('pickup.status_penjemputan', 'pending')
->orWhere('pickup.status_penjemputan', 'pickup');
})
->get()
->pluck('id_user')
->toArray();
$pegawaiBebas = User::whereIn('id_user', array_diff($cekPegawaiFree, $cekPegawaiNotFree))->get()->toArray();
$jumlahPegawaiBebas = count($pegawaiBebas);
$jumlahPegawaiTotal = count($cekPegawaiFree);
$hasil = "$jumlahPegawaiBebas/$jumlahPegawaiTotal";
return $this->sendMassage($hasil, 200, true);
}
function slotAntri(Request $request)
{
$jumlahAntrian = Pickup::where(function ($query) {
$query->orWhere('pickup.status_penjemputan', 'pending')
->orWhere('pickup.status_penjemputan', 'pickup');
})->count();
if ($jumlahAntrian >= 10) {
return $this->sendMassage("0/10", 200, true);
} else {
$hasil = 10 - $jumlahAntrian;
$infoSlot = "$hasil/10";
return $this->sendMassage($infoSlot, 200, true);
}
}
// Function Massage
public function sendMassage($text, $kode, $status)
{
return response()->json([
'data' => $text,
'code' => $kode,
'status' => $status
], $kode);
}
}