From 0e53040ac359dcd76370ef5696f17ac2ba0fa40d Mon Sep 17 00:00:00 2001
From: a220815am <a220815am@h31.informatica.escoladeltreball.org>
Date: Fri, 28 Mar 2025 18:29:39 +0100
Subject: [PATCH 1/3] movie form working

---
 app/Http/Controllers/MoviesController.php     | 64 +++++++++++++++++++
 app/Models/Movie.php                          | 19 ++++++
 .../2025_03_28_165130_create_movies.php       | 35 ++++++++++
 resources/views/categories/create.blade.php   | 13 ++++
 resources/views/movies/create.blade.php       | 52 +++++++++++++++
 resources/views/movies/moviesList.blade.php   | 49 ++++++++++++++
 routes/web.php                                | 16 ++++-
 7 files changed, 245 insertions(+), 3 deletions(-)
 create mode 100644 app/Http/Controllers/MoviesController.php
 create mode 100644 app/Models/Movie.php
 create mode 100644 database/migrations/2025_03_28_165130_create_movies.php
 create mode 100644 resources/views/categories/create.blade.php
 create mode 100644 resources/views/movies/create.blade.php
 create mode 100644 resources/views/movies/moviesList.blade.php

diff --git a/app/Http/Controllers/MoviesController.php b/app/Http/Controllers/MoviesController.php
new file mode 100644
index 00000000..17e876b6
--- /dev/null
+++ b/app/Http/Controllers/MoviesController.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use App\Models\Movie;
+use Illuminate\Support\Facades\Log;
+
+class MoviesController extends Controller
+{
+    public function index()
+    {
+        $movies = Movie::all();
+        $genders = $movies->pluck('gender')->unique();
+        return view('movies.moviesList', compact('movies', 'genders'));
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        return view('movies.create');
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        try {
+            Log::info($request->all());
+
+            $request->validate([
+                'name' => 'required',
+                'gender' => 'required',
+                'synopsis' => 'required|max:255',
+                'image' => 'nullable',
+            ]);
+
+            $movies = new Movie();
+            $movies->name = $request->name ?? null;
+            $movies->gender = $request->gender ?? null;
+            $movies->synopsis = $request->synopsis ?? null;
+
+            if ($request->hasFile('image')) {
+                $movies->image = $request->file('image')->store('public/images');
+            }
+
+            $movies->save();
+
+            return redirect()->route('movies.index')->with('success', 'La movie se ha guardado correctamente.');
+        } catch (\Exception $e) {
+            Log::error($e->getMessage());
+            return redirect()->route('movies.index')->with('error', 'Ha habido un error al guardar la serie.');
+        }
+    }
+}
+
diff --git a/app/Models/Movie.php b/app/Models/Movie.php
new file mode 100644
index 00000000..782e4967
--- /dev/null
+++ b/app/Models/Movie.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class Movie extends Model
+{
+    use HasFactory;
+
+    protected $fillable = [
+        'name',
+        'image',
+        'gender',
+        'synopsis',
+       
+    ];
+}
diff --git a/database/migrations/2025_03_28_165130_create_movies.php b/database/migrations/2025_03_28_165130_create_movies.php
new file mode 100644
index 00000000..35f3cbdc
--- /dev/null
+++ b/database/migrations/2025_03_28_165130_create_movies.php
@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('movies', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->string('image')->nullable();
+            $table->string('synopsis')->nullable();
+            $table->string('gender')->nullable();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('movies');
+    }
+};
diff --git a/resources/views/categories/create.blade.php b/resources/views/categories/create.blade.php
new file mode 100644
index 00000000..31ac36b2
--- /dev/null
+++ b/resources/views/categories/create.blade.php
@@ -0,0 +1,13 @@
+<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
+<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
+<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js"></script>
+<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
+
+<form action="{{ route('categories.store') }}" method="POST" class="p-4 bg-light border rounded">
+    @csrf
+    <div class="form-group mb-3">
+        <label for="genere" class="form-label">Género</label>
+        <input type="text" class="form-control" id="genere" name="genere" placeholder="Introduce el género">
+    </div>
+    <button type="submit" class="btn btn-primary">Añadir Categoría</button>
+</fo
\ No newline at end of file
diff --git a/resources/views/movies/create.blade.php b/resources/views/movies/create.blade.php
new file mode 100644
index 00000000..f0054c50
--- /dev/null
+++ b/resources/views/movies/create.blade.php
@@ -0,0 +1,52 @@
+@extends('layouts.app')
+
+@section('content')
+    <style>
+        .form-control, label {
+            color: black;
+        }
+    </style>
+    
+    <div class="container">
+        <div class="row justify-content-center">
+            <div class="col-md-12">
+                <form action="{{ route('movies.store') }}" method="POST" class="p-4 bg-light border rounded">
+                    @csrf
+
+                    <div class="form-group mb-3">
+                        <label for="name" class="form-label">Title</label>
+                        <input type="text" class="form-control" id="name" name="name">
+                    </div>
+
+                    <div class="form-group mb-3">
+                        <label for="gender" class="form-label">Género</label>
+                        <select class="form-control" id="gender" name="gender">
+                            <option value="Accion">Acción</option>
+                            <option value="Comedia">Comedia</option>
+                            <option value="Drama">Drama</option>
+                            <option value="Fantasia">Fantasía</option>
+                            <option value="Terror">Terror</option>
+                            <option value="Misterio">Misterio</option>
+                            <option value="Romance">Romance</option>
+                            <option value="Ciencia Ficcion">Ciencia Ficción</option>
+                            <option value="Suspenso">Suspenso</option>
+                        </select>
+                    </div>
+
+                    <div class="form-group mb-3">
+                        <label for="synopsis" class="form-label">Sinopsis</label>
+                        <textarea class="form-control" id="synopsis" name="synopsis"></textarea>
+                    </div>
+
+                    <div class="form-group mb-3">
+                        <label for="image" class="form-label">Carátula</label>
+                        <input type="file" class="form-control" id="image" name="image">
+                    </div>
+
+                    <button type="submit" class="btn btn-primary">Create Movies</button>
+                </form>
+            </div>
+        </div>
+    </div>
+@endsection
+
diff --git a/resources/views/movies/moviesList.blade.php b/resources/views/movies/moviesList.blade.php
new file mode 100644
index 00000000..b26ac969
--- /dev/null
+++ b/resources/views/movies/moviesList.blade.php
@@ -0,0 +1,49 @@
+@extends('layouts.app')
+
+@section('content')
+    <div class="container">
+        <div class="row justify-content-center">
+            <div class="col-md-12">
+                <div class="header-image">
+                    <img src="/path-to-header-image.jpg" alt="Header" class="img-fluid">
+                </div>
+                <div class="movies-list">
+                    @foreach ($genders as $gender)
+                        <h2 class="text-light mt-4">{{ ucfirst($gender) }}</h2>
+                        <div class="row">
+                            @foreach ($movies as $movie)
+                                @if ($movie->gender == $gender)
+                                    <div class="col-md-3 col-sm-6 mb-4">
+                                        <div class="card bg-dark text-white">
+                                            <img src="{{ $movie->poster }}" class="card-img" alt="{{ $movie->title }}">
+                                            <div class="card-img-overlay d-flex align-items-end">
+                                                <h5 class="card-title">{{ $movie->title }}</h5>
+                                            </div>
+                                        </div>
+                                    </div>
+                                @endif
+                            @endforeach
+                        </div>
+                    @endforeach
+                </div>
+            </div>
+        </div>
+    </div>
+@endsection
+
+<style>
+    .header-image img {
+        width: 100%;
+        height: auto;
+    }
+    .series-list .card {
+        border-radius: 10px;
+        overflow: hidden;
+    }
+    .series-list .card-img {
+        transition: transform 0.3s ease;
+    }
+    .series-list .card:hover .card-img {
+        transform: scale(1.05);
+    }
+</style>
diff --git a/routes/web.php b/routes/web.php
index 52173c06..67195e17 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -2,7 +2,8 @@
 
 use Illuminate\Support\Facades\Route;
 use App\Http\Controllers\UpdateController;
-
+use App\Http\Controllers\SeriesController;
+use App\Http\Controllers\MoviesController;
 
 Route::get("/upload-image", [UploadController::class, "showForm"])->name("image.form");
 Route::post("/upload-image", [UploadController::class, "upload"])->name("image.upload");
@@ -11,10 +12,19 @@
     return view('welcome');
 });
 
-
+//series routes
 Route::get("/series", [SeriesController::class, "index"])->name("series.index");
 
 Route::get('/series/create', [SeriesController::class, 'create'])->name('series.create');
 
 Route::post('/series/crear', [SeriesController::class, 'store'])->name('series.store');
->>>>>>> routes/web.php
+
+
+
+//movies routes
+Route::get("/movies", [MoviesController::class, "index"])->name("movies.index");
+
+Route::get('/movies/create', [MoviesController::class, 'create'])->name('movies.create');
+
+Route::post('/movies/crear', [MoviesController::class, 'store'])->name('movies.store');
+
-- 
GitLab


From 2658b7e4baa24aaeac7d96f4dbc6b3d22f2b9151 Mon Sep 17 00:00:00 2001
From: a231991zp <zaraypastor07@gmail.com>
Date: Sun, 30 Mar 2025 20:13:32 +0200
Subject: [PATCH 2/3] add: creada la pagina vista detalle con la ruta, vista y
 controlador

---
 app/Http/Controllers/MoviesController.php     |  6 ++++
 resources/views/movies/moviesDetail.blade.php | 36 +++++++++++++++++++
 resources/views/movies/moviesList.blade.php   |  5 +--
 routes/web.php                                |  1 +
 4 files changed, 46 insertions(+), 2 deletions(-)
 create mode 100644 resources/views/movies/moviesDetail.blade.php

diff --git a/app/Http/Controllers/MoviesController.php b/app/Http/Controllers/MoviesController.php
index 17e876b6..cc3c5632 100644
--- a/app/Http/Controllers/MoviesController.php
+++ b/app/Http/Controllers/MoviesController.php
@@ -60,5 +60,11 @@ public function store(Request $request)
             return redirect()->route('movies.index')->with('error', 'Ha habido un error al guardar la serie.');
         }
     }
+
+    public function show($id){
+        $movie = Movie::findOrFail($id);
+        return view('movies.show', compact('movie'));
+    }
 }
 
+
diff --git a/resources/views/movies/moviesDetail.blade.php b/resources/views/movies/moviesDetail.blade.php
new file mode 100644
index 00000000..10a241c1
--- /dev/null
+++ b/resources/views/movies/moviesDetail.blade.php
@@ -0,0 +1,36 @@
+@extends('layouts.app')
+
+@section('content')
+<div class="container mx-auto p-6 bg-black text-white">
+    <div class="relative w-full h-96 bg-cover bg-center" style="background-image: url('{{ $movie->image }}');">
+        <div class="absolute inset-0 bg-black bg-opacity-50 flex items-center">
+            <div class="p-6">
+                <h1 class="text-4xl font-bold">{{ $movie->name }}</h1>
+                <p class="text-lg">{{ $movie->gender }}</p>
+                <!--<p class="text-lg">{{ $movie->year }} | {{ $movie->duration }}</p> -->
+            </div>
+        </div>
+    </div>
+    <div class="mt-6">
+        <h2 class="text-3xl font-bold">{{ $movie->name }}</h2>
+        <p class="mt-2 text-gray-300">{{ $movie->synopsis }}</p>
+    </div>
+    <!--
+    <div class="mt-6">
+        <h3 class="text-xl font-bold">Director:</h3>
+        <p class="text-gray-300">{{ $movie->director }}</p>
+    </div>
+    <div class="mt-6">
+        <h3 class="text-xl font-bold">Actores:</h3>
+        <p class="text-gray-300">{{ implode(', ', $movie->actors) }}</p>
+    </div>
+     <div class="mt-6">
+        <h3 class="text-xl font-bold">Premios:</h3>
+        <ul class="list-disc pl-5 text-gray-300">
+            @foreach($movie->awards as $award)
+                <li>{{ $award }}</li>
+            @endforeach
+        </ul>
+    </div> -->
+</div>
+@endsection
diff --git a/resources/views/movies/moviesList.blade.php b/resources/views/movies/moviesList.blade.php
index b26ac969..ceb95243 100644
--- a/resources/views/movies/moviesList.blade.php
+++ b/resources/views/movies/moviesList.blade.php
@@ -14,12 +14,12 @@
                             @foreach ($movies as $movie)
                                 @if ($movie->gender == $gender)
                                     <div class="col-md-3 col-sm-6 mb-4">
-                                        <div class="card bg-dark text-white">
+                                        <a href="{{ route('movies.show', ['movie' => $movie->id]) }}" class="card bg-dark text-white">
                                             <img src="{{ $movie->poster }}" class="card-img" alt="{{ $movie->title }}">
                                             <div class="card-img-overlay d-flex align-items-end">
                                                 <h5 class="card-title">{{ $movie->title }}</h5>
                                             </div>
-                                        </div>
+                                        </a>
                                     </div>
                                 @endif
                             @endforeach
@@ -47,3 +47,4 @@
         transform: scale(1.05);
     }
 </style>
+
diff --git a/routes/web.php b/routes/web.php
index 67195e17..59a8b86c 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -28,3 +28,4 @@
 
 Route::post('/movies/crear', [MoviesController::class, 'store'])->name('movies.store');
 
+Route::get("/movies/{id}", [MoviesController::class, "show"])->name("movies.show");
-- 
GitLab


From 1540208326a83f7b71b12b42ace68bc4e0949f97 Mon Sep 17 00:00:00 2001
From: a231991zp <a231991zp@h33.informatica.escoladeltreball.org>
Date: Mon, 31 Mar 2025 17:14:39 +0200
Subject: [PATCH 3/3] =?UTF-8?q?fix:=20Correcci=C3=B3n=20de=20error=20en=20?=
 =?UTF-8?q?la=20vista=20de=20detalles=20de=20pel=C3=ADcula?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Http/Controllers/MoviesController.php     |  2 +-
 resources/views/movies/moviesDetail.blade.php | 18 ------------------
 resources/views/movies/moviesList.blade.php   |  3 +--
 3 files changed, 2 insertions(+), 21 deletions(-)

diff --git a/app/Http/Controllers/MoviesController.php b/app/Http/Controllers/MoviesController.php
index cc3c5632..7307e264 100644
--- a/app/Http/Controllers/MoviesController.php
+++ b/app/Http/Controllers/MoviesController.php
@@ -63,7 +63,7 @@ public function store(Request $request)
 
     public function show($id){
         $movie = Movie::findOrFail($id);
-        return view('movies.show', compact('movie'));
+        return view('movies.moviesDetail', compact('movie'));
     }
 }
 
diff --git a/resources/views/movies/moviesDetail.blade.php b/resources/views/movies/moviesDetail.blade.php
index 10a241c1..03ce3f24 100644
--- a/resources/views/movies/moviesDetail.blade.php
+++ b/resources/views/movies/moviesDetail.blade.php
@@ -7,7 +7,6 @@
             <div class="p-6">
                 <h1 class="text-4xl font-bold">{{ $movie->name }}</h1>
                 <p class="text-lg">{{ $movie->gender }}</p>
-                <!--<p class="text-lg">{{ $movie->year }} | {{ $movie->duration }}</p> -->
             </div>
         </div>
     </div>
@@ -15,22 +14,5 @@
         <h2 class="text-3xl font-bold">{{ $movie->name }}</h2>
         <p class="mt-2 text-gray-300">{{ $movie->synopsis }}</p>
     </div>
-    <!--
-    <div class="mt-6">
-        <h3 class="text-xl font-bold">Director:</h3>
-        <p class="text-gray-300">{{ $movie->director }}</p>
-    </div>
-    <div class="mt-6">
-        <h3 class="text-xl font-bold">Actores:</h3>
-        <p class="text-gray-300">{{ implode(', ', $movie->actors) }}</p>
-    </div>
-     <div class="mt-6">
-        <h3 class="text-xl font-bold">Premios:</h3>
-        <ul class="list-disc pl-5 text-gray-300">
-            @foreach($movie->awards as $award)
-                <li>{{ $award }}</li>
-            @endforeach
-        </ul>
-    </div> -->
 </div>
 @endsection
diff --git a/resources/views/movies/moviesList.blade.php b/resources/views/movies/moviesList.blade.php
index ceb95243..b3b4782d 100644
--- a/resources/views/movies/moviesList.blade.php
+++ b/resources/views/movies/moviesList.blade.php
@@ -14,8 +14,7 @@
                             @foreach ($movies as $movie)
                                 @if ($movie->gender == $gender)
                                     <div class="col-md-3 col-sm-6 mb-4">
-                                        <a href="{{ route('movies.show', ['movie' => $movie->id]) }}" class="card bg-dark text-white">
-                                            <img src="{{ $movie->poster }}" class="card-img" alt="{{ $movie->title }}">
+                                        <a href="{{ route('movies.show', ['id' => $movie->id]) }}" class="card bg-dark text-white">                                            <img src="{{ $movie->poster }}" class="card-img" alt="{{ $movie->title }}">
                                             <div class="card-img-overlay d-flex align-items-end">
                                                 <h5 class="card-title">{{ $movie->title }}</h5>
                                             </div>
-- 
GitLab