config parte 2

This commit is contained in:
Marcos Elias Rios Nuñez 2026-06-01 09:21:30 -03:00
parent 6c36f5ef1b
commit 57649d6cb6
13 changed files with 708 additions and 0 deletions

233
config/session.php Executable file
View File

@ -0,0 +1,233 @@
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Session Driver
|--------------------------------------------------------------------------
|
| This option determines the default session driver that is utilized for
| incoming requests. Laravel supports a variety of storage options to
| persist session data. Database storage is a great default choice.
|
| Supported: "file", "cookie", "database", "memcached",
| "redis", "dynamodb", "array"
|
*/
'driver' => env('SESSION_DRIVER', 'database'),
/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to expire immediately when the browser is closed then you may
| indicate that via the expire_on_close configuration option.
|
*/
'lifetime' => (int) env('SESSION_LIFETIME', 120),
'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
/*
|--------------------------------------------------------------------------
| Session Encryption
|--------------------------------------------------------------------------
|
| This option allows you to easily specify that all of your session data
| should be encrypted before it's stored. All encryption is performed
| automatically by Laravel and you may use the session like normal.
|
*/
'encrypt' => env('SESSION_ENCRYPT', false),
/*
|--------------------------------------------------------------------------
| Session File Location
|--------------------------------------------------------------------------
|
| When utilizing the "file" session driver, the session files are placed
| on disk. The default storage location is defined here; however, you
| are free to provide another location where they should be stored.
|
*/
'files' => storage_path('framework/sessions'),
/*
|--------------------------------------------------------------------------
| Session Database Connection
|--------------------------------------------------------------------------
|
| When using the "database" or "redis" session drivers, you may specify a
| connection that should be used to manage these sessions. This should
| correspond to a connection in your database configuration options.
|
*/
'connection' => env('SESSION_CONNECTION'),
/*
|--------------------------------------------------------------------------
| Session Database Table
|--------------------------------------------------------------------------
|
| When using the "database" session driver, you may specify the table to
| be used to store sessions. Of course, a sensible default is defined
| for you; however, you're welcome to change this to another table.
|
*/
'table' => env('SESSION_TABLE', 'sessions'),
/*
|--------------------------------------------------------------------------
| Session Cache Store
|--------------------------------------------------------------------------
|
| When using one of the framework's cache driven session backends, you may
| define the cache store which should be used to store the session data
| between requests. This must match one of your defined cache stores.
|
| Affects: "dynamodb", "memcached", "redis"
|
*/
'store' => env('SESSION_STORE'),
/*
|--------------------------------------------------------------------------
| Session Sweeping Lottery
|--------------------------------------------------------------------------
|
| Some session drivers must manually sweep their storage location to get
| rid of old sessions from storage. Here are the chances that it will
| happen on a given request. By default, the odds are 2 out of 100.
|
*/
'lottery' => [2, 100],
/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| Here you may change the name of the session cookie that is created by
| the framework. Typically, you should not need to change this value
| since doing so does not grant a meaningful security improvement.
|
*/
'cookie' => env(
'SESSION_COOKIE',
Str::slug((string) env('APP_NAME', 'laravel')).'-session'
),
/*
|--------------------------------------------------------------------------
| Session Cookie Path
|--------------------------------------------------------------------------
|
| The session cookie path determines the path for which the cookie will
| be regarded as available. Typically, this will be the root path of
| your application, but you're free to change this when necessary.
|
*/
'path' => env('SESSION_PATH', '/'),
/*
|--------------------------------------------------------------------------
| Session Cookie Domain
|--------------------------------------------------------------------------
|
| This value determines the domain and subdomains the session cookie is
| available to. By default, the cookie will be available to the root
| domain without subdomains. Typically, this shouldn't be changed.
|
*/
'domain' => env('SESSION_DOMAIN'),
/*
|--------------------------------------------------------------------------
| HTTPS Only Cookies
|--------------------------------------------------------------------------
|
| By setting this option to true, session cookies will only be sent back
| to the server if the browser has a HTTPS connection. This will keep
| the cookie from being sent to you when it can't be done securely.
|
*/
'secure' => env('SESSION_SECURE_COOKIE'),
/*
|--------------------------------------------------------------------------
| HTTP Access Only
|--------------------------------------------------------------------------
|
| Setting this value to true will prevent JavaScript from accessing the
| value of the cookie and the cookie will only be accessible through
| the HTTP protocol. It's unlikely you should disable this option.
|
*/
'http_only' => env('SESSION_HTTP_ONLY', true),
/*
|--------------------------------------------------------------------------
| Same-Site Cookies
|--------------------------------------------------------------------------
|
| This option determines how your cookies behave when cross-site requests
| take place, and can be used to mitigate CSRF attacks. By default, we
| will set this value to "lax" to permit secure cross-site requests.
|
| See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
|
| Supported: "lax", "strict", "none", null
|
*/
'same_site' => env('SESSION_SAME_SITE', 'lax'),
/*
|--------------------------------------------------------------------------
| Partitioned Cookies
|--------------------------------------------------------------------------
|
| Setting this value to true will tie the cookie to the top-level site for
| a cross-site context. Partitioned cookies are accepted by the browser
| when flagged "secure" and the Same-Site attribute is set to "none".
|
*/
'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
/*
|--------------------------------------------------------------------------
| Session Serialization
|--------------------------------------------------------------------------
|
| This value controls the serialization strategy for session data, which
| is JSON by default. Setting this to "php" allows the storage of PHP
| objects in the session but can make an application vulnerable to
| "gadget chain" serialization attacks if the APP_KEY is leaked.
|
| Supported: "json", "php"
|
*/
'serialization' => 'json',
];

View File

@ -0,0 +1,45 @@
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
/**
* @extends Factory<User>
*/
class UserFactory extends Factory
{
/**
* The current password being used by the factory.
*/
protected static ?string $password;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->name(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'),
'remember_token' => Str::random(10),
];
}
/**
* Indicate that the model's email address should be unverified.
*/
public function unverified(): static
{
return $this->state(fn (array $attributes) => [
'email_verified_at' => null,
]);
}
}

View File

@ -0,0 +1,25 @@
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
use WithoutModelEvents;
/**
* Seed the application's database.
*/
public function run(): void
{
// User::factory(10)->create();
User::factory()->create([
'name' => 'Test User',
'email' => 'test@example.com',
]);
}
}

20
public/index.php Executable file
View File

@ -0,0 +1,20 @@
<?php
use Illuminate\Foundation\Application;
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
// Determine if the application is in maintenance mode...
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
require $maintenance;
}
// Register the Composer autoloader...
require __DIR__.'/../vendor/autoload.php';
// Bootstrap Laravel and handle the request...
/** @var Application $app */
$app = require_once __DIR__.'/../bootstrap/app.php';
$app->handleRequest(Request::capture());

9
resources/css/app.css Executable file
View File

@ -0,0 +1,9 @@
@import 'tailwindcss';
@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
@source '../../storage/framework/views/*.php';
@theme {
--font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
'Segoe UI Symbol', 'Noto Color Emoji';
}

1
resources/js/app.js Executable file
View File

@ -0,0 +1 @@
//

View File

@ -0,0 +1,44 @@
@extends('layouts.app')
@section('contenido')
<h2>Ingresar Nueva Consulta Académica</h2>
@if ($errors->any())
<div style="color: red; margin-bottom: 15px;">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="/consultas" method="POST" enctype="multipart/form-data">
@csrf
<div style="margin-bottom: 15px;">
<label>Asunto:</label><br>
<input type="text" name="asunto" style="width: 100%; padding: 8px;" value="{{ old('asunto') }}">
</div>
<div style="margin-bottom: 15px;">
<label>Categoría:</label><br>
<select name="categoria" style="width: 100%; padding: 8px;">
<option value="Trabajo Práctico">Trabajo Práctico</option>
<option value="Aula Virtual">Aula Virtual</option>
<option value="Regularidad">Regularidad</option>
</select>
</div>
<div style="margin-bottom: 15px;">
<label>Mensaje:</label><br>
<textarea name="mensaje" rows="5" style="width: 100%; padding: 8px;">{{ old('mensaje') }}</textarea>
</div>
<div style="margin-bottom: 15px;">
<label>Adjuntar Captura (Opcional):</label><br>
<input type="file" name="archivo_adjunto">
</div>
<button type="submit" class="btn">Enviar Consulta</button>
</form>
@endsection

View File

@ -0,0 +1,32 @@
@extends('layouts.app')
@section('contenido')
<h2>Mis Consultas</h2>
@if(session('exito'))
<div style="background-color: #d4edda; color: #155724; padding: 10px; margin-bottom: 15px; border-radius: 4px;">
{{ session('exito') }}
</div>
@endif
<table style="width: 100%; border-collapse: collapse; text-align: left;">
<thead>
<tr style="background-color: #eee;">
<th style="padding: 10px; border: 1px solid #ddd;">Asunto</th>
<th style="padding: 10px; border: 1px solid #ddd;">Categoría</th>
<th style="padding: 10px; border: 1px solid #ddd;">Estado</th>
<th style="padding: 10px; border: 1px solid #ddd;">Fecha</th>
</tr>
</thead>
<tbody>
@foreach($consultas as $consulta)
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">{{ $consulta->asunto }}</td>
<td style="padding: 10px; border: 1px solid #ddd;">{{ $consulta->categoria }}</td>
<td style="padding: 10px; border: 1px solid #ddd;"><strong>{{ $consulta->estado }}</strong></td>
<td style="padding: 10px; border: 1px solid #ddd;">{{ $consulta->created_at->format('d/m/Y') }}</td>
</tr>
@endforeach
</tbody>
</table>
@endsection

View File

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Gestor de Consultas</title>
<style>
body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f4f4f9; }
.container { max-width: 800px; margin: auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
.nav { margin-bottom: 20px; padding-bottom: 10px; border-bottom: 2px solid #ffb6c1; }
.nav a { margin-right: 15px; text-decoration: none; color: #333; font-weight: bold; }
.btn { padding: 10px 15px; background-color: #ffb6c1; color: #333; border: none; border-radius: 4px; cursor: pointer; }
</style>
</head>
<body>
<div class="container">
<div class="nav">
<a href="/consultas">Mis Consultas</a>
<a href="/consultas/create">Nueva Consulta</a>
</div>
@yield('contenido')
</div>
</body>
</html>

223
resources/views/welcome.blade.php Executable file

File diff suppressed because one or more lines are too long

27
routes/api.php Executable file
View File

@ -0,0 +1,27 @@
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Models\Consulta;
use App\Http\Controllers\ConsultaController; // <-- ¡Esta es la línea que falta!
// Route::get('/consultas/{id}/estado', function ($id) {
// $consulta = Consulta::find($id);
// if (!$consulta) {
// return response()->json(['error' => 'Consulta no encontrada'], 404);
// }
// return response()->json([
// 'id' => $consulta->id,
// 'asunto' => $consulta->asunto,
// 'estado_actual' => $consulta->estado,
// 'ultima_actualizacion' => $consulta->updated_at
// ]);
// });
Route::get('/consultas/{id}/estado', [ConsultaController::class, 'getTicketStatus']);
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:sanctum');

8
routes/console.php Executable file
View File

@ -0,0 +1,8 @@
<?php
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');

16
routes/web.php Executable file
View File

@ -0,0 +1,16 @@
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ConsultaController;
// Route::get('/', function () {
// return view('welcome');
// });
Route::get('/', function () {
return redirect('/consultas');
});
Route::get('/consultas', [ConsultaController::class, 'index']);
Route::get('/consultas/create', [ConsultaController::class, 'create']);
Route::post('/consultas', [ConsultaController::class, 'store']);