1
0
mirror of https://github.com/robonen/metr.git synced 2026-03-20 10:54:41 +00:00

Image uploading

This commit is contained in:
2022-06-01 00:23:05 +07:00
parent fe2e5d316c
commit 675b692c81
27 changed files with 451 additions and 15 deletions

View File

@@ -7,6 +7,7 @@ use App\Http\Requests\StoreOfferRequest;
use App\Http\Requests\UpdateOfferRequest;
use App\Http\Resources\OfferResource;
use App\Models\Offer;
use App\Models\OfferPhoto;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
class OfferController extends Controller
@@ -14,11 +15,17 @@ class OfferController extends Controller
/**
* Display a listing of the resource.
*
* @param \App\Filters\OfferFilter $filters
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function index(OfferFilter $filters): AnonymousResourceCollection
{
return OfferResource::collection(Offer::filter($filters)->get());
return OfferResource::collection(
Offer::filter($filters)
->latest()
->with('images')
->get()
);
}
/**
@@ -29,8 +36,7 @@ class OfferController extends Controller
*/
public function show(int $id): OfferResource
{
$offer = Offer::findOrFail($id);
return new OfferResource($offer);
return new OfferResource(Offer::with('images')->findOrFail($id));
}
/**
@@ -41,7 +47,19 @@ class OfferController extends Controller
*/
public function store(StoreOfferRequest $request): OfferResource
{
return new OfferResource(Offer::create($request->validated()));
$data = $request->validated();
$images = $data['images'];
$offer = auth()->user()->offers()->create($data);
foreach ($images as $image)
{
$offer_photo = OfferPhoto::findOrFail($image['id']);
$offer_photo->offer_id = $offer->id;
$offer_photo->save();
}
return new OfferResource($offer);
}
/**
@@ -68,4 +86,16 @@ class OfferController extends Controller
$offer = Offer::findOrFail($id);
$offer->delete();
}
public function allByUser(): AnonymousResourceCollection
{
return OfferResource::collection(
auth()
->user()
->offers()
->latest()
->with('images')
->get()
);
}
}

View File

@@ -0,0 +1,36 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\UploadImageRequest;
use App\Http\Resources\UploadImageResource;
use App\Models\OfferPhoto;
use Illuminate\Support\Facades\Storage;
class UploadImageController extends Controller
{
/**
* @param \App\Http\Requests\UploadImageRequest $request
* @return \App\Http\Resources\UploadImageResource
*/
public function uploadCatalog(UploadImageRequest $request)
{
$image = $request->file('image')->store('public/offers');
$offer_photo = OfferPhoto::create([
'file' => $image,
]);
return new UploadImageResource($offer_photo);
}
public function deleteCatalog(int $id): void
{
$offer_photo = OfferPhoto::findOrFail($id);
if (Storage::exists($offer_photo->file))
Storage::delete($offer_photo->file);
$offer_photo->delete();
}
}

View File

@@ -3,6 +3,7 @@
namespace App\Http\Requests;
use App\Enums\OrderTypesEnum;
use App\Enums\RoomTypesEnum;
use Illuminate\Validation\Rules\Enum;
class StoreOfferRequest extends BaseRequest
@@ -15,16 +16,16 @@ class StoreOfferRequest extends BaseRequest
public function rules(): array
{
return [
'user_id' => ['required', 'numeric', 'exists:users,id'],
'name' => ['required', 'string'],
'type' => ['required', new Enum(OrderTypesEnum::class)],
'price' => ['required', 'numeric', 'min:0.1'],
'rooms' => ['required', 'numeric', 'min:1'],
'rooms' => ['required', new Enum(RoomTypesEnum::class)],
'space' => ['required', 'numeric', 'min:1'],
'yandex_mark' => ['string'],
'location' => ['required', 'string'],
'description' => ['required', 'string'],
'is_group' => ['required', 'boolean'],
'images' => ['required', 'array'],
];
}
}

View File

@@ -3,6 +3,7 @@
namespace App\Http\Requests;
use App\Enums\OrderTypesEnum;
use App\Enums\RoomTypesEnum;
use Illuminate\Validation\Rules\Enum;
class UpdateOfferRequest extends BaseRequest
@@ -15,16 +16,16 @@ class UpdateOfferRequest extends BaseRequest
public function rules(): array
{
return [
'user_id' => ['numeric', 'exists:users,id'],
'name' => ['string'],
'type' => [new Enum(OrderTypesEnum::class)],
'price' => ['numeric', 'min:0.1'],
'rooms' => ['numeric', 'min:1'],
'rooms' => [new Enum(RoomTypesEnum::class)],
'space' => ['numeric', 'min:1'],
'yandex_mark' => ['string'],
'location' => ['string'],
'description' => ['string'],
'is_group' => ['boolean'],
'images' => ['array'],
];
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Http\Requests;
class UploadImageRequest extends BaseRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'image' => ['required', 'image', 'mimes:jpg,png,jpeg', 'max:15000'],
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class UploadImageResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return parent::toArray($request);
}
}