Compare commits

...

2 Commits

Author SHA1 Message Date
timotiabbauftech
2cce89b6c4 merge 2025-09-03 14:58:36 +07:00
timotiabbauftech
923f5c5c7f [feat AuthController, update UserController, User.php, EditAkun, Web.php 2025-09-03 14:55:50 +07:00
6 changed files with 110 additions and 32 deletions

View File

@ -0,0 +1,45 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
class AuthController extends Controller
{
public function login(Request $request)
{
$request->validate([
'nama' => 'required|string',
'password' => 'required|int',
]);
// Cek kredensial
if (!Auth::attempt($request->only('nama', 'password'))) {
return response()->json([
'message' => 'Login gagal, periksa kembali nama atau password.'
], 401);
}
$user = User::where('nama', $request->nama)->first();
$token = $user->createToken('auth_token')->plainTextToken;
return response()->json([
'message' => 'Login berhasil',
'user' => $user,
'token' => $token,
]);
}
public function logout(Request $request)
{
$request->user()->currentAccessToken()->delete();
return response()->json([
'message' => 'Logout berhasil'
]);
}
}

View File

@ -41,22 +41,26 @@ class UserController extends Controller
$user = User::findOrFail($id); $user = User::findOrFail($id);
$request->validate([ $request->validate([
'nama' => 'required|nama|unique:users,nama,' . $id, 'nama' => 'required|string|unique:users,nama,' . $id,
'password' => 'required|min:6', 'password' => 'nullable|min:6',
'role' => 'required|in:owner,kasir', 'role' => 'required|in:owner,kasir',
]); ]);
$user->update([ $data = [
'nama' => $request->nama, 'nama' => $request->nama,
'password' => $request->password,
'role' => $request->role, 'role' => $request->role,
]); ];
return response()->json([ if ($request->filled('password')) {
'message' => 'User berhasil diupdate' $data['password'] = $request->password;
],200);
} }
$user->update($data);
return response()->json(['message' => 'User berhasil diupdate', 'user' => $user], 200);
}
public function destroy($id) public function destroy($id)
{ {
$user = User::findOrFail($id); $user = User::findOrFail($id);

View File

@ -6,11 +6,12 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable class User extends Authenticatable
{ {
/** @use HasFactory<\Database\Factories\UserFactory> */ /** @use HasFactory<\Database\Factories\UserFactory> */
use HasFactory, Notifiable; use HasApiTokens, HasFactory, Notifiable;
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
@ -45,4 +46,9 @@ class User extends Authenticatable
'password' => 'hashed', 'password' => 'hashed',
]; ];
} }
public function getAuthIdentifierName()
{
return 'nama';
}
} }

4
composer.lock generated
View File

@ -9377,12 +9377,12 @@
], ],
"aliases": [], "aliases": [],
"minimum-stability": "stable", "minimum-stability": "stable",
"stability-flags": {}, "stability-flags": [],
"prefer-stable": true, "prefer-stable": true,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {
"php": "^8.2" "php": "^8.2"
}, },
"platform-dev": {}, "platform-dev": [],
"plugin-api-version": "2.6.0" "plugin-api-version": "2.6.0"
} }

View File

@ -101,7 +101,7 @@
const payload = { ...this.form }; const payload = { ...this.form };
if (!payload.password) delete payload.password; if (!payload.password) delete payload.password;
await axios.put(`api/user/${this.akun.id}`, payload); await axios.put(`/api/user/${this.akun.id}`, payload);
this.$emit("refresh"); this.$emit("refresh");
this.$emit("close"); this.$emit("close");

View File

@ -1,9 +1,8 @@
<?php <?php
use App\Http\Controllers\AuthController;
use App\Http\Controllers\FotoSementaraController; use App\Http\Controllers\FotoSementaraController;
use App\Http\Controllers\ItemController; use App\Http\Controllers\ItemController;
use App\Http\Controllers\KategoriController; use App\Http\Controllers\KategoriController;
use App\Http\Controllers\LaporanController;
use App\Http\Controllers\NampanController; use App\Http\Controllers\NampanController;
use App\Http\Controllers\ProdukController; use App\Http\Controllers\ProdukController;
use App\Http\Controllers\SalesController; use App\Http\Controllers\SalesController;
@ -11,6 +10,17 @@ use App\Http\Controllers\UserController;
use App\Http\Controllers\TransaksiController; use App\Http\Controllers\TransaksiController;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
Route::prefix('api')->group(function () {
// Backend API
Route::apiResource('nampan', NampanController::class);
Route::apiResource('produk', ProdukController::class);
Route::apiResource('item', ItemController::class);
Route::apiResource('sales', SalesController::class);
Route::apiResource('user', UserController::class);
Route::apiResource('transaksi', TransaksiController::class);
Route::apiResource('kategori', KategoriController::class);
// Backend API // Backend API
Route::prefix('api')->group(function () { Route::prefix('api')->group(function () {
Route::apiResource('nampan', NampanController::class); Route::apiResource('nampan', NampanController::class);
@ -34,6 +44,19 @@ Route::prefix('api')->group(function () {
Route::get('laporan', [LaporanController::class, 'ringkasan']); Route::get('laporan', [LaporanController::class, 'ringkasan']);
}); });
Route::get('brankas', [ItemController::class, 'brankasItem']);
Route::delete('kosongkan-nampan', [NampanController::class, 'kosongkan']);
// Foto Sementara
Route::post('foto/upload', [FotoSementaraController::class, 'upload']);
Route::delete('foto/hapus/{id}', [FotoSementaraController::class, 'hapus']);
Route::get('foto/{user_id}', [FotoSementaraController::class, 'getAll']);
Route::delete('foto/reset/{user_id}', [FotoSementaraController::class, 'reset']);
Route::post('/login', [AuthController::class, 'login'])->middleware('guest')->name('login');
Route::post('/logout', [AuthController::class, 'logout'])->middleware('auth');
});
// Frontend SPA // Frontend SPA
Route::get('/{any}', function () { Route::get('/{any}', function () {
return view('app'); return view('app');