diff --git a/backend/app/Enums/Arrayable.php b/backend/app/Enums/Arrayable.php new file mode 100644 index 0000000..9480289 --- /dev/null +++ b/backend/app/Enums/Arrayable.php @@ -0,0 +1,14 @@ +validated())); + } + + /** + * Update the specified resource in storage. + * + * @param \App\Http\Requests\UpdateOfferRequest $request + * @param int $id + * @return void + */ + public function update(UpdateOfferRequest $request, int $id): void + { + $offer = Offer::findOrFail($id); + $offer->update($request->validated()); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return void + */ + public function destroy(int $id): void + { + $offer = Offer::findOrFail($id); + $offer->delete(); + } +} diff --git a/backend/app/Http/Controllers/OrderController.php b/backend/app/Http/Controllers/OrderController.php new file mode 100644 index 0000000..ffa1f0f --- /dev/null +++ b/backend/app/Http/Controllers/OrderController.php @@ -0,0 +1,70 @@ +validated())); + } + + /** + * Update the specified resource in storage. + * + * @param \App\Http\Requests\UpdateOfferRequest $request + * @param int $id + * @return void + */ + public function update(UpdateOfferRequest $request, int $id): void + { + $order = Order::findOrFail($id); + $order->update($request->validated()); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return void + */ + public function destroy(int $id): void + { + $order = Order::findOrFail($id); + $order->delete(); + } +} diff --git a/backend/app/Http/Controllers/ReviewController.php b/backend/app/Http/Controllers/ReviewController.php new file mode 100644 index 0000000..e99691c --- /dev/null +++ b/backend/app/Http/Controllers/ReviewController.php @@ -0,0 +1,63 @@ + + */ + public function rules(): array + { + return [ + 'owner_id' => ['required', 'numeric', 'exists:users,id'], + 'name' => ['required', 'string'], + 'type' => ['required', new Enum(OrderTypesEnum::class)], + 'price' => ['required', 'numeric'], + 'rooms' => ['required', 'numeric'], + 'yandex_mark' => ['string'], + 'location' => ['required', 'string'], + 'description' => ['required', 'string'], + 'is_group' => ['required', 'boolean'], + ]; + } +} diff --git a/backend/app/Http/Requests/StoreOrderRequest.php b/backend/app/Http/Requests/StoreOrderRequest.php new file mode 100644 index 0000000..83f8d2e --- /dev/null +++ b/backend/app/Http/Requests/StoreOrderRequest.php @@ -0,0 +1,23 @@ + + */ + public function rules(): array + { + return [ + 'offer_id' => ['required', 'numeric', 'exists:offers,id'], + 'user_id' => ['required', 'numeric', 'exists:users,id'], + 'start_date' => ['required', 'date', 'after_or_equal:today'], + 'end_date' => ['required', 'date', 'after_or_equal:tomorrow'], + 'price' => ['required', 'numeric', 'min:0.1'], + 'discount' => ['required', 'numeric', 'min:0'], + ]; + } +} diff --git a/backend/app/Http/Requests/UpdateOfferRequest.php b/backend/app/Http/Requests/UpdateOfferRequest.php new file mode 100644 index 0000000..8f74124 --- /dev/null +++ b/backend/app/Http/Requests/UpdateOfferRequest.php @@ -0,0 +1,29 @@ + + */ + public function rules(): array + { + return [ + 'owner_id' => ['numeric', 'exists:users,id'], + 'name' => ['string'], + 'type' => [new Enum(OrderTypesEnum::class)], + 'price' => ['numeric'], + 'rooms' => ['numeric'], + 'yandex_mark' => ['string'], + 'location' => ['string'], + 'description' => ['string'], + 'is_group' => ['boolean'], + ]; + } +} diff --git a/backend/app/Http/Requests/UpdateOrderRequest.php b/backend/app/Http/Requests/UpdateOrderRequest.php new file mode 100644 index 0000000..1ff4f25 --- /dev/null +++ b/backend/app/Http/Requests/UpdateOrderRequest.php @@ -0,0 +1,23 @@ + + */ + public function rules(): array + { + return [ + 'offer_id' => ['numeric', 'exists:offers,id'], + 'user_id' => ['numeric', 'exists:users,id'], + 'start_date' => ['date'], + 'end_date' => ['date'], + 'price' => ['numeric', 'min:0.1'], + 'discount' => ['numeric', 'min:0.1'], + ]; + } +} diff --git a/backend/app/Http/Resources/OfferResource.php b/backend/app/Http/Resources/OfferResource.php new file mode 100644 index 0000000..a310268 --- /dev/null +++ b/backend/app/Http/Resources/OfferResource.php @@ -0,0 +1,19 @@ + */ protected $casts = [ -// 'is_group' => 'boolean', + 'type' => OrderTypesEnum::class, + 'price' => 'double', + 'is_group' => 'boolean', ]; } diff --git a/backend/app/Models/Order.php b/backend/app/Models/Order.php index 5e19055..b2606c6 100644 --- a/backend/app/Models/Order.php +++ b/backend/app/Models/Order.php @@ -31,5 +31,7 @@ class Order extends Model protected $casts = [ 'start_date' => 'datetime', 'end_date' => 'datetime', + 'price' => 'double', + 'discount' => 'double', ]; } diff --git a/backend/app/Providers/AuthServiceProvider.php b/backend/app/Providers/AuthServiceProvider.php index 51b351b..71235d4 100644 --- a/backend/app/Providers/AuthServiceProvider.php +++ b/backend/app/Providers/AuthServiceProvider.php @@ -24,7 +24,5 @@ class AuthServiceProvider extends ServiceProvider public function boot() { $this->registerPolicies(); - - // } } diff --git a/backend/database/factories/UserFactory.php b/backend/database/factories/UserFactory.php index 23b61d2..d1b5f38 100644 --- a/backend/database/factories/UserFactory.php +++ b/backend/database/factories/UserFactory.php @@ -18,25 +18,11 @@ class UserFactory extends Factory public function definition() { return [ - 'name' => $this->faker->name(), + 'first_name' => $this->faker->firstName(), + 'last_name' => $this->faker->lastName(), 'email' => $this->faker->unique()->safeEmail(), - 'email_verified_at' => now(), + 'phone' => $this->faker->unique()->e164PhoneNumber(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password - 'remember_token' => Str::random(10), ]; } - - /** - * Indicate that the model's email address should be unverified. - * - * @return static - */ - public function unverified() - { - return $this->state(function (array $attributes) { - return [ - 'email_verified_at' => null, - ]; - }); - } } diff --git a/backend/database/migrations/2022_05_26_030738_create_offers_table.php b/backend/database/migrations/2022_05_26_030738_create_offers_table.php index a3d0fd1..5fa50f5 100644 --- a/backend/database/migrations/2022_05_26_030738_create_offers_table.php +++ b/backend/database/migrations/2022_05_26_030738_create_offers_table.php @@ -1,5 +1,6 @@ id(); $table->foreignId('owner_id'); $table->string('name'); - $table->enum('type', ['studio']); + $table->enum('type', OrderTypesEnum::values()); $table->decimal('price'); $table->unsignedSmallInteger('rooms'); $table->string('yandex_mark')->nullable(); - $table->text('text'); + $table->string('location'); + $table->text('description'); $table->boolean('is_group'); $table->timestamps(); }); diff --git a/backend/database/seeders/DatabaseSeeder.php b/backend/database/seeders/DatabaseSeeder.php index c1c48a0..95fd531 100644 --- a/backend/database/seeders/DatabaseSeeder.php +++ b/backend/database/seeders/DatabaseSeeder.php @@ -2,7 +2,7 @@ namespace Database\Seeders; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; +use App\Models\User; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder @@ -14,7 +14,7 @@ class DatabaseSeeder extends Seeder */ public function run() { - // \App\Models\User::factory(10)->create(); + User::factory(10)->create(); // \App\Models\User::factory()->create([ // 'name' => 'Test User', diff --git a/backend/routes/api.php b/backend/routes/api.php index eb6fa48..1abbc85 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -1,6 +1,7 @@ get('/user', function (Request $request) { - return $request->user(); -}); +Route::apiResource('/offers', OfferController::class); +Route::apiResource('/orders', OrderController::class);