Segunda convocatoria Cristian J - #83
Conversation
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.
- 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/...
|
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#
|
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
|
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!'); |
There was a problem hiding this comment.
Esta línea debería ir en el Seeder de ResultadoOlimpiadaCache y no aquí.
There was a problem hiding this comment.
Pensaba que DatabaseSeeder era donde debían ir la llamada de todos por separado por legibilidad, porque motivo? Dependencias?
|
|
||
| class ClasificacionesControllerApi extends Controller | ||
| { | ||
| public function __construct(private ClasificacionesService $clasificacionesService) |
There was a problem hiding this comment.
Funcionará, pero no es la forma más legible de inicializar una propiedad privada de la clase.
There was a problem hiding this comment.
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,
) {}
| private function resultadosGrupo(Grupo $grupo) | ||
| { | ||
| return ResultadoOlimpiadaCache::where('firstname', $grupo->nombre) | ||
| ->where('lastname', (string) $grupo->centro_id); |
There was a problem hiding this comment.
->where('lastname', (string) $grupo->centro_id);, en realidad es con $centro->dencen, en lugar de $grupo->centro_id
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
Como los id_prueba son diferentes para cada prueba, la línea ->where('grado', $resultado->grado) no es necesaria.
There was a problem hiding this comment.
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'],
];
5538180
left a comment
There was a problem hiding this comment.
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.
No description provided.