archivo de configuracion de nginx agregado para el puerto 9000

This commit is contained in:
2026-05-02 16:57:29 -06:00
parent 2af36ea272
commit 881e67fb12
33 changed files with 2035 additions and 245 deletions
+73
View File
@@ -0,0 +1,73 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Anuncio extends Model
{
protected $fillable = [
'user_id', 'title', 'body', 'image_path',
'type', 'audience', 'expires_at', 'active',
];
protected $casts = [
'audience' => 'array',
'expires_at' => 'datetime',
'active' => 'boolean',
];
// Configuración visual por tipo
public const TYPES = [
'info' => ['label' => 'Información', 'color' => 'primary', 'icon' => 'fa-info-circle'],
'promocion' => ['label' => 'Promoción', 'color' => 'success', 'icon' => 'fa-tag'],
'mantenimiento' => ['label' => 'Mantenimiento', 'color' => 'warning', 'icon' => 'fa-tools'],
'aviso' => ['label' => 'Aviso', 'color' => 'danger', 'icon' => 'fa-exclamation-triangle'],
];
public const ROLES = [
'all' => 'Todos',
'Alumno' => 'Alumnos',
'Docente' => 'Docentes',
'Admin' => 'Administradores',
'Control escolar' => 'Control escolar',
'Coordinación académica' => 'Coordinación académica',
'Programador' => 'Programadores',
'Promotor' => 'Promotores',
];
public function author(): BelongsTo
{
return $this->belongsTo(User::class, 'user_id');
}
// Solo activos y no vencidos
public function scopeVigentes(Builder $q): void
{
$q->where('active', true)
->where(fn($q) => $q->whereNull('expires_at')->orWhere('expires_at', '>', now()));
}
// Filtra por roles del usuario
public function scopeParaRoles(Builder $q, array $roles): void
{
$q->where(function ($q) use ($roles) {
$q->whereJsonContains('audience', 'all');
foreach ($roles as $role) {
$q->orWhereJsonContains('audience', $role);
}
});
}
public function typeConfig(): array
{
return self::TYPES[$this->type] ?? self::TYPES['info'];
}
public function isExpired(): bool
{
return $this->expires_at && $this->expires_at->isPast();
}
}