migrate to gtea from bistbucket

This commit is contained in:
2026-03-15 17:08:23 +07:00
commit 129ca2260c
3716 changed files with 566316 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
<?php
namespace DummyNamespace;
use App\Models\DummyModel;
class DummyClass
{
protected $model;
public function __construct(DummyModel $model)
{
$this->model = $model;
}
public function handle($request)
{
// Action implementation for DummyAction
}
}

View File

@@ -0,0 +1,101 @@
<?php
namespace DummyNamespace;
use App\Http\Controllers\Controller;
use App\Http\Requests\DummyModel\DummyModelStoreRequest;
use App\Http\Requests\DummyModel\DummyModelUpdateRequest;
use App\Services\DummyModel\DummyModelService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Traits\ResponseTrait;
class DummyClass extends Controller
{
use ResponseTrait;
public function __construct(
private DummyModelService $service
) {}
public function all(Request $request)
{
$models = $this->service->getAll($request);
$metadata['count'] = count($models);
if(!$models){
return $this->ResponseError([], null, 'No Data Found!');
}
return $this->ResponseSuccess($models, $metadata, 'DummyModel has been fetch successfully.');
}
public function index(Request $request)
{
$perPage = request('per_page') ?? env('PER_PAGE');
$models = $this->service->index($request, $perPage);
if(!$models){
return $this->ResponseError([], null, 'No Data Found!');
}
return $this->ResponseSuccess($models, null, 'DummyModel has been fetch successfully.');
}
public function store(DummyModelStoreRequest $request)
{
DB::beginTransaction();
try {
$data = $this->service->create($request->validated());
DB::commit();
return $this->ResponseSuccess($data, [], 'DummyModel has been create successfully.');
} catch (\Exception $e) {
DB::rollBack();
return $this->ResponseError($e->getMessage(). " in " . $e->getFile() . " on line " . $e->getLine(), null, 'Data Process Error!');
}
}
public function show(int $id)
{
$model = $this->service->getById($id);
if(!$model){
return $this->ResponseError([], null, 'No Data Found!');
}
return $this->ResponseSuccess($model, null, 'DummyModel has been show successfully.');
}
public function update(DummyModelUpdateRequest $request, int $id)
{
DB::beginTransaction();
try {
$data = $this->service->update($id, $request->validated());
DB::commit();
return $this->ResponseSuccess($data, null, 'DummyModel has been update successfully.');
} catch (\Exception $e) {
DB::rollBack();
return $this->ResponseError($e->getMessage(). " in " . $e->getFile() . " on line " . $e->getLine(), null, 'Data Process Error!');
}
}
public function destroy(int $id)
{
DB::beginTransaction();
try {
$data = $this->service->delete($id);
if(!$data){
return $this->ResponseError([], null, 'Data Not Found!', 204);
}
DB::commit();
return $this->ResponseSuccess($data, null, 'DummyModel has been delete successfully.', 200);
} catch (\Exception $e) {
DB::rollBack();
return $this->ResponseError($e->getMessage(). " in " . $e->getFile() . " on line " . $e->getLine(), null, 'Data Not Found!');
}
}
}

View File

@@ -0,0 +1,100 @@
<?php
namespace DummyNamespace;
use App\Http\Controllers\Controller;
use App\Http\Requests\DummyModel\DummyModelStoreRequest;
use App\Http\Requests\DummyModel\DummyModelUpdateRequest;
use App\Services\DummyModel\DummyModelService;
use App\DataTables\DummyModel\DummyModelDataTable;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Contracts\View\View;
use RealRashid\SweetAlert\Facades\Alert;
class DummyClass extends Controller
{
public function __construct(
private DummyModelService $service
){}
public function all(Request $request): View
{
$models = $this->service->getAll($request);
return view('backend.model.index', compact('models'));
}
public function index(DummyModelDataTable $dataTable)
{
return $dataTable->render('backend.model.index');
}
public function create(): View
{
return view('backend.model.create');
}
public function store(DummyModelStoreRequest $request)
{
DB::beginTransaction();
try {
$this->service->create($request->validated());
DB::commit();
Alert::toast('DummyModel has been create successfully.','success');
return redirect()->route('models.index');
} catch (\Exception $e) {
DB::rollBack();
Alert::error('Error', $e->getMessage());
return redirect()->route('models.index');
}
}
public function edit(int $id)
{
$model = $this->service->getById($id);
return view('backend.model.edit', compact('model'));
}
public function update(DummyModelUpdateRequest $request, int $id)
{
DB::beginTransaction();
try {
$this->service->update($id, $request->validated());
DB::commit();
Alert::toast('DummyModel has been update successfully.','success');
return redirect()->route('models.index');
} catch (\Exception $e) {
DB::rollBack();
Alert::error('Error', $e->getMessage());
return redirect()->route('models.index');
}
}
public function destroy(int $id)
{
DB::beginTransaction();
try {
$this->service->delete($id);
DB::commit();
Alert::toast('DummyModel has been delete successfully.','success');
return redirect()->route('models.index');
} catch (\Exception $e) {
DB::rollBack();
Alert::error('Error', $e->getMessage());
return redirect()->route('models.index');
}
}
}

View File

@@ -0,0 +1,104 @@
@extends('layouts.backend')
@section('title', ucfirst('Model') . ' Form')
@section('page_title', ucfirst('Model') . ' Form')
@section('content')
<!-- Page Header -->
<div class="row mb-4">
<div class="col-12 d-flex justify-content-between align-items-center">
<h1 class="h3 mb-0">{{ ucfirst('Model') }} Management</h1>
<a href="{{ route('models.index') }}" class="btn btn-outline-secondary">
<i class="bi bi-arrow-left"></i> Back to List
</a>
</div>
</div>
<!-- Form Card -->
<div class="card">
<div class="card-body">
<form action="{{ route('models.store') }}" enctype="multipart/form-data" method="POST">
@csrf
<div class="row">
<!-- Name -->
<div class="col-md-6 mb-3">
<label for="name" class="form-label">{{ _lang('Name') }}</label>
<input type="text" class="form-control" id="name" name="name"
value="{{ old('name') }}" placeholder="Enter name" required>
@error('name')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<!-- Code -->
<div class="col-md-6 mb-3">
<label for="code" class="form-label">{{ _lang('Code') }}</label>
<input type="text" class="form-control" id="code" name="code"
value="{{ old('code') }}" placeholder="Enter code">
@error('code')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
</div>
<!-- Image Upload -->
<div class="mb-4">
<label class="form-label d-block mb-2">Image</label>
<div class="card card-flush py-3">
<div class="card-body text-center">
<style>
.image-input-placeholder {
background-image: url('{{ asset('assets/media/svg/files/blank-image.svg') }}');
}
[data-theme="dark"] .image-input-placeholder {
background-image: url('{{ asset('assets/media/svg/files/blank-image-dark.svg') }}');
}
</style>
<div class="image-input image-input-empty image-input-outline image-input-placeholder mb-3"
data-kt-image-input="true">
<div class="image-input-wrapper w-150px h-150px"></div>
<!-- Upload -->
<label class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
data-kt-image-input-action="change" data-bs-toggle="tooltip" title="Change image">
<i class="bi bi-pencil-fill fs-7"></i>
<input type="file" name="image" accept=".png, .jpg, .jpeg" />
<input type="hidden" name="image_remove" />
</label>
<!-- Cancel -->
<span class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
data-kt-image-input-action="cancel" data-bs-toggle="tooltip" title="Cancel image">
<i class="bi bi-x fs-2"></i>
</span>
<!-- Remove -->
<span class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
data-kt-image-input-action="remove" data-bs-toggle="tooltip" title="Remove image">
<i class="bi bi-x fs-2"></i>
</span>
</div>
<div class="text-muted fs-7">
Set the product thumbnail image. Only *.png, *.jpg, and *.jpeg files are accepted.
</div>
</div>
</div>
</div>
<!-- Submit Button -->
<div class="d-flex gap-2">
<button type="submit" class="btn btn-primary">
<i class="bi bi-check"></i> {{ _lang('Create') }}
</button>
<a href="{{ route('models.index') }}" class="btn btn-secondary">
Cancel
</a>
</div>
</form>
</div>
</div>
@endsection

View File

@@ -0,0 +1,112 @@
<?php
namespace DummyNamespace;
use App\Models\DummyModel;
use App\Services\DummyModel\DummyModelService;
use Illuminate\Database\Eloquent\Builder as QueryBuilder;
use Yajra\DataTables\EloquentDataTable;
use Yajra\DataTables\Html\Builder as HtmlBuilder;
use Yajra\DataTables\Html\Column;
use Yajra\DataTables\Services\DataTable;
class DummyClass extends DataTable
{
public function __construct(
private DummyModelService $service
) {}
public function dataTable(QueryBuilder $query): EloquentDataTable
{
return (new EloquentDataTable($query))
->addIndexColumn()
->addColumn('action', function (DummyModel $model) {
$html = '<a class="btn btn-icon btn-bg-light btn-active-color-primary btn-sm me-1 edit-icon" href="' . route('models.edit', $model->id) . '">
<span class="svg-icon svg-icon-3">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.3" d="M21.4 8.35303L19.241 10.511L13.485 4.755L15.643 2.59595C16.0248 2.21423 16.5426 1.99988 17.0825 1.99988C17.6224 1.99988 18.1402 2.21423 18.522 2.59595L21.4 5.474C21.7817 5.85581 21.9962 6.37355 21.9962 6.91345C21.9962 7.45335 21.7817 7.97122 21.4 8.35303ZM3.68699 21.932L9.88699 19.865L4.13099 14.109L2.06399 20.309C1.98815 20.5354 1.97703 20.7787 2.03189 21.0111C2.08674 21.2436 2.2054 21.4561 2.37449 21.6248C2.54359 21.7934 2.75641 21.9115 2.989 21.9658C3.22158 22.0201 3.4647 22.0084 3.69099 21.932H3.68699Z" fill="currentColor"></path>
<path d="M5.574 21.3L3.692 21.928C3.46591 22.0032 3.22334 22.0141 2.99144 21.9594C2.75954 21.9046 2.54744 21.7864 2.3789 21.6179C2.21036 21.4495 2.09202 21.2375 2.03711 21.0056C1.9822 20.7737 1.99289 20.5312 2.06799 20.3051L2.696 18.422L5.574 21.3ZM4.13499 14.105L9.891 19.861L19.245 10.507L13.489 4.75098L4.13499 14.105Z" fill="currentColor"></path>
</svg>
</span>
</a>';
$html .= '<button type="button" class="btn btn-icon btn-bg-light btn-active-color-primary btn-sm delete-icon" data-bs-toggle="modal" data-bs-target="#deleteDummyModel' . $model->id . '">
<span class="svg-icon svg-icon-3">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5 9C5 8.44772 5.44772 8 6 8H18C18.5523 8 19 8.44772 19 9V18C19 19.6569 17.6569 21 16 21H8C6.34315 21 5 19.6569 5 18V9Z" fill="currentColor"></path>
<path opacity="0.5" d="M5 5C5 4.44772 5.44772 4 6 4H18C18.5523 4 19 4.44772 19 5V5C19 5.55228 18.5523 6 18 6H6C5.44772 6 5 5.55228 5 5V5Z" fill="currentColor"></path>
<path opacity="0.5" d="M9 4C9 3.44772 9.44772 3 10 3H14C14.5523 3 15 3.44772 15 4V4H9V4Z" fill="currentColor"></path>
</svg>
</span>
</button>';
$html .= '
<div class="modal fade" id="deleteDummyModel' . $model->id . '" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">Are you sure?</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>
Are you sure you want to delete the DummyModel - <b>' . $model->name . '</b>?
</p>
<form action="' . route('models.destroy', $model->id) . '" method="POST">
' . csrf_field() . method_field('DELETE') . '
<button type="submit" class="btn btn-danger">Confirm Delete</button>
</form>
</div>
</div>
</div>
</div>
';
return $html;
})
->rawColumns(['action']);
}
public function query(DummyModel $model): QueryBuilder
{
return $this->service->get(['is_query' => true]);
}
public function html(): HtmlBuilder
{
return $this->builder()
->setTableId('DummyModel-table')
->columns($this->getColumns())
->minifiedAjax()
->orderBy(1)
->selectStyleSingle()
->buttons([
// Button::make('add'),
// Button::make('excel'),
// Button::make('csv'),
// Button::make('pdf'),
// Button::make('print'),
// Button::make('reset'),
// Button::make('reload'),
]);
}
public function getColumns(): array
{
return [
Column::make('DT_RowIndex')->title('Sl no')->searchable(false)->orderable(false),
Column::make('name')->title('Name'),
Column::make('code')->title('Code'),
Column::make('action')
->title('Action')
->searchable(false)
->orderable(false)
->printable(false),
];
}
protected function filename(): string
{
return 'DummyModel-'.date('YmdHis');
}
}

View File

@@ -0,0 +1,107 @@
@extends('layouts.backend')
@section('title', ucfirst('Food') . ' Form')
@section('page_title', ucfirst('Food') . ' Form')
@section('content')
<!-- Page Header -->
<div class="row mb-4">
<div class="col-12 d-flex justify-content-between align-items-center">
<h1 class="h3 mb-0">{{ ucfirst('Food') }} Management</h1>
<a href="{{ route('products.index') }}" class="btn btn-outline-secondary">
<i class="bi bi-arrow-left"></i> Back to List
</a>
</div>
</div>
<!-- Edit Form Card -->
<div class="card">
<div class="card-body">
<form action="{{ route('products.update', $product->id) }}" enctype="multipart/form-data" method="POST">
@csrf
@method('PATCH')
<div class="row">
<!-- Name -->
<div class="col-md-6 mb-3">
<label for="name" class="form-label">{{ _lang('Name') }}</label>
<input type="text" class="form-control" id="name" name="name"
value="{{ old('name', $product->name) }}" placeholder="Enter name" required>
@error('name')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<!-- Code -->
<div class="col-md-6 mb-3">
<label for="code" class="form-label">{{ _lang('Code') }}</label>
<input type="text" class="form-control" id="code" name="code"
value="{{ old('code', $product->code) }}" placeholder="Enter code">
@error('code')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
</div>
<!-- Image Upload -->
<div class="mb-4">
<label class="form-label d-block mb-2">Image</label>
<div class="card card-flush py-3">
<div class="card-body text-center">
<style>
.image-input-placeholder {
background-image: url('{{ asset('assets/media/svg/files/blank-image.svg') }}');
}
[data-theme="dark"] .image-input-placeholder {
background-image: url('{{ asset('assets/media/svg/files/blank-image-dark.svg') }}');
}
</style>
<div class="image-input image-input-outline image-input-placeholder mb-3"
data-kt-image-input="true"
style="background-image: url('{{ $product->image ? asset($product->image) : asset('assets/media/svg/files/blank-image.svg') }}');">
<!-- Existing Image Preview -->
<div class="image-input-wrapper w-150px h-150px"
style="background-image: url('{{ $product->image ? asset($product->image) : asset('assets/media/svg/files/blank-image.svg') }}');">
</div>
<!-- Upload -->
<label class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
data-kt-image-input-action="change" data-bs-toggle="tooltip" title="Change image">
<i class="bi bi-pencil-fill fs-7"></i>
<input type="file" name="image" accept=".png, .jpg, .jpeg" />
<input type="hidden" name="image_remove" />
</label>
<!-- Cancel -->
<span class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
data-kt-image-input-action="cancel" data-bs-toggle="tooltip" title="Cancel image">
<i class="bi bi-x fs-2"></i>
</span>
<!-- Remove -->
<span class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
data-kt-image-input-action="remove" data-bs-toggle="tooltip" title="Remove image">
<i class="bi bi-x fs-2"></i>
</span>
</div>
<div class="text-muted fs-7">
Update the product image. Accepted formats: *.png, *.jpg, *.jpeg.
</div>
</div>
</div>
</div>
<!-- Submit Button -->
<div class="d-flex gap-2">
<button type="submit" class="btn btn-primary">
<i class="bi bi-check"></i> {{ _lang('Update') }}
</button>
<a href="{{ route('products.index') }}" class="btn btn-secondary">Cancel</a>
</div>
</form>
</div>
</div>
@endsection

View File

@@ -0,0 +1,29 @@
@extends('layouts.backend')
@section('title', ucfirst('Model'))
@section('page_title', ucfirst('Model'))
@section('content')
<!-- Page Header -->
<div class="row mb-4">
<div class="col-12 d-flex justify-content-between align-items-center">
<h1 class="h3 mb-0">{{ ucfirst('Model') }} Management</h1>
<a href="{{ route('models.create') }}" class="btn btn-primary">
<i class="bi bi-plus"></i> Add New {{ ucfirst('Model') }}
</a>
</div>
</div>
<!-- DataTable Card -->
<div class="card">
<div class="card-body">
<div class="table-responsive">
{{ $dataTable->table() }}
</div>
</div>
</div>
@endsection
@section('scripts')
{{ $dataTable->scripts(attributes: ['type' => 'module']) }}
@endsection

View File

@@ -0,0 +1,18 @@
<?php
namespace DummyNamespace;
interface DummyClass
{
public function index($request, int $per_page = 50);
public function getAll($request);
public function getById(int $id);
public function create(array $data);
public function update(int $id, array $data);
public function delete(int $id);
}

View File

@@ -0,0 +1,28 @@
<?php
namespace DummyNamespace;
use Illuminate\Foundation\Http\FormRequest;
class DummyClass extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|string|max:30',
'email' => 'nullable|string|email|max:30',
'phone' => 'nullable|string|max:20',
'image' => 'nullable|image|max:2048',
];
}
public function message(): array{
return [
//
];
}
}

View File

@@ -0,0 +1,97 @@
<?php
namespace DummyNamespace;
use App\Interfaces\DummyModel\DummyModelInterface;
use App\Models\DummyModel;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
final class DummyClass implements DummyModelInterface
{
public function __construct(
protected DummyModel $model
){}
/**
* Get categories by filtering args.
*/
public function get(array $args = []): \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Builder
{
$orderBy = empty($args['order_by']) ? 'id' : $args['order_by']; // column name
$order = empty($args['order']) ? 'asc' : $args['order']; // asc, desc
$query = DummyModel::orderBy($orderBy, $order);
if (isset($args['is_query']) && $args['is_query']) {
return $query;
}
return $query->get();
}
public function index($request, int $per_page = 50)
{
$orderColumn = request('sort_column', 'id');
$orderDirection = request('sort_direction', 'desc');
if (!in_array($orderColumn, ['id', 'name', 'created_at'])) {
$orderColumn = 'id';
}
if (!in_array($orderDirection, ['asc', 'desc'])) {
$orderDirection = 'desc';
}
return $this->model::query()
->when($request->search, function ($query) use ($request) {
$query->where('name', 'like', $request->search . '%');
})
->orderBy($orderColumn, $orderDirection)
->paginate($per_page);
}
public function getAll($request)
{
$orderColumn = request('sort_column', 'id');
$orderDirection = request('sort_direction', 'desc');
if (!in_array($orderColumn, ['id', 'name', 'created_at'])) {
$orderColumn = 'id';
}
if (!in_array($orderDirection, ['asc', 'desc'])) {
$orderDirection = 'desc';
}
return $this->model::query()
->when($request->search, function ($query) use ($request) {
$query->where('name', 'like', $request->search . '%');
})
->orderBy($orderColumn, $orderDirection)
->get();
}
public function getById(int $id)
{
$record = $this->model::find($id);
return $record ?? null;
}
public function create(array $data)
{
return $this->model::create($data);
}
public function update(int $id, array $data)
{
$model = $this->model::findOrFail($id);
$model->update($data);
return $model;
}
public function delete(int $id)
{
$model = $this->model::findOrFail($id);
return $model->delete();
}
}