fix: refactor code to group into folder

This commit is contained in:
kusowl 2026-03-25 17:13:50 +05:30
parent ca0aaaa84b
commit 5d6f75bdc2
74 changed files with 266 additions and 264 deletions

View File

@ -46,7 +46,7 @@ class IdeHelperAddress {}
/** /**
* @property int $id * @property int $id
* @property int $user_id * @property int $user_id
* @property \App\Enums\CartStatus $status * @property \App\Enums\Cart\CartStatus $status
* @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at * @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\Models\Order|null $order * @property-read \App\Models\Order|null $order
@ -87,6 +87,7 @@ class IdeHelperCart {}
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Payment> $payments * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Payment> $payments
* @property-read int|null $payments_count * @property-read int|null $payments_count
* @property-read \App\Models\StripeSession|null $stripeSession * @property-read \App\Models\StripeSession|null $stripeSession
* @property-read mixed $total_amount
* @property-read \App\Models\User $user * @property-read \App\Models\User $user
* @method static \Illuminate\Database\Eloquent\Builder<static>|Order newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder<static>|Order newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|Order newQuery() * @method static \Illuminate\Database\Eloquent\Builder<static>|Order newQuery()
@ -272,7 +273,7 @@ class IdeHelperStripeSession {}
* @property \Illuminate\Support\Carbon|null $updated_at * @property \Illuminate\Support\Carbon|null $updated_at
* @property string $mobile_number * @property string $mobile_number
* @property string $city * @property string $city
* @property \App\Enums\UserRoles $role * @property \App\Enums\User\UserRoles $role
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Address> $addresses * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Address> $addresses
* @property-read int|null $addresses_count * @property-read int|null $addresses_count
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Cart> $carts * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Cart> $carts

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Address;
use App\Models\Address; use App\Models\Address;

View File

@ -1,9 +1,9 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Address;
use App\Data\AddUserAddressRequestDTO; use App\Data\Address\AddUserAddressRequestDTO;
use App\Data\UserAddressResponseDTO; use App\Data\Address\UserAddressResponseDTO;
use App\Models\User; use App\Models\User;
final readonly class SaveUserAddressAction final readonly class SaveUserAddressAction

View File

@ -1,9 +1,9 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Address;
use App\Data\UpdateUserAddressRequestDTO; use App\Data\Address\UpdateUserAddressRequestDTO;
use App\Data\UserAddressResponseDTO; use App\Data\Address\UserAddressResponseDTO;
use App\Models\Address; use App\Models\Address;
final readonly class UpdateUserAddressAction final readonly class UpdateUserAddressAction

View File

@ -1,10 +1,10 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Cart;
use App\Data\AddToCartDTO; use App\Data\Cart\AddToCartDTO;
use App\Data\CartDTO; use App\Data\Cart\CartDTO;
use App\Enums\CartStatus; use App\Enums\Cart\CartStatus;
use App\Models\Product; use App\Models\Product;
use App\Models\User; use App\Models\User;

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Cart;
use App\Data\CartDTO; use App\Data\Cart\CartDTO;
use App\Models\User; use App\Models\User;
final readonly class GetActiveUserCartAction final readonly class GetActiveUserCartAction

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Cart;
use App\Enums\CartStatus; use App\Enums\Cart\CartStatus;
use App\Models\Cart; use App\Models\Cart;
final readonly class MarkCartAsConvertedAction final readonly class MarkCartAsConvertedAction

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Cart;
use App\Models\User; use App\Models\User;

View File

@ -1,9 +1,9 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Cart;
use App\Data\AddToCartDTO; use App\Data\Cart\AddToCartDTO;
use App\Data\CartDTO; use App\Data\Cart\CartDTO;
use App\Models\User; use App\Models\User;
use InvalidArgumentException; use InvalidArgumentException;

View File

@ -1,9 +1,9 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Order;
use App\Data\OrderRequestDTO; use App\Data\Order\OrderRequestDTO;
use App\Enums\CartStatus; use App\Enums\Cart\CartStatus;
use App\Exceptions\StaleCartException; use App\Exceptions\StaleCartException;
use App\Models\Address; use App\Models\Address;
use App\Models\Cart; use App\Models\Cart;

View File

@ -1,8 +1,9 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Payment;
use App\Enums\PaymentStatusEnum; use App\Actions\Cart\MarkCartAsConvertedAction;
use App\Enums\Payment\PaymentStatusEnum;
use App\Models\Payment; use App\Models\Payment;
use App\Models\PaymentStatus; use App\Models\PaymentStatus;
use DB; use DB;

View File

@ -1,10 +1,10 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Payment;
use App\Data\PaymentResponseDTO; use App\Data\Payment\PaymentResponseDTO;
use App\Enums\PaymentModes; use App\Enums\Payment\PaymentModes;
use App\Enums\PaymentStatusEnum; use App\Enums\Payment\PaymentStatusEnum;
use App\Models\Order; use App\Models\Order;
use App\Models\PaymentStatus; use App\Models\PaymentStatus;
use App\Services\Payment\PaymentGatewayFactory; use App\Services\Payment\PaymentGatewayFactory;

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Product;
use App\Data\UploadImageDTO; use App\Data\Upload\UploadImageDTO;
final readonly class CreateProductAction final readonly class CreateProductAction
{ {

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Product;
use App\Data\ProductCategoryDTO; use App\Data\Product\ProductCategoryDTO;
use App\Models\ProductCategory; use App\Models\ProductCategory;
final readonly class GetAllProductCategory final readonly class GetAllProductCategory

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Stripe;
use App\Data\VerifiedCheckoutResponseDTO; use App\Data\Payment\VerifiedCheckoutResponseDTO;
use App\Models\User; use App\Models\User;
use Exception; use Exception;
use Log; use Log;

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Actions; namespace App\Actions\Upload;
use App\Data\UploadImageDTO; use App\Data\Upload\UploadImageDTO;
final readonly class UploadImageAction final readonly class UploadImageAction
{ {

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Actions; namespace App\Actions\User;
use App\Data\RegisterDTO; use App\Data\User\RegisterDTO;
use App\Models\User; use App\Models\User;
final readonly class CreateUserAction final readonly class CreateUserAction

View File

@ -2,7 +2,7 @@
namespace App\Contracts; namespace App\Contracts;
use App\Data\PaymentResponseDTO; use App\Data\Payment\PaymentResponseDTO;
use App\Models\Order; use App\Models\Order;
interface PaymentGateway interface PaymentGateway

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Address;
use App\Contracts\InputDataTransferObject; use App\Contracts\InputDataTransferObject;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
@ -16,6 +16,18 @@ public function __construct(
public string $pinCode public string $pinCode
) {} ) {}
public static function fromRequest(FormRequest $request): InputDataTransferObject
{
return new self(
firstName: $request->firstName,
lastName: $request->lastName,
street: $request->street,
city: $request->city,
state: $request->state,
pinCode: $request->pinCode
);
}
/** /**
* @return array<string, mixed> * @return array<string, mixed>
*/ */
@ -30,16 +42,4 @@ public function toArray(): array
'pin' => $this->pinCode, 'pin' => $this->pinCode,
]; ];
} }
public static function fromRequest(FormRequest $request): InputDataTransferObject
{
return new self(
firstName: $request->firstName,
lastName: $request->lastName,
street: $request->street,
city: $request->city,
state: $request->state,
pinCode: $request->pinCode
);
}
} }

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Address;
use App\Contracts\InputDataTransferObject; use App\Contracts\InputDataTransferObject;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
@ -16,6 +16,18 @@ public function __construct(
public ?string $pinCode = null, public ?string $pinCode = null,
) {} ) {}
public static function fromRequest(FormRequest $request): InputDataTransferObject
{
return new self(
firstName: $request->input('firstName'),
lastName: $request->input('lastName'),
street: $request->input('street'),
city: $request->input('city'),
state: $request->input('state'),
pinCode: $request->input('pinCode'),
);
}
/** /**
* @return array<string = null = null, mixed> * @return array<string = null = null, mixed>
*/ */
@ -32,16 +44,4 @@ public function toArray(): array
return array_filter($data, fn ($value) => $value !== null); return array_filter($data, fn ($value) => $value !== null);
} }
public static function fromRequest(FormRequest $request): InputDataTransferObject
{
return new self(
firstName: $request->input('firstName'),
lastName: $request->input('lastName'),
street: $request->input('street'),
city: $request->input('city'),
state: $request->input('state'),
pinCode: $request->input('pinCode'),
);
}
} }

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Address;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;
use App\Models\Address; use App\Models\Address;
@ -17,6 +17,19 @@ public function __construct(
public string $pinCode public string $pinCode
) {} ) {}
public static function fromModel(Address $address): OutputDataTransferObject
{
return new self(
id: $address->id,
firstName: $address->first_name,
lastName: $address->last_name,
street: $address->street,
city: $address->city,
state: $address->state,
pinCode: $address->pin
);
}
/** /**
* @return array<string, mixed> * @return array<string, mixed>
*/ */
@ -32,17 +45,4 @@ public function toArray(): array
'pinCode' => $this->pinCode, 'pinCode' => $this->pinCode,
]; ];
} }
public static function fromModel(Address $address): OutputDataTransferObject
{
return new self(
id: $address->id,
firstName: $address->first_name,
lastName: $address->last_name,
street: $address->street,
city: $address->city,
state: $address->state,
pinCode: $address->pin
);
}
} }

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Cart;
use App\Contracts\InputDataTransferObject; use App\Contracts\InputDataTransferObject;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
@ -12,6 +12,14 @@ public function __construct(
public int $quantity public int $quantity
) {} ) {}
public static function fromRequest(FormRequest $request): InputDataTransferObject
{
return new self(
productId: $request->productId,
quantity: $request->quantity
);
}
/** /**
* @return array<string, mixed> * @return array<string, mixed>
*/ */
@ -22,12 +30,4 @@ public function toArray(): array
'quantity' => $this->quantity, 'quantity' => $this->quantity,
]; ];
} }
public static function fromRequest(FormRequest $request): InputDataTransferObject
{
return new self(
productId: $request->productId,
quantity: $request->quantity
);
}
} }

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Cart;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;
use App\Models\Cart; use App\Models\Cart;
@ -17,19 +17,6 @@ public function __construct(
public array $items = [] public array $items = []
) {} ) {}
/**
* @return array<string, mixed>
*/
public function toArray(): array
{
return [
'id' => $this->id,
'itemsCount' => $this->itemsCount,
'totalPrice' => $this->totalPrice,
'items' => $this->items,
];
}
public static function fromModel(Cart $cart) public static function fromModel(Cart $cart)
{ {
return new self( return new self(
@ -46,4 +33,17 @@ public static function fromModel(Cart $cart)
))->toArray() ))->toArray()
); );
} }
/**
* @return array<string, mixed>
*/
public function toArray(): array
{
return [
'id' => $this->id,
'itemsCount' => $this->itemsCount,
'totalPrice' => $this->totalPrice,
'items' => $this->items,
];
}
} }

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Cart;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Order;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
@ -11,6 +11,12 @@ public function __construct(
// TODO: Define your properties here // TODO: Define your properties here
) {} ) {}
public static function fromModel(Model $model): OutputDataTransferObject
{
return new self;
// TODO: Map model data to properties
}
/** /**
* @return array<string, mixed> * @return array<string, mixed>
*/ */
@ -20,10 +26,4 @@ public function toArray(): array
// TODO: Map properties to array // TODO: Map properties to array
]; ];
} }
public static function fromModel(Model $model): OutputDataTransferObject
{
return new self;
// TODO: Map model data to properties
}
} }

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Order;
use App\Contracts\InputDataTransferObject; use App\Contracts\InputDataTransferObject;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
@ -12,6 +12,14 @@ public function __construct(
public string $addressId, public string $addressId,
) {} ) {}
public static function fromRequest(FormRequest $request): OrderRequestDTO
{
return new self(
cartId: $request->cartId,
addressId: $request->addressId,
);
}
/** /**
* @return array<string, mixed> * @return array<string, mixed>
*/ */
@ -22,12 +30,4 @@ public function toArray(): array
'address_id' => $this->addressId, 'address_id' => $this->addressId,
]; ];
} }
public static function fromRequest(FormRequest $request): OrderRequestDTO
{
return new self(
cartId: $request->cartId,
addressId: $request->addressId,
);
}
} }

View File

@ -1,9 +1,9 @@
<?php <?php
namespace App\Data; namespace App\Data\Payment;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;
use App\Enums\PaymentModes; use App\Enums\Payment\PaymentModes;
final readonly class PaymentResponseDTO implements OutputDataTransferObject final readonly class PaymentResponseDTO implements OutputDataTransferObject
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Payment;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Product;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;
use App\Models\ProductCategory; use App\Models\ProductCategory;
@ -13,6 +13,15 @@ public function __construct(
public string $slug, public string $slug,
) {} ) {}
public static function fromModel(ProductCategory $category): self
{
return new self(
id: $category->id,
name: $category->name,
slug: $category->slug,
);
}
/** /**
* @return array<string, mixed> * @return array<string, mixed>
*/ */
@ -24,13 +33,4 @@ public function toArray(): array
'slug' => $this->slug, 'slug' => $this->slug,
]; ];
} }
public static function fromModel(ProductCategory $category): self
{
return new self(
id: $category->id,
name: $category->name,
slug: $category->slug,
);
}
} }

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Product;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;
use App\Models\Product; use App\Models\Product;
@ -25,6 +25,24 @@ public function __construct(
public ?bool $isFavorite = null public ?bool $isFavorite = null
) {} ) {}
public static function fromModel(Product $product): self
{
return new self(
id: $product->id,
title: $product->title,
slug: $product->slug,
description: $product->description,
actualPrice: $product->actual_price,
listPrice: $product->list_price,
category: ProductCategoryDTO::fromModel($product->category),
productImages: $product->images->map(fn (ProductImage $productImage) => ProductImageDTO::fromModel($productImage))->all(),
updatedAt: $product->updated_at,
createdAt: $product->created_at,
// this column is added by where exists query
isFavorite: $product->favorited_by_exists,
);
}
/** /**
* @return array<string, mixed> * @return array<string, mixed>
*/ */
@ -45,22 +63,4 @@ public function toArray(): array
'isFavorite' => $this->isFavorite, 'isFavorite' => $this->isFavorite,
]; ];
} }
public static function fromModel(Product $product): self
{
return new self(
id: $product->id,
title: $product->title,
slug: $product->slug,
description: $product->description,
actualPrice: $product->actual_price,
listPrice: $product->list_price,
category: ProductCategoryDTO::fromModel($product->category),
productImages: $product->images->map(fn (ProductImage $productImage) => ProductImageDTO::fromModel($productImage))->all(),
updatedAt: $product->updated_at,
createdAt: $product->created_at,
// this column is added by where exists query
isFavorite: $product->favorited_by_exists,
);
}
} }

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Product;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;
use App\Models\ProductImage; use App\Models\ProductImage;
@ -13,6 +13,15 @@ public function __construct(
public ?int $productId = null, public ?int $productId = null,
) {} ) {}
public static function fromModel(ProductImage $productImage): self
{
return new self(
$productImage->id,
$productImage->path,
$productImage->product_id
);
}
/** /**
* @return array<string, mixed> * @return array<string, mixed>
*/ */
@ -24,13 +33,4 @@ public function toArray(): array
'productId' => $this->productId, 'productId' => $this->productId,
]; ];
} }
public static function fromModel(ProductImage $productImage): self
{
return new self(
$productImage->id,
$productImage->path,
$productImage->product_id
);
}
} }

View File

@ -1,9 +1,9 @@
<?php <?php
namespace App\Data; namespace App\Data\Stripe;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;
use App\Enums\StripeCurrency; use App\Enums\Stripe\StripeCurrency;
final readonly class StripeLineItemDTO implements OutputDataTransferObject final readonly class StripeLineItemDTO implements OutputDataTransferObject
{ {

View File

@ -1,9 +1,9 @@
<?php <?php
namespace App\Data; namespace App\Data\Stripe;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;
use App\Enums\StripePaymentMode; use App\Enums\Stripe\StripePaymentMode;
final readonly class StripeSessionDataDTO implements OutputDataTransferObject final readonly class StripeSessionDataDTO implements OutputDataTransferObject
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\Upload;
use App\Models\Product; use App\Models\Product;
use Illuminate\Http\UploadedFile; use Illuminate\Http\UploadedFile;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\User;
use App\Contracts\InputDataTransferObject; use App\Contracts\InputDataTransferObject;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Data; namespace App\Data\User;
use App\Contracts\OutputDataTransferObject; use App\Contracts\OutputDataTransferObject;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Enums; namespace App\Enums\Cart;
enum CartStatus: string enum CartStatus: string
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Enums; namespace App\Enums\Order;
/** /**
* Open -> The order was placed or created. There is work to do for the order, which can include processing payment, fulfilling, or processing returns. * Open -> The order was placed or created. There is work to do for the order, which can include processing payment, fulfilling, or processing returns.

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Enums; namespace App\Enums\Payment;
enum PaymentModes: string enum PaymentModes: string
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Enums; namespace App\Enums\Payment;
enum PaymentStatusEnum: string enum PaymentStatusEnum: string
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Enums; namespace App\Enums\Stripe;
enum StripeCurrency: string enum StripeCurrency: string
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Enums; namespace App\Enums\Stripe;
enum StripeEventType: string enum StripeEventType: string
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Enums; namespace App\Enums\Stripe;
enum StripePaymentMode: string enum StripePaymentMode: string
{ {

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Enums; namespace App\Enums\User;
enum UserRoles: string enum UserRoles: string
{ {

View File

@ -2,7 +2,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Data\UserDTO; use App\Data\User\UserDTO;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;

View File

@ -2,15 +2,15 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Actions\AddProductToCartAction; use App\Actions\Cart\AddProductToCartAction;
use App\Actions\GetActiveUserCartAction; use App\Actions\Cart\GetActiveUserCartAction;
use App\Actions\RemoveProductFromCartAction; use App\Actions\Cart\RemoveProductFromCartAction;
use App\Actions\UpdateProductInCartAction; use App\Actions\Cart\UpdateProductInCartAction;
use App\Data\AddToCartDTO; use App\Data\Cart\AddToCartDTO;
use App\Http\Requests\AddProductToCartRequest; use App\Http\Requests\AddProductToCartRequest;
use App\Http\Requests\RemoveProductFromCartRequest; use App\Http\Requests\RemoveProductFromCartRequest;
use App\Http\Requests\UpdateProductInCartRequest; use App\Http\Requests\UpdateProductInCartRequest;
use App\Http\Resources\CartResource; use App\Http\Resources\Cart\CartResource;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
class CartController extends Controller class CartController extends Controller

View File

@ -2,7 +2,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Http\Resources\FavouriteProductResource; use App\Http\Resources\Product\FavouriteProductResource;
use App\Models\FavouriteProduct; use App\Models\FavouriteProduct;
use App\Models\Product; use App\Models\Product;
use App\Models\User; use App\Models\User;

View File

@ -2,8 +2,8 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Actions\CreateOrderAction; use App\Actions\Order\CreateOrderAction;
use App\Data\OrderRequestDTO; use App\Data\Order\OrderRequestDTO;
use App\Exceptions\StaleCartException; use App\Exceptions\StaleCartException;
use App\Http\Requests\StoreOrderRequest; use App\Http\Requests\StoreOrderRequest;
use App\Http\Requests\UpdateOrderRequest; use App\Http\Requests\UpdateOrderRequest;

View File

@ -2,12 +2,12 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Actions\ProcessOrderPaymentAction; use App\Actions\Payment\ProcessOrderPaymentAction;
use App\Actions\VerifyStripeSessionAction; use App\Actions\Stripe\VerifyStripeSessionAction;
use App\Enums\PaymentModes; use App\Enums\Payment\PaymentModes;
use App\Http\Requests\PaymentRequest; use App\Http\Requests\PaymentRequest;
use App\Http\Requests\VerifyPaymentRequest; use App\Http\Requests\VerifyPaymentRequest;
use App\Http\Resources\PaymentResource; use App\Http\Resources\Payment\PaymentResource;
use App\Models\Order; use App\Models\Order;
use App\Models\Payment; use App\Models\Payment;

View File

@ -2,7 +2,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Actions\GetAllProductCategory; use App\Actions\Product\GetAllProductCategory;
class ProductCategoryController extends Controller class ProductCategoryController extends Controller
{ {

View File

@ -2,9 +2,9 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Data\ProductDTO; use App\Data\Product\ProductDTO;
use App\Http\Requests\CreateProductRequest; use App\Http\Requests\CreateProductRequest;
use App\Http\Resources\ProductResource; use App\Http\Resources\Product\ProductResource;
use App\Models\Product; use App\Models\Product;
use App\Queries\GetProductsQuery; use App\Queries\GetProductsQuery;
use Illuminate\Http\Request; use Illuminate\Http\Request;

View File

@ -2,8 +2,8 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Actions\UploadImageAction; use App\Actions\Upload\UploadImageAction;
use App\Data\UploadImageDTO; use App\Data\Upload\UploadImageDTO;
use App\Http\Requests\UploadImageRequest; use App\Http\Requests\UploadImageRequest;
use App\Models\ProductImages; use App\Models\ProductImages;

View File

@ -2,8 +2,8 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Actions\CreateUserAction; use App\Actions\User\CreateUserAction;
use App\Data\RegisterDTO; use App\Data\User\RegisterDTO;
use App\Http\Requests\RegisterUserRequest; use App\Http\Requests\RegisterUserRequest;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;

View File

@ -2,8 +2,8 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Actions\MarkPaymentAsPaidAction; use App\Actions\Payment\MarkPaymentAsPaidAction;
use App\Enums\StripeEventType; use App\Enums\Stripe\StripeEventType;
use App\Models\Payment; use App\Models\Payment;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Log; use Log;

View File

@ -2,15 +2,15 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Actions\DeleteUserAddressAction; use App\Actions\Address\DeleteUserAddressAction;
use App\Actions\SaveUserAddressAction; use App\Actions\Address\SaveUserAddressAction;
use App\Actions\UpdateUserAddressAction; use App\Actions\Address\UpdateUserAddressAction;
use App\Data\AddUserAddressRequestDTO; use App\Data\Address\AddUserAddressRequestDTO;
use App\Data\UpdateUserAddressRequestDTO; use App\Data\Address\UpdateUserAddressRequestDTO;
use App\Data\UserAddressResponseDTO; use App\Data\Address\UserAddressResponseDTO;
use App\Http\Requests\AddUserAddressRequest; use App\Http\Requests\AddUserAddressRequest;
use App\Http\Requests\UpdateUserAddressRequest; use App\Http\Requests\UpdateUserAddressRequest;
use App\Http\Resources\AddressResource; use App\Http\Resources\Address\AddressResource;
use App\Models\Address; use App\Models\Address;
use Illuminate\Http\Request; use Illuminate\Http\Request;

View File

@ -2,7 +2,7 @@
namespace App\Http\Requests; namespace App\Http\Requests;
use App\Enums\PaymentModes; use App\Enums\Payment\PaymentModes;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Resources; namespace App\Http\Resources\Address;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection; use Illuminate\Http\Resources\Json\ResourceCollection;

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Http\Resources; namespace App\Http\Resources\Address;
use App\Data\UserAddressResponseDTO; use App\Data\Address\UserAddressResponseDTO;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\Json\JsonResource;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Resources; namespace App\Http\Resources\Cart;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection; use Illuminate\Http\Resources\Json\ResourceCollection;

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Http\Resources; namespace App\Http\Resources\Cart;
use App\Data\CartItemDTO; use App\Data\Cart\CartItemDTO;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Http\Resources; namespace App\Http\Resources\Cart;
use App\Data\CartDTO; use App\Data\Cart\CartDTO;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\Json\JsonResource;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Resources; namespace App\Http\Resources\Order;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\Json\JsonResource;

View File

@ -1,8 +1,8 @@
<?php <?php
namespace App\Http\Resources; namespace App\Http\Resources\Payment;
use App\Data\PaymentResponseDTO; use App\Data\Payment\PaymentResponseDTO;
use App\Models\Payment; use App\Models\Payment;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\Json\JsonResource;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Resources; namespace App\Http\Resources\Product;
use App\Models\FavouriteProduct; use App\Models\FavouriteProduct;
use Illuminate\Http\Request; use Illuminate\Http\Request;

View File

@ -1,6 +1,6 @@
<?php <?php
namespace App\Http\Resources; namespace App\Http\Resources\Product;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection; use Illuminate\Http\Resources\Json\ResourceCollection;

View File

@ -1,9 +1,9 @@
<?php <?php
namespace App\Http\Resources; namespace App\Http\Resources\Product;
use App\Data\ProductDTO; use App\Data\Product\ProductDTO;
use App\Data\ProductImageDTO; use App\Data\Product\ProductImageDTO;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;

View File

@ -2,7 +2,7 @@
namespace App\Models; namespace App\Models;
use App\Enums\CartStatus; use App\Enums\Cart\CartStatus;
use Illuminate\Database\Eloquent\Attributes\Scope; use Illuminate\Database\Eloquent\Attributes\Scope;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
@ -16,16 +16,6 @@ class Cart extends Model
{ {
protected $fillable = ['user_id', 'status']; protected $fillable = ['user_id', 'status'];
/**
* @return array<string, string>
*/
protected function casts(): array
{
return [
'status' => CartStatus::class,
];
}
public function products(): BelongsToMany public function products(): BelongsToMany
{ {
return $this->belongsToMany(Product::class) return $this->belongsToMany(Product::class)
@ -43,6 +33,16 @@ public function order(): BelongsTo
return $this->belongsTo(Order::class); return $this->belongsTo(Order::class);
} }
/**
* @return array<string, string>
*/
protected function casts(): array
{
return [
'status' => CartStatus::class,
];
}
#[Scope] #[Scope]
protected function active(Builder $query) protected function active(Builder $query)
{ {

View File

@ -3,7 +3,7 @@
namespace App\Models; namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail; // use Illuminate\Contracts\Auth\MustVerifyEmail;
use App\Enums\UserRoles; use App\Enums\User\UserRoles;
use Database\Factories\UserFactory; use Database\Factories\UserFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany;
@ -45,18 +45,9 @@ class User extends Authenticatable
'remember_token', 'remember_token',
]; ];
/** public function hasFavorited(Product $product): bool
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{ {
return [ return $this->favoriteProducts()->where('product_id', $product->id)->exists();
'email_verified_at' => 'datetime',
'password' => 'hashed',
'role' => UserRoles::class,
];
} }
public function favoriteProducts(): BelongsToMany public function favoriteProducts(): BelongsToMany
@ -64,11 +55,6 @@ public function favoriteProducts(): BelongsToMany
return $this->belongsToMany(Product::class, 'favorite_products', 'user_id', 'product_id'); return $this->belongsToMany(Product::class, 'favorite_products', 'user_id', 'product_id');
} }
public function hasFavorited(Product $product): bool
{
return $this->favoriteProducts()->where('product_id', $product->id)->exists();
}
/** /**
* @return HasMany<Cart> * @return HasMany<Cart>
*/ */
@ -92,4 +78,18 @@ public function orders(): HasMany
{ {
return $this->hasMany(Order::class); return $this->hasMany(Order::class);
} }
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'role' => UserRoles::class,
];
}
} }

View File

@ -2,7 +2,7 @@
namespace App\Services\Payment; namespace App\Services\Payment;
use App\Enums\PaymentModes; use App\Enums\Payment\PaymentModes;
class PaymentGatewayFactory class PaymentGatewayFactory
{ {

View File

@ -3,12 +3,12 @@
namespace App\Services\Payment; namespace App\Services\Payment;
use App\Contracts\PaymentGateway; use App\Contracts\PaymentGateway;
use App\Data\PaymentResponseDTO; use App\Data\Payment\PaymentResponseDTO;
use App\Data\StripeLineItemDTO; use App\Data\Stripe\StripeLineItemDTO;
use App\Data\StripeSessionDataDTO; use App\Data\Stripe\StripeSessionDataDTO;
use App\Enums\PaymentModes; use App\Enums\Payment\PaymentModes;
use App\Enums\StripeCurrency; use App\Enums\Stripe\StripeCurrency;
use App\Enums\StripePaymentMode; use App\Enums\Stripe\StripePaymentMode;
use App\Models\Order; use App\Models\Order;
use Exception; use Exception;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;

View File

@ -1,6 +1,6 @@
<?php <?php
use App\Enums\UserRoles; use App\Enums\User\UserRoles;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;

View File

@ -1,6 +1,6 @@
<?php <?php
use App\Enums\CartStatus; use App\Enums\Cart\CartStatus;
use App\Models\User; use App\Models\User;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;

View File

@ -1,6 +1,6 @@
<?php <?php
use App\Enums\OrderStatus; use App\Enums\Order\OrderStatus;
use App\Models\Cart; use App\Models\Cart;
use App\Models\User; use App\Models\User;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;

View File

@ -2,7 +2,7 @@
namespace Database\Seeders; namespace Database\Seeders;
use App\Enums\PaymentStatusEnum; use App\Enums\Payment\PaymentStatusEnum;
use App\Models\PaymentStatus; use App\Models\PaymentStatus;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;