Talently Challenge

Configuración

Este repositorio incluye la configuración inicial para este problema, incluyendo los specs. Usa la librería de Kahlan, que probablemente no has usado. Pero no te preocupes, no hay mucho que aprender. Revisa los specs y entenderás la sintaxis básica en menos de un minuto.

Tu tarea es:

  1. Refactorizar el código en la clase VillaPeruana.php.
  2. Agregar un nuevo typo de elemento, "Café". Las especificaciones para este elemento están comentadas en el archivo VillaPeruanaScpec.php.

Flujo

Debes tener instalado docker en tu computadora para usar nuestros comandos del flujo de trabajo

  • Usa el comando ./start para inicializar el docker
  • Usa el comando ./test para correr los tests
  • Usa el comando ./finish para desactivar el docker

Reglas

Hola y bienvenido al equipo La Villa Peruana. Como sabes, somos una pequeña posada, con una excelente ubicación en una ciudad importante, administrada por nuestra amigable Allison. También compramos y vendemos los más finos productos. Desafortunadamente, nuestros productos se van desgradando constantemente en calidad conforme se acercan a su fecha de vencimiento. Tenemos un sistema que actualiza nuestro inventario por nosotros. Fue desarrollado por un desarrollador llamado Elmo, quien ha ido en busca de nuevas aventuras.

Queremos agregar una nueva categoría de productos al sistema y para ello necesitamos tu ayuda.

Primero, una introducción a nuestro sistema:

  • Todos los productos tienen un SellIn que denota el número de días que se tienen para vender el producto
  • Todos los productos tienen un Quality que denota cuán valioso es el producto
  • Al final de cada día, nuestro sistema disminuye los ambos valores para cada producto

Bastante simple, ¿verdad? Bueno, acá se pone interesante:

  • Cuando la fecha de venta ha pasado, el Quality se degrada dos veces más rápido
  • El Quality de un producto nunca es negativo
  • Los productos "Pisco Peruano", en realidad, incrementan en Quality mientras más viejos están
  • El Quality de un producto nunca es mayor a 50
  • Los productos "Tumi", siendo un producto legendario, nunca debe ser vendido o bajaría su Quality
  • Los "Tickets VIP", así como "Pisco Peruano", incrementan su Quality conforme su SellIn se acerca a 0, el Quality incrementa en 2 cuando faltan 10 días o menos y en 3 cuando faltan 5 días o menos, pero el Quality disminuye a 0 después del concierto.

Recientemente hemos firmado un contrato con un proveedor de productos de "Café". Esto require una actualización para nuestro sistema:

  • Los productos de "Café" se degradan en Quality el doble que los productos normales

Para dejarlo claro, un producto nunca puede incrementar su Quality mayor a 50, sin embargo "Tumi" es un producto legendario y como tal su Quality es 80 y nunca cambia.

Entregable o Expectativa del reto

  • La limpieza y legibilidad del código será considerada.
  • La eficiencia del código en cuestiones de rendimiento sumarán para esta prueba.
  • Será indispensable uso de principios S.O.L.I.D.
  • Al finalizar el reto, enviar el enlace de la solución a emmanuel.barturen@talently.tech con copia a cristian@talently.tech con título "Reto Talently 2021-05"

Preguntas de conocimiento en Laravel

  1. Qué paquete o estrategia utilizarías para levantar un sistema de administración rápidamente? (Autenticación y CRUDs)
  2. Una breve explicación de cómo laravel utiliza la injección de dependencias
  3. En qué casos utilizarías un Query Scope?
  4. Qué convenciones utilizas en la creación e implementación de migraciones?