Curso intensivo de Laravel y Android usando JWT y Kotlin
4.6 (138 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
734 students enrolled

Curso intensivo de Laravel y Android usando JWT y Kotlin

Desarrollemos 1 app de Reserva de Citas! Gestión, reportes, API, JWT, notificaciones, Programación Funcional y mucho más
4.6 (138 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
734 students enrolled
Created by Juan Ramos
Last updated 5/2020
Spanish
Spanish [Auto-generated]
Current price: $139.99 Original price: $199.99 Discount: 30% off
5 hours left at this price!
30-Day Money-Back Guarantee
This course includes
  • 38 hours on-demand video
  • 4 downloadable resources
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • Aprenderás a crear tus propias aplicaciones Android nativas
  • Conocerás qué es y como funciona una API
  • Trabajarás de forma organizada usando Android Studio
  • Mejorarás tus conocimientos de Java y Kotlin
  • Conocerás cómo implementar JSON Web Tokens (en Laravel y Android)
Course content
Expand all 159 lectures 37:47:26
+ Introducción
2 lectures 13:53

Este es un video introductorio al curso, donde te doy algunas sugerencias para que puedas aprovechar mejor el curso.

Preview 02:57

Veamos qué secciones va a contener nuestra aplicación, tanto en su versión web como móvil.

Preview 10:56
+ Laravel: Configuración y Diseño inicial
10 lectures 02:07:31

Empecemos instalando lo necesario, y creando un proyecto Laravel nuevo, con su correspondiente base de datos y VirtualHost.

Laravel: Configuración local
11:02

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.

Migraciones y Autenticación
05:35

Vamos a descargar la plantilla Argon Dashboard, para posteriormente integrar esta plantilla sobre nuestro proyecto Laravel.

Diseño base para nuestra app web
02:06

¿Cuál es el flujo qué sigue el servidor cuando resuelve una petición?

Vistas, rutas y controladores
07:29

Empecemos a integrar sobre nuestro proyecto la plantilla Argon que hemos descargado anteriormente.

Integrar plantilla Argon (Login)
31:13

Continuamos integrando la plantilla Argon Dashbord sobre nuestro proyecto.

Formulario de registro y menú superior
08:56

En esta lección actualizamos el título, subtítulo y footer de nuestra página.

Múltiples directivas yield y section
10:53

Definamos un layout para que sea usado como base por las vistas correspondientes a nuestro dashboard.

Layout general para las vistas de Panel
14:12

Veamos cómo declarar el menú lateral izquierdo en una vista independiente, y cómo modificar el color e íconos de las opciones.

Directiva include y menú lateral
15:20

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.

Dropdown menu
20:45
+ Laravel: Gestión de datos
11 lectures 02:33:35

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.

Especialidades
28:53

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.

Validaciones de lado del cliente y servidor
09:11

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.

Verbo PUT (editar especialidades)
13:57

Repasemos las distintas rutas que tenemos creadas, respecto a la gestión de especialidades, e implementemos la eliminación de datos para esta entidad.

Verbo DELETE (eliminar especialidades)
07:05

Veamos cómo podemos pasar una variable cuando usamos un redirect. El funcionamiento es distinto a pasar datos directamente sobre una vista.

Flashed Session Data (notificaciones)
10:26

Veamos cómo definir rutas y métodos de controlador de una manera más rápida y abreviada.

Doctor Resource
17:50

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.

Seeders, Model factories y Faker
14:27

Veamos cómo simplificar nuestras consultas Eloquent definiendo Scopes en nuestros modelos (en este caso dentro de nuestra clase User).

Query Scopes
10:47

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.

Mass assignment y edit
22:31

Veamos cómo actualizar los datos de un médico (opcionalmente también su contraseña), y así mismo, cómo eliminar médicos.

Métodos update y destroy
08:33

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).

Patient Resource
09:55
+ Laravel: Roles y seguridad
3 lectures 22:53

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.

Menú por rol
10:49

Veamos cómo definir y registrar nuestro propio middleware, haciendo uso de un "grupo de rutas".

Proteger rutas usando Middlewares
07:40
Organizando controladores en carpetas
04:24
+ Laravel: Horarios, citas y especialidades
17 lectures 05:41:56

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.

Ruta y vista (diseño inicial)
15:32

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.

Modelado y lógica para guardar
25:06

En esta lección vemos la importancia de usar Git, y cómo crear nuestro repositorio, a fin de publicar nuestros avances en Github.

Repositorio en Github (Proyecto Laravel)
05:35

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.

Mostrar horario (Carbon y método map)
15:30

Veamos cómo validar los intervalos de horas, en los horarios de los médicos, sin usar las validation rules de Laravel.

Consistencia en las horas
15:09

Empecemos definiendo una ruta y un vista para el registro de citas, además de añadir el enlace correspondiente en el menú lateral.

Formulario: Registrar cita médica
11:50

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.

Relación muchos a muchos
13:39

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.

Selección múltiple en un <select>
11:57

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.

Gestionando relaciones Many to Many
15:42

En esta lección creamos un endpoint (ruta) para que devuelva la lista de médicos (en formato JSON) asociados a una especialidad determinada.

Médicos según especialidad
14:56

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).

Select dinámico y límites al DatePicker
13:32

Veamos cómo obtener la lista de intervalos disponibles para atención, para un médico, en un día determinado.

Horas de atención por intervalos
30:58

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.

Radio Buttons y Alert dinámicamente
22:43

¡Á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.

Registro de cita médica (Web)
01:04:32

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.

Repaso y Service Providers
40:40

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.

Bloquear horas según reserva de citas
08:17

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.

Validación de horas (evitar colisión)
16:18
+ Laravel: Estados de una cita
10 lectures 02:46:41

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.

Campo status y relaciones entre modelos
24:54

¿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.

Lógica para los estados y siguientes pasos
16:36

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.

Citas organizadas en tabs
19:45

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.

Cancelación de citas médicas
33:41

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.

Detalles de cancelación
19:47

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.

Login como pág de inicio
03:32

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.

Consultas según el rol de usuario
17:31

Veamos cómo separar las opciones del menú, según cada rol, en vistas independientes.

Include según el rol de usuario
05:33

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.

Detalles de citas para el rol administrador
09:47

En esta lección implementamos el botón Confirmar cita, y actualizamos textos y botones en función al rol de usuario.

Confirmar cita
15:35
+ Laravel: Gráficos con JS
6 lectures 02:15:33

Veamos brevemente qué alternativas tenemos,  y algunas sugerencias a tener en cuenta cuando trabajamos con bibliotecas JS.

Introducción a los reportes gráficos
09:10

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 directa @json (que ofrece Blade).

Highcharts line (gráfico de líneas)
26:25

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).

Highcharts column (gráfico de barras)
41:05

En esta lección vemos cómo poblar nuestra tabla de citas médicas, de manera automatizada, usando Faker para generar datos aleatorios.

Seeder de Appointments
19:17

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).

Formato adecuado para la respuesta JSON
11:59

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).

Filtro: Actualizar según rango de fechas
27:37
+ Android: Vistas
10 lectures 02:13:18

Veamos brevemente como iniciar con la descarga e instalación de Android Studio.

Instalar Android Studio
02:45

Consideraciones a tener en cuenta al momento de crear un proyecto Android nuevo.

Creando un proyecto nuevo
09:45

Veamos cómo se organizan las carpetas y qué contienen, en un proyecto Android nuevo.

Estructura de carpetas
04:44

Veamos cómo crear e iniciar un primer dispositivo virtual, a fin de ejecutar allí nuestro proyecto.

AVD Manager
06:05

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.

Diseñando una primera vista
31:52

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.

RegisterActivity y fondo gradiente
21:19

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.

Diseño de MenuActivity
19:10

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.

Diseño de CreateAppointment
15:46

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).

Pasos en el registro de Citas
14:22

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.

Cómo poblar un Spinner (asignar opciones)
07:30
+ Kotlin, como alternativa a Java
14 lectures 03:03:54

Veamos una breve introducción a Kotlin como lenguaje de programación: cómo surge, quién lo desarrolla, y las ventajas que ofrece.

Preview 10:20

¿Qué tal si empezamos viendo las diferencias entre Java y Kotlin a través de un programa de "Hola mundo"?

Primer proyecto Kotlin
14:37

¿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.

Data Classes
26:39

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.

Operators
18:29

Veamos qué son y cómo definir Extension Functions y Extension Properties, a través de ejemplos.

Extension Functions & Properties
11:32

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.

Infix functions
02:55

Veamos cómo definir nuestros propios getters y setters para los atributos de una clase.

Getters & Setters
12:15

Veamos cuáles son la diferencias entre una expresión, una sentencia y un bloque de código.

Expression, Statement & Block
05:13

Veamos ejemplos de las distintas maneras de usar la condición IF en Kotlin.

If (como statement y como expression)
10:48
When
10:26

En esta lección vemos cómo funciona la seguridad ante nulos de Kotlin.

Null safety
14:42

En esta lección vemos un poco más acerca de las distintas formas en que podemos usar when.

When - Parte 2
07:52

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.

For, Ranges & forEach
12:44

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.

Functional Programming
25:22
+ Android: DatePicker y otros detalles
6 lectures 56:37

Veamos cómo mostrar un DatePickerDialog para permitir a un usuario seleccionar una fecha, cuando haga clic sobre un EditText.

DatePickerDialog
14:39

Veamos cómo podemos animar cambios en un layout agregando únicamente un atributo, sin código adicional.

Animate layout changes
02:10

Veamos cómo agregar RadioButtons dinámicamente (desde código) sobre un RadioGroup.

Agregar RadioButtons dinámicamente
05:07

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.

Múltiples RadioButtons y cómo eliminarlos
02:56

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.

RadioButtons en columnas
17:43

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).

Fecha: formato, valor mínimo y máximo
14:02
Requirements
  • Es importante tener muchas ganas de aprender
  • Se recomienda tener conocimientos básicos de algún lenguaje de programación
Description

Este es un curso cuyo objetivo 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.

Además, 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.

Who this course is for:
  • Personas interesadas en aprender a desarrrollar aplicaciones móviles
  • Programadores que desean iniciar su camino en el desarrollo de aplicaciones Android nativas
  • Desarrolladores que desean aprender cómo comunicar un proyecto Laravel con Android a través de una API