Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unique commit #41

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
91 changes: 67 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ Para tener un estándar y un layout minimamente definido adjuntamos algunos asse

Piensa en el desafío como una oportunidad de mostrar todo tu conocimiento. **¡Hazlo con calma!** porque tienes una semana para entregar.


Dentro de los elementos que vamos a evaluar se encuentra:

- Consumo de APIs
Expand All @@ -36,7 +35,7 @@ Los únicos requisitos previos para este desafío es que el código se haga en S
- Crear o estructurar tus vistas con Storyboards, Xibs o ViewCode.
- Adoptar la arquitectura que más te acomode y utilizar los patrones de diseño que desees.

Estamos especialmente preocupados por la calidad. Creemos que los patrones de diseño, pruebas automatizadas y la integración contínua son aspectos importantes. Sin embargo, sabemos que éstos no son tópicos dominados por todos y debido a eso hemos estructurado el desafío en varios niveles, los cuales van incrementando en dificultad. Esto implica que un postulante *Senior* debería ser capaz de completar más niveles.
Estamos especialmente preocupados por la calidad. Creemos que los patrones de diseño, pruebas automatizadas y la integración contínua son aspectos importantes. Sin embargo, sabemos que éstos no son tópicos dominados por todos y debido a eso hemos estructurado el desafío en varios niveles, los cuales van incrementando en dificultad. Esto implica que un postulante _Senior_ debería ser capaz de completar más niveles.

# Proceso de desarrollo y envío

Expand All @@ -45,7 +44,7 @@ Estamos especialmente preocupados por la calidad. Creemos que los patrones de di
3. Al momento de hacer commit, sube los cambios a tu fork.
4. Por la interfaz de GitHub, haz un pull request a este repositorio.
5. En el pull request copia y pega la sección **Requerimientos** de este archivo y actualiza las cosas que hayas podido completar.
- Si pudiste completar algún aspecto específico de alguna de las partes, por ejemplo, de la parte 5, pero no terminaste todo lo que se pedía, no hay problema en marcarlo.
- Si pudiste completar algún aspecto específico de alguna de las partes, por ejemplo, de la parte 5, pero no terminaste todo lo que se pedía, no hay problema en marcarlo.

Si tienes alguna consulta, no dudes en preguntarnos :)

Expand All @@ -54,43 +53,88 @@ Si tienes alguna consulta, no dudes en preguntarnos :)
## Información del postulante

### Nombre
_(Tu nombre va aquí)_

Orlando Velasco

### Comentarios

_(Cualquier consideración que quieras mencionar, déjala acá)_
(El desarrollo fue realizado durante el sabado y domingo, dias previos solo definiciones de proyecto. Para analisis de trazabilidad consultar https://github.com/orvenuevo1/ios-recruiting-hsa/tree/main)

El proyecto de aplicación iOS desarrollado en SwiftUI que se centra en la visualización y gestión de películas. A continuación, se presenta una descripción general de su estructura y componentes principales:

Modelos:

- Genre.swift: Define el modelo para los géneros de películas.
- GenreResponse.swift: Modelo para la respuesta de la API de géneros.
- Movie.swift: Define el modelo principal para las películas.
- MoviesResponse.swift: Modelo para la respuesta de la API de películas.

Vistas:

- ContentView.swift: Vista principal de la aplicación.
- MovieView.swift: Vista que muestra la lista de películas.
- MovieDetailView.swift: Vista detallada de una película específica.
- FavoriteMoviesView.swift: Vista que muestra las películas favoritas del usuario.
- SearchBarView.swift: Componente de barra de búsqueda.
- MovieCardView.swift: Componente de tarjeta para representar una película en la lista.
- FavoriteCardMovieView.swift: Componente de tarjeta para representar una película favorita.

Componentes:

- ImageView.swift: Componente para la carga y visualización de imágenes desde una URL.

Gestión de Datos:

- MovieViewModel.swift: ViewModel asociado con MovieView.
- FavoriteMovieManager.swift: Gestor para las operaciones relacionadas con las películas favoritas.
- CoreDataManager.swift: Gestor para las operaciones de la base de datos Core Data.
- GenreManager.swift: Gestor para las operaciones relacionadas con los géneros de películas.
- KeychainManager.swift: Gestor para las operaciones relacionadas con Keychain.
- UserDefaultsManager.swift: Gestor para las operaciones relacionadas con UserDefaults.

Servicios:

- APIManager.swift: Gestor de API para realizar solicitudes a la API de películas.
- Constants.swift: Contiene constantes utilizadas en toda la aplicación.

Workers:

- MoviesWorker.swift: Worker asociado con la funcionalidad de películas.
- GenreWorker.swift: Worker asociado con la funcionalidad de géneros.

## Parte 1

- [ ] Pantalla de Splash
- [ ] Pantalla con una grilla de películas populares. Para ello debes usar esta [API](https://developers.themoviedb.org/3/movies/get-popular-movies)
- [x] Pantalla con una grilla de películas populares. Para ello debes usar esta [API](https://developers.themoviedb.org/3/movies/get-popular-movies) (Se usó el endpoint de Top Rated)
- [ ] Tratamiento de errores y presentación de flujos de excepción:
- [ ] Error genérico
- [ ] Cargando

## Parte 2
- [ ] Al hacer clic en una película de la grilla debe dirigirse a la pantalla de detalle de la película. Esta pantalla debe contener:
- [ ] Nombre de la película
- [ ] Año de estreno
- [ ] Sinopsis
- [ ] El nombre del género de la película y no su ID (ej: Action, Horror, etc). Para ello, debes utilizar esta [API](https://developers.themoviedb.org/3/genres/get-movie-list).

- [x] Al hacer clic en una película de la grilla debe dirigirse a la pantalla de detalle de la película. Esta pantalla debe contener:
- [x] Nombre de la película
- [x] Año de estreno
- [x] Sinopsis
- [x] El nombre del género de la película y no su ID (ej: Action, Horror, etc). Para ello, debes utilizar esta [API](https://developers.themoviedb.org/3/genres/get-movie-list).

## Parte 3

- [ ] Selección de películas favoritas
- [ ] La acción para poner como favorita una película debe estar en la pantalla creada en el nivel 2.
- [ ] La información sobre las películas favoritas debe ser persistente, es decir, debe guardarse entre sesiones de la aplicación.
- [ ] Lista de películas favoritas:
- [ ] Borrado de películas favoritas desde la lista.
- [ ] Layout en pestañas:
- [ ] En la primera pestaña debes mostrarse la pantalla creada en el nivel 1.
- [ ] En la segunda pestaña debes mostrar la lista de películas favoritas.
- [x] Selección de películas favoritas
- [x] La acción para poner como favorita una película debe estar en la pantalla creada en el nivel 2.
- [x] La información sobre las películas favoritas debe ser persistente, es decir, debe guardarse entre sesiones de la aplicación.
- [x] Lista de películas favoritas:
- [x] Borrado de películas favoritas desde la lista.
- [x] Layout en pestañas:
- [x] En la primera pestaña debes mostrarse la pantalla creada en el nivel 1.
- [x] En la segunda pestaña debes mostrar la lista de películas favoritas.

## Parte 4

- [ ] Mejoras a la grilla de películas populares:
- [x] Mejoras a la grilla de películas populares:
- [ ] Scroll infinito.
- [ ] Mostrar si una película es favorita o no en cada celda de la grilla.
- [ ] Búsqueda local (filtrar por algún término).
- [x] Mostrar si una película es favorita o no en cada celda de la grilla.
- [x] Búsqueda local (filtrar por algún término).
- [ ] Pantalla de filtro con selección de fecha de lanzamiento y género:
- [ ] Sólo debe ser accesible desde la pantalla de favoritos.
- [ ] Al aplicar el filtro, debes volver a la pantalla de favoritos y hacer un filtro local usando la información seleccionada referente a la fecha de lanzamiento y el género.
Expand All @@ -106,7 +150,6 @@ _(Cualquier consideración que quieras mencionar, déjala acá)_
- [ ] Integración del repositorio con un servicio de integración continua como [Bitrise](https://www.bitrise.io/) o [AppCenter](https://appcenter.ms). No existe problema en usar otra plataforma, pero esta debe estar disponible online (un jenkins local no cuenta).
- [ ] Integración de un servicio de análisis de código como [SonarCloud](https://sonarcloud.io/).


# Ejemplos y sugerencias

A continuación puedes ver algunas pantallas de ejemplo de algunos flujos. Son sólo sugerencias, pero puedes modificarlas a tu gusto.
Expand All @@ -122,4 +165,4 @@ Para facilitar el proceso, tienes assets, iconos de aplicación y paleta de colo

## Flujo opcional de filtro

![Image of Yaktocat](assets/flow/filtro.png)
![Image of Yaktocat](assets/flow/filtro.png)
Binary file added movieAppAccen/.DS_Store
Binary file not shown.
Loading