Compare commits
56 Commits
ace4442879
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5e98841eea | |||
| 2b8f9aa314 | |||
| cb63c54c39 | |||
| b7bc192e6f | |||
| 06617a0005 | |||
| da2645fae9 | |||
| 066f4d6a53 | |||
|
|
1e84ceab3c | ||
|
|
a8599d9c79 | ||
|
|
78ef14b99b | ||
|
|
1a63c52106 | ||
|
|
75a6af68eb | ||
|
|
58c1915413 | ||
|
|
ba537b7868 | ||
|
|
bf69d6733b | ||
|
|
9107d3118d | ||
|
|
fac624b2a5 | ||
|
|
9071c9a4c6 | ||
|
|
18e510674a | ||
|
|
073bbd497b | ||
|
|
ab3e69e831 | ||
|
|
18401b908f | ||
|
|
c712fa07ba | ||
|
|
f011da72d9 | ||
|
|
4a0e24683a | ||
|
|
49ef491e80 | ||
|
|
1880a167b3 | ||
|
|
ec33006984 | ||
|
|
147e7b9516 | ||
|
|
e70ec773f9 | ||
|
|
e2adf5e9da | ||
|
|
d3ac6ff8d9 | ||
|
|
b0c6a4236c | ||
|
|
9fac84a882 | ||
|
|
8f49fe0124 | ||
|
|
43272bb1b1 | ||
|
|
c48ad83548 | ||
|
|
b4a05e3f8c | ||
|
|
bac1579285 | ||
|
|
41d6ddc346 | ||
|
|
522ebdae34 | ||
|
|
683fa5e0d9 | ||
|
|
d83bc03258 | ||
|
|
de1d7fbed8 | ||
|
|
d3156e228f | ||
|
|
299abeecbf | ||
|
|
201e112085 | ||
|
|
30a94b3533 | ||
|
|
0d4499b131 | ||
|
|
d3a528d264 | ||
|
|
5337d2a804 | ||
|
|
c46eccb24f | ||
|
|
2dfa3747b5 | ||
|
|
25359c6b6e | ||
|
|
968c9ed42a | ||
| dee6b0df56 |
@@ -7,6 +7,8 @@ APP_URL=http://localhost
|
|||||||
API_TOKEN=123
|
API_TOKEN=123
|
||||||
NOVA_LICENSE_KEY=UEkhFwqhhYw2UPqcoVNWWhKrZOOWXujgj7pLPdDzMqflYX4Pwl
|
NOVA_LICENSE_KEY=UEkhFwqhhYw2UPqcoVNWWhKrZOOWXujgj7pLPdDzMqflYX4Pwl
|
||||||
|
|
||||||
|
DEBUGBAR_ENABLED=false
|
||||||
|
|
||||||
LOG_CHANNEL=stack
|
LOG_CHANNEL=stack
|
||||||
LOG_DEPRECATIONS_CHANNEL=null
|
LOG_DEPRECATIONS_CHANNEL=null
|
||||||
LOG_LEVEL=debug
|
LOG_LEVEL=debug
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# Install posgres and configure
|
# Install posgres and configure
|
||||||
sudo su - postgres
|
sudo su - postgres
|
||||||
psql
|
psql
|
||||||
CREATE USER postshop WITH PASSWORD 'ACvL2(F@H^F)D7gs';
|
CREATE USER postshop WITH PASSWORD 'HRbuBNRBaTPeUfbcFf9XHWay';
|
||||||
CREATE DATABASE postshopdb WITH OWNER = postshop LC_COLLATE = 'en_US.UTF-8' TEMPLATE template0;
|
CREATE DATABASE postshopdb WITH OWNER = postshop LC_COLLATE = 'en_US.UTF-8' TEMPLATE template0;
|
||||||
|
|
||||||
# Clone
|
# Clone
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ class Kernel extends ConsoleKernel
|
|||||||
|
|
||||||
// Remove non saved attachments...
|
// Remove non saved attachments...
|
||||||
$schedule->call(new PruneStaleAttachments)->daily();
|
$schedule->call(new PruneStaleAttachments)->daily();
|
||||||
|
|
||||||
|
// IF any warnings unresolved warnings exists, send notify me
|
||||||
|
$schedule->call(new WarnDev)->dailyAt('16:00');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
25
app/Console/WarnDev.php
Normal file
25
app/Console/WarnDev.php
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console;
|
||||||
|
|
||||||
|
use App\Models\System\Warning;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
|
class WarnDev extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Notify me if any unresolved warnings exists
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __invoke()
|
||||||
|
{
|
||||||
|
$warnings = Warning::whereNull('resolved_at')->get();
|
||||||
|
|
||||||
|
if ($warnings->isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sendSMS('61929248', 'Warnings: '.$warnings->count());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,7 +3,9 @@
|
|||||||
namespace App\Exceptions;
|
namespace App\Exceptions;
|
||||||
|
|
||||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||||
|
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
class Handler extends ExceptionHandler
|
class Handler extends ExceptionHandler
|
||||||
{
|
{
|
||||||
@@ -29,5 +31,25 @@ class Handler extends ExceptionHandler
|
|||||||
return response()->noContent(404);
|
return response()->noContent(404);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$this->reportable(function (Throwable $e) {
|
||||||
|
$statusCode = $e instanceof HttpException ? $e->getStatusCode() : 500;
|
||||||
|
|
||||||
|
// only real server errors
|
||||||
|
if ($statusCode < 500) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
warn(
|
||||||
|
message: get_class($e),
|
||||||
|
content: $e->getMessage(),
|
||||||
|
where: $e->getFile().':'.$e->getLine(),
|
||||||
|
notes: substr($e->getTraceAsString(), 0, 65000),
|
||||||
|
);
|
||||||
|
} catch (Throwable $ignored) {
|
||||||
|
// logging must never crash the app
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,11 +81,10 @@ class ProductFilterer
|
|||||||
$this->queryBuilder->whereIn(
|
$this->queryBuilder->whereIn(
|
||||||
column: 'id',
|
column: 'id',
|
||||||
values: (
|
values: (
|
||||||
fn ($query) => $query->from('product_has_relations')
|
fn ($query) => $query->from('category_product')
|
||||||
->select('product_id')
|
->select('product_id')
|
||||||
->distinct('product_id')
|
->distinct('product_id')
|
||||||
->where('productable_type', '=', 'category')
|
->whereIn('category_id', explode(',', $this->request->categories))
|
||||||
->whereIn('productable_id', explode(',', $this->request->categories))
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
use App\Models\Auth\Verification;
|
use App\Models\Auth\Verification;
|
||||||
use App\Models\Ecommerce\Channel\Channel;
|
use App\Models\Ecommerce\Channel\Channel;
|
||||||
use App\Models\Ecommerce\Product\Inventory\Inventory;
|
use App\Models\Ecommerce\Product\Inventory\Inventory;
|
||||||
|
use App\Models\System\Warning;
|
||||||
use App\Repositories\Ecommerce\Product\Barcode\BarcodeRepository;
|
use App\Repositories\Ecommerce\Product\Barcode\BarcodeRepository;
|
||||||
use Illuminate\Http\Client\PendingRequest;
|
use Illuminate\Http\Client\PendingRequest;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
@@ -176,9 +177,7 @@ if (! function_exists('tmpostChannel')) {
|
|||||||
*/
|
*/
|
||||||
function tmpostChannel(): Channel
|
function tmpostChannel(): Channel
|
||||||
{
|
{
|
||||||
Cache::rememberForever('tmpostChannel', fn () => Channel::tmpostDefault());
|
return Channel::tmpostDefault();
|
||||||
|
|
||||||
return Cache::get('tmpostChannel');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,9 +187,7 @@ if (! function_exists('tmpostDefaultInventory')) {
|
|||||||
*/
|
*/
|
||||||
function tmpostDefaultInventory(): mixed
|
function tmpostDefaultInventory(): mixed
|
||||||
{
|
{
|
||||||
Cache::rememberForever('tmpostDefaultInventory', fn () => Inventory::tmpostDefault());
|
return Inventory::tmpostDefault();
|
||||||
|
|
||||||
return Cache::get('tmpostDefaultInventory');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,3 +389,16 @@ function createHalkbankOrder($price = 123): array
|
|||||||
'url' => $paymentResponse['formUrl'],
|
'url' => $paymentResponse['formUrl'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Warn brother
|
||||||
|
*/
|
||||||
|
function warn(string $message, string $content = '', string $where = '', string $notes = ''): void
|
||||||
|
{
|
||||||
|
Warning::forceCreate([
|
||||||
|
'name' => $message,
|
||||||
|
'content' => $content,
|
||||||
|
'where' => $where,
|
||||||
|
'notes' => $notes,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|||||||
@@ -15,9 +15,8 @@ class BrandMediaResource extends JsonResource
|
|||||||
public function toArray(Request $request): array
|
public function toArray(Request $request): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'thumbnail' => $this->getUrl('thumb200x200'),
|
'thumbnail' => $this->getUrl('thumb400x400'),
|
||||||
'images_400x400' => $this->getUrl('thumb400x400'),
|
'images_400x400' => $this->getUrl('thumb400x400'),
|
||||||
'images_720x720' => $this->getUrl('thumb720x720'),
|
|
||||||
'images_800x800' => $this->getUrl('thumb800x800'),
|
'images_800x800' => $this->getUrl('thumb800x800'),
|
||||||
'images_1200x1200' => $this->getUrl('thumb1200x1200'),
|
'images_1200x1200' => $this->getUrl('thumb1200x1200'),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ class CategoryController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Brands (products)
|
* Categories (products)
|
||||||
*/
|
*/
|
||||||
public function products(BasicProductIndexRequest $request, Category $category): JsonResponse
|
public function products(BasicProductIndexRequest $request, Category $category): JsonResponse
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ class CategoryMediaResource extends JsonResource
|
|||||||
return [
|
return [
|
||||||
'thumbnail' => $this->getUrl(),
|
'thumbnail' => $this->getUrl(),
|
||||||
'images_400x400' => $this->getUrl('thumb400x400'),
|
'images_400x400' => $this->getUrl('thumb400x400'),
|
||||||
'images_720x720' => $this->getUrl('thumb720x720'),
|
|
||||||
'images_800x800' => $this->getUrl('thumb800x800'),
|
'images_800x800' => $this->getUrl('thumb800x800'),
|
||||||
'images_1200x1200' => $this->getUrl('thumb1200x1200'),
|
'images_1200x1200' => $this->getUrl('thumb1200x1200'),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api\V1\Category\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class SelectedCategoryResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function toArray(Request $request): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'name' => $this->name,
|
||||||
|
'description' => $this->description,
|
||||||
|
'is_visible' => $this->is_visible,
|
||||||
|
'categories' => CategoryResource::collection($this->whenLoaded('categories')),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api\V1\Category;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Api\V1\Category\Resources\SelectedCategoryResource;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Ecommerce\Product\Category\SelectedCategory;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class SelectedCategoryController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Selected Categories (index)
|
||||||
|
*/
|
||||||
|
public function index(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
$selectedCategories = SelectedCategory::query()
|
||||||
|
->where('is_visible', true)
|
||||||
|
->with(['categories' => function ($query) {
|
||||||
|
$query->where('is_visible', true)->ordered()->with(['media']);
|
||||||
|
}])
|
||||||
|
->get();
|
||||||
|
|
||||||
|
return response()->json(SelectedCategoryResource::collection($selectedCategories));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selected Categories (show)
|
||||||
|
*/
|
||||||
|
public function show(SelectedCategory $selectedCategory): JsonResponse
|
||||||
|
{
|
||||||
|
$selectedCategory->load('categories');
|
||||||
|
|
||||||
|
return response()->json(new SelectedCategoryResource($selectedCategory));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,10 +38,9 @@ class FilterParamsController extends Controller
|
|||||||
$category_id = (int) $request->category_id;
|
$category_id = (int) $request->category_id;
|
||||||
|
|
||||||
$brand_ids = DB::table('products')
|
$brand_ids = DB::table('products')
|
||||||
->join('product_has_relations', function ($join) use ($category_id) {
|
->join('category_product', function ($join) use ($category_id) {
|
||||||
$join->on('products.id', '=', 'product_has_relations.product_id')
|
$join->on('products.id', '=', 'category_product.product_id')
|
||||||
->where('product_has_relations.productable_id', '=', $category_id)
|
->where('category_product.category_id', '=', $category_id);
|
||||||
->where('product_has_relations.productable_type', '=', 'category');
|
|
||||||
})
|
})
|
||||||
->select(['id', 'brand_id'])
|
->select(['id', 'brand_id'])
|
||||||
->pluck('brand_id');
|
->pluck('brand_id');
|
||||||
|
|||||||
@@ -97,9 +97,8 @@ class FilterController extends Controller
|
|||||||
->distinct('products.id')
|
->distinct('products.id')
|
||||||
->pluck('products.id');
|
->pluck('products.id');
|
||||||
|
|
||||||
return Category::where('is_visible', true)->ordered()->join('product_has_relations', 'categories.id', '=', 'product_has_relations.productable_id')
|
return Category::where('is_visible', true)->ordered()->join('category_product', 'categories.id', '=', 'category_product.category_id')
|
||||||
->where('product_has_relations.productable_type', '=', 'category')
|
->whereIntegerInRaw('category_product.product_id', $products)
|
||||||
->whereIntegerInRaw('product_has_relations.product_id', $products)
|
|
||||||
->get(['id', 'parent_id', 'name'])
|
->get(['id', 'parent_id', 'name'])
|
||||||
->unique('categories.id');
|
->unique('categories.id');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,9 +87,8 @@ class CategoriesFilter
|
|||||||
->distinct('products.id')
|
->distinct('products.id')
|
||||||
->pluck('products.id');
|
->pluck('products.id');
|
||||||
|
|
||||||
return $this->queryBuilder->join('product_has_relations', 'categories.id', '=', 'product_has_relations.productable_id')
|
return $this->queryBuilder->join('category_product', 'categories.id', '=', 'category_product.category_id')
|
||||||
->where('product_has_relations.productable_type', '=', 'category')
|
->whereIntegerInRaw('category_product.product_id', $products)
|
||||||
->whereIntegerInRaw('product_has_relations.product_id', $products)
|
|
||||||
->get($this->columns)
|
->get($this->columns)
|
||||||
->unique('categories.id');
|
->unique('categories.id');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class OrderPaymentController extends Controller
|
|||||||
public function index(): JsonResponse
|
public function index(): JsonResponse
|
||||||
{
|
{
|
||||||
return response()->rest(
|
return response()->rest(
|
||||||
PaymentType::all(['id', 'name'])
|
PaymentType::query()->where('is_enabled', true)->get(['id', 'name'])
|
||||||
->map(fn ($paymentType) => [
|
->map(fn ($paymentType) => [
|
||||||
'id' => $paymentType->id,
|
'id' => $paymentType->id,
|
||||||
'name' => $paymentType->name,
|
'name' => $paymentType->name,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
|
|||||||
use App\Http\Requests\CheckoutOrderRequest;
|
use App\Http\Requests\CheckoutOrderRequest;
|
||||||
use App\Http\Resources\Api\V1\Order\OrderIndexResource;
|
use App\Http\Resources\Api\V1\Order\OrderIndexResource;
|
||||||
use App\Models\Ecommerce\Product\Order\Order;
|
use App\Models\Ecommerce\Product\Order\Order;
|
||||||
|
use App\Models\Ecommerce\Product\Order\Shipping\OrderShipping;
|
||||||
use App\Repositories\Ecommerce\Order\OrderRepository;
|
use App\Repositories\Ecommerce\Order\OrderRepository;
|
||||||
use App\Services\Order\CreateOrderService;
|
use App\Services\Order\CreateOrderService;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
@@ -33,12 +34,33 @@ class OrderController extends Controller
|
|||||||
return response()->rest(OrderRepository::availableTimes());
|
return response()->rest(OrderRepository::availableTimes());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Order deliveries
|
||||||
|
*/
|
||||||
|
public function deliveries(): JsonResponse
|
||||||
|
{
|
||||||
|
return response()->rest([
|
||||||
|
[
|
||||||
|
'name' => OrderShipping::STANDART,
|
||||||
|
'price' => 20,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => OrderShipping::SELF_PICKUP,
|
||||||
|
'price' => 0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => OrderShipping::REGION,
|
||||||
|
'price' => 40,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (*) Store order
|
* (*) Store order
|
||||||
*/
|
*/
|
||||||
public function store(CheckoutOrderRequest $request, CreateOrderService $service): JsonResponse
|
public function store(CheckoutOrderRequest $request, CreateOrderService $service): JsonResponse
|
||||||
{
|
{
|
||||||
$order = $service->execute(auth()->user(), $request->validated());
|
$order = $service->execute(auth()->user(), $request->all());
|
||||||
|
|
||||||
$url = null;
|
$url = null;
|
||||||
if ($request->payment_type_id == 3) {
|
if ($request->payment_type_id == 3) {
|
||||||
@@ -81,7 +103,6 @@ class OrderController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Remove the specified resource from storage.
|
* Remove the specified resource from storage.
|
||||||
*
|
*
|
||||||
* @param Order $order
|
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\Response
|
||||||
*/
|
*/
|
||||||
public function destroy(Order $order)
|
public function destroy(Order $order)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use App\Http\Controllers\Api\V1\Product\Resources\ProductShowResource;
|
|||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests\Api\V1\Product\ProductIndexRequest;
|
use App\Http\Requests\Api\V1\Product\ProductIndexRequest;
|
||||||
use App\Models\Ecommerce\Product\Product\Product;
|
use App\Models\Ecommerce\Product\Product\Product;
|
||||||
|
use App\Models\Ecommerce\Product\ProductView\ProductView;
|
||||||
use App\Repositories\Ecommerce\Product\ProductRepository;
|
use App\Repositories\Ecommerce\Product\ProductRepository;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
@@ -33,6 +34,15 @@ class ProductController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function show(Product $product): JsonResponse
|
public function show(Product $product): JsonResponse
|
||||||
{
|
{
|
||||||
|
if (auth('sanctum')->check()) {
|
||||||
|
ProductView::updateOrCreate([
|
||||||
|
'user_id' => auth('sanctum')->id(),
|
||||||
|
'product_id' => $product->id,
|
||||||
|
], [
|
||||||
|
'updated_at' => now(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
$product->load([
|
$product->load([
|
||||||
'channels:id,name',
|
'channels:id,name',
|
||||||
'properties',
|
'properties',
|
||||||
|
|||||||
@@ -16,18 +16,17 @@ class ProductRelatedController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(Product $product): JsonResponse
|
public function index(Product $product): JsonResponse
|
||||||
{
|
{
|
||||||
$products = DB::table('product_has_relations')
|
$products = DB::table('category_product')
|
||||||
->select('product_has_relations.product_id')
|
->select('category_product.product_id')
|
||||||
->whereIn('product_has_relations.productable_id', (function ($query) use ($product) {
|
->whereIn('category_product.category_id', (function ($query) use ($product) {
|
||||||
$query->from('product_has_relations')
|
$query->from('category_product')
|
||||||
->select('productable_id')
|
->select('category_id')
|
||||||
->distinct('productable_id')
|
->distinct('category_id')
|
||||||
->where('productable_type', '=', 'category')
|
|
||||||
->where('product_id', '=', $product->id);
|
->where('product_id', '=', $product->id);
|
||||||
}))
|
}))
|
||||||
->limit(12)
|
->limit(12)
|
||||||
->orderByRaw('RANDOM()')
|
->orderByRaw('RANDOM()')
|
||||||
->pluck('product_has_relations.product_id')
|
->pluck('category_product.product_id')
|
||||||
->unique();
|
->unique();
|
||||||
|
|
||||||
return response()->rest(
|
return response()->rest(
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ namespace App\Http\Controllers\Api\V1\Product\Resources;
|
|||||||
|
|
||||||
use App\Http\Resources\MediaResource;
|
use App\Http\Resources\MediaResource;
|
||||||
use App\Repositories\Ecommerce\Product\Property\PropertyRepository;
|
use App\Repositories\Ecommerce\Product\Property\PropertyRepository;
|
||||||
use App\Http\Controllers\Api\V1\Product\Resources\Variant\ProductVariantResource;
|
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
class ProductIndexResource extends JsonResource
|
class ProductIndexResource extends JsonResource
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ class ProductMediaResource extends JsonResource
|
|||||||
public function toArray(Request $request): array
|
public function toArray(Request $request): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'thumbnail' => $this->getUrl('thumb288x431'),
|
'original' => $this->getUrl(),
|
||||||
|
'thumbnail' => $this->getUrl('thumb400x400'),
|
||||||
'images_400x400' => $this->getUrl('thumb400x400'),
|
'images_400x400' => $this->getUrl('thumb400x400'),
|
||||||
'images_720x720' => $this->getUrl('thumb720x720'),
|
|
||||||
'images_800x800' => $this->getUrl('thumb800x800'),
|
'images_800x800' => $this->getUrl('thumb800x800'),
|
||||||
'images_1200x1200' => $this->getUrl('thumb1200x1200'),
|
'images_1200x1200' => $this->getUrl('thumb1200x1200'),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api\V1\Product;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Api\V1\Product\Resources\ProductIndexResource;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Repositories\Ecommerce\Product\ProductRepository;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class ViewedProductController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Viewed Products (index)
|
||||||
|
*/
|
||||||
|
public function index(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
return response()->rest_paginate(
|
||||||
|
ProductIndexResource::collection(
|
||||||
|
ProductRepository::make($request)
|
||||||
|
->applyBasicQueries()
|
||||||
|
->applyViewedBy(auth('sanctum')->user())
|
||||||
|
->simplePaginate()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Http\Requests\Api\V1\Auth;
|
namespace App\Http\Requests\Api\V1\Auth;
|
||||||
|
|
||||||
use App\Rules\VerificationRule;
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ class CheckoutOrderRequest extends FormRequest
|
|||||||
'customer_address' => ['required', 'string', 'max:255'],
|
'customer_address' => ['required', 'string', 'max:255'],
|
||||||
|
|
||||||
'shipping_method' => ['required', 'string', 'max:255', Rule::in(array_keys(OrderShipping::values()))],
|
'shipping_method' => ['required', 'string', 'max:255', Rule::in(array_keys(OrderShipping::values()))],
|
||||||
|
'shipping_price' => ['nullable', 'numeric'],
|
||||||
'payment_type_id' => ['required', Rule::in(array_keys(OrderPayment::values()))],
|
'payment_type_id' => ['required', Rule::in(array_keys(OrderPayment::values()))],
|
||||||
|
|
||||||
'notes' => ['nullable', 'string', 'max:255'],
|
'notes' => ['nullable', 'string', 'max:255'],
|
||||||
@@ -65,7 +66,7 @@ class CheckoutOrderRequest extends FormRequest
|
|||||||
'user_id' => auth()->id(),
|
'user_id' => auth()->id(),
|
||||||
'notes' => $this->notes ?: null,
|
'notes' => $this->notes ?: null,
|
||||||
'province_id' => $this->province_id ?: null,
|
'province_id' => $this->province_id ?: null,
|
||||||
'shipping_price' => OrderShipping::priceFor($this->shipping_method),
|
'shipping_price' => $this->shipping_price ?: OrderShipping::priceFor($this->shipping_method),
|
||||||
'delivery_time' => $this->delivery_time ?: OrderShipping::MORNING,
|
'delivery_time' => $this->delivery_time ?: OrderShipping::MORNING,
|
||||||
'delivery_at' => $this->delivery_at ?: date('Y-m-d'),
|
'delivery_at' => $this->delivery_at ?: date('Y-m-d'),
|
||||||
'source' => $this->source ?: OS::MOBILE_APP,
|
'source' => $this->source ?: OS::MOBILE_APP,
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ class ChannelMediaResource extends JsonResource
|
|||||||
return [
|
return [
|
||||||
'thumbnail' => $this->getUrl(),
|
'thumbnail' => $this->getUrl(),
|
||||||
'images_400x400' => $this->getUrl('thumb400x400'),
|
'images_400x400' => $this->getUrl('thumb400x400'),
|
||||||
'images_720x720' => $this->getUrl('thumb720x720'),
|
|
||||||
'images_800x800' => $this->getUrl('thumb800x800'),
|
'images_800x800' => $this->getUrl('thumb800x800'),
|
||||||
'images_1200x1200' => $this->getUrl('thumb1200x1200'),
|
'images_1200x1200' => $this->getUrl('thumb1200x1200'),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -15,9 +15,8 @@ class MediaResource extends JsonResource
|
|||||||
public function toArray(Request $request): array
|
public function toArray(Request $request): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'thumbnail' => $this->getUrl('thumb720x720'),
|
'thumbnail' => $this->getUrl('thumb400x400'),
|
||||||
'images_400x400' => $this->getUrl('thumb400x400'),
|
'images_400x400' => $this->getUrl('thumb400x400'),
|
||||||
'images_720x720' => $this->getUrl('thumb720x720'),
|
|
||||||
'images_800x800' => $this->getUrl('thumb800x800'),
|
'images_800x800' => $this->getUrl('thumb800x800'),
|
||||||
'images_1200x1200' => $this->getUrl('thumb1200x1200'),
|
'images_1200x1200' => $this->getUrl('thumb1200x1200'),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -59,6 +59,11 @@ class UpdateProductRelations implements ShouldQueue
|
|||||||
'product_custom_value' => in_array($attribute->type, ['text', 'number']) ? $this->properties[$attribute->slug] : null,
|
'product_custom_value' => in_array($attribute->type, ['text', 'number']) ? $this->properties[$attribute->slug] : null,
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// sync properties json
|
||||||
|
if (method_exists($this->model, 'syncPropertiesJson')) {
|
||||||
|
$this->model->syncPropertiesJson();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ class SendOrderCreatedNotification implements ShouldQueue
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->sendSMSToClient($event->order);
|
// $this->sendSMSToClient($event->order);
|
||||||
$this->sendSMSToStaff($event->order);
|
// $this->sendSMSToStaff($event->order);
|
||||||
$this->sendSMSToVendors($event->order);
|
// $this->sendSMSToVendors($event->order);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -106,24 +106,15 @@ class Banner extends Model implements HasMedia
|
|||||||
*/
|
*/
|
||||||
public function registerMediaConversions(?Media $media = null): void
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
{
|
{
|
||||||
$this->addMediaConversion('thumb200x200')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 200, 200);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb400x400')
|
$this->addMediaConversion('thumb400x400')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb350x350')
|
$this->addMediaConversion('thumb350x350')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 350, 350);
|
->fit(Manipulations::FIT_CONTAIN, 350, 350);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb720x720')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 720, 720);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb800x800')
|
$this->addMediaConversion('thumb800x800')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb1200x1200')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb288x431')
|
$this->addMediaConversion('thumb288x431')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 288, 431);
|
->fit(Manipulations::FIT_CONTAIN, 288, 431);
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ use App\Repositories\System\Cache\CacheRepository;
|
|||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\MorphToMany;
|
|
||||||
use Laravel\Nova\Nova;
|
use Laravel\Nova\Nova;
|
||||||
use Spatie\EloquentSortable\Sortable;
|
use Spatie\EloquentSortable\Sortable;
|
||||||
use Spatie\EloquentSortable\SortableTrait;
|
use Spatie\EloquentSortable\SortableTrait;
|
||||||
@@ -109,29 +109,14 @@ class Channel extends Model implements HasMedia, Sortable
|
|||||||
*/
|
*/
|
||||||
public function registerMediaConversions(?Media $media = null): void
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
{
|
{
|
||||||
$this->addMediaConversion('thumb150x150')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 150, 150);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb200x200')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 200, 200);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb400x400')
|
$this->addMediaConversion('thumb400x400')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb720x720')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 720, 720);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb800x800')
|
$this->addMediaConversion('thumb800x800')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb1200x1200')
|
$this->addMediaConversion('thumb1200x1200')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb288x431')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 288, 431);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb270x350')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 270, 350);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -179,9 +164,9 @@ class Channel extends Model implements HasMedia, Sortable
|
|||||||
/**
|
/**
|
||||||
* Products
|
* Products
|
||||||
*/
|
*/
|
||||||
public function products(): MorphToMany
|
public function products(): BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->morphToMany(Product::class, 'productable', 'product_has_relations');
|
return $this->belongsToMany(Product::class, 'channel_product');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -85,26 +85,14 @@ class Brand extends Model implements HasMedia, Sortable
|
|||||||
*/
|
*/
|
||||||
public function registerMediaConversions(?Media $media = null): void
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
{
|
{
|
||||||
$this->addMediaConversion('thumb200x200')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 200, 200);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb400x400')
|
$this->addMediaConversion('thumb400x400')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb720x720')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 720, 720);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb800x800')
|
$this->addMediaConversion('thumb800x800')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb1200x1200')
|
$this->addMediaConversion('thumb1200x1200')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb288x431')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 288, 431);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb270x350')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 270, 350);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ use Illuminate\Database\Eloquent\Casts\Attribute;
|
|||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||||
use Illuminate\Database\Eloquent\Relations\MorphToMany;
|
|
||||||
use Spatie\EloquentSortable\Sortable;
|
use Spatie\EloquentSortable\Sortable;
|
||||||
use Spatie\EloquentSortable\SortableTrait;
|
use Spatie\EloquentSortable\SortableTrait;
|
||||||
use Spatie\Image\Manipulations;
|
use Spatie\Image\Manipulations;
|
||||||
@@ -83,7 +82,6 @@ class Category extends Model implements HasMedia, Sortable
|
|||||||
{
|
{
|
||||||
$this->addMediaCollection('uploads')
|
$this->addMediaCollection('uploads')
|
||||||
->singleFile()
|
->singleFile()
|
||||||
->acceptsMimeTypes(['image/jpg', 'image/jpeg', 'image/png'])
|
|
||||||
->useFallbackUrl(
|
->useFallbackUrl(
|
||||||
sprintf('%s/logo-space.png', config('app.url'))
|
sprintf('%s/logo-space.png', config('app.url'))
|
||||||
);
|
);
|
||||||
@@ -94,29 +92,14 @@ class Category extends Model implements HasMedia, Sortable
|
|||||||
*/
|
*/
|
||||||
public function registerMediaConversions(?Media $media = null): void
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
{
|
{
|
||||||
$this->addMediaConversion('thumb200x200')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 200, 200);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb400x400')
|
$this->addMediaConversion('thumb400x400')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb720x720')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 720, 720);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb800x800')
|
$this->addMediaConversion('thumb800x800')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb1200x1200')
|
$this->addMediaConversion('thumb1200x1200')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb288x431')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 288, 431);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb270x350')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 270, 350);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb657x230')
|
|
||||||
->fit(Manipulations::FIT_CROP, 657, 230);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -152,9 +135,9 @@ class Category extends Model implements HasMedia, Sortable
|
|||||||
/**
|
/**
|
||||||
* Category Products
|
* Category Products
|
||||||
*/
|
*/
|
||||||
public function products(): MorphToMany
|
public function products(): BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->morphToMany(Product::class, 'productable', 'product_has_relations');
|
return $this->belongsToMany(Product::class, 'category_product');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
31
app/Models/Ecommerce/Product/Category/SelectedCategory.php
Normal file
31
app/Models/Ecommerce/Product/Category/SelectedCategory.php
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models\Ecommerce\Product\Category;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||||
|
use Spatie\Translatable\HasTranslations;
|
||||||
|
|
||||||
|
class SelectedCategory extends Model
|
||||||
|
{
|
||||||
|
use HasFactory;
|
||||||
|
use HasTranslations;
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'is_visible',
|
||||||
|
];
|
||||||
|
|
||||||
|
public $translatable = ['name', 'description'];
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'is_visible' => 'boolean',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function categories(): BelongsToMany
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(Category::class, 'category_selected_category');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@ namespace App\Models\Ecommerce\Product\Collection;
|
|||||||
use App\Models\Ecommerce\Product\Product\Product;
|
use App\Models\Ecommerce\Product\Product\Product;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\MorphToMany;
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||||
use Spatie\EloquentSortable\Sortable;
|
use Spatie\EloquentSortable\Sortable;
|
||||||
use Spatie\EloquentSortable\SortableTrait;
|
use Spatie\EloquentSortable\SortableTrait;
|
||||||
use Spatie\Image\Manipulations;
|
use Spatie\Image\Manipulations;
|
||||||
@@ -84,34 +84,22 @@ class Collection extends Model implements HasMedia, Sortable
|
|||||||
*/
|
*/
|
||||||
public function registerMediaConversions(?Media $media = null): void
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
{
|
{
|
||||||
$this->addMediaConversion('thumb200x200')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 200, 200);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb400x400')
|
$this->addMediaConversion('thumb400x400')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb720x720')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 720, 720);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb800x800')
|
$this->addMediaConversion('thumb800x800')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb1200x1200')
|
$this->addMediaConversion('thumb1200x1200')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb288x431')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 288, 431);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb270x350')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 270, 350);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Products
|
* Products
|
||||||
*/
|
*/
|
||||||
public function products(): MorphToMany
|
public function products(): BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->morphToMany(Product::class, 'productable', 'product_has_relations');
|
return $this->belongsToMany(Product::class, 'collection_product');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,9 +2,11 @@
|
|||||||
|
|
||||||
namespace App\Models\Ecommerce\Product\Order;
|
namespace App\Models\Ecommerce\Product\Order;
|
||||||
|
|
||||||
|
use App\Models\Concerns\HasSchemalessAttributes;
|
||||||
use App\Models\Ecommerce\Product\Order\Concerns\HasPayments;
|
use App\Models\Ecommerce\Product\Order\Concerns\HasPayments;
|
||||||
use App\Models\Ecommerce\Product\Order\Concerns\HasShipping;
|
use App\Models\Ecommerce\Product\Order\Concerns\HasShipping;
|
||||||
use App\Models\Ecommerce\Product\Order\Concerns\HasStatus;
|
use App\Models\Ecommerce\Product\Order\Concerns\HasStatus;
|
||||||
|
use App\Models\Ecommerce\Product\Order\Status\OrderStatus;
|
||||||
use App\Models\System\Settings\Location\Province;
|
use App\Models\System\Settings\Location\Province;
|
||||||
use App\Models\System\Settings\Payments\PaymentType;
|
use App\Models\System\Settings\Payments\PaymentType;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
@@ -18,6 +20,7 @@ class Order extends Model
|
|||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
use HasPayments;
|
use HasPayments;
|
||||||
|
use HasSchemalessAttributes;
|
||||||
use HasShipping;
|
use HasShipping;
|
||||||
use HasStatus;
|
use HasStatus;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
@@ -89,4 +92,14 @@ class Order extends Model
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(PaymentType::class, 'payment_type_id');
|
return $this->belongsTo(PaymentType::class, 'payment_type_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Booted
|
||||||
|
*/
|
||||||
|
protected static function booted(): void
|
||||||
|
{
|
||||||
|
static::creating(function (Order $order) {
|
||||||
|
$order->status = $order->status ?? OrderStatus::default();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class OrderStatus
|
|||||||
public static function values(): array
|
public static function values(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
'' => '-',
|
||||||
self::PENDING => __('Pending'),
|
self::PENDING => __('Pending'),
|
||||||
self::REGISTER => __('Registered'),
|
self::REGISTER => __('Registered'),
|
||||||
self::PAID => __('Paid'),
|
self::PAID => __('Paid'),
|
||||||
@@ -65,6 +66,7 @@ class OrderStatus
|
|||||||
public static function classes(): array
|
public static function classes(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
'' => 'warning',
|
||||||
self::PENDING => 'warning',
|
self::PENDING => 'warning',
|
||||||
self::REGISTER => 'info',
|
self::REGISTER => 'info',
|
||||||
self::PAID => 'primary',
|
self::PAID => 'primary',
|
||||||
@@ -79,6 +81,7 @@ class OrderStatus
|
|||||||
public static function colors(): array
|
public static function colors(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
'' => '#F5573B',
|
||||||
self::PENDING => '#F5573B',
|
self::PENDING => '#F5573B',
|
||||||
self::REGISTER => '#F2CB22',
|
self::REGISTER => '#F2CB22',
|
||||||
self::PAID => '#098F56',
|
self::PAID => '#098F56',
|
||||||
|
|||||||
@@ -21,32 +21,20 @@ trait ProductMedia
|
|||||||
*/
|
*/
|
||||||
public function registerMediaConversions(?Media $media = null): void
|
public function registerMediaConversions(?Media $media = null): void
|
||||||
{
|
{
|
||||||
$this->addMediaConversion('thumb200x200')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 200, 200);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb400x400')
|
$this->addMediaConversion('thumb400x400')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
->fit(Manipulations::FIT_CONTAIN, 400, 400);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb720x720')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 720, 720);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb800x800')
|
$this->addMediaConversion('thumb800x800')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
->fit(Manipulations::FIT_CONTAIN, 800, 800);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb1200x1200')
|
$this->addMediaConversion('thumb1200x1200')
|
||||||
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
->fit(Manipulations::FIT_CONTAIN, 1200, 1200);
|
||||||
|
|
||||||
$this->addMediaConversion('thumb288x431')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 288, 431);
|
|
||||||
|
|
||||||
$this->addMediaConversion('thumb270x350')
|
|
||||||
->fit(Manipulations::FIT_CONTAIN, 270, 350);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Thumbnail
|
* Thumbnail
|
||||||
*/
|
*/
|
||||||
public function thumbnail(string $size = '200x200'): string
|
public function thumbnail(string $size = '400x400'): string
|
||||||
{
|
{
|
||||||
return $this->getFirstMediaUrl('uploads', 'thumb'.$size);
|
return $this->getFirstMediaUrl('uploads', 'thumb'.$size);
|
||||||
}
|
}
|
||||||
@@ -54,7 +42,7 @@ trait ProductMedia
|
|||||||
/**
|
/**
|
||||||
* Get image when hovered (returns second image)
|
* Get image when hovered (returns second image)
|
||||||
*/
|
*/
|
||||||
public function getHoverImage(string $size = '270x350'): string
|
public function getHoverImage(string $size = '400x400'): string
|
||||||
{
|
{
|
||||||
$media = $this->getMedia('uploads');
|
$media = $this->getMedia('uploads');
|
||||||
$image_count = $media->count();
|
$image_count = $media->count();
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ namespace App\Models\Ecommerce\Product\Product\Concerns;
|
|||||||
use App\Models\Common\Comment;
|
use App\Models\Common\Comment;
|
||||||
use App\Models\Ecommerce\Channel\Channel;
|
use App\Models\Ecommerce\Channel\Channel;
|
||||||
use App\Models\Ecommerce\Product\Brand\Brand;
|
use App\Models\Ecommerce\Product\Brand\Brand;
|
||||||
use App\Models\Ecommerce\Product\Cart\Cart;
|
use App\Models\Ecommerce\Product\Cart\CartItem;
|
||||||
use App\Models\Ecommerce\Product\Category\Category;
|
use App\Models\Ecommerce\Product\Category\Category;
|
||||||
use App\Models\Ecommerce\Product\Collection\Collection;
|
use App\Models\Ecommerce\Product\Collection\Collection;
|
||||||
use App\Models\Ecommerce\Product\Inventory\Inventory;
|
use App\Models\Ecommerce\Product\Inventory\Inventory;
|
||||||
@@ -15,7 +15,6 @@ use App\Models\Ecommerce\Product\Review\Review;
|
|||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\Relations\MorphToMany;
|
|
||||||
|
|
||||||
trait ProductRelationships
|
trait ProductRelationships
|
||||||
{
|
{
|
||||||
@@ -28,8 +27,8 @@ trait ProductRelationships
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
+ * Parent
|
* Parent
|
||||||
+ */
|
*/
|
||||||
public function parent(): BelongsTo
|
public function parent(): BelongsTo
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Product::class, 'parent_id');
|
return $this->belongsTo(Product::class, 'parent_id');
|
||||||
@@ -38,9 +37,9 @@ trait ProductRelationships
|
|||||||
/**
|
/**
|
||||||
* Related Channels
|
* Related Channels
|
||||||
*/
|
*/
|
||||||
public function channels(): MorphToMany
|
public function channels(): BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->morphedByMany(Channel::class, 'productable', 'product_has_relations');
|
return $this->belongsToMany(Channel::class, 'channel_product');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -56,25 +55,25 @@ trait ProductRelationships
|
|||||||
/**
|
/**
|
||||||
* Related products (similar)
|
* Related products (similar)
|
||||||
*/
|
*/
|
||||||
public function relatedProducts(): MorphToMany
|
public function relatedProducts(): BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->morphedByMany(Product::class, 'productable', 'product_has_relations');
|
return $this->belongsToMany(Product::class, 'product_related', 'product_id', 'related_product_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Related categories
|
* Related categories
|
||||||
*/
|
*/
|
||||||
public function categories(): MorphToMany
|
public function categories(): BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->morphedByMany(Category::class, 'productable', 'product_has_relations');
|
return $this->belongsToMany(Category::class, 'category_product');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Related Collections
|
* Related Collections
|
||||||
*/
|
*/
|
||||||
public function collections(): MorphToMany
|
public function collections(): BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->morphedByMany(Collection::class, 'productable', 'product_has_relations');
|
return $this->belongsToMany(Collection::class, 'collection_product');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -109,7 +108,7 @@ trait ProductRelationships
|
|||||||
*/
|
*/
|
||||||
public function carts(): BelongsTo
|
public function carts(): BelongsTo
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Cart::class);
|
return $this->belongsTo(CartItem::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -27,16 +27,16 @@ class Product extends Model implements HasMedia, Viewable
|
|||||||
*/
|
*/
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
||||||
/**
|
|
||||||
* Has Schemaless Attributes (spatie/laravel-schemaless-attributes)
|
|
||||||
*/
|
|
||||||
use HasSchemalessAttributes;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Has Properties Json
|
* Has Properties Json
|
||||||
*/
|
*/
|
||||||
use HasPropertiesJson;
|
use HasPropertiesJson;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Has Schemaless Attributes (spatie/laravel-schemaless-attributes)
|
||||||
|
*/
|
||||||
|
use HasSchemalessAttributes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Has Slug (spatie/laravel-sluggable)
|
* Has Slug (spatie/laravel-sluggable)
|
||||||
*/
|
*/
|
||||||
|
|||||||
46
app/Models/Ecommerce/Product/ProductView/ProductView.php
Normal file
46
app/Models/Ecommerce/Product/ProductView/ProductView.php
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models\Ecommerce\Product\ProductView;
|
||||||
|
|
||||||
|
use App\Models\Ecommerce\Product\Product\Product;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
|
||||||
|
class ProductView extends Model
|
||||||
|
{
|
||||||
|
use HasFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The table associated with the model.
|
||||||
|
*/
|
||||||
|
protected $table = 'product_views';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The attributes that are mass assignable.
|
||||||
|
*
|
||||||
|
* @var array<int, string>
|
||||||
|
*/
|
||||||
|
protected $fillable = [
|
||||||
|
'user_id',
|
||||||
|
'product_id',
|
||||||
|
'updated_at',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Product
|
||||||
|
*/
|
||||||
|
public function product(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Product::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User
|
||||||
|
*/
|
||||||
|
public function user(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(User::class);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Model;
|
|||||||
* @property int $id
|
* @property int $id
|
||||||
* @property string $version
|
* @property string $version
|
||||||
* @property string $os
|
* @property string $os
|
||||||
* @property bool $important
|
* @property bool $important
|
||||||
* @property string $notes
|
* @property string $notes
|
||||||
* @property \Carbon\Carbon|null $created_at
|
* @property \Carbon\Carbon|null $created_at
|
||||||
* @property \Carbon\Carbon|null $updated_at
|
* @property \Carbon\Carbon|null $updated_at
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use App\Models\Concerns\InteractsWithRoles;
|
|||||||
use App\Models\Ecommerce\Product\Cart\CartItem;
|
use App\Models\Ecommerce\Product\Cart\CartItem;
|
||||||
use App\Models\Ecommerce\Product\Favorite\Favorite;
|
use App\Models\Ecommerce\Product\Favorite\Favorite;
|
||||||
use App\Models\Ecommerce\Product\Order\Order;
|
use App\Models\Ecommerce\Product\Order\Order;
|
||||||
|
use App\Models\Ecommerce\Product\ProductView\ProductView;
|
||||||
use App\Models\Ecommerce\Product\Review\Review;
|
use App\Models\Ecommerce\Product\Review\Review;
|
||||||
use App\Models\Post\User\UserDoc;
|
use App\Models\Post\User\UserDoc;
|
||||||
use App\Models\System\Settings\Location\UserAddress;
|
use App\Models\System\Settings\Location\UserAddress;
|
||||||
@@ -128,6 +129,14 @@ class User extends Authenticatable
|
|||||||
return $this->hasMany(Favorite::class);
|
return $this->hasMany(Favorite::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User's viewed products
|
||||||
|
*/
|
||||||
|
public function productViews(): HasMany
|
||||||
|
{
|
||||||
|
return $this->hasMany(ProductView::class);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User's favorite products
|
* User's favorite products
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ class MostSoldProducts extends Lens
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
ID::make(__('ID'), 'id')->sortable(),
|
ID::make(__('ID'), 'id')->sortable(),
|
||||||
Images::make(__('Image'), 'uploads')->conversionOnIndexView('thumb200x200'),
|
Images::make(__('Image'), 'uploads')->conversionOnIndexView('thumb400x400'),
|
||||||
Text::make(__('Name'), 'name')->sortable(),
|
Text::make(__('Name'), 'name')->sortable(),
|
||||||
Number::make(__('Price'), 'price_amount')->sortable(),
|
Number::make(__('Price'), 'price_amount')->sortable(),
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ class Banner extends Resource
|
|||||||
ID::make()->sortable(),
|
ID::make()->sortable(),
|
||||||
|
|
||||||
Images::make(__('Image'), 'main')
|
Images::make(__('Image'), 'main')
|
||||||
->conversionOnIndexView('thumb200x200')
|
->conversionOnIndexView('thumb400x400')
|
||||||
->rules('required')
|
->rules('required')
|
||||||
->required(),
|
->required(),
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ class Channel extends Resource
|
|||||||
ID::make()->sortable(),
|
ID::make()->sortable(),
|
||||||
|
|
||||||
Images::make(__('Image'), 'uploads')
|
Images::make(__('Image'), 'uploads')
|
||||||
->conversionOnIndexView('thumb200x200')
|
->conversionOnIndexView('thumb400x400')
|
||||||
->rules('required')
|
->rules('required')
|
||||||
->required(),
|
->required(),
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class ChannelFieldsForIndex
|
|||||||
ID::make()->hidden(),
|
ID::make()->hidden(),
|
||||||
|
|
||||||
Images::make(__('Image'), 'uploads')
|
Images::make(__('Image'), 'uploads')
|
||||||
->conversionOnIndexView('thumb200x200'),
|
->conversionOnIndexView('thumb400x400'),
|
||||||
|
|
||||||
Text::make(__('Name'), 'name')
|
Text::make(__('Name'), 'name')
|
||||||
->sortable(),
|
->sortable(),
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ class Brand extends Resource
|
|||||||
ID::make()->sortable(),
|
ID::make()->sortable(),
|
||||||
|
|
||||||
Images::make(__('Image'), 'uploads')
|
Images::make(__('Image'), 'uploads')
|
||||||
->conversionOnIndexView('thumb200x200')
|
->conversionOnIndexView('thumb400x400')
|
||||||
->rules('required')
|
->rules('required')
|
||||||
->required(),
|
->required(),
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ class Category extends Resource
|
|||||||
ID::make()->sortable(),
|
ID::make()->sortable(),
|
||||||
|
|
||||||
Images::make(__('Image'), 'uploads')
|
Images::make(__('Image'), 'uploads')
|
||||||
->conversionOnIndexView('thumb200x200')
|
->conversionOnIndexView('thumb400x400')
|
||||||
->rules('required')
|
->rules('required')
|
||||||
->required(),
|
->required(),
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Nova\Resources\Ecommerce\Product\Category;
|
||||||
|
|
||||||
|
use App\Models\Ecommerce\Product\Category\SelectedCategory as SelectedCategoryModel;
|
||||||
|
use App\Nova\Resource;
|
||||||
|
use Laravel\Nova\Fields\BelongsToMany;
|
||||||
|
use Laravel\Nova\Fields\ID;
|
||||||
|
use Laravel\Nova\Fields\Text;
|
||||||
|
use Laravel\Nova\Fields\Textarea;
|
||||||
|
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||||
|
use Trin4ik\NovaSwitcher\NovaSwitcher;
|
||||||
|
|
||||||
|
class SelectedCategory extends Resource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The model the resource corresponds to.
|
||||||
|
*
|
||||||
|
* @var class-string<SelectedCategoryModel>
|
||||||
|
*/
|
||||||
|
public static $model = SelectedCategoryModel::class;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The single value that should be used to represent the resource when being displayed.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public static $title = 'name';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The columns that should be searched.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public static $search = [
|
||||||
|
'id', 'name',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the displayable label of the resource.
|
||||||
|
*/
|
||||||
|
public static function label(): string
|
||||||
|
{
|
||||||
|
return __('Sections');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the displayable singular label of the resource.
|
||||||
|
*/
|
||||||
|
public static function singularLabel(): string
|
||||||
|
{
|
||||||
|
return __('Section');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the fields displayed by the resource.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function fields(NovaRequest $request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
ID::make()->sortable(),
|
||||||
|
|
||||||
|
Text::make(__('Name'), 'name')
|
||||||
|
->sortable()
|
||||||
|
->translatable()
|
||||||
|
->rules('required'),
|
||||||
|
|
||||||
|
Textarea::make(__('Description'), 'description')
|
||||||
|
->translatable()
|
||||||
|
->nullable(),
|
||||||
|
|
||||||
|
NovaSwitcher::make(__('Is Visible'), 'is_visible')
|
||||||
|
->default(true),
|
||||||
|
|
||||||
|
BelongsToMany::make(__('Categories'), 'categories', Category::class),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the cards available for the request.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function cards(NovaRequest $request)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the filters available for the resource.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function filters(NovaRequest $request)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the lenses available for the resource.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function lenses(NovaRequest $request)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the actions available for the resource.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function actions(NovaRequest $request)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -76,7 +76,7 @@ class Collection extends Resource
|
|||||||
ID::make()->sortable(),
|
ID::make()->sortable(),
|
||||||
|
|
||||||
Images::make(__('Image'), 'uploads')
|
Images::make(__('Image'), 'uploads')
|
||||||
->conversionOnIndexView('thumb200x200')
|
->conversionOnIndexView('thumb400x400')
|
||||||
->rules('required')
|
->rules('required')
|
||||||
->required(),
|
->required(),
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ class ProductResource extends Resource
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
ID::make()->sortable(),
|
ID::make()->sortable(),
|
||||||
Images::make(__('Image'), 'uploads')->conversionOnIndexView('thumb200x200'),
|
Images::make(__('Image'), 'uploads')->conversionOnIndexView('thumb400x400'),
|
||||||
Text::make(__('Name'), fn () => $this->novaDetailPage())
|
Text::make(__('Name'), fn () => $this->novaDetailPage())
|
||||||
->displayUsing(FieldHelpers::asLink(
|
->displayUsing(FieldHelpers::asLink(
|
||||||
link: $this->novaDetailPage(),
|
link: $this->novaDetailPage(),
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class OrderFieldsForCreate
|
|||||||
return [
|
return [
|
||||||
Hidden::make('number')->default(Str::random(30)),
|
Hidden::make('number')->default(Str::random(30)),
|
||||||
Hidden::make('user_id')->default($request->user()->id),
|
Hidden::make('user_id')->default($request->user()->id),
|
||||||
Hidden::make('source_app')->default(OS::ADMIN),
|
Hidden::make('source')->default(OS::ADMIN),
|
||||||
|
|
||||||
ID::make(),
|
ID::make(),
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ class OrderFieldsForDetail
|
|||||||
)
|
)
|
||||||
->asHtml(),
|
->asHtml(),
|
||||||
|
|
||||||
Select::make(__('App'), 'source_app')
|
Select::make(__('App'), 'source')
|
||||||
->displayUsingLabels()
|
->displayUsingLabels()
|
||||||
->options(OS::apps())
|
->options(OS::apps())
|
||||||
->sortable(),
|
->sortable(),
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ class OrderFieldsForIndex
|
|||||||
->default(OrderShipping::default())
|
->default(OrderShipping::default())
|
||||||
->sortable(),
|
->sortable(),
|
||||||
|
|
||||||
Select::make(__('Source'), 'source_app')
|
Select::make(__('Source'), 'source')
|
||||||
->displayUsingLabels()
|
->displayUsingLabels()
|
||||||
->options(OS::apps())
|
->options(OS::apps())
|
||||||
->sortable(),
|
->sortable(),
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ class ProductFieldsForCreate
|
|||||||
->rules('nullable', 'string'),
|
->rules('nullable', 'string'),
|
||||||
|
|
||||||
Images::make(__('Image'), 'uploads')
|
Images::make(__('Image'), 'uploads')
|
||||||
->conversionOnIndexView('thumb200x200')
|
->conversionOnIndexView('thumb400x400')
|
||||||
->rules('required')
|
->rules('required')
|
||||||
->setFileName(NovaForm::fillMediaFileName())
|
->setFileName(NovaForm::fillMediaFileName())
|
||||||
->required(),
|
->required(),
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class ProductFieldsForDetail
|
|||||||
Text::make(__('Name'), 'name'),
|
Text::make(__('Name'), 'name'),
|
||||||
|
|
||||||
Images::make(__('Image'), 'uploads')
|
Images::make(__('Image'), 'uploads')
|
||||||
->conversionOnIndexView('thumb200x200'),
|
->conversionOnIndexView('thumb400x400'),
|
||||||
|
|
||||||
Trix::make(__('Description'), 'description')->withFiles('public')->alwaysShow(),
|
Trix::make(__('Description'), 'description')->withFiles('public')->alwaysShow(),
|
||||||
Text::make(__('Price'), 'cost_amount'),
|
Text::make(__('Price'), 'cost_amount'),
|
||||||
@@ -134,8 +134,8 @@ class ProductFieldsForDetail
|
|||||||
'name' => $property->attribute->slug,
|
'name' => $property->attribute->slug,
|
||||||
'type' => $property->attribute->type,
|
'type' => $property->attribute->type,
|
||||||
'default' => $property->attribute->type === 'select'
|
'default' => $property->attribute->type === 'select'
|
||||||
? $property->values->first()->value?->id
|
? $property->values->first()->value?->id ?? '-'
|
||||||
: $property->values->first()->product_custom_value,
|
: $property->values->first()->product_custom_value ?? '-',
|
||||||
'options' => $property->attribute->values->map(fn ($value) => [
|
'options' => $property->attribute->values->map(fn ($value) => [
|
||||||
'label' => $value->value,
|
'label' => $value->value,
|
||||||
'value' => $value->id,
|
'value' => $value->id,
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class ProductFieldsForIndex
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
ID::make()->sortable(),
|
ID::make()->sortable(),
|
||||||
Images::make(__('Image'), 'uploads')->conversionOnIndexView('thumb200x200'),
|
Images::make(__('Image'), 'uploads')->conversionOnIndexView('thumb400x400'),
|
||||||
Text::make(__('Name'), 'name')->sortable(),
|
Text::make(__('Name'), 'name')->sortable(),
|
||||||
|
|
||||||
BelongsTo::make(__('Brand'), 'brand', Brand::class)
|
BelongsTo::make(__('Brand'), 'brand', Brand::class)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class VariantFieldsForDetail
|
|||||||
BelongsTo::make(__('Parent'), 'parent', Product::class),
|
BelongsTo::make(__('Parent'), 'parent', Product::class),
|
||||||
|
|
||||||
Images::make(__('Image'), 'uploads')
|
Images::make(__('Image'), 'uploads')
|
||||||
->conversionOnIndexView('thumb200x200'),
|
->conversionOnIndexView('thumb400x400'),
|
||||||
|
|
||||||
Text::make(__('Price'), 'cost_amount')
|
Text::make(__('Price'), 'cost_amount')
|
||||||
->rules('required', 'numeric'),
|
->rules('required', 'numeric'),
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class VariantFieldsForIndex
|
|||||||
ID::make()->sortable(),
|
ID::make()->sortable(),
|
||||||
|
|
||||||
Images::make(__('Image'), 'uploads')
|
Images::make(__('Image'), 'uploads')
|
||||||
->conversionOnIndexView('thumb200x200'),
|
->conversionOnIndexView('thumb400x400'),
|
||||||
|
|
||||||
Text::make(__('Price'), 'cost_amount')
|
Text::make(__('Price'), 'cost_amount')
|
||||||
->rules('required', 'numeric'),
|
->rules('required', 'numeric'),
|
||||||
|
|||||||
@@ -33,9 +33,8 @@ class ProductEntrepreneurFilter extends Filter
|
|||||||
*/
|
*/
|
||||||
public function apply(NovaRequest $request, $query, $value)
|
public function apply(NovaRequest $request, $query, $value)
|
||||||
{
|
{
|
||||||
$vendorProducts = DB::table('product_has_relations')
|
$vendorProducts = DB::table('channel_product')
|
||||||
->where('productable_type', 'channel')
|
->where('channel_id', $value)
|
||||||
->where('productable_id', $value)
|
|
||||||
->pluck('product_id');
|
->pluck('product_id');
|
||||||
|
|
||||||
$query->whereIntegerInRaw('id', $vendorProducts);
|
$query->whereIntegerInRaw('id', $vendorProducts);
|
||||||
|
|||||||
@@ -123,9 +123,8 @@ class Product extends Resource
|
|||||||
$user = $request->user();
|
$user = $request->user();
|
||||||
|
|
||||||
if ($user->hasRole('vendor')) {
|
if ($user->hasRole('vendor')) {
|
||||||
$vendorProducts = DB::table('product_has_relations')
|
$vendorProducts = DB::table('channel_product')
|
||||||
->where('productable_type', 'channel')
|
->where('channel_id', $user->channel()->id)
|
||||||
->where('productable_id', $user->channel()->id)
|
|
||||||
->pluck('product_id');
|
->pluck('product_id');
|
||||||
|
|
||||||
$query->whereIntegerInRaw('id', $vendorProducts);
|
$query->whereIntegerInRaw('id', $vendorProducts);
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ class Warning extends Resource
|
|||||||
/**
|
/**
|
||||||
* Get the fields displayed by the resource.
|
* Get the fields displayed by the resource.
|
||||||
*
|
*
|
||||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function fields(NovaRequest $request)
|
public function fields(NovaRequest $request)
|
||||||
@@ -68,7 +67,6 @@ class Warning extends Resource
|
|||||||
/**
|
/**
|
||||||
* Get the cards available for the request.
|
* Get the cards available for the request.
|
||||||
*
|
*
|
||||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function cards(NovaRequest $request)
|
public function cards(NovaRequest $request)
|
||||||
@@ -79,7 +77,6 @@ class Warning extends Resource
|
|||||||
/**
|
/**
|
||||||
* Get the filters available for the resource.
|
* Get the filters available for the resource.
|
||||||
*
|
*
|
||||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function filters(NovaRequest $request)
|
public function filters(NovaRequest $request)
|
||||||
@@ -90,7 +87,6 @@ class Warning extends Resource
|
|||||||
/**
|
/**
|
||||||
* Get the lenses available for the resource.
|
* Get the lenses available for the resource.
|
||||||
*
|
*
|
||||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function lenses(NovaRequest $request)
|
public function lenses(NovaRequest $request)
|
||||||
@@ -101,7 +97,6 @@ class Warning extends Resource
|
|||||||
/**
|
/**
|
||||||
* Get the actions available for the resource.
|
* Get the actions available for the resource.
|
||||||
*
|
*
|
||||||
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function actions(NovaRequest $request)
|
public function actions(NovaRequest $request)
|
||||||
|
|||||||
@@ -64,8 +64,8 @@ class ChannelPolicy
|
|||||||
*/
|
*/
|
||||||
public function update(User $user, Channel $channel): Response
|
public function update(User $user, Channel $channel): Response
|
||||||
{
|
{
|
||||||
if ($user->hasRole(['admin'])) {
|
if (tmpostChannel()->slug === $channel->slug) {
|
||||||
return $this->allow();
|
return $this->deny();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->deny();
|
return $this->deny();
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ class AuthServiceProvider extends ServiceProvider
|
|||||||
Gate::define('isVendor', fn ($user) => $user->hasRole('vendor'));
|
Gate::define('isVendor', fn ($user) => $user->hasRole('vendor'));
|
||||||
|
|
||||||
Gate::define('viewApiDocs', function (User $user) {
|
Gate::define('viewApiDocs', function (User $user) {
|
||||||
return in_array($user->email, ['nurmuhammet@mail.com']);
|
return in_array($user->email, ['nurmuhammet@mail.com', 'admin@shop.post.tm']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
use Dedoc\Scramble\Support\Generator\SecurityScheme;
|
|
||||||
use Illuminate\Support\ServiceProvider;
|
|
||||||
use Dedoc\Scramble\Scramble;
|
use Dedoc\Scramble\Scramble;
|
||||||
use Dedoc\Scramble\Support\Generator\OpenApi;
|
use Dedoc\Scramble\Support\Generator\OpenApi;
|
||||||
use Dedoc\Scramble\Support\Generator\SecurityRequirement;
|
use Dedoc\Scramble\Support\Generator\SecurityRequirement;
|
||||||
|
use Dedoc\Scramble\Support\Generator\SecurityScheme;
|
||||||
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
class DocumentationServiceProvider extends ServiceProvider
|
class DocumentationServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
@@ -24,14 +24,14 @@ class DocumentationServiceProvider extends ServiceProvider
|
|||||||
public function boot(): void
|
public function boot(): void
|
||||||
{
|
{
|
||||||
Scramble::configure()
|
Scramble::configure()
|
||||||
->withDocumentTransformers(function (OpenApi $openApi) {
|
->withDocumentTransformers(function (OpenApi $openApi) {
|
||||||
$openApi->components->securitySchemes['api-token'] = SecurityScheme::apiKey('header', 'Api-token');
|
$openApi->components->securitySchemes['api-token'] = SecurityScheme::apiKey('header', 'Api-token');
|
||||||
$openApi->components->securitySchemes['bearer'] = SecurityScheme::http('bearer');
|
$openApi->components->securitySchemes['bearer'] = SecurityScheme::http('bearer');
|
||||||
|
|
||||||
$openApi->security[] = new SecurityRequirement([
|
$openApi->security[] = new SecurityRequirement([
|
||||||
'api-token' => [],
|
'api-token' => [],
|
||||||
'bearer' => [],
|
'bearer' => [],
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ use App\Nova\Resources\Ecommerce\Payout\PayoutResource;
|
|||||||
use App\Nova\Resources\Ecommerce\Product\Attribute\Attribute;
|
use App\Nova\Resources\Ecommerce\Product\Attribute\Attribute;
|
||||||
use App\Nova\Resources\Ecommerce\Product\Brand\Brand;
|
use App\Nova\Resources\Ecommerce\Product\Brand\Brand;
|
||||||
use App\Nova\Resources\Ecommerce\Product\Category\Category;
|
use App\Nova\Resources\Ecommerce\Product\Category\Category;
|
||||||
|
use App\Nova\Resources\Ecommerce\Product\Category\SelectedCategory;
|
||||||
use App\Nova\Resources\Ecommerce\Product\Collection\Collection;
|
use App\Nova\Resources\Ecommerce\Product\Collection\Collection;
|
||||||
use App\Nova\Resources\Ecommerce\Product\Coupon\Coupon;
|
use App\Nova\Resources\Ecommerce\Product\Coupon\Coupon;
|
||||||
use App\Nova\Resources\Ecommerce\Product\Inventory\Inventory;
|
use App\Nova\Resources\Ecommerce\Product\Inventory\Inventory;
|
||||||
@@ -158,6 +159,7 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
|
|||||||
MenuItem::resource(Category::class),
|
MenuItem::resource(Category::class),
|
||||||
MenuItem::resource(Brand::class),
|
MenuItem::resource(Brand::class),
|
||||||
MenuItem::resource(Attribute::class),
|
MenuItem::resource(Attribute::class),
|
||||||
|
MenuItem::resource(SelectedCategory::class),
|
||||||
])->icon('color-swatch'),
|
])->icon('color-swatch'),
|
||||||
])->icon('shopping-bag')->collapsedByDefault(),
|
])->icon('shopping-bag')->collapsedByDefault(),
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
namespace App\Repositories\Ecommerce\Product\Category;
|
namespace App\Repositories\Ecommerce\Product\Category;
|
||||||
|
|
||||||
use App\Models\Ecommerce\Product\Category\Category;
|
use App\Models\Ecommerce\Product\Category\Category;
|
||||||
use App\Repositories\System\Cache\CacheRepository;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class CategoryRepository
|
class CategoryRepository
|
||||||
@@ -124,16 +123,13 @@ class CategoryRepository
|
|||||||
/**
|
/**
|
||||||
* Names with taxes (usefull for nova)
|
* Names with taxes (usefull for nova)
|
||||||
*/
|
*/
|
||||||
public static function namesWithTaxes(): array
|
public static function namesWithTaxes(): mixed
|
||||||
{
|
{
|
||||||
return CacheRepository::make(
|
return static::maskParentName(
|
||||||
name: 'cs-nova-models-categories',
|
Category::tree()
|
||||||
value: fn () => static::maskParentName(
|
->where('is_visible', true)
|
||||||
Category::tree()
|
->get(['id', 'slug', 'name', 'tax_percentage', 'parent_id', 'is_visible'])
|
||||||
->where('is_visible', true)
|
->toTree()
|
||||||
->get(['id', 'slug', 'name', 'tax_percentage', 'parent_id', 'is_visible'])
|
|
||||||
->toTree()
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,9 +177,8 @@ class CategoryRepository
|
|||||||
])) {
|
])) {
|
||||||
$products = $resource->products()->distinct('products.id')->pluck('products.id');
|
$products = $resource->products()->distinct('products.id')->pluck('products.id');
|
||||||
|
|
||||||
return $this->queryBuilder->join('product_has_relations', 'categories.id', '=', 'product_has_relations.productable_id')
|
return $this->queryBuilder->join('category_product', 'categories.id', '=', 'category_product.category_id')
|
||||||
->where('product_has_relations.productable_type', '=', 'category')
|
->whereIntegerInRaw('category_product.product_id', $products)
|
||||||
->whereIntegerInRaw('product_has_relations.product_id', $products)
|
|
||||||
->distinct('categories.id')
|
->distinct('categories.id')
|
||||||
->get(['id', 'slug', 'name']);
|
->get(['id', 'slug', 'name']);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class ProductRepository
|
|||||||
*
|
*
|
||||||
* @var \Illuminate\Database\Eloquent\Builder
|
* @var \Illuminate\Database\Eloquent\Builder
|
||||||
*/
|
*/
|
||||||
protected Builder $queryBuilder;
|
protected $queryBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Application request
|
* Application request
|
||||||
@@ -59,7 +59,7 @@ class ProductRepository
|
|||||||
/**
|
/**
|
||||||
* Update query builder with resource relationship
|
* Update query builder with resource relationship
|
||||||
*
|
*
|
||||||
* @param mixed $resource
|
* @param mixed $resource
|
||||||
*/
|
*/
|
||||||
public function queryAsFromResource($resource): self
|
public function queryAsFromResource($resource): self
|
||||||
{
|
{
|
||||||
@@ -150,6 +150,20 @@ class ProductRepository
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter by viewed by user
|
||||||
|
*/
|
||||||
|
public function applyViewedBy($user): self
|
||||||
|
{
|
||||||
|
$this->queryBuilder
|
||||||
|
->join('product_views', 'products.id', '=', 'product_views.product_id')
|
||||||
|
->where('product_views.user_id', $user->id)
|
||||||
|
->orderBy('product_views.updated_at', 'desc')
|
||||||
|
->select('products.*');
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* "Where IN" clause
|
* "Where IN" clause
|
||||||
*/
|
*/
|
||||||
@@ -264,7 +278,7 @@ class ProductRepository
|
|||||||
/**
|
/**
|
||||||
* Ajax paginate
|
* Ajax paginate
|
||||||
*
|
*
|
||||||
* @param mixed $products
|
* @param mixed $products
|
||||||
*/
|
*/
|
||||||
public static function ajaxPaginate($products): JsonResponse
|
public static function ajaxPaginate($products): JsonResponse
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,10 +13,6 @@ class CreateOrderService
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Create a new order for the user
|
* Create a new order for the user
|
||||||
*
|
|
||||||
* @param User $user
|
|
||||||
* @param array $data
|
|
||||||
* @return Order
|
|
||||||
*/
|
*/
|
||||||
public function execute(User $user, array $data): Order
|
public function execute(User $user, array $data): Order
|
||||||
{
|
{
|
||||||
@@ -44,10 +40,24 @@ class CreateOrderService
|
|||||||
'updated_at' => now(),
|
'updated_at' => now(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Update Stock
|
// Update Stock directly in products table, also relationship
|
||||||
|
$stock = $cart->product->stock - $cart->product_quantity;
|
||||||
$cart->product->update([
|
$cart->product->update([
|
||||||
'stock' => $cart->product->stock - $cart->product_quantity,
|
'stock' => $stock,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$data = DB::table('inventory_product')->where('product_id', $cart->product_id)->first();
|
||||||
|
if ($data) {
|
||||||
|
DB::table('inventory_product')->where('id', $data->id)->update([
|
||||||
|
'stock' => $stock,
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
warn('Product has no inventory record', json_encode([
|
||||||
|
'product_id' => $cart->product_id,
|
||||||
|
'order_id' => $order->id,
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// 3. Clear User Cart
|
// 3. Clear User Cart
|
||||||
|
|||||||
28
app/Support/ShortFileNamer.php
Normal file
28
app/Support/ShortFileNamer.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Support;
|
||||||
|
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Spatie\MediaLibrary\Conversions\Conversion;
|
||||||
|
use Spatie\MediaLibrary\Support\FileNamer\FileNamer;
|
||||||
|
|
||||||
|
class ShortFileNamer extends FileNamer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Generate a short random name for the original file.
|
||||||
|
*/
|
||||||
|
public function originalFileName(string $fileName): string
|
||||||
|
{
|
||||||
|
return Str::random(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function conversionFileName(string $fileName, Conversion $conversion): string
|
||||||
|
{
|
||||||
|
return $conversion->getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function responsiveFileName(string $fileName): string
|
||||||
|
{
|
||||||
|
return 'res';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -58,7 +58,7 @@ return [
|
|||||||
/*
|
/*
|
||||||
* This is the class that is responsible for naming generated files.
|
* This is the class that is responsible for naming generated files.
|
||||||
*/
|
*/
|
||||||
'file_namer' => Spatie\MediaLibrary\Support\FileNamer\DefaultFileNamer::class,
|
'file_namer' => App\Support\ShortFileNamer::class,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The class that contains the strategy for determining a media file's path.
|
* The class that contains the strategy for determining a media file's path.
|
||||||
|
|||||||
3
database/data/.gitignore
vendored
Normal file
3
database/data/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
*
|
||||||
|
!provinces.json
|
||||||
|
!.gitignore
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,30 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 4,
|
|
||||||
"created_at": "2022-06-16 15:21:07",
|
|
||||||
"updated_at": "2023-11-22 16:59:16",
|
|
||||||
"name": "{\"tk\":\"Renk\",\"ru\":\"\\u0426\\u0432\\u0435\\u0442\",\"en\":\"Colour\"}",
|
|
||||||
"slug": "colour",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "select",
|
|
||||||
"is_enabled": true,
|
|
||||||
"is_searchable": true,
|
|
||||||
"is_filterable": true,
|
|
||||||
"category_id": null,
|
|
||||||
"is_required": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 5,
|
|
||||||
"created_at": "2022-06-16 15:57:21",
|
|
||||||
"updated_at": "2023-06-06 16:12:51",
|
|
||||||
"name": "{\"tk\":\"\\u00d6l\\u00e7eg\",\"ru\":\"\\u0420\\u0430\\u0437\\u043c\\u0435\\u0440\",\"en\":\"Size\"}",
|
|
||||||
"slug": "size",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "text",
|
|
||||||
"is_enabled": true,
|
|
||||||
"is_searchable": true,
|
|
||||||
"is_filterable": true,
|
|
||||||
"category_id": null,
|
|
||||||
"is_required": false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2022-10-15 10:10:04",
|
|
||||||
"updated_at": "2023-05-25 17:58:31",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "5",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-05-02 14:55:43",
|
|
||||||
"updated_at": "2023-05-25 17:58:31",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "20",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 4,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-06-20 22:51:53",
|
|
||||||
"updated_at": "2023-07-12 20:27:50",
|
|
||||||
"banner_type": "brands",
|
|
||||||
"banner_resource": "14",
|
|
||||||
"place": "market",
|
|
||||||
"sort_order": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 5,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-06-20 22:58:52",
|
|
||||||
"updated_at": "2023-09-12 16:02:09",
|
|
||||||
"banner_type": "brands",
|
|
||||||
"banner_resource": "306",
|
|
||||||
"place": "store",
|
|
||||||
"sort_order": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 9,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": false,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-10-30 14:48:23",
|
|
||||||
"updated_at": "2023-11-16 15:54:40",
|
|
||||||
"banner_type": "brands",
|
|
||||||
"banner_resource": "14",
|
|
||||||
"place": "short_ad",
|
|
||||||
"sort_order": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,226 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 14,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2022-06-23 23:56:38",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "82",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 22,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2022-09-02 19:08:44",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "brands",
|
|
||||||
"banner_resource": "14",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 26,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2022-12-07 10:12:38",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "309",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 33,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-03-09 09:15:06",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "234",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 35,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-04-24 13:05:45",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "1",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 37,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-05-03 12:00:36",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "446",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 39,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-05-19 16:35:25",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "brands",
|
|
||||||
"banner_resource": "149",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 41,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-05-30 16:00:44",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "26",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 5
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 42,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-06-23 11:55:19",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "105",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 6
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 43,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-07-11 10:25:41",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "24",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 8
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 44,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-07-11 15:13:44",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "178",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 7
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 45,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-07-26 09:25:39",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "6",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 9
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 46,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-08-03 17:56:23",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "6",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 10
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 47,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-08-10 17:32:36",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "category",
|
|
||||||
"banner_resource": "324",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 48,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": true,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-08-16 17:28:47",
|
|
||||||
"updated_at": "2023-09-14 09:57:56",
|
|
||||||
"banner_type": "brands",
|
|
||||||
"banner_resource": "303",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 49,
|
|
||||||
"position": null,
|
|
||||||
"extra_attributes": null,
|
|
||||||
"link": null,
|
|
||||||
"is_visible": false,
|
|
||||||
"description": "{\"tk\":null}",
|
|
||||||
"created_at": "2023-09-03 17:01:08",
|
|
||||||
"updated_at": "2023-09-20 12:05:13",
|
|
||||||
"banner_type": "brands",
|
|
||||||
"banner_resource": "306",
|
|
||||||
"place": "first",
|
|
||||||
"sort_order": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
33778
database/data/carts.json
33778
database/data/carts.json
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,380 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 6,
|
|
||||||
"channel_id": 7,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 11,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 27,
|
|
||||||
"channel_id": 28,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 60,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 29,
|
|
||||||
"channel_id": 30,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 103,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 31,
|
|
||||||
"channel_id": 32,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 1,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 39,
|
|
||||||
"channel_id": 40,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 340,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 63,
|
|
||||||
"channel_id": 64,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 715,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 69,
|
|
||||||
"channel_id": 70,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 836,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 70,
|
|
||||||
"channel_id": 71,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 848,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 74,
|
|
||||||
"channel_id": 75,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 1659,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 77,
|
|
||||||
"channel_id": 79,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 1915,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 78,
|
|
||||||
"channel_id": 80,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 1916,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 79,
|
|
||||||
"channel_id": 81,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 1917,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 80,
|
|
||||||
"channel_id": 82,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 1918,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 81,
|
|
||||||
"channel_id": 83,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 1919,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 82,
|
|
||||||
"channel_id": 84,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 1925,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 86,
|
|
||||||
"channel_id": 88,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 2054,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 87,
|
|
||||||
"channel_id": 89,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 2086,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 90,
|
|
||||||
"channel_id": 92,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 2260,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 91,
|
|
||||||
"channel_id": 93,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 2355,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 92,
|
|
||||||
"channel_id": 94,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 2356,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 93,
|
|
||||||
"channel_id": 64,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 1025,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 94,
|
|
||||||
"channel_id": 95,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 2710,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 96,
|
|
||||||
"channel_id": 97,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 2924,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 97,
|
|
||||||
"channel_id": 98,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 2962,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 98,
|
|
||||||
"channel_id": 99,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 3021,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 101,
|
|
||||||
"channel_id": 102,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 3158,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 103,
|
|
||||||
"channel_id": 104,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 3325,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 104,
|
|
||||||
"channel_id": 105,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 3448,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 105,
|
|
||||||
"channel_id": 106,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 3650,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 106,
|
|
||||||
"channel_id": 107,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 3672,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 107,
|
|
||||||
"channel_id": 108,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 3684,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 109,
|
|
||||||
"channel_id": 110,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 4149,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 111,
|
|
||||||
"channel_id": 112,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 4430,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 113,
|
|
||||||
"channel_id": 114,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 4512,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 114,
|
|
||||||
"channel_id": 115,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 4879,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 115,
|
|
||||||
"channel_id": 116,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 5097,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 117,
|
|
||||||
"channel_id": 1,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 16,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 118,
|
|
||||||
"channel_id": 118,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 5777,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 122,
|
|
||||||
"channel_id": 122,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 6633,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 123,
|
|
||||||
"channel_id": 123,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 6717,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 124,
|
|
||||||
"channel_id": 124,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 7002,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 131,
|
|
||||||
"channel_id": 131,
|
|
||||||
"channelable_type": "App\\Models\\User",
|
|
||||||
"channelable_id": 7882,
|
|
||||||
"default": false,
|
|
||||||
"created_at": null,
|
|
||||||
"updated_at": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,453 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"created_at": "2022-05-25 21:22:29",
|
|
||||||
"updated_at": "2023-07-14 10:00:33",
|
|
||||||
"name": "\"Türkmenpoçta\" PAK",
|
|
||||||
"slug": "tmpost",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm/",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 7,
|
|
||||||
"created_at": "2022-06-05 19:10:28",
|
|
||||||
"updated_at": "2022-06-05 19:10:28",
|
|
||||||
"name": "Muhammed Artykov shop",
|
|
||||||
"slug": "muhammed-artykov-shop",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.turkmenpost.gov.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 28,
|
|
||||||
"created_at": "2022-07-23 13:21:05",
|
|
||||||
"updated_at": "2023-07-14 09:59:57",
|
|
||||||
"name": "Muratjan Juraýew",
|
|
||||||
"slug": "muratjan-jurayew",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.turkmenpost.gov.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 30,
|
|
||||||
"created_at": "2022-07-27 16:54:15",
|
|
||||||
"updated_at": "2023-07-14 10:00:06",
|
|
||||||
"name": "Agajan Hekimow 1",
|
|
||||||
"slug": "sohrat",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 32,
|
|
||||||
"created_at": "2022-08-18 23:57:41",
|
|
||||||
"updated_at": "2023-07-14 09:59:55",
|
|
||||||
"name": "Nurmuhammet Allanov",
|
|
||||||
"slug": "nurmuhammet-allanov",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 40,
|
|
||||||
"created_at": "2022-08-31 11:06:29",
|
|
||||||
"updated_at": "2023-07-11 19:52:18",
|
|
||||||
"name": "AT Cybersport",
|
|
||||||
"slug": "at-cybersport",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 64,
|
|
||||||
"created_at": "2022-10-07 11:06:54",
|
|
||||||
"updated_at": "2023-07-14 09:58:22",
|
|
||||||
"name": "Agajan Hekimow 8",
|
|
||||||
"slug": "juma",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 70,
|
|
||||||
"created_at": "2022-10-25 16:23:50",
|
|
||||||
"updated_at": "2023-10-11 12:52:48",
|
|
||||||
"name": "Agajan Hekimow 2",
|
|
||||||
"slug": "market",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 71,
|
|
||||||
"created_at": "2022-10-26 17:43:34",
|
|
||||||
"updated_at": "2023-08-02 13:04:19",
|
|
||||||
"name": "\"HEŞDEK\" ofis market",
|
|
||||||
"slug": "99365619032",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 75,
|
|
||||||
"created_at": "2023-02-04 11:13:53",
|
|
||||||
"updated_at": "2023-07-14 09:58:25",
|
|
||||||
"name": "Agajan Hekimow 12",
|
|
||||||
"slug": "satlyk",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 79,
|
|
||||||
"created_at": "2023-03-14 09:10:19",
|
|
||||||
"updated_at": "2023-07-14 09:58:27",
|
|
||||||
"name": "Agajan Hekimow 3",
|
|
||||||
"slug": "dowlet",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 80,
|
|
||||||
"created_at": "2023-03-14 09:15:32",
|
|
||||||
"updated_at": "2023-07-21 10:23:34",
|
|
||||||
"name": "Amatly kosmetika",
|
|
||||||
"slug": "99361946997",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "Agajan Hekimow 4",
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 81,
|
|
||||||
"created_at": "2023-03-14 09:16:40",
|
|
||||||
"updated_at": "2023-07-14 09:58:29",
|
|
||||||
"name": "Agajan Hekimow 5",
|
|
||||||
"slug": "batyr99364707773",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 82,
|
|
||||||
"created_at": "2023-03-14 09:17:24",
|
|
||||||
"updated_at": "2023-07-14 09:58:29",
|
|
||||||
"name": "Agajan Hekimow 6",
|
|
||||||
"slug": "pak",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 83,
|
|
||||||
"created_at": "2023-03-14 09:17:59",
|
|
||||||
"updated_at": "2023-07-14 09:58:31",
|
|
||||||
"name": "Agajan Hekimow 7",
|
|
||||||
"slug": "muratjan",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 84,
|
|
||||||
"created_at": "2023-03-15 09:49:14",
|
|
||||||
"updated_at": "2023-03-15 09:49:14",
|
|
||||||
"name": "Agajan Hekimow",
|
|
||||||
"slug": "agajan-hekimow",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 88,
|
|
||||||
"created_at": "2023-04-04 16:54:41",
|
|
||||||
"updated_at": "2023-04-04 16:54:41",
|
|
||||||
"name": "Atajan Atajan",
|
|
||||||
"slug": "atajan-atajan",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 89,
|
|
||||||
"created_at": "2023-04-08 09:14:30",
|
|
||||||
"updated_at": "2023-07-21 09:46:57",
|
|
||||||
"name": "Balyk tutmak we aw etmek",
|
|
||||||
"slug": "99365676855",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "Agajan Hekimow 9",
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 92,
|
|
||||||
"created_at": "2023-05-01 18:07:05",
|
|
||||||
"updated_at": "2023-07-21 09:43:32",
|
|
||||||
"name": "Mi",
|
|
||||||
"slug": "99365615764",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "Agajan Hekimow 10",
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 93,
|
|
||||||
"created_at": "2023-05-08 15:36:02",
|
|
||||||
"updated_at": "2023-07-21 10:07:24",
|
|
||||||
"name": "Akyayla",
|
|
||||||
"slug": "99365729774",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "Agajan Hekimow 11",
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 94,
|
|
||||||
"created_at": "2023-05-08 16:04:41",
|
|
||||||
"updated_at": "2023-07-14 09:58:11",
|
|
||||||
"name": "Ogulshat Berkeliyewa",
|
|
||||||
"slug": "ogulshat-berkeliyewa",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": null,
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 95,
|
|
||||||
"created_at": "2023-05-23 14:16:00",
|
|
||||||
"updated_at": "2023-05-23 14:16:10",
|
|
||||||
"name": "Yakyndar",
|
|
||||||
"slug": "yakyndar",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": null,
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 97,
|
|
||||||
"created_at": "2023-05-28 19:16:47",
|
|
||||||
"updated_at": "2023-07-14 09:58:49",
|
|
||||||
"name": "Gurdowa Gülşat",
|
|
||||||
"slug": "99363524158",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": null,
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 98,
|
|
||||||
"created_at": "2023-05-30 10:05:29",
|
|
||||||
"updated_at": "2023-06-19 17:21:13",
|
|
||||||
"name": "Bezeg market",
|
|
||||||
"slug": "99362675545",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": null,
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 99,
|
|
||||||
"created_at": "2023-06-02 14:36:02",
|
|
||||||
"updated_at": "2023-06-19 17:56:43",
|
|
||||||
"name": "Mannol-Turkmen",
|
|
||||||
"slug": "99365811591",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": null,
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 102,
|
|
||||||
"created_at": "2023-06-08 17:17:58",
|
|
||||||
"updated_at": "2023-06-19 17:58:43",
|
|
||||||
"name": "Zyýada market",
|
|
||||||
"slug": "99363085015",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": null,
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 104,
|
|
||||||
"created_at": "2023-06-14 14:21:24",
|
|
||||||
"updated_at": "2023-07-19 17:44:09",
|
|
||||||
"name": "Asia Tech",
|
|
||||||
"slug": "99362631593",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": null,
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 105,
|
|
||||||
"created_at": "2023-06-19 14:15:36",
|
|
||||||
"updated_at": "2023-06-19 17:23:47",
|
|
||||||
"name": "Tehnopark",
|
|
||||||
"slug": "99365319225",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": null,
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 106,
|
|
||||||
"created_at": "2023-07-01 20:10:15",
|
|
||||||
"updated_at": "2023-07-17 09:35:05",
|
|
||||||
"name": "Zeytun sport",
|
|
||||||
"slug": "zeytun-sport",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "99362188328",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 107,
|
|
||||||
"created_at": "2023-07-04 15:12:41",
|
|
||||||
"updated_at": "2023-08-09 17:07:43",
|
|
||||||
"name": "Durmuş",
|
|
||||||
"slug": "durmus",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "99363006990",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 108,
|
|
||||||
"created_at": "2023-07-05 14:59:29",
|
|
||||||
"updated_at": "2023-07-14 09:58:57",
|
|
||||||
"name": "Agajan Hekimow 14",
|
|
||||||
"slug": "suleyman",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "99364564934",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 110,
|
|
||||||
"created_at": "2023-07-25 15:27:09",
|
|
||||||
"updated_at": "2023-08-05 17:56:31",
|
|
||||||
"name": "Hoşal",
|
|
||||||
"slug": "hosal",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "+99361980857",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 112,
|
|
||||||
"created_at": "2023-08-01 09:05:01",
|
|
||||||
"updated_at": "2023-08-01 09:06:11",
|
|
||||||
"name": "Nusga haly",
|
|
||||||
"slug": "nusga-haly",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "+99362695306",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 114,
|
|
||||||
"created_at": "2023-08-02 17:40:47",
|
|
||||||
"updated_at": "2023-08-02 17:42:46",
|
|
||||||
"name": "Elektronika.tm",
|
|
||||||
"slug": "elektronikatm",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "+99363593666",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 115,
|
|
||||||
"created_at": "2023-08-08 10:54:39",
|
|
||||||
"updated_at": "2023-08-08 10:55:50",
|
|
||||||
"name": "Türkmenhaly",
|
|
||||||
"slug": "99364686669",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": null,
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 116,
|
|
||||||
"created_at": "2023-08-14 10:35:47",
|
|
||||||
"updated_at": "2023-08-14 17:12:27",
|
|
||||||
"name": "Kaspian",
|
|
||||||
"slug": "kaspian",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "+99365723298",
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 118,
|
|
||||||
"created_at": "2023-09-02 13:24:58",
|
|
||||||
"updated_at": "2024-02-14 18:27:03",
|
|
||||||
"name": "Smart elektronika",
|
|
||||||
"slug": "smart-elektronika",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": null,
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 122,
|
|
||||||
"created_at": "2023-10-02 18:21:20",
|
|
||||||
"updated_at": "2023-10-04 15:17:11",
|
|
||||||
"name": "Telekeçi 0050517",
|
|
||||||
"slug": "telekeci-0050517",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 123,
|
|
||||||
"created_at": "2023-10-05 16:13:19",
|
|
||||||
"updated_at": "2023-11-12 12:54:44",
|
|
||||||
"name": "Opt.tm.",
|
|
||||||
"slug": "opt-tm",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "+99361518808",
|
|
||||||
"is_default": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 124,
|
|
||||||
"created_at": "2023-10-17 22:04:23",
|
|
||||||
"updated_at": "2023-10-30 16:25:52",
|
|
||||||
"name": "Telekeçi 0043524",
|
|
||||||
"slug": "telekeci-0043524",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 131,
|
|
||||||
"created_at": "2023-11-28 16:27:01",
|
|
||||||
"updated_at": "2024-02-06 16:08:41",
|
|
||||||
"name": "Gunar Kakajanowa",
|
|
||||||
"slug": "99365961072",
|
|
||||||
"description": null,
|
|
||||||
"timezone": null,
|
|
||||||
"url": "https://shop.post.tm",
|
|
||||||
"is_default": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,770 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"created_at": "2022-06-08 18:16:01",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"T\\u00e4ze harytlar\",\"ru\":\"\\u041d\\u043e\\u0432\\u044b\\u0435 \\u043f\\u0440\\u043e\\u0434\\u0443\\u043a\\u0442\\u044b\",\"en\":\"New products\"}",
|
|
||||||
"slug": "new-products",
|
|
||||||
"description": null,
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": "all",
|
|
||||||
"published_at": "2022-06-08 18:16:01+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 7
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"created_at": "2022-06-08 18:20:28",
|
|
||||||
"updated_at": "2024-02-21 16:12:24",
|
|
||||||
"name": "{\"tk\":\"Market\",\"ru\":\"\\u041c\\u0430\\u0440\\u043a\\u0435\\u0442\",\"en\":\"Market\"}",
|
|
||||||
"slug": "market",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": "all",
|
|
||||||
"published_at": "2022-06-08 18:20:28+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": false,
|
|
||||||
"sort_order": 43
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"created_at": "2022-09-19 14:28:45",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"Arzanladylan harytlar\",\"ru\":\"\\u0422\\u043e\\u0432\\u0430\\u0440\\u044b \\u0441\\u043e \\u0441\\u043a\\u0438\\u0434\\u043a\\u043e\\u0439\",\"en\":\"Items on sale\"}",
|
|
||||||
"slug": "skidkaly-harytlar",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2022-09-19 09:24:22+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 5,
|
|
||||||
"created_at": "2022-10-14 15:46:47",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Ki\\u00e7i hojalyk tehnika\",\"ru\":\"\\u041c\\u0435\\u043b\\u043a\\u0430\\u044f \\u0431\\u044b\\u0442\\u043e\\u0432\\u0430\\u044f \\u0442\\u0435\\u0445\\u043d\\u0438\\u043a\\u0430\",\"en\":\"Small kitchen appliances\"}",
|
|
||||||
"slug": "kici-hojalyk-tehnika",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2022-10-14 10:39:35+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 20
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 6,
|
|
||||||
"created_at": "2022-10-27 09:48:48",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Balyk tutmak we aw etmek\",\"ru\":\"\\u0420\\u044b\\u0431\\u0430\\u043b\\u043a\\u0430 \\u0438 \\u043e\\u0445\\u043e\\u0442\\u0430\",\"en\":\"Fishing and hunting\"}",
|
|
||||||
"slug": "balyk-tutmak-we-aw-etmek",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2022-10-27 04:47:52+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 17
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 7,
|
|
||||||
"created_at": "2022-11-01 16:18:42",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Kansel\\u00fdar harytlary\",\"ru\":\"\\u041a\\u0430\\u043d\\u0446\\u0435\\u043b\\u044f\\u0440\\u0441\\u043a\\u0438\\u0435 \\u0442\\u043e\\u0432\\u0430\\u0440\\u044b\",\"en\":\"Stationery products\"}",
|
|
||||||
"slug": "kanselyariya-harytlary",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2022-11-01 11:17:24+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 21
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 10,
|
|
||||||
"created_at": "2022-11-17 09:14:10",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"AT Cybersport\",\"ru\":\"AT Cybersport\",\"en\":\"AT Cybersport\"}",
|
|
||||||
"slug": "at-cybersport",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2022-11-17 04:13:16+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 13,
|
|
||||||
"created_at": "2023-02-10 10:44:04",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Brend sagatlar\",\"ru\":\"\\u0424\\u0438\\u0440\\u043c\\u0435\\u043d\\u043d\\u044b\\u0435 \\u0447\\u0430\\u0441\\u044b\",\"en\":\"Brand watches\"}",
|
|
||||||
"slug": "brend-sagatlar",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-10 05:43:02+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 22
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 14,
|
|
||||||
"created_at": "2023-02-14 09:23:37",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Blenderler\",\"ru\":\"\\u0411\\u043b\\u0435\\u043d\\u0434\\u0435\\u0440\\u044b\",\"en\":\"Blenders\"}",
|
|
||||||
"slug": "blendery",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-14 04:19:54+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 23
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 15,
|
|
||||||
"created_at": "2023-02-23 09:01:07",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"\\u00dct\\u00fckler\",\"ru\":\"\\u0423\\u0442\\u044e\\u0433\\u0438\",\"en\":\"Irons\"}",
|
|
||||||
"slug": "utukler",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-23 03:58:07+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 24
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 16,
|
|
||||||
"created_at": "2023-02-23 09:03:40",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Telewizorlar\",\"ru\":\"\\u0422\\u0435\\u043b\\u0435\\u0432\\u0438\\u0437\\u043e\\u0440\\u044b\",\"en\":\"Televisions\"}",
|
|
||||||
"slug": "telewizorlar",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-23 04:02:02+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 25
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 17,
|
|
||||||
"created_at": "2023-02-23 09:06:16",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Kir \\u00fduwujy ma\\u015fynlar\",\"ru\":\"\\u0421\\u0442\\u0438\\u0440\\u0430\\u043b\\u044c\\u043d\\u044b\\u0435 \\u043c\\u0430\\u0448\\u0438\\u043d\\u044b\",\"en\":\"Washing machines\"}",
|
|
||||||
"slug": "kir-yuwujy-masynlar",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-23 04:04:44+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 26
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 18,
|
|
||||||
"created_at": "2023-02-23 09:54:15",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Tozan sorujylar\",\"ru\":\"\\u041f\\u044b\\u043b\\u0435\\u0441\\u043e\\u0441\\u044b\",\"en\":\"Vacuum cleaners\"}",
|
|
||||||
"slug": "tozan-sorujylar",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-23 04:51:35+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 27
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 19,
|
|
||||||
"created_at": "2023-02-23 10:17:16",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Suw ga\\u00fdnadyjylar\",\"ru\":\"\\u042d\\u043b\\u0435\\u043a\\u0442\\u0440\\u0438\\u0447\\u0435\\u0441\\u043a\\u0438\\u0435 \\u0447\\u0430\\u0439\\u043d\\u0438\\u043a\\u0438\",\"en\":\"Electric kettles\"}",
|
|
||||||
"slug": "suw-gaynadyjylar",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-23 05:14:31+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 18
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 20,
|
|
||||||
"created_at": "2023-02-23 10:51:20",
|
|
||||||
"updated_at": "2023-09-18 23:48:10",
|
|
||||||
"name": "{\"tk\":\"Sa\\u00e7 \\u015fekillendirijiler\",\"ru\":\"\\u041f\\u043b\\u043e\\u0439\\u043a\\u0438, \\u0441\\u0442\\u0430\\u0439\\u043b\\u0435\\u0440\\u044b, \\u0449\\u0438\\u043f\\u0446\\u044b\",\"en\":\"Curling irons, stylers, tongs\"}",
|
|
||||||
"slug": "curling-irons-stylers-tongs",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-23 05:49:27+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 28
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 21,
|
|
||||||
"created_at": "2023-02-23 10:57:47",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Elektrobritwalar\",\"ru\":\"\\u042d\\u043b\\u0435\\u043a\\u0442\\u0440\\u043e\\u0431\\u0440\\u0438\\u0442\\u0432\\u044b\",\"en\":\"Electric shavers\"}",
|
|
||||||
"slug": "electric-shavers",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-23 05:56:55+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 19
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 22,
|
|
||||||
"created_at": "2023-02-23 17:27:43",
|
|
||||||
"updated_at": "2023-09-18 23:48:10",
|
|
||||||
"name": "{\"tk\":\"Wafel, K\\u00f6ke, \\u00c7\\u00f6rek bi\\u015firijiler\",\"ru\":\"\\u0412\\u0430\\u0444\\u0435\\u043b\\u044c\\u043d\\u0438\\u0446\\u0430 \\u0438 \\u0425\\u043b\\u0435\\u0431\\u043e\\u043f\\u0435\\u0447\\u043a\\u0438\",\"en\":\"Waffle Maker & Bread Makers\"}",
|
|
||||||
"slug": "waffle-maker-bread-makers",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-23 12:14:09+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 29
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 23,
|
|
||||||
"created_at": "2023-02-23 17:51:50",
|
|
||||||
"updated_at": "2023-09-18 23:48:10",
|
|
||||||
"name": "{\"tk\":\"Tosterler\",\"ru\":\"\\u0422\\u043e\\u0441\\u0442\\u0435\\u0440\\u044b\",\"en\":\"Toasters\"}",
|
|
||||||
"slug": "toasters",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-23 12:50:58+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 30
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 24,
|
|
||||||
"created_at": "2023-02-27 15:29:38",
|
|
||||||
"updated_at": "2023-09-18 23:48:10",
|
|
||||||
"name": "{\"tk\":\"Mikrotolkunly Pe\\u00e7\",\"ru\":\"\\u041c\\u0438\\u043a\\u0440\\u043e\\u0432\\u043e\\u043b\\u043d\\u043e\\u0432\\u044b\\u0435 \\u041f\\u0435\\u0447\\u0438\",\"en\":\"Microwaves\"}",
|
|
||||||
"slug": "microwaves",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-27 10:28:57+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 31
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 25,
|
|
||||||
"created_at": "2023-02-27 16:47:46",
|
|
||||||
"updated_at": "2023-09-18 23:48:00",
|
|
||||||
"name": "{\"tk\":\"A\\u015fhana pe\\u00e7ler\",\"ru\":\"\\u0414\\u0443\\u0445\\u043e\\u0432\\u044b\\u0435 \\u0448\\u043a\\u0430\\u0444\\u044b\",\"en\":\"Ovens\"}",
|
|
||||||
"slug": "ovens",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-02-27 11:46:42+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 32
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 26,
|
|
||||||
"created_at": "2023-03-02 11:18:07",
|
|
||||||
"updated_at": "2023-09-18 23:48:00",
|
|
||||||
"name": "{\"tk\":\"Kofe Ma\\u015fyn we \\u00dcweyji\",\"ru\":\"\\u041a\\u043e\\u0444\\u0435\\u043c\\u0430\\u0448\\u0438\\u043d\\u044b \\u0438 K\\u043e\\u0444\\u0435\\u043c\\u043e\\u043b\\u043a\\u0438\",\"en\":\"Coffee machines and grinders\"}",
|
|
||||||
"slug": "coffee-machines-and-grinders",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-03-02 06:17:31+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 33
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 27,
|
|
||||||
"created_at": "2023-03-13 15:53:11",
|
|
||||||
"updated_at": "2023-09-18 23:48:00",
|
|
||||||
"name": "{\"tk\":\"A\\u015fhana enjamlary\",\"ru\":\"\\u041a\\u0443\\u0445\\u043e\\u043d\\u043d\\u0430\\u044f \\u0443\\u0442\\u0432\\u0430\\u0440\\u044c\",\"en\":\"Kitchenware\"}",
|
|
||||||
"slug": "ashana-enjamlary",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-03-13 10:52:35+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 34
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 28,
|
|
||||||
"created_at": "2023-03-14 16:07:32",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Kitaplar\",\"ru\":\"\\u041a\\u043d\\u0438\\u0433\\u0438\",\"en\":\"Books\"}",
|
|
||||||
"slug": "books",
|
|
||||||
"description": "{\"ru\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-03-14 11:06:18+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 16
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 29,
|
|
||||||
"created_at": "2023-04-05 10:21:02",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"ARDESTO\",\"ru\":\"ARDESTO\",\"en\":\"ARDESTO\"}",
|
|
||||||
"slug": "ardesto",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-04-05 05:20:31+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 14
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 30,
|
|
||||||
"created_at": "2023-04-05 16:41:15",
|
|
||||||
"updated_at": "2023-09-18 23:48:00",
|
|
||||||
"name": "{\"tk\":\"Tereziler\",\"ru\":\"\\u0412\\u0435\\u0441\\u044b\",\"en\":\"Scales\"}",
|
|
||||||
"slug": "tereziler",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-04-05 11:40:00+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 35
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 31,
|
|
||||||
"created_at": "2023-04-11 10:24:11",
|
|
||||||
"updated_at": "2023-09-18 23:48:00",
|
|
||||||
"name": "{\"tk\":\"Asia Tech\",\"ru\":\"Asia Tech\",\"en\":\"Asia Tech\"}",
|
|
||||||
"slug": "asia-tech",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-04-11 05:23:01+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 36
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 32,
|
|
||||||
"created_at": "2023-04-27 09:43:52",
|
|
||||||
"updated_at": "2023-09-18 23:48:00",
|
|
||||||
"name": "{\"tk\":\"Gurlu\\u015fyk harytlary\",\"ru\":\"\\u0421\\u0442\\u0440\\u043e\\u0438\\u0442\\u0435\\u043b\\u044c\\u043d\\u044b\\u0435 \\u043c\\u0430\\u0442\\u0435\\u0440\\u0438\\u0430\\u043b\\u044b\",\"en\":\"Construction materiales\"}",
|
|
||||||
"slug": "construction-materiales",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-04-27 04:42:43+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 37
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 33,
|
|
||||||
"created_at": "2023-05-03 15:04:12",
|
|
||||||
"updated_at": "2023-09-18 23:48:00",
|
|
||||||
"name": "{\"tk\":\"Mi\",\"ru\":\"Mi\",\"en\":\"Mi\"}",
|
|
||||||
"slug": "mi",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-05-03 10:03:15+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 38
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 34,
|
|
||||||
"created_at": "2023-05-08 17:44:44",
|
|
||||||
"updated_at": "2023-09-20 11:08:52",
|
|
||||||
"name": "{\"tk\":\"Kondisionerler\",\"ru\":\"\\u041a\\u043e\\u043d\\u0434\\u0438\\u0446\\u0438\\u043e\\u043d\\u0435\\u0440\\u044b\",\"en\":\"Air conditioners\"}",
|
|
||||||
"slug": "air-conditioners",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-05-08 12:44:03+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 15
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 35,
|
|
||||||
"created_at": "2023-05-17 17:56:43",
|
|
||||||
"updated_at": "2023-09-18 23:48:00",
|
|
||||||
"name": "{\"tk\":\"Holodilnikler\",\"ru\":\"\\u0425\\u043e\\u043b\\u043e\\u0434\\u0438\\u043b\\u044c\\u043d\\u0438\\u043a\\u0438\",\"en\":\"Fridges\"}",
|
|
||||||
"slug": "fridges",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-05-17 12:56:07+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 39
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 36,
|
|
||||||
"created_at": "2023-05-23 16:14:22",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"\\u00ddAKYNDAR\",\"ru\":\"\\u00ddAKYNDAR\",\"en\":\"\\u00ddAKYNDAR\"}",
|
|
||||||
"slug": "yakyndar",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-05-23 11:13:46+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 11
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 37,
|
|
||||||
"created_at": "2023-05-24 10:58:43",
|
|
||||||
"updated_at": "2023-09-18 23:48:00",
|
|
||||||
"name": "{\"tk\":\"Bo\\u00fdler\",\"ru\":\"\\u0411\\u043e\\u0439\\u043b\\u0435\\u0440\",\"en\":\"Boiler\"}",
|
|
||||||
"slug": "boiler",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-05-24 05:57:42+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 40
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 38,
|
|
||||||
"created_at": "2023-05-30 14:32:38",
|
|
||||||
"updated_at": "2023-09-18 23:48:00",
|
|
||||||
"name": "{\"tk\":\"Bezeg market\",\"ru\":\"\\u0411\\u0435\\u0437\\u0435\\u0433 \\u043c\\u0430\\u0440\\u043a\\u0435\\u0442\",\"en\":\"Bezeg market\"}",
|
|
||||||
"slug": "howuz",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-05-30 09:31:44+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 41
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 39,
|
|
||||||
"created_at": "2023-06-04 15:38:56",
|
|
||||||
"updated_at": "2023-09-18 23:37:03",
|
|
||||||
"name": "{\"tk\":\"Fen\",\"ru\":\"\\u0424\\u0435\\u043d\",\"en\":\"Hair dryer\"}",
|
|
||||||
"slug": "fen",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-06-04 10:37:45+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 42
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 40,
|
|
||||||
"created_at": "2023-06-07 16:57:53",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"Mannol-Turkmenistan\",\"ru\":\"Mannol-Turkmenistan\",\"en\":\"Mannol-Turkmenistan\"}",
|
|
||||||
"slug": "mannol-turkmenistan",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-06-07 11:56:47+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 12
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 41,
|
|
||||||
"created_at": "2023-06-16 16:02:07",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"Zy\\u00fdada Market\",\"ru\":\"Zy\\u00fdada Market\",\"en\":\"Zy\\u00fdada Market\"}",
|
|
||||||
"slug": "zyyada-market",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-06-16 11:01:55+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 10
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 42,
|
|
||||||
"created_at": "2023-06-20 11:34:54",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"Tehnopark\",\"ru\":\"Tehnopark\",\"en\":\"Tehnopark\"}",
|
|
||||||
"slug": "tehnopark",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-06-20 06:34:35+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 13
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 43,
|
|
||||||
"created_at": "2023-06-26 16:35:14",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"Akylly sagatlar we fitnes bilezikleri\",\"ru\":\"\\u0423\\u043c\\u043d\\u044b\\u0435 \\u0447\\u0430\\u0441\\u044b \\u0438 \\u0444\\u0438\\u0442\\u043d\\u0435\\u0441-\\u0431\\u0440\\u0430\\u0441\\u043b\\u0435\\u0442\\u044b\",\"en\":\"Smart watches and fitness bracelets\"}",
|
|
||||||
"slug": "akylly-sagatlar-we-fitnes-bilezikleri",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-06-26 11:33:29+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 9
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 44,
|
|
||||||
"created_at": "2023-06-27 20:47:04",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"Nau\\u015fnik\",\"ru\":\"\\u041d\\u0430\\u0443\\u0448\\u043d\\u0438\\u043a\\u0438\",\"en\":\"Headphones\"}",
|
|
||||||
"slug": "headphones",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-06-27 15:46:07+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 6
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 45,
|
|
||||||
"created_at": "2023-07-04 15:15:09",
|
|
||||||
"updated_at": "2023-09-18 23:37:03",
|
|
||||||
"name": "{\"tk\":\"Durmu\\u015f a\\u00fdakgap\",\"ru\":\"Durmu\\u015f a\\u00fdakgap\",\"en\":\"Durmu\\u015f a\\u00fdakgap\"}",
|
|
||||||
"slug": "durmus-ayakgap",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-07-04 10:14:36+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 44
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 46,
|
|
||||||
"created_at": "2023-07-13 10:32:48",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"Howuz\",\"ru\":\"\\u0411\\u0430\\u0441\\u0441\\u0435\\u0439\\u043d\",\"en\":\"Pool\"}",
|
|
||||||
"slug": "pool",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-07-13 05:32:13+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 8
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 47,
|
|
||||||
"created_at": "2023-07-25 10:14:45",
|
|
||||||
"updated_at": "2023-09-18 23:37:03",
|
|
||||||
"name": "{\"tk\":\"Amatly kosmetika\",\"ru\":\"Amatly kosmetika\",\"en\":\"Amatly kosmetika\"}",
|
|
||||||
"slug": "amatly-kosmetika",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-07-25 05:14:02+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 45
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 48,
|
|
||||||
"created_at": "2023-07-25 17:36:30",
|
|
||||||
"updated_at": "2023-09-18 23:37:03",
|
|
||||||
"name": "{\"tk\":\"Ho\\u015fal\",\"ru\":\"Ho\\u015fal\",\"en\":\"Ho\\u015fal\"}",
|
|
||||||
"slug": "hosal",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-07-25 12:36:07+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 46
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 49,
|
|
||||||
"created_at": "2023-08-01 09:07:30",
|
|
||||||
"updated_at": "2023-09-18 23:37:03",
|
|
||||||
"name": "{\"tk\":\"Nusga haly\",\"ru\":\"Nusga haly\",\"en\":\"Nusga haly\"}",
|
|
||||||
"slug": "nusga-haly",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-08-01 04:07:08+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 47
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 51,
|
|
||||||
"created_at": "2023-08-14 16:31:13",
|
|
||||||
"updated_at": "2023-09-18 23:37:03",
|
|
||||||
"name": "{\"tk\":\"KASPIAN\",\"ru\":\"KASPIAN\",\"en\":\"KASPIAN\"}",
|
|
||||||
"slug": "kaspian",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-08-14 11:30:54+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 48
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 52,
|
|
||||||
"created_at": "2023-09-02 13:28:40",
|
|
||||||
"updated_at": "2024-01-17 09:33:37",
|
|
||||||
"name": "{\"tk\":\"Smart Elektronika\",\"ru\":\"Smart Elektronika\",\"en\":\"Smart Elektronika\"}",
|
|
||||||
"slug": "web-ulgam-electronics",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-09-02 08:28:06+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 53,
|
|
||||||
"created_at": "2023-09-18 23:34:28",
|
|
||||||
"updated_at": "2023-09-20 11:09:07",
|
|
||||||
"name": "{\"tk\":\"Komp\\u00fduter harytlary\",\"ru\":\"\\u041a\\u043e\\u043c\\u043f\\u044c\\u044e\\u0442\\u0435\\u0440\\u043d\\u044b\\u0435 \\u0442\\u043e\\u0432\\u0430\\u0440\\u044b\",\"en\":\"Computer products\"}",
|
|
||||||
"slug": "kompyuter-harytlary",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-09-18 18:33:30+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 54,
|
|
||||||
"created_at": "2023-10-09 11:02:22",
|
|
||||||
"updated_at": "2023-10-09 11:02:22",
|
|
||||||
"name": "{\"tk\":\"Opt tm\",\"ru\":\"Opt tm\",\"en\":\"Opt tm\"}",
|
|
||||||
"slug": "opt-tm",
|
|
||||||
"description": "{\"en\":null}",
|
|
||||||
"type": "manual",
|
|
||||||
"sort": null,
|
|
||||||
"match_conditions": null,
|
|
||||||
"published_at": "2023-10-09 06:01:46+00",
|
|
||||||
"seo_title": null,
|
|
||||||
"seo_description": null,
|
|
||||||
"shown_on_homescreen": true,
|
|
||||||
"sort_order": 49
|
|
||||||
}
|
|
||||||
]
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,42 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"created_at": "2022-05-25 21:22:29",
|
|
||||||
"updated_at": "2024-02-21 15:46:46",
|
|
||||||
"name": "Türkmenpoçta",
|
|
||||||
"code": "ammar",
|
|
||||||
"description": null,
|
|
||||||
"email": "postshop2023@gmail.com",
|
|
||||||
"street_address": "ş. Aşgabat köçe Petrozowodskoý 6",
|
|
||||||
"street_address_plus": null,
|
|
||||||
"zipcode": "744000",
|
|
||||||
"city": "Aşgabat",
|
|
||||||
"phone_number": "+99365728952",
|
|
||||||
"priority": 0,
|
|
||||||
"latitude": 255.00000,
|
|
||||||
"longitude": 255.00000,
|
|
||||||
"is_default": false,
|
|
||||||
"country_id": 223,
|
|
||||||
"channel_id": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"created_at": "2024-01-30 17:29:55",
|
|
||||||
"updated_at": "2024-02-21 15:46:46",
|
|
||||||
"name": "Dükan",
|
|
||||||
"code": "Dükan",
|
|
||||||
"description": null,
|
|
||||||
"email": "postshop2023@gmail.com",
|
|
||||||
"street_address": "B.Annanow 39A",
|
|
||||||
"street_address_plus": null,
|
|
||||||
"zipcode": "744000",
|
|
||||||
"city": "Ashgabat",
|
|
||||||
"phone_number": "+99365728952",
|
|
||||||
"priority": 0,
|
|
||||||
"latitude": null,
|
|
||||||
"longitude": null,
|
|
||||||
"is_default": false,
|
|
||||||
"country_id": null,
|
|
||||||
"channel_id": 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
File diff suppressed because one or more lines are too long
300802
database/data/media.json
300802
database/data/media.json
File diff suppressed because it is too large
Load Diff
@@ -1,312 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"role_id": 1,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 1,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 1,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 59
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 1,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 60
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 1,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 388
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 1,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2154
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 1,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2158
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 1,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2356
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 1,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 7676
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 2,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 786
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 16
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 103
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 340
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 715
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 836
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 848
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1025
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1659
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1772
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1915
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1916
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1917
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1918
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1919
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1925
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 1932
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2054
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2086
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2260
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2355
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2710
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2924
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 2962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 3021
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 3158
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 3325
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 3448
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 3650
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 3672
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 3684
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 4149
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 4223
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 4430
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 4512
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 4879
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 5097
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 5298
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 5777
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 5945
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 6103
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 6170
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 6633
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 6717
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 7002
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 7300
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 7514
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 7539
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 7609
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 7835
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 7882
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 6,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 8742
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role_id": 8,
|
|
||||||
"model_type": "App\\Models\\User",
|
|
||||||
"model_id": 5867
|
|
||||||
}
|
|
||||||
]
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
338626
database/data/products.json
338626
database/data/products.json
File diff suppressed because one or more lines are too long
@@ -1,128 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 18,
|
|
||||||
"created_at": "2022-10-12 09:09:10",
|
|
||||||
"updated_at": "2022-10-14 19:36:09",
|
|
||||||
"is_recommended": false,
|
|
||||||
"rating": 5,
|
|
||||||
"title": "gaty gowy maslahat beryäs",
|
|
||||||
"content": null,
|
|
||||||
"approved": true,
|
|
||||||
"reviewrateable_type": "product",
|
|
||||||
"reviewrateable_id": 525,
|
|
||||||
"author_type": "App\\Models\\User",
|
|
||||||
"author_id": 750
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 19,
|
|
||||||
"created_at": "2023-06-06 12:29:41",
|
|
||||||
"updated_at": "2023-10-10 09:04:49",
|
|
||||||
"is_recommended": false,
|
|
||||||
"rating": 5,
|
|
||||||
"title": "gaty gowy haryt maslahat beryan",
|
|
||||||
"content": null,
|
|
||||||
"approved": true,
|
|
||||||
"reviewrateable_type": "product",
|
|
||||||
"reviewrateable_id": 5018,
|
|
||||||
"author_type": "App\\Models\\User",
|
|
||||||
"author_id": 2235
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 20,
|
|
||||||
"created_at": "2023-09-06 19:39:32",
|
|
||||||
"updated_at": "2023-10-10 09:04:44",
|
|
||||||
"is_recommended": false,
|
|
||||||
"rating": 5,
|
|
||||||
"title": "Gaty gowy masaž edýär. Haryt bahasy arzan",
|
|
||||||
"content": null,
|
|
||||||
"approved": true,
|
|
||||||
"reviewrateable_type": "product",
|
|
||||||
"reviewrateable_id": 9954,
|
|
||||||
"author_type": "App\\Models\\User",
|
|
||||||
"author_id": 340
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 21,
|
|
||||||
"created_at": "2023-09-16 17:12:29",
|
|
||||||
"updated_at": null,
|
|
||||||
"is_recommended": false,
|
|
||||||
"rating": 5,
|
|
||||||
"title": "1234567890111213",
|
|
||||||
"content": null,
|
|
||||||
"approved": false,
|
|
||||||
"reviewrateable_type": "product",
|
|
||||||
"reviewrateable_id": 9677,
|
|
||||||
"author_type": "App\\Models\\User",
|
|
||||||
"author_id": 6104
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 22,
|
|
||||||
"created_at": "2023-09-19 10:30:06",
|
|
||||||
"updated_at": "2023-10-10 09:04:38",
|
|
||||||
"is_recommended": false,
|
|
||||||
"rating": 5,
|
|
||||||
"title": "хорошо и хорошо",
|
|
||||||
"content": null,
|
|
||||||
"approved": true,
|
|
||||||
"reviewrateable_type": "product",
|
|
||||||
"reviewrateable_id": 5216,
|
|
||||||
"author_type": "App\\Models\\User",
|
|
||||||
"author_id": 6232
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 23,
|
|
||||||
"created_at": "2023-10-02 18:46:30",
|
|
||||||
"updated_at": "2023-10-10 09:04:31",
|
|
||||||
"is_recommended": false,
|
|
||||||
"rating": 4,
|
|
||||||
"title": "5 берекелла с плюсом",
|
|
||||||
"content": null,
|
|
||||||
"approved": true,
|
|
||||||
"reviewrateable_type": "product",
|
|
||||||
"reviewrateable_id": 8670,
|
|
||||||
"author_type": "App\\Models\\User",
|
|
||||||
"author_id": 6636
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 24,
|
|
||||||
"created_at": "2023-11-03 10:58:38",
|
|
||||||
"updated_at": "2023-11-10 17:52:13",
|
|
||||||
"is_recommended": false,
|
|
||||||
"rating": 5,
|
|
||||||
"title": "Gaty gowy haryt maşynly adamlara maslahat berýän",
|
|
||||||
"content": null,
|
|
||||||
"approved": true,
|
|
||||||
"reviewrateable_type": "product",
|
|
||||||
"reviewrateable_id": 10077,
|
|
||||||
"author_type": "App\\Models\\User",
|
|
||||||
"author_id": 836
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 25,
|
|
||||||
"created_at": "2023-11-20 12:46:20",
|
|
||||||
"updated_at": "2023-11-20 17:22:08",
|
|
||||||
"is_recommended": false,
|
|
||||||
"rating": 5,
|
|
||||||
"title": "test",
|
|
||||||
"content": null,
|
|
||||||
"approved": false,
|
|
||||||
"reviewrateable_type": "product",
|
|
||||||
"reviewrateable_id": 10077,
|
|
||||||
"author_type": "App\\Models\\User",
|
|
||||||
"author_id": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 26,
|
|
||||||
"created_at": "2023-11-20 12:47:32",
|
|
||||||
"updated_at": "2023-11-20 17:22:07",
|
|
||||||
"is_recommended": false,
|
|
||||||
"rating": 2,
|
|
||||||
"title": "hehhshhshhshhdhhd",
|
|
||||||
"content": null,
|
|
||||||
"approved": false,
|
|
||||||
"reviewrateable_type": "product",
|
|
||||||
"reviewrateable_id": 10077,
|
|
||||||
"author_type": "App\\Models\\User",
|
|
||||||
"author_id": 5288
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"name": "admin",
|
|
||||||
"guard_name": "web",
|
|
||||||
"display_name": "Administrator",
|
|
||||||
"description": "Site administrator with access to shop admin panel and developer tools.",
|
|
||||||
"can_be_removed": false,
|
|
||||||
"created_at": "2022-05-25 21:22:28",
|
|
||||||
"updated_at": "2022-12-19 02:50:18"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"name": "manager",
|
|
||||||
"guard_name": "web",
|
|
||||||
"display_name": "Manager",
|
|
||||||
"description": "Site manager with access to shop admin panel and publishing menus.",
|
|
||||||
"can_be_removed": false,
|
|
||||||
"created_at": "2022-05-25 21:22:28",
|
|
||||||
"updated_at": "2022-05-25 21:22:28"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"name": "user",
|
|
||||||
"guard_name": "web",
|
|
||||||
"display_name": "User",
|
|
||||||
"description": "Site customer role with access on front site.",
|
|
||||||
"can_be_removed": false,
|
|
||||||
"created_at": "2022-05-25 21:22:28",
|
|
||||||
"updated_at": "2022-05-25 21:22:28"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 6,
|
|
||||||
"name": "vendor",
|
|
||||||
"guard_name": "web",
|
|
||||||
"display_name": "Telekeci",
|
|
||||||
"description": "",
|
|
||||||
"can_be_removed": false,
|
|
||||||
"created_at": "2022-06-19 16:26:54",
|
|
||||||
"updated_at": "2022-07-22 15:46:32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 8,
|
|
||||||
"name": "viewer",
|
|
||||||
"guard_name": "web",
|
|
||||||
"display_name": "Gözegçi",
|
|
||||||
"description": null,
|
|
||||||
"can_be_removed": false,
|
|
||||||
"created_at": "2023-09-07 12:38:53",
|
|
||||||
"updated_at": "2023-09-07 12:38:53"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
243632
database/data/users.json
243632
database/data/users.json
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user