Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers\Api;
- use Validator;
- use DB;
- use Auth;
- use JWTAuth;
- use App\Models\User;
- use App\Http\Controllers\Controller;
- use App\Notifications\UserRegistrationConfirm;
- use App\Notifications\UserResetPasswordConfirm;
- use App\Transformers\PikTransformer;
- use App\Transformers\UserTransformer;
- use Illuminate\Http\Request;
- use Illuminate\Validation\Rule;
- use Dingo\Api\Routing\Helpers;
- use Dingo\Api\Exception\StoreResourceFailedException;
- class UserController extends Controller
- {
- use Helpers;
- public function __construct()
- {
- config(['auth.defaults.guard' => 'api']);
- $this->middleware('api.auth', ['only' => ['showProfile', 'updateProfile', 'logout']]);
- }
- public function register(Request $request)
- {
- $validator = Validator::make($request->all(), [
- 'name' => 'required',
- 'email' => 'required|email|unique:users',
- 'password' => 'required',
- 'phone' => 'required|numeric',
- 'province_id' => 'required|numeric',
- 'regency_id' => 'required|numeric',
- 'district_id' => 'required|numeric',
- 'village_id' => 'numeric',
- 'description' => 'required'
- ]);
- if ($validator->fails()) {
- throw new StoreResourceFailedException('Registrasi gagal.', $validator->errors());
- }
- $token = bcrypt(str_random(5));
- $email_data = [
- 'name' => $request->input('name'),
- 'email' => $request->input('email'),
- 'password' => bcrypt($request->input('password')),
- 'phone' => $request->input('phone'),
- 'province_id' => $request->input('province_id'),
- 'regency_id' => $request->input('regency_id'),
- 'district_id' => $request->input('district_id'),
- 'village_id' => $request->input('village_id'),
- 'description' => $request->input('description'),
- 'token' => $token
- ];
- DB::transaction(function () use ($request, $email_data, $token) {
- DB::table('password_resets')->insert([
- 'email' => $request->input('email'),
- 'token' => $token
- ]);
- $user = User::create($email_data);
- $user->notify(new UserRegistrationConfirm($email_data));
- });
- return response()->json([
- 'message' => 'Registrasi berhasil. Silahkan cek email anda.',
- 'status_code' => 201
- ], 201);
- }
- /**
- * Show the form for creating a new resource.
- *
- * @return \Illuminate\Http\Response
- */
- public function authenticate(Request $request)
- {
- $credentials = $request->only('email', 'password');
- $user = User::where('email', $request->input('email'))->first();
- if (is_null($user)) {
- return $this->response->errorUnauthorized('Email belum terdaftar di sistem. Silahkan registrasi terlebih dahulu.');
- }
- if ($user->status == 1) {
- if (Auth::attempt($credentials)) {
- $token = JWTAuth::fromUser($user);
- } else {
- return $this->response->errorUnauthorized('Password salah. Silahkan masukkan password anda dengan benar.');
- }
- } elseif ($user->status == 0) {
- return $this->response->errorUnauthorized('Akun anda belum aktif. Silahkan aktifasi akun anda terlebih dahulu.');
- } else {
- return $this->response->errorUnauthorized('Akun anda diblokir. Silahkan hubungi admin untuk info lebih lanjut.');
- }
- return response()->json([
- 'message' => 'Login berhasil',
- 'status_code' => 200,
- 'token' => $token
- ]);
- }
- public function showProfile()
- {
- return $this->response->item($this->auth->user(), new UserTransformer);
- }
- public function show($id)
- {
- return $this->response->item(User::findOrFail($id), new UserTransformer);
- }
- public function updateProfile(Request $request)
- {
- $user = $this->auth->user();
- $validator = Validator::make($request->all(), [
- 'name' => 'required',
- 'email' => [
- 'required',
- 'email',
- Rule::unique('users')->ignore($user->id)
- ],
- 'password_confirm' => 'required_with:password|same:password',
- 'phone' => 'required|numeric',
- 'province_id' => 'required|numeric',
- 'regency_id' => 'required|numeric',
- 'district_id' => 'required|numeric',
- 'village_id' => 'numeric',
- 'description' => 'required',
- 'profile_picture' => 'image'
- ]);
- if ($validator->fails()) {
- throw new StoreResourceFailedException('Update profil gagal.', $validator->errors());
- }
- $user->name = $request->name;
- $user->email = $request->email;
- $user->phone = $request->phone;
- $user->regency_id = $request->regency_id;
- $user->province_id = $request->province_id;
- $user->district_id = $request->district_id;
- $user->village_id = $request->village_id;
- $user->description = $request->description;
- if ($request->has('password')) {
- $user->password = bcrypt($request->password);
- }
- if ($request->hasFile('profile_picture')) {
- $image = $request->file('profile_picture');
- if ($image->isValid()) {
- $file_name = str_slug($user->name, '-').'.'.$image->getClientOriginalExtension();
- $image->move('img/users', $file_name);
- $user->profile_picture = $file_name;
- } else {
- return $this->response->errorBadRequest('Upload foto gagal.');
- }
- }
- $user->save();
- return response()->json([
- 'message' => 'Update profil berhasil',
- 'status_code' => 200
- ]);
- }
- public function logout()
- {
- JWTAuth::invalidate(JWTAuth::getToken());
- return response()->json(['message' => 'Berhasil logout.', 'status_code' => 200]);
- }
- public function passwordReset(Request $request)
- {
- $user = User::where('email', $request->input('email'))->first();
- if (is_null($user)) {
- return $this->response->errorNotFound('Email tidak terdaftar di sistem.');
- }
- $token = bcrypt(str_random(5));
- $email_data = [
- 'token' => $token,
- 'name' => $user->name,
- 'email' => $request->input('email')
- ];
- DB::table('password_resets')->insert([
- 'email' => $request->input('email'),
- 'token' => $token
- ]);
- $user->notify(new UserResetPasswordConfirm($email_data));
- return response()->json([
- 'message' => 'Silahkan cek email anda untuk mereset password anda.',
- 'status_code' => 201
- ], 201);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement