{"id":19140482,"url":"https://github.com/mchirino89/codechallengue","last_synced_at":"2025-08-23T23:13:02.693Z","repository":{"id":129198688,"uuid":"176118534","full_name":"mchirino89/codeChallengue","owner":"mchirino89","description":"Solstice code challenge for recruiting ","archived":false,"fork":false,"pushed_at":"2019-03-19T00:31:48.000Z","size":1383,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-03T14:50:55.183Z","etag":null,"topics":["challenge","code","ios","solstice","swift"],"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/mchirino89.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":"2019-03-17T15:10:19.000Z","updated_at":"2019-03-19T00:31:50.000Z","dependencies_parsed_at":"2023-03-13T11:25:07.487Z","dependency_job_id":null,"html_url":"https://github.com/mchirino89/codeChallengue","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchirino89%2FcodeChallengue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchirino89%2FcodeChallengue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchirino89%2FcodeChallengue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchirino89%2FcodeChallengue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mchirino89","download_url":"https://codeload.github.com/mchirino89/codeChallengue/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240222505,"owners_count":19767458,"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","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":["challenge","code","ios","solstice","swift"],"created_at":"2024-11-09T07:17:43.116Z","updated_at":"2025-02-22T19:13:16.962Z","avatar_url":"https://github.com/mchirino89.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Code challengue\nSolstice code challenge for recruiting at iOS positions.\nYou can find the requirements of this exercise in the [pdf](\"https://github.com/mchirino89/codeChallengue/blob/master/ProgrammingChallengeMobile.pdf\") placed at the root of the repo.\n\n# Technologies\n\nSome frameworks were included in this project in order to speed up the process: \n\n* [Cocoapods](https://cocoapods.org/)\n* [Alamofire](https://github.com/Alamofire/Alamofire)\n* [AlamofireImage](https://github.com/Alamofire/AlamofireImage)\n\nInstalation process is straight forward: first install _Cocoapods_ using the terminal by executing:\n```\n$ sudo gem install cocoapods\n```\n\nAfter the project has been cloned, proceed to open a terminal on the root folder and run \n```\n$ pod install\n```\nAnd that's it. Everything should run smoothly.\n\n# Reasoning\n\n- MVVM and SOLID were at the heart of this development, always favoring composition over inherence (that's why you can see so many files for such a \"small\" project). It was _lego oriented_ design 😁\n- Little example of how the first view behaves ([Mermaid](https://mermaidjs.github.io/) is required In order to properly show it)\n\n```mermaid\nsequenceDiagram\nNote left of ListViewController: This class reacts to\u003cbr/\u003eevents and renders\u003cbr/\u003e accordingly. ONLY\u003cbr/\u003ethat\n\nListViewController -\u003e\u003e NetworkLayer: Hey, got some data for me?\nNetworkLayer --\u003e\u003e ListViewController: Here you go\nListViewController -\u003e\u003e ContactsDataSource: Here's the data. Please render it\nContactsDataSource --\u003e UserViewModel: Time to work guys!\n```\n- Cache policy is simple: if the response is successful store it, otherwise use placeholder image from now on.\n- Use of StackViews wherever possible to laverage its flexibility and layout power.\n\n# Considerations \n\nThere were tradeoffs in every major design decision behind the development. While it is true that SOLID principles are at the core of every choice made here, no peace of software is ever complete so there might be minor duplicated here and there for speeding sake. Some notes can be found across the project explaining the shortcomings of those implementations.\n\n# Things to improve\nYou might find odd for me to include this section since it looks like I'm sabotaging myself. The intention here is to acknowledge the things that, most likely due to lack of time, remain pending. Just to mention a few:\n- Implement _coordinators_ instead of instantiating and pushing details view controllers from main list controller.\n- Add unit testing\n- Remove minor duplications on image network calls and cell dequeuing \n- Abstract hardcoded strings into plist or centralized struct for instance.\n# Final notes\nHope I made myself clear in all of my intents. Looking forward to any feedback! \n\nRegards.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmchirino89%2Fcodechallengue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmchirino89%2Fcodechallengue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmchirino89%2Fcodechallengue/lists"}