{"id":19440507,"url":"https://github.com/felilo/moviedb","last_synced_at":"2026-05-16T09:05:00.534Z","repository":{"id":94170013,"uuid":"487867619","full_name":"felilo/MovieDB","owner":"felilo","description":"is an iOS app that gets a list of movies categorized by category and shows their details and thriller videos","archived":false,"fork":false,"pushed_at":"2022-05-08T01:22:29.000Z","size":587,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-25T07:29:48.232Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/felilo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-02T14:05:00.000Z","updated_at":"2022-10-24T17:05:29.000Z","dependencies_parsed_at":"2023-03-17T22:30:57.708Z","dependency_job_id":null,"html_url":"https://github.com/felilo/MovieDB","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/felilo/MovieDB","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felilo%2FMovieDB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felilo%2FMovieDB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felilo%2FMovieDB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felilo%2FMovieDB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/felilo","download_url":"https://codeload.github.com/felilo/MovieDB/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felilo%2FMovieDB/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285215527,"owners_count":27133906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-19T02:00:05.673Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T15:29:31.474Z","updated_at":"2025-11-19T09:04:10.117Z","avatar_url":"https://github.com/felilo.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TechnicalTest #\n\nRequisitos:\n\nTener instalado cocoapods https://cocoapods.org\nEn la raiz del proyecto, desde la terminal, ejecutar el comando:\n\n```\n$ pod install\n$ Abrir el archivo TechnicalTest.xcworkspace\n```\n\n### Estructura del proyecto ###\n\nA continuacion una descripcion general de la estructura del proyecto y como esta compuesto cada directorio: \n\n-   app: Este grupo contiene las clases principales de la app\n    -   AppDelegate: es un protocolo que define métodos que son llamados por el objeto de UIA singleton UIA en respuesta a eventos importantes en la vida de una aplicación \n    -   scenceDelegate: \n    -   MainCoordinator: Coordinador de navegacion principal de la app\n    -   ConfigApp: Clase que se encarga de obtener los datos globales de la app, por ejemplo la base_url del api, etc\n-   shared: Este grupo contiene las clases, enumerados, extensiones, modelos de negocio, proovedores, etc. Que pueden ser accedidos por cualquier modulo o clase de la app.\n    -   utils: \n        -   Coordinator: Definicion del protocolo para la navegación en la app\n        -   Bindable: Clase encargada de ejecutar acciones reactivas\n        -   DefaultCollectionCell: Es una clase generica de tipo UICollectionViewCell\n    -   managers:\n        -   ImageManager: Es una envoltura para el uso de libreria de terceros con el fin de ejecutar acciones/funciones relacionadas al manejo de imagenes\n        -   ResquestManager: Es una envoltura para el uso de libreria de terceros con el fin de ejecutar acciones/funciones relacionadas al manejo de peticiones Http\n    -   views: \n        -   CardCollection: Es un collectionView con direccion horizontal con celdas en forma de tarjetas construido a modo de componente el cual revice una lista de items,  esta confirmado por:\n            -   CardCollectionView: Es una clase de tipo UICollectionView la cual es encargada de realizar toda la configuración \n            -   CardCollectionView+Extensions: Ejecuta e implementa todas las funciones y protocolos relacionadas a un collectionView\n            -   CardViewCell: Es una clase de tipo UICollectionView la cual es encargada crear la vista y comunicar a esta con la colleccion\n\n    -   extensions: \n        -   UIView+Helpers: Encargada de crear nuevas funcionalidades para la clase UIView\n        -   CollectionView+Helpers: Encargada de crear nuevas funcionalidades para la clase CollectionView.\n    -   providers: Provedores para obtener datos desde un repositorio\n        -   movie provider:\n            -   MovieProvider+Protocols: Contrato q deben implementar todos los servicio\n            -   MovieProvider: Encargado de pedir obtener los datos de un servicio\n            -   MovieApiService: Clase que se encarga de ejecutar peticiones HTTP a travez del ResquestManager y procesar los datos\n        -   video provider:\n            -   VideoProvider+Protocols: Contrato q deben implementar todos los servicio\n            -   VideoProvider: Encargado de pedir obtener los datos de un servicio\n            -   VideoApiService: Clase que se encarga de ejecutar peticiones HTTP a travez del ResquestManager y procesar los datos\n    -   modelos: son clases encargadas de definir el modelo de negocio de la app:\n        -   MovieModel: Clase q esta compuesta por propiedades y funciones los cuales se encargana de definir el modelo de negocio\n        -   VideoModel: Clase q esta compuesta por propiedades y funciones los cuales se encargana de definir el modelo de negocio\n-   modules: \n    -   home: \n        - HomeCoordinator: Encargado de definir y manejar toda la navegcion entre controladores o sub modulos\n        -   sub modulos (list, detail):\n            -   List: Es una lista de peliculas clasificadas por categoria \n                -   MediaListViewModel: Encargado de procesar la informacion necesaria para finalmente trasmilirla de forma reactiva al MediaListController. Esta clase puede comunicarse con MovieProvider, HomeCoordinator.\n                -   MediaListController: Encargado de recibir los datos que llegan desde el MediaListViewModel y mostrarlos graficamente. Esta clase unicamente puede comunicarse con MediaListViewModel.\n            -   Detail: Detalle de una pelicula\n                -   EntertainmentMediaDetailViewModel: Encargado de procesar la informacion necesaria para finalmente trasmilirla de forma reactiva al EntertainmentMediaDetailController. Esta clase puede comunicarse con VideoProvider, HomeCoordinator.\n                -   EntertainmentMediaDetailController: Encargado de recibir los datos que llegan desde el EntertainmentMediaDetailViewModel y mostrarlos graficamente. Esta clase unicamente puede comunicarse con EntertainmentMediaDetailViewModel.\n            -   Video Player: Reproducir un video\n                -   VideoPlayerViewModel: Encargado de procesar la informacion necesaria para obtener el tipo de video player finalmente trasmilirla de forma reactiva al VideoPlayerController. Esta clase puede comunicandose con HomeCoordinator.\n                -   VideoPlayerController: Encargado de recibir los datos que llegan desde el VideoPlayerViewModel y mostrarlos graficamente. Esta clase unicamente puede comunicarse con VideoPlayerViewModel.\n            \n            \n\n\n### Cambiar configuraciones globales del proyecto (opcional) ###\n\nPara modificar los parametros globales del proyecto editar el archivo \"Config.plist\", ubicado en el directorio \"MovieDB\"\n\n\n### Principio de responsabilidad unica? ###\n\nEs una clase, objeto o modulo responsable realizar una unica tarea o funcion, la cual \"solo debe tener una razon para cambiar\". Este principio promueve los ideales de la programacion orientada a objetos. Algunas ventajas de este principio son: un nivel muy alto de abstracción, modularidad y la reutilización de componentes debido a que cada clase está completamente encapsulada.\n\n\n### Que caracteristicas  tiene un buen buen codigo ###\n\nLa escritura debe ser clara, buena segregacion, cumplir con parametros de alineamientos (lint), las funciones deben tener pocas lineas de codigo y finalmente aplicar e implementar buenas practicas como los principios de SOLID, arquitecuras y patrones de diseño\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelilo%2Fmoviedb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelilo%2Fmoviedb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelilo%2Fmoviedb/lists"}