MIF_E31210063/MaidMatching/app/Http/Controllers/api/UserController.php

585 lines
20 KiB
PHP

<?php
namespace App\Http\Controllers\api;
use Carbon\Carbon;
use App\Models\User;
use App\Models\Profile;
use App\Models\UserSkill;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Resources\UserResource;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function show($id)
{
// DIANDROID RIBET HARUS BIKIN RESPONSE BARU
// $user = User::with(['skills', 'profile'])->findOrFail($id);
// return response()->json([
// 'error' => false,
// 'message' => 'Berhasil mengambil detail user.',
// 'data' => new UserResource($user)
// ], 200);
$user = User::where('id', $id)->get();
return response()->json([
'error' => false,
'message' => 'Berhasil mengambil detail user.',
'data' => UserResource::Collection($user->loadMissing(['skills', 'profile']))
], 200);
}
public function get_maids(Request $request) {
$user = User::where('role', 3)->where('status', 2);
$search = isset($request->search) ? $request->search : '';
if (!empty($search)) {
$user->where(function ($query) use ($search) {
$query->where('name', 'like', '%'.$search.'%');
});
}
// $length = intval(isset($request->length) ? $request->length : 10);
// $start = intval(isset($request->start) ? $request->start : 0);
// $user = $user->skip($start)->take($length)->get();
$user = $user->get();
return response()->json([
'error' => false,
'message' => 'Berhasil mengambil data.',
'data' => UserResource::collection($user->loadMissing(['profile', 'skills']))
], 200);
}
public function admin_set_kyc(Request $request) {
$validator = Validator::make($request->all(), [
'user_id' => 'required',
'status' => 'required',
], [
'required' => ':attribute harus diisi.'
]);
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => Str::ucfirst($validator->errors()->first()),
'data' => null
]);
}
$update = [
'kyc' => $request->input('status')
];
$user = Profile::where('user_id', $request->input('user_id'))->first();
$user->update($update);
return response()->json([
'error' => false,
'message' => 'Status KYC diperbarui.',
'data' => null
]);
}
public function admin_get_kyc(Request $request) {
$user = User::select(['*','users.id'])->where('kyc', 1)->where('status', 2)->join('profiles', 'profiles.user_id', '=', 'users.id');
$search = isset($request->search['value']) ? $request->search['value'] : '';
if (!empty($search)) {
$user->where(function ($query) use ($search) {
$query->where('name', 'like', '%'.$search.'%');
});
}
$total_data = $user->count();
$length = intval(isset($request->length) ? $request->length : 0);
$start = intval(isset($request->start) ? $request->start : 0);
if (!isset($request->length) || !isset($request->start)) {
$user = $user->get();
} else {
$user = $user->skip($start)->take($length)->get();
}
return response()->json([
'error' => false,
'message' => 'Berhasil mengambil data.',
'data' => UserResource::collection($user->loadMissing(['profile', 'skills'])),
'draw' => $request->draw,
'recordsTotal' => $total_data,
'recordsFiltered' => $total_data,
], 200);
}
public function admin_get_maids(Request $request) {
$user = User::where('role', 3)->where('status', 2);
$search = isset($request->search['value']) ? $request->search['value'] : '';
if (!empty($search)) {
$user->where(function ($query) use ($search) {
$query->where('name', 'like', '%'.$search.'%');
});
}
$total_data = $user->count();
$length = intval(isset($request->length) ? $request->length : 0);
$start = intval(isset($request->start) ? $request->start : 0);
if (!isset($request->length) || !isset($request->start)) {
$user = $user->get();
} else {
$user = $user->skip($start)->take($length)->get();
}
return response()->json([
'error' => false,
'message' => 'Berhasil mengambil data.',
'data' => UserResource::collection($user->loadMissing(['profile', 'skills'])),
'draw' => $request->draw,
'recordsTotal' => $total_data,
'recordsFiltered' => $total_data,
], 200);
}
public function admin_get_owners(Request $request) {
$user = User::where('role', 2)->where('status', 2);
$search = isset($request->search['value']) ? $request->search['value'] : '';
if (!empty($search)) {
$user->where(function ($query) use ($search) {
$query->where('name', 'like', '%'.$search.'%');
});
}
$total_data = $user->count();
$length = intval(isset($request->length) ? $request->length : 0);
$start = intval(isset($request->start) ? $request->start : 0);
if (!isset($request->length) || !isset($request->start)) {
$user = $user->get();
} else {
$user = $user->skip($start)->take($length)->get();
}
return response()->json([
'error' => false,
'message' => 'Berhasil mengambil data.',
'data' => UserResource::collection($user->loadMissing(['profile', 'skills'])),
'draw' => $request->draw,
'recordsTotal' => $total_data,
'recordsFiltered' => $total_data,
], 200);
}
public function admin_get_admins(Request $request) {
$user = User::where('role', 1);
$search = isset($request->search['value']) ? $request->search['value'] : '';
if (!empty($search)) {
$user->where(function ($query) use ($search) {
$query->where('name', 'like', '%'.$search.'%');
});
}
$total_data = $user->count();
$length = intval(isset($request->length) ? $request->length : 0);
$start = intval(isset($request->start) ? $request->start : 0);
if (!isset($request->length) || !isset($request->start)) {
$user = $user->get();
} else {
$user = $user->skip($start)->take($length)->get();
}
return response()->json([
'error' => false,
'message' => 'Berhasil mengambil data.',
'data' => UserResource::collection($user->loadMissing(['profile', 'skills'])),
'draw' => $request->draw,
'recordsTotal' => $total_data,
'recordsFiltered' => $total_data,
], 200);
}
public function admin_post_admins(Request $request) {
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required|min:8|regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$/|confirmed',
'password_confirmation' => 'required',
], [
'required' => ':attribute harus diisi.',
'email' => ':attribute harus berupa email yang valid.',
'min' => 'panjang :attribute minimal :min karakter.',
'regex' => ':attribute harus mengandung minimal satu huruf kecil, satu huruf besar, dan satu angka.',
'confirmed' => 'Password dan konfirmasi password tidak sama.'
]);
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => Str::ucfirst($validator->errors()->first()),
'data' => null
]);
}
$cek_email = User::where('email', $request->email)->get()->count();
if ($cek_email > 0) {
return response()->json([
'error' => true,
'message' => "Email telah terpakai. Silahkan hubungi CS untuk konfirmasi jika merasa tidak mendaftar.",
'data' => null
]);
}
$username = $this->generateUsername($request->name);
$user = User::create([
'role' => 1,
'name' => $request->name,
'username' => $username,
'email' => $request->email,
'password' => Hash::make($request->password),
'status' => '1'
]);
return response()->json([
'error' => false,
'message' => 'Berhasil menambahkan admin.',
'data' => null
]);
}
public function admin_update_admins(Request $request, $id) {
$validator = Validator::make($request->all(), [
'name' => 'required',
], [
'required' => ':attribute harus diisi.',
'email' => ':attribute harus berupa email yang valid.',
'min' => 'panjang :attribute minimal :min karakter.',
'regex' => ':attribute harus mengandung minimal satu huruf kecil, satu huruf besar, dan satu angka.',
'confirmed' => 'Password dan konfirmasi password tidak sama.'
]);
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => Str::ucfirst($validator->errors()->first()),
'data' => null
]);
}
$update = [
'name' => $request->name
];
if (!empty($request->password)) {
if ($request->password === $request->password_confirmation) {
$update = [
'name' => $request->name,
'password' => Hash::make($request->password)
];
} else {
return response()->json([
'error' => true,
'message' => "Password dan konfirmasi password tidak sama.",
'data' => null
]);
}
}
$user = User::findOrFail($id);
$user->update($update);
return response()->json([
'error' => false,
'message' => 'Berhasil merubah admin.',
'data' => null
]);
}
public function change_password(Request $request, $id) {
$validator = Validator::make($request->all(), [
'password' => 'required|min:8|regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$/|confirmed',
'password_confirmation' => 'required',
], [
'required' => ':attribute harus diisi.',
'email' => ':attribute harus berupa email yang valid.',
'min' => 'panjang :attribute minimal :min karakter.',
'regex' => ':attribute harus mengandung minimal satu huruf kecil, satu huruf besar, dan satu angka.',
'confirmed' => 'Password dan konfirmasi password tidak sama.'
]);
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => Str::ucfirst($validator->errors()->first()),
'data' => null
]);
}
$update = [
'password' => Hash::make($request->password)
];
$user = User::findOrFail($id);
$user->update($update);
return response()->json([
'error' => false,
'message' => 'Berhasil merubah password.',
'data' => null
]);
}
public function admin_delete_admins(Request $request, $id) {
if (User::where('role', 1)->get()->count() <= 1) {
return response()->json([
'error' => true,
'message' => 'Tidak bisa menghapus satu-satunya admin.',
'data' => null
]);
}
$user = User::findOrFail($id);
$name = $user->name;
$user->delete();
return response()->json([
'error' => false,
'message' => 'Admin '.$name.' berhasil dihapus.',
'data' => null
]);
}
public function add_skills(Request $request, $id) {
$validator = Validator::make($request->all(), [
'skills' => 'required|array',
], [
'required' => ':attribute harus diisi.',
'array' => ':attribute harus berupa array.',
]);
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => Str::ucfirst($validator->errors()->first()),
'data' => null
]);
}
$user = User::find($id);
$skills = $request->input('skills');
$userSkills = [];
foreach ($skills as $skill) {
if (!empty($skill)) {
UserSkill::create(['skill_id' => $skill, 'user_id' => $id]);
}
}
return response()->json([
'error' => false,
'message' => 'Berhasil menambahkan skill.',
'data' => null
]);
}
public function add_details(Request $request, $id) {
$validator = Validator::make($request->all(), [
'phone' => 'required',
'address' => 'required',
'marital_status' => 'required',
'location' => 'required',
'birthdate' => 'required',
'gender' => 'required',
'last_education' => 'required',
], [
'required' => ':attribute harus diisi.',
'array' => ':attribute harus berupa array.',
]);
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => Str::ucfirst($validator->errors()->first()),
'data' => null
]);
}
if (Carbon::parse($request->input('birthdate'))->age < 18) {
return response()->json([
'error' => true,
'message' => "Anda belum cukup umur.",
'data' => null
]);
}
$user = User::find($id);
if ($user->role == '3') {
if ($request->input('additional_skills', '') == '' || $request->input('desired_salary', '') == '') {
return response()->json([
'error' => true,
'message' => "Additional Skills & Desired Salary harus diisi.",
'data' => null
]);
}
}
$data = [
'user_id' => $id,
'image' => "/assets/img/default.png",
'phone' => $request->input('phone'),
'address' => $request->input('address'),
'location' => $request->input('location'),
'birthdate' => $request->input('birthdate'),
'gender' => $request->input('gender'),
'marital_status' => $request->input('marital_status'),
'last_education' => $request->input('last_education'),
'additional_skills' => $request->input('additional_skills', ''),
'desired_salary' => $request->input('desired_salary', ''),
];
// Check if profile exists, update if it does, create if it doesn't
$profile = Profile::updateOrCreate(
['user_id' => $id],
$data
);
// Update user status if needed
$user->update(['status'=>2]);
return response()->json([
'error' => false,
'message' => 'Berhasil memperbarui detail.',
'data' => null
]);
}
public function set_image(Request $request) {
$validator = Validator::make($request->all(), [
'user_id' => 'required',
'image' => 'required|file|mimes:jpg,png,jpeg|max:5048',
], [
'required' => ':attribute harus diisi.',
'file' => ':attribute harus berupa file.',
'mimes' => 'File :attribute harus berformat jpg, jpeg, atau png.',
'max' => 'File :attribute tidak boleh lebih dari :max KB.',
]);
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => Str::ucfirst($validator->errors()->first()),
'data' => null
]);
}
// Upload File
$namaimage = $this->generateRandomString(33).time();
$ekstensiimage = $request->image->extension();
$pathimage = '/assets/storage/document/user/image/' . $namaimage . "." . $ekstensiimage;
$request->image->move(public_path('assets/storage/document/user/image'), $pathimage);
// End Upload File
$update = [
'image' => $pathimage,
];
$user = Profile::where('user_id', $request->input('user_id'))->first();
$user->update($update);
return response()->json([
'error' => false,
'message' => 'Profile berhasil diubah.',
'data' => null
]);
}
public function verify_account(Request $request) {
$validator = Validator::make($request->all(), [
'user_id' => 'required',
'image_verif' => 'required|file|mimes:jpg,png,jpeg|max:20048',
'ktp' => 'required|file|mimes:jpg,png,jpeg|max:20048',
], [
'required' => ':attribute harus diisi.',
'file' => ':attribute harus berupa file.',
'mimes' => 'File :attribute harus berformat jpg, jpeg, atau png.',
'max' => 'File :attribute tidak boleh lebih dari :max KB.',
]);
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => Str::ucfirst($validator->errors()->first()),
'data' => null
]);
}
// Upload File
$namaimage = $this->generateRandomString(33).time();
$ekstensiimage = $request->image_verif->extension();
$pathimage = '/assets/storage/document/user/image/' . $namaimage . "." . $ekstensiimage;
$request->image_verif->move(public_path('assets/storage/document/user/image'), $pathimage);
$namaktp = $this->generateRandomString(33).time();
$ktp = $request->ktp->extension();
$pathktp = '/assets/storage/document/user/image/' . $namaktp . "." . $ktp;
$request->ktp->move(public_path('assets/storage/document/user/image'), $pathktp);
// End Upload File
$update = [
'image_verif' => $pathimage,
'ktp' => $pathktp,
'kyc' => 1,
];
$user = Profile::where('user_id', $request->input('user_id'))->first();
$user->update($update);
return response()->json([
'error' => false,
'message' => 'Profile berhasil diubah.',
'data' => null
]);
}
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
function generateUsername($name)
{
$cleanedName = preg_replace('/[^a-zA-Z0-9]/', '', $name);
$cleanedName = strtolower($cleanedName);
$randomString = Str::random(6);
$username = $cleanedName . $randomString;
return $username;
}
}