Merge branch 'production' of https://git.abbauf.com/Magang-2025/Kasir into production
This commit is contained in:
commit
b2b34a5f76
45
app/Http/Controllers/AuthController.php
Normal file
45
app/Http/Controllers/AuthController.php
Normal 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'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
@ -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
4
composer.lock
generated
@ -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"
|
||||||
}
|
}
|
||||||
|
@ -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");
|
||||||
|
@ -1,15 +1,25 @@
|
|||||||
<?php
|
<?php
|
||||||
|
use App\Http\Controllers\AuthController;
|
||||||
|
use App\Http\Controllers\FotoSementaraController;
|
||||||
|
use App\Http\Controllers\ItemController;
|
||||||
|
use App\Http\Controllers\KategoriController;
|
||||||
|
use App\Http\Controllers\NampanController;
|
||||||
|
use App\Http\Controllers\ProdukController;
|
||||||
|
use App\Http\Controllers\SalesController;
|
||||||
|
use App\Http\Controllers\UserController;
|
||||||
|
use App\Http\Controllers\TransaksiController;
|
||||||
|
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);
|
||||||
|
|
||||||
use App\Http\Controllers\FotoSementaraController;
|
|
||||||
use App\Http\Controllers\ItemController;
|
|
||||||
use App\Http\Controllers\KategoriController;
|
|
||||||
use App\Http\Controllers\LaporanController;
|
|
||||||
use App\Http\Controllers\NampanController;
|
|
||||||
use App\Http\Controllers\ProdukController;
|
|
||||||
use App\Http\Controllers\SalesController;
|
|
||||||
use App\Http\Controllers\UserController;
|
|
||||||
use App\Http\Controllers\TransaksiController;
|
|
||||||
use Illuminate\Support\Facades\Route;
|
|
||||||
|
|
||||||
// Backend API
|
// Backend API
|
||||||
Route::prefix('api')->group(function () {
|
Route::prefix('api')->group(function () {
|
||||||
@ -20,22 +30,35 @@ Route::prefix('api')->group(function () {
|
|||||||
Route::apiResource('user', UserController::class);
|
Route::apiResource('user', UserController::class);
|
||||||
Route::apiResource('transaksi', TransaksiController::class);
|
Route::apiResource('transaksi', TransaksiController::class);
|
||||||
Route::apiResource('kategori', KategoriController::class);
|
Route::apiResource('kategori', KategoriController::class);
|
||||||
|
|
||||||
Route::get('brankas', [ItemController::class, 'brankasItem']);
|
Route::get('brankas', [ItemController::class, 'brankasItem']);
|
||||||
Route::delete('kosongkan-nampan', [NampanController::class, 'kosongkan']);
|
Route::delete('kosongkan-nampan', [NampanController::class, 'kosongkan']);
|
||||||
|
|
||||||
// Foto Sementara
|
// Foto Sementara
|
||||||
Route::post('foto/upload', [FotoSementaraController::class, 'upload']);
|
Route::post('foto/upload', [FotoSementaraController::class, 'upload']);
|
||||||
Route::delete('foto/hapus/{id}', [FotoSementaraController::class, 'hapus']);
|
Route::delete('foto/hapus/{id}', [FotoSementaraController::class, 'hapus']);
|
||||||
Route::get('foto/{user_id}', [FotoSementaraController::class, 'getAll']);
|
Route::get('foto/{user_id}', [FotoSementaraController::class, 'getAll']);
|
||||||
Route::delete('foto/reset/{user_id}', [FotoSementaraController::class, 'reset']);
|
Route::delete('foto/reset/{user_id}', [FotoSementaraController::class, 'reset']);
|
||||||
|
|
||||||
// Laporan
|
// Laporan
|
||||||
Route::get('laporan', [LaporanController::class, 'ringkasan']);
|
Route::get('laporan', [LaporanController::class, 'ringkasan']);
|
||||||
Route::get('detail-laporan', [LaporanController::class, 'detail']);
|
Route::get('detail-laporan', [LaporanController::class, 'detail']);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Frontend SPA
|
Route::get('brankas', [ItemController::class, 'brankasItem']);
|
||||||
Route::get('/{any}', function () {
|
Route::delete('kosongkan-nampan', [NampanController::class, 'kosongkan']);
|
||||||
return view('app');
|
|
||||||
})->where('any', '^(?!storage|api).*$');
|
// 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
|
||||||
|
Route::get('/{any}', function () {
|
||||||
|
return view('app');
|
||||||
|
})->where('any', '^(?!storage|api).*$');
|
Loading…
Reference in New Issue
Block a user