
Este es un video introductorio al curso, donde te doy algunas sugerencias para que puedas aprovechar mejor el curso.
Veamos qué secciones va a contener nuestra aplicación, tanto en su versión web como móvil.
Empecemos instalando lo necesario, y creando un proyecto Laravel nuevo, con su correspondiente base de datos y VirtualHost.
Cada vez tenemos versiones Laravel más recientes. Qué versión debemos usar para seguir el curso, y consejos para aprender Laravel.
En esta lección vemos qué son y cómo ejecutar migraciones para alterar nuestro esquema de base de datos. También implementamos nuestro sistema de autenticación.
Vamos a descargar la plantilla Argon Dashboard, para posteriormente integrar esta plantilla sobre nuestro proyecto Laravel.
¿Cuál es el flujo que sigue el servidor cuando resuelve una petición?
Empecemos a integrar sobre nuestro proyecto la plantilla Argon que hemos descargado anteriormente.
Continuamos integrando la plantilla Argon Dashbord sobre nuestro proyecto.
En esta lección actualizamos el título, subtítulo y footer de nuestra página.
Definamos un layout para que sea usado como base por las vistas correspondientes a nuestro dashboard.
Veamos cómo declarar el menú lateral izquierdo en una vista independiente, y cómo modificar el color e íconos de las opciones.
Veamos cómo organizar adecuadamente el menú que se muestra como dropdown. Así mismo inicializamos un repositorio de Git, y terminamos de integrar la plantilla base.
Definamos nuestro primer modelo, migración y controlador; además de configurar las rutas para nuestro CRUD de especialidades. También vemos cómo hacer uso del middleware auth.
Veamos cómo validar de lado del cliente y de lado del servidor, haciendo uso de las "validation rules" de Laravel y personalizando los mensajes de error.
Veamos cómo definir rutas con distintos verbos HTTP y cómo asociar un formulario con uno de estos verbos al realizar una actualización de datos.
Repasemos las distintas rutas que tenemos creadas, respecto a la gestión de especialidades, e implementemos la eliminación de datos para esta entidad.
Veamos cómo podemos pasar una variable cuando usamos un redirect. El funcionamiento es distinto a pasar datos directamente sobre una vista.
Veamos cómo definir rutas y métodos de controlador de una manera más rápida y abreviada.
Veamos cómo poblar nuestra base de datos con datos ficticios, pero que parecen ser reales. Así mismo, como automatizar este proceso, para no detenernos a escribir personalmente tales datos.
Veamos cómo simplificar nuestras consultas Eloquent definiendo Scopes en nuestros modelos (en este caso dentro de nuestra clase User).
Anteriormente vimos cómo registrar datos usando el método save. Ahora veamos cómo registrar usando mass assignments (creación basada en arreglos asociativos). Finalmente avanzamos con nuestra vista de edición.
Veamos cómo actualizar los datos de un médico (opcionalmente también su contraseña), y así mismo, cómo eliminar médicos.
A modo de repaso, implementemos rápidamente la gestión de pacientes en nuestra aplicación (listado, paginación, registro, edición, y eliminación).
Nuestro menú constante lo vamos a reemplazar por un menú cuyas opciones dependen del rol del usuario.
También vemos una introducción a la importancia de los Middlewares.
Veamos cómo definir y registrar nuestro propio middleware, haciendo uso de un "grupo de rutas".
En esta lección ubicamos nuestros controladores en carpetas, para conseguir un mayor orden.
Empecemos añadiendo un enlace correspondiente en el menú, que lleve a una nueva ruta, resuelta por una vista que empezaremos ya a diseñar.
En esta lección definimos un modelo y una migración, y empezamos a guardar información con relación al horario. Dependiendo de la situación se actualizan o crean registros nuevos.
En esta lección vemos la importancia de usar Git, y cómo crear nuestro repositorio, a fin de publicar nuestros avances en Github.
Veamos cómo mostrar los horarios de un médico sobre nuestra vista. De esta manera vamos a poder confirmar también, si el registro ocurre satisfactoriamente o no. Hacemos un cambio de formato en las horas, usando Carbon. Así mismo usamos el método map para actualizar los valores de los elementos de una colección.
Veamos cómo validar los intervalos de horas, en los horarios de los médicos, sin usar las validation rules de Laravel.
Empecemos definiendo una ruta y una vista para el registro de citas, además de añadir el enlace correspondiente en el menú lateral.
Veamos cómo definir una relación Many to Many (o muchos a muchos) entre Especialidades y Médicos. Para esto definimos las relaciones entre modelos en las clases correspondientes, y creamos una tabla intermedia.
Veamos cómo habilitar una selección mútliple sobre una lista desplegable, a fin de poder asociar más de 1 especialidad al mismo médico. Para esto usaremos una biblioteca llamada bootstrap-select.
Veamos cómo podemos definir relaciones entre modelos, cuando el tipo de relación es muchos a muchos. Así mismo, cómo pasar un arreglo PHP a Javascript.
En esta lección creamos un endpoint (ruta) para que devuelva la lista de médicos (en formato JSON) asociados a una especialidad determinada.
Veamos cómo cargar la lista de médicos en el select correspondiente, según la especialidad escogida. Por otro lado, veamos cómo limitar las fechas para la reserva de citas (valor mínimo y máximo).
Veamos cómo obtener la lista de intervalos disponibles para atención, para un médico, en un día determinado.
En esta lección mostramos las horas disponibles para atención, y así mismo un alerta, cuando no hay espacios disponibles según el horario del médico.
¡Ánimos! Esta es una de las clases más extensas del curso, pero no te rindas hasta llegar al final. Definimos el método store en nuestro AppointmentController, para registrar citas médicas. Vemos qué son y cómo definir Factory States. Organizamos nuestros Seeders. Trabajamos con el helper old. Revisamos la diferencia entre mostrar data dinámicamente con JS, y mostrar data desde un inicio, inyectando variables sobre la vista.
En esta lección vemos cuál es la diferencia entre validaciones de lado del cliente y validaciones de lado del servidor. Vemos qué son y cómo usar servicios y service providers. Finalmente saltamos validaciones de lado del cliente, para demostrar que las validaciones en el backend no se pueden obviar.
Si un paciente reserva una cita para una hora determinada, entonces esa hora no debe estar disponible para otros pacientes. Es lo que implementamos en esta lección.
En la lección anterior vimos cómo detectar qué horas estaban ocupadas, a fin de no listarlas al momento de registrar una cita. ¿Pero qué ocurre si más de 1 paciente está registrando una cita y ambos seleccionan el mismo intervalo? Veamos cómo validar adecuadamente de lado del servidor.
En esta lección vemos cómo añadir columnas nuevas a través de migraciones (sin perder la data que ya se tiene). Vemos cómo establecer relaciones entre modelos (en este caso con relación a Appointment). Y también definimos una vista para listar las citas de un paciente determinado.
¿Cuáles son los estados de una cita y qué es lo que ocurre al cambiar de un estado a otro? Revisemos de forma general la situación de nuestro proyecto, para definir lo próximo a desarrollar.
Veamos cómo organizar las citas según su estado, usando un elemento de Bootstrap 4. También cómo separar las tablas en vistas independientes.
En esta lección implementamos la cancelación de citas, tanto para citas que recientemente fueron registradas, como para aquellas que ya habían sido confirmadas por un médico o administrador. En este último caso, se deberá indicar el motivo de la cancelación.
En esta lección vemos cómo mostrar condicionalmente los detalles de una cita cancelada. También vemos cómo renombrar una columna a través de una nueva migración, sin perder nuestros datos ya registrados.
En esta lección vemos cómo redirigir al login desde nuestra ruta principal. También empezamos a analizar cómo se mostrarán las citas a los médicos, a diferencia de los pacientes.
Veamos cómo listar las citas para los médicos, a diferencia de los pacientes. Así mismo, cómo podemos usar íconos en vez de texto para los botones, y añadir unos tooltips.
Veamos cómo separar las opciones del menú, según cada rol, en vistas independientes.
Veamos cómo mostrar los detalles de citas médicas al administrador, sin afectar lo que ya tenemos definido para médicos y pacientes. También movemos las vistas de nuestras tablas a una carpeta para conseguir un mayor orden.
En esta lección implementamos el botón Confirmar cita, y actualizamos textos y botones en función al rol de usuario.
Veamos brevemente qué alternativas tenemos, y algunas sugerencias a tener en cuenta cuando trabajamos con bibliotecas JS.
En esta lección incluimos un primer reporte gráfico sobre nuestra app web. Comentamos qué alternativas tenemos para enviar datos al gráfico, y optamos por una de ellas, usando la directiva @json (que ofrece Blade).
En esta lección agregamos un reporte gráfico más, basado en columnas. Revisamos cómo es que podemos generar un JSON con un formato determinado a partir de arreglos en PHP (basados en índices, y asociativos).
En esta lección vemos cómo poblar nuestra tabla de citas médicas, de manera automatizada, usando Faker para generar datos aleatorios.
Veamos cómo dar formato a la respuesta JSON que devuelve el servidor, para que se pueda usar directamente sobre nuestro gráfico de barras (usando Javascript).
En esta lección vemos cómo solicitar datos al servidor en función a un rango de fechas, y cómo actualizar la gráfica de Highcharts acorde a ello (sin la necesidad de recargar toda la página).
Veamos brevemente como iniciar con la descarga e instalación de Android Studio.
Consideraciones a tener en cuenta al momento de crear un proyecto Android nuevo.
Veamos cómo se organizan las carpetas y qué contienen, en un proyecto Android nuevo.
Veamos cómo crear e iniciar un primer dispositivo virtual, a fin de ejecutar allí nuestro proyecto.
En esta lección vemos los conceptos más básicos acerca de las vistas y layouts en Android. Diferencia entre View y ViewGroup. Añadimos elementos y atributos en nuestro XML, para definir un primer diseño, para nuestro Activity de Login.
En esta lección modificamos el diseño de nuestra vista de Login, añadiendo un recurso drawable que es usado como fondo. También definimos un activity para el registro, y vemos cómo podemos iniciar un activity a partir de otro.
En esta lección añadimos un activity representando al menú de nuestra aplicación. Vemos cómo cargar íconos a nuestro proyecto, cómo definir estilos xml (con atributos en común), cómo modificar el nombre de nuestra aplicación, la importancia del package name, y atajos de teclado útiles en Android Studio.
En esta lección empezamos estableciendo un diseño base para nuestro CreateAppointActivity. Incluimos un CardView, un Spinner, definimos un RadioGroup y sus correspondientes RadioButtons, y analizamos los pasos a seguir en la interfaz para la creación de una cita médica.
En esta lección añadimos un CardView por cada paso en el registro de citas, y vemos cómo alternar entre ellos (es decir, cómo modificar la visibilidad de elementos desde programación). También vemos cómo agregar un Scroll (importante cuando la lista de elementos crece mucho).
Veamos cómo poblar un Spinner, asignando opciones a través de un Adapter. De momento las opciones son constantes, pero posteriormente se reemplazará con información obtenida del servidor.
Veamos una breve introducción a Kotlin como lenguaje de programación: cómo surge, quién lo desarrolla, y las ventajas que ofrece.
¿Qué tal si empezamos viendo las diferencias entre Java y Kotlin a través de un programa de "Hola mundo"?
¿Cómo comparamos 2 objetos en Java y cómo convertimos objetos en cadena? Podemos definir métodos para ello. Veamos cómo hacerlo. Y veamos cómo es automático ello en Kotlin.
Veamos cómo podemos usar operadores básicos en Kotlin, y luego cómo podemos definir nuestros propios operadores; por ejemplo, de incremento/decremento y de comparación, entre objetos. También vemos brevemente qué son las extension functions, que es el tema de la lección siguiente.
Veamos qué son y cómo definir Extension Functions y Extension Properties, a través de ejemplos.
Cuando una función tiene un único parámetro podemos declarar esta función como una infix function, y entonces se podrá llamar usando una notación infija.
Veamos cómo definir nuestros propios getters y setters para los atributos de una clase.
Veamos cuáles son la diferencias entre una expresión, una sentencia y un bloque de código.
Veamos ejemplos de las distintas maneras de usar la condición IF en Kotlin.
En esta lección vemos cómo hacer uso de When en Kotlin. El bloque When se considera como una versión avanzada de lo que es Switch en Java.
En esta lección vemos cómo funciona la seguridad ante nulos de Kotlin.
En esta lección vemos un poco más acerca de las distintas formas en que podemos usar when.
Veamos ejemplos de cómo usar un bucle for, en conjunto con rangos de valores (y sus correspondientes índices). También vemos cómo usar forEach a partir de un Array.
Veamos una comparación entre la clásica programación imperativa y el paradigma de la programación funcional, además de algunos ejemplos de cómo usar Functional Programming en Kotlin.
Veamos cómo mostrar un DatePickerDialog para permitir a un usuario seleccionar una fecha, cuando haga clic sobre un EditText.
Veamos cómo podemos animar cambios en un layout agregando únicamente un atributo, sin código adicional.
Veamos cómo agregar RadioButtons dinámicamente (desde código) sobre un RadioGroup.
Continuando lo visto en la lección anterior, ahora procedemos a mostrar varios RadioButtons dinámicamente, y también vemos cómo eliminarlos, para evitar que se acumulen.
En esta lección vemos cómo mostrar programáticamente RadioButtons en 2 columnas (usando 2 LinearLayout con orientación vertical para lograr separar estos 2 grupos). Vemos una limitación que presentan los RadioGroups y optamos por escribir una solución a medida.
Veamos cómo validar la fecha ingresada a través del DatePickerDialog. Así mismo, cómo agregar un 0 adelante del día o mes, si éstos se corresponden con 1 sólo dígito. Esto último lo logramos definiendo una extension function (que por cierto es declarada de manera muy concisa).
¿Te gustaría aprender a desarrollar tu primera aplicación, web y móvil?
¿Te gustaría crear una aplicación Android y conectarla a un panel web administrativo?
Entonces has llegado al curso indicado! :)
El objetivo de este curso es explicar de forma detallada cómo desarrollar un proyecto en Laravel y Android, y cómo lograr una comunicación efectiva entre ambos.
Usaremos Laravel para desarrollar un sistema web, que permitirá al administrador generar reportes, gestionar toda la información de especialidades, médicos y pacientes. Y así mismo usaremos el proyecto Laravel para desarrollar nuestra propia API.
Por otro lado, usaremos Android, para permitir a los pacientes registrar sus datos básicos, solicitar citas, y recibir recordatorios cuando corresponda.
Este curso es ideal para profundizar tus conocimientos sobre ambas tecnologías.
Lo mejor es que al final tendrás una aplicación completamente funcional, tanto en versión web como móvil, que podrás adaptar y/o usar como guía para desarrollar tus propios proyectos.
Anímate!
El curso muestra paso a paso todo el proceso de desarrollo, por lo que al finalizar, no tendrás inconvenientes para personalizar la aplicación a tu gusto, y exponerla como un proyecto en tu portafolio profesional.
De hecho te cuento un secreto:
Este proyecto lo usé como base para la presentación de mi tesis de pregrado.