Skip to content

surtich/solucion-examen-final-2024-2025

Repository files navigation

Examen Segunda Evaluación Diseño Web y Desarrollo Cliente

Día 10/03/2025 Tiempo: 5 horas

  • Nota: Cada pregunta se valorará como bien o como mal (valoraciones intermedias serán excepcionales).
  • Nota2: Cada pregunta computará únicamente en el examen al que pertenezca (diseño o desarrollo).
  • Nota3: Para aprobar cada examen hay que obtener una puntuación mínima de 5 puntos en ese examen.
  • Nota4: Organice su tiempo. Si no consigue resolver un apartado pase al siguiente. El examen consta de apartados de diseño y de desarrollo que se pueden resolver por separado. Si un apartado depende de otro que no sabe resolver, siempre puede dar una solución que aunque no sea correcta, le permita seguir avanzando.
  • Nota5: Para que una solución sea correcta, no sólo hay que conseguir que haga lo que se pide, sino que, además, todo lo que funcionaba lo tiene que seguir haciendo. La solución debe estar implementada según las prácticas de código limpio explicadas en clase. Esto incluye React, JavaScript, CSS y HTML. No debe haber errores de tipos ni de ejecución.
  • Nota6: Lea completamente el examen antes de empezar y comience por lo que le parezca más fácil.
  • Nota7: No se permite utilizar ninguna librería que no esté ya incluida en el fichero package.json.
  • Nota8: El examen de diseño se puede resolver usando CSS, SASS, TailwindCSS o combinaciones de los tres.

Pasos previos antes de empezar

  • Clone el repositorio del enunciado
git clone https://gitlab.com/surtich/enunciado-examen-final-2024-2025.git
  • Vaya al directorio del proyecto
cd enunciado-examen-final-2024-2025
  • Si no lo ha hecho anteriormente, configure su usuario de git:
git config user.name "Sustituya por su nombre y apellidos"
git config user.email "Sustituya por su correo electrónico"
  • Cree un branch con su nombre y apellidos separados con guiones (no incluya mayúsculas, acentos o caracteres no alfabéticos, excepción hecha de los guiones). Ejemplo:
    git checkout -b fulanito-perez-gomez
  • Compruebe que está en la rama correcta:
    git status
  • Suba la rama al repositorio remoto:
    git push origin <nombre-de-la-rama-dado-anteriormente>
  • Instale las dependencias:
    npm install
  • Prepare la base de datos (puede omitir este paso ya que la base de datos se suministra ya actualizada):
    npx prisma db push
    npx prisma db seed

Arranque el servidor:

    npm run dev

Navegue a http://localhost:3000

  • Dígale al profesor que ya ha terminado para que compruebe que todo es correcto y desconecte la red.

INTRODUCCIÓN

Ahora las recetas pueden tener comentarios y valoraciones de los usuarios. En este ejercicio sólo se pide que se muestren los comentarios y las valoraciones de las recetas. No se pide que se puedan añadir ni eliminar comentarios ni valoraciones.

Para hacer esto, se ha creado el modelo Rating con la siguiente definición:

model Rating {
  id String @id @default(cuid())
  stars Int
  title String?
  comment String?
  recipeId String
  userId String

  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  recipe Recipe @relation(fields: [recipeId], references: [id])
  user User @relation(fields: [userId], references: [id])
}

Observe que una reseña pertenece a un usuario y a una receta, y contiene un número del 1 al 5 obligatorio y un título y un comentario opcionales.

Además, se ha añadido un campo ratings los modelos Recipe y User:

model Recipe {
  id String @id @default(cuid())
  name String
  ...
  ratings Rating[]
  ...
}

model User {
  id String @id @default(cuid())
  email String @unique
  ...
  ratings Rating[]
  ...
}

No se permite hacer modificaciones en la estructura de los modelos.

Se pretende crear la siguiente vista en la ruta /discover/recipeId/:

Image 0

Se han creado tres ficheros en el directorio components:

  • stars.tsx: Muestra las estrellas de las valoraciones de usuario y la global.

Image 0.1

  • review.tsx: Muestra una reseña de usuario.

Image 0.2

  • ratings.tsx: Muestra el resumen de estrellas global.

Image 0.3

Observe que stars.tsx se usa tanto en review.tsx como en ratings.tsx.

Se pueden añadir ficheros si se considera necesario, pero se deben utilizar los ficheros stars.tsx, review.tsx y ratings.tsx como están previstos.

EXAMEN DE DISEÑO

  • La estructura de los ficheros html facilitados es una mera orientación, se puede modificar como se desee.
  • Para conseguir el resultado es indiferente cómo lo haga (FlexBox, Grid Layout, ...) siempre y cuando respete las recomendaciones de buenas prácticas de diseño Web.

1.- (2 puntos) review.tsx. Por conseguir el siguiente diseño:

Image 1

2.- (3 puntos) rating.tsx. Por conseguir el siguiente diseño:

Image 2

3.- (1 punto) Por conseguir esta distribución:

Image 0

4.- Por el comportamiento responsivo.

Image 4

4.1.- (1 punto) Por conseguir que los tamaños de los componentes se ajusten a la pantalla.

4.2.- (1 punto) Por conseguir que las opiniones globales y la del usuario se muestren en una columna cuando la pantalla sea pequeña.

4.3.- (2 puntos) Por conseguir que primero se muestren las opiniones las opiniones del usuarios y luego las globales cuando se muestren en una sola columna, y que sea al revés cuando se muestren en dos columnas.

EXAMEN DE DESARROLLO

5.- (2 puntos) El componente stars.tsx recibirá el número de estrellas a mostrar en amarillo (propiedad value) y opcionalmente el número de estrellas a mostrar (propiedad size con valor por defecto 5). Las estrellas mayores que value se mostrarán en gris. Si se pasa un número fraccionario se truncará al anterior entero (por ejemplo, con 3.9 se mostrarán 3 estrellas amarillas).

Image 5

6.- Al pulsar sobre una receta se mostrará el resumen de opiniones de esa receta.

Image 6

6.1.- (1 punto) Por calcular la media de puntuaciones y mostrar el total de puntuaciones.

Nota: La media se calculará redondeando con dos decimales.

6.2.- (2 puntos) Por calcular el porcentaje de puntuaciones de cada valoración y mostrarlo ordenado de forma inversa (de 5 a 1).

Nota: Los porcentajes se calcularán redondeando al entero más próximo.

Nota: Esto se puede hacer recuperando todas las puntuaciones y contando cuántas hay de cada valoración. También se puede hacer usando consultas de agregación de Prisma. Ejemplo:

const groupUsers = await prisma.user.groupBy({
  by: ["country", "city"],
  _count: {
    _all: true,
    city: true,
  },
  _sum: {
    profileViews: true,
  },
  orderBy: {
    country: "desc",
  },
  having: {
    profileViews: {
      _avg: {
        gt: 200,
      },
    },
  },
});

7.- (1 punto) Al mostrar una receta también se mostrarán sus cinco últimas reseñas.

Image 7

8.- (2 puntos) Al pulsar sobre el enlace con el número de estrellas se mostrarán las reseñas de esa receta que tengan ese número de estrellas. Si se pulsa sobre Customer Review se mostrarán las 5 últimas reseñas.

Nota: Puede hacer esto como quiera. Algunas opciones son navegando, con formularios o con estados de React.

Image 8

9.- (1 punto) Sección My review. Se deben contemplar tres situaciones:

  • El usuario está conectado y ha valorado la receta. Se mostrará la reseña.

Image 9.1

  • El usuario está conectado y no ha valorado la receta. Se mostrará un botón.

Image 9.2

  • El usuario no está conectado. No se mostrará nada.
  • Image 9.3

10.- Realice opcionalmente uno de estos dos ejercicios:

Nota: Sólo se puntuará uno de ellos

10.a.- (1 punto) Realice tests para comprobar que lo realizado en el apartado 9 es correcto.

10.b.- (1 punto) Mostrar las fechas en las reseñas como se muestran sin repetir código.

Image 10.b

Nota: Debe crear una función al que se le pase una fecha y devuelva el literal del mes año o el literal del mes día, año según corresponda.

Para entregar

  • Ejecute el siguiente comando para comprobar que está en la rama correcta y ver los ficheros que ha cambiado:
    git status
  • Prepare los cambios para que se añadan al repositorio local:
    git add .
    git commit -m "completed exam"
  • Compruebe que no tiene más cambios que incluir:
    git status
  • Dígale al profesor que va a entregar el examen.

  • Conecte la red y ejecute el siguiente comando:

    git push origin <nombre-de-la-rama>
  • Abandone el aula en silencio.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages