Skip to content

Segunda convocatoria Cristian J - #83

Open
5538180 wants to merge 12 commits into
2DAW-CarlosIII:masterfrom
5538180:segundaConvocatoria
Open

Segunda convocatoria Cristian J#83
5538180 wants to merge 12 commits into
2DAW-CarlosIII:masterfrom
5538180:segundaConvocatoria

Conversation

@5538180

@5538180 5538180 commented May 12, 2026

Copy link
Copy Markdown

No description provided.

5538180 added 10 commits May 1, 2026 21:36
Parte 1:
- Instalado Composer y dependencias del proyecto.
- Dentro de Docker agregado el apuntador de storage a public.
- Creado innecesariamente otro admin, ya que habia uno en users.
- Logueado y añadido main.css y banner.png a la edicion 2025.

Parte 2:
- Creado el modelo Curso: terminado.
- Creado controlador Curso: a mitad.
- Creada ruta Curso.
- Creada migracion Curso.
- Creada carpeta Curso en resources/views/admin con las vistas.
- Creadas vistas Curso en carpeta Curso: a mitad.
- Modificado Edicion con relacion curso.

Ruta mental para seguir:
- Terminar vistas Curso.
- Terminar controlador Curso.
- Revisar si se modifica Edicion para añadir curso_id o si basta con cursos.edicion_id.
- Revisar el formulario para vincular una edicion a un curso si se quiere.
- En index de Ediciones, hacer dinamicas las rutas/enlaces de las ediciones.
parte 2:
Parte 2:
  - Terminado CRUD Curso : Faltaria implementar en las vistas controlar los datos de los formularios, no en el controlador
 - Ruta mental:
  - Ahora en la vista raiz Dashboard implementar la llamada a el modelo para recorrer todos aos Ediciones con su ruta si la hubiera
  - Modificado  Partials en partials/frontend ejercicios_ediciones_anteriores:
  Para que en vez de a poner enlaces estaticos sean dinamicos, ahora en esa parte se llama al controlador EdicionesViewComponentsComponent

  - Creado La vista del componente en
    component/frontend/ejercicios_ediciones_anteriores:

    En el haciendo uso del componente recorre la coleccion de ediciones y va creando li
    ocn los enlaces usando el objeto edicion junto a la propiedad curso
    que es el objeta traido de la relacion de ediciones para rellenar

  - Creado el COmponente donde en el mediante el metodo render devuelve
    a la vista del componente la coleccion de edciones

  - Ruta mental:
 	Diria que me he equipocado al pensar que los enlaces se creaban
	con los datos de Edicion y creo que deberia cambiar todo para
	que los datos sean los atributos de Curso, en olimpiada sea incremental en romano (no se si lo hare asi o directamente usando el iterador del foreach). Atributos deberian ser año, enlace, curso, olimpiada
	De momento ya es dinamico pero mal
	tambien hay que revisar casteos, controlar datos de entrada en formularios (vistas) y en controladores
	PD: Odio vim
 - Modificado Migracion, Modelo, Controlador:
 	- Para anadir los atributos necesarios para los enlaces
	  dinamicos a cursos.
	- Casteado, tipado y controlado los tipos de atributos
	  (olimpiadas impoosible con num romanos dinamico)
	- ? Posiblemente edicion_id de Curso deberia ser fk
 - Creado Componente Curso y su vista:
 	- Para que los enlaces dinamicos no vengan de la llamada al
	  Modelo Edicion, si no de la llamada al Modelo Curso.
	- Implementado el orden de la coleccion para que los cursos
	  salga el ultimo.
	- ? Podria cambiarse que la redireccion de curso creado vaya al
	  index para verlo alli
 - Ruta mental:
 	- Ahora falta implementar la devolucion de Ediciones junto al
	  curso relacionado.
	- ? Entiendo que es por json para api,no en una vista
  - Creado CursoControllerApi:
  	- Llama a todos los cursos junto a su relacion edicion
	- Crea una instancia del Recurso CursoResource, la castea de
	  array a coleccion y la devuelve

  - Creado CursoResource:
  	- Modifica el objeto y devuelve un array  para que quede representado
	  ediciones->curso ed manera visual utilizando el controlador
	  CursoControllerApi,

  - Ruta mental:
  	- ? Deberian tener ambas entidades ademas de un metodo para
	  relacionarse, que tanto en curso como en edicion tengan el
	  atributo Fk?
	- ? Crear un altertable para edicion para anadir el atributo
	  curso_id con fk?
	- En el controlador CursoControllerApi podria llamar al
	  modelo edicion para ahorrarme permutar los datos de la
	  relacion en el recurso?
…a, aceptado cambios del profe (solo cambio en header.blade.php)
- Cambiado CursoController:
	- Modificado los campos de validacion, atributos de insercion para que concuerden con los nuevos atributos de la Entidad Cursos (migracion)

- Modificado Modelo:
    -  Modificado los campos de validacion, atributos de insercion para que concuerden con los nuevos atributos de la Entidad Cursos (migracion)
-Modificacion  Migracion de Curso:
	- Modificado los campos siendo ahora edicion_id una FK
    - Modificado el campo de curso para que sea unico

- Creado Controlado SelectEdicionCreateCurso y su vista:
	- Recorre y muestra todos las ediciones que hay
    - ? Practica  para aprender: Alpine (Mostrar o no un elemento si el "estado cambia el valor con x-show ")  y uso del atributo loop del freach ( si es la primera iteracion que anada un option)

- Modificado Vista Create de Curso (formulario):
    - Modificado los campos de validacion, atributos de insercion para que concuerden con los nuevos atributos de la Entidad Cursos (migracion)
    - Anadido al final La visa del  Componente SelectEdicionCreateCurso

- Ruta Mental:
    - Falta quiza un faker y un seder para crear cursos por comodidad
    - Falta en los enlaes dinamicos ajustar bien el formato de curso etc

- Fallos:
    - En el partial readonly header falla el if mergeado de Alberto
- Modificada Vista Cursos.index: Para que coincida con los nuevos atributos de Cursos
- Modificado Vista Componente ediciones:
  - Para que coincida con los nuevos campos
  - Añadida condición en el foreach para que si Edicion no tiene curso, pase a la siguiente iteración (comentado)
- Modificado Componente Vista Edicion:
  - Para que solo traiga las ediciones que tengan cursos asociados
  - Remapeada la colección ediciones para que formatee el campo curso_escolar
  - Duda: ¿Con método estático o protected?
- Modificado layout app.blade para que el CSS cargue desde storage/...
@5538180

5538180 commented May 12, 2026

Copy link
Copy Markdown
Author

En la vista header había comentado el condicional if (diría que aun que acepte los cambios quedo el cierre del comentario escrito)

 - Para usar el metodo de numero romano
 de categorias

PDF 2 Olimpadas:
 - Ejercicio 1 HECHO:
   - Creado Modelo ResultadoOlimpiadaCache (Sin metodos, ni contructor,
     ni casteo)
   - Creada Migracion ResultadoOlimpiadaCache
   - Creado Factory ResultadoOlimpiadaCache
   - Creado Contolador ResultadoOlimpiadaCacheController (Sin
     implementacion aun)

Ejercicio 1 hecho

Completa seeders y clasificaciones de segunda convocatoria
Ejercicio 1 Terminado:
  -  Creado todo lo relacionado con ResultadoOlimpiadaCache. (he
     machacado el commit y no tengo detallado todo)

Ejercico 2 Terminado:

  - Creado seeders y factoris paraprovar datos.

  - Creado Servicio ClasificacionService:
    - donde tienen los metodos calcularGlobal y arrayParciales

  - Creado el recurso ClasificacionesResource para arrayParciales

  - Creado Singleton del servicio ClasificacionesService en el provider para
    no tener que instanciar El servicio cada vez que quiera usar sus metodos

  - Creado el ClasificacionesControllerApi anadiendo el constructor con
    el singleton pra usar en el index los metodos heredadel del
    servicio, a su vez crear y devuelve  la respuesta
  - Creada la ruta dinamica de miPuesto/nombrecompleto

  - Fallas y cambios:
    Me daba fallas el atributo patrocinador_id, en algunos como en los
    formularios etc me aparecia para crear patrocinadores_id, pero mi
    tabla estaba patrocinador_id y mi modelo tambien, he buscado todas
    las apariciones y reemplazado, creo que no rompe nada.

  - Faltaria la implementacion de los roles de usuario que he preferido
    a tener mas experiencia para no copiar y pegar sin saber que hago.

git commit -e -F .git/COMMIT_EDITMSG#
@5538180

5538180 commented May 31, 2026

Copy link
Copy Markdown
Author

Explicado en el commit todos los cambios , he machacado el anterior por limpieza como me recomendaste.

- Campio miPuesto para separar el nombre del grupo usando el último espacio por si tiene espacio el nombre del grupo

- Antes firstname y last name solo tenia en cuenta los datos de ResultadoOlimpiadaCache , ahora ese firstname y lastname son los de los atributos de grupos nombre y centro_id

- MOdificacion  seeders usando factories en el caso que no sea necesario
  mas codigo por bucle

- MOdificacion factories para reutilizar registros existentes y crear solo si
  no los hay
- Eliminado PuebaFactory, habia 2

- Cambiado Resultado para usar id no autoincremental
@5538180

5538180 commented May 31, 2026

Copy link
Copy Markdown
Author

Después de este pr, he estado realizando cambios todo el día con modificaciones y pruebas en el código, tengo mi fork un comit adelantado con todos estos cambios, pero no he realizado un nuevo pr por no ofuscar.

$this->call(EdicionGrupoSeeder::class);
$this->call(ResultadosPruebasSeeder::class);
$this->call(ResultadoOlimpiadaCacheSeeder::class);
$this->command->info('¡Creados 30 ResultadosOlimpiadaCache!');

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esta línea debería ir en el Seeder de ResultadoOlimpiadaCache y no aquí.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pensaba que DatabaseSeeder era donde debían ir la llamada de todos por separado por legibilidad, porque motivo? Dependencias?

Comment thread app/Http/Controllers/ClasificacionesControllerApi.php

class ClasificacionesControllerApi extends Controller
{
public function __construct(private ClasificacionesService $clasificacionesService)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Funcionará, pero no es la forma más legible de inicializar una propiedad privada de la clase.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok , lo cambio por la versión expílicita:

private ClasificacionesService $clasificacionesService;

public function __construct(ClasificacionesService $clasificacionesService)
{
$this->clasificacionesService = $clasificacionesService;
}

o por la de el repo backend?

public function __construct(
    private readonly CalificacionService $calificacionService,
) {} 

Comment thread app/Http/Controllers/Api/ClasificacionesControllerApi.php
Comment thread app/Http/Services/ClasificacionesService.php
Comment thread app/Http/Services/ClasificacionesService.php
private function resultadosGrupo(Grupo $grupo)
{
return ResultadoOlimpiadaCache::where('firstname', $grupo->nombre)
->where('lastname', (string) $grupo->centro_id);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

->where('lastname', (string) $grupo->centro_id);, en realidad es con $centro->dencen, en lugar de $grupo->centro_id

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pensaba que $nombrecompleto era = "Grupo->nombre . ' ' . Grupo->centro_id"
ejemplo:
$nombrecompleto = "Los Marismeños 5", no por el nombre como tal del centro

$parciales = $resultados->map(function ($resultado) {
$idPrueba = $resultado->id_prueba;
$posicion = ResultadoOlimpiadaCache::where('id_prueba', $idPrueba)
->where('grado', $resultado->grado)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Como los id_prueba son diferentes para cada prueba, la línea ->where('grado', $resultado->grado) no es necesaria.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Es posible que si quito que filtre por grado, al haber pruebas que están en ambos grados como Sistemas y Redes Locales, compare los tiempos con un grado diferente que no es del grupo?

Esto es de ResultadoOlimpiadaCacheFactory:

 $pruebasPorGrado = [
        'GM' => ['Hardware', 'Sistemas', 'Redes Locales'],
        'GS' => ['Programación', 'Bases de datos', 'Redes Locales', 'Sistemas', 'Lenguajes de Marcas'],
    ];

Comment thread app/Http/Services/ClasificacionesService.php

@5538180 5538180 left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

He revisado los comentarios, gracias por el tiempo, quizá debería dejar comentarios dentro del código como documentación para facilitar la lectura, quedo a la espera para saber Como resuelvo algunas. No me importaría esperar al miércoles para resolverlas por si es más sencillo de explicar en persona. Gracias.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants