{"id":23070555,"url":"https://github.com/abennett/aaronb-technical-test","last_synced_at":"2025-04-03T10:19:10.710Z","repository":{"id":144268819,"uuid":"392041854","full_name":"abennett/aaronb-technical-test","owner":"abennett","description":"A take-home project I went pretty extreme with.","archived":false,"fork":false,"pushed_at":"2021-08-03T04:20:36.000Z","size":119,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"aaronb","last_synced_at":"2025-02-08T23:41:19.863Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","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/abennett.png","metadata":{"files":{"readme":"README.md","changelog":"news_test.go","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":"2021-08-02T17:43:57.000Z","updated_at":"2021-10-21T16:42:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"957b069b-20a3-4f21-9f04-8750887dd8cf","html_url":"https://github.com/abennett/aaronb-technical-test","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/abennett%2Faaronb-technical-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abennett%2Faaronb-technical-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abennett%2Faaronb-technical-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abennett%2Faaronb-technical-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abennett","download_url":"https://codeload.github.com/abennett/aaronb-technical-test/tar.gz/refs/heads/aaronb","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246981165,"owners_count":20863828,"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":[],"created_at":"2024-12-16T06:27:10.144Z","updated_at":"2025-04-03T10:19:10.688Z","avatar_url":"https://github.com/abennett.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Toggle](toggle_logo.png)\n\n# The Vision\n\nA startup company has a vision for a service that provides a tailored news feed to its users.\n\nNews will be acquired from a multitude of online sources. Each news article will be analyzed (using AI) and tagged with one or more keywords, \nbefore being stored in a database within the company's infrastructure. Users of the service are able to specify tags for news areas that interest them. When\na user opens their dashboard, they should see a feed of the most recent and relevant news articles.\n\n# The Mission\n\nThere are few architectural guidelines so it’s completely up to you; however, to support their growth, the company have opted for\nthe microservice route. Obviously, a number of services are going to be \nrequired, but don't panic, we're not expecting you to implement _everything_ (although that would be impressive)!\n\nYour task is to implement two services as follows:\n\n- A `user` service that will provide a user's chosen tags\n- A `news article` service that will provide a feed of news articles\n\n## 1. User Service\n\nThe `User` service is a microservice that stores each user's tag selection.\n\n### Internal Endpoint\n\n_Protocol, method, signature, etc. - (TBD, by candidate!)_\n\n**Role:**\n\nThis endpoint is called by the `News Article` service.\n\n**Behaviour:**\n\nFor a given user, return all the tags specified.\n\n\n## 2. News Article Service\n\nThe `News Article` service is a microservice that stores news articles.\n\nEach article must contain a `Title`, `Timestamp` and list of `Tags`.\n\nThis service also provides an external endpoint that allows users to retrieve articles, filtered and sorted by their timestamp.\n\n### Public Endpoint\n\n_Protocol, method, signature, etc. - (TBD, by candidate!)_\n\n**Role:**\n\nThis endpoint is called from user's browser/phone/tablet.\n\n**Predicate**\n\n\u003e An article is included in the response if it has at least 1 tag matching those of the user.\n\n**Behaviour:**\n\nReturn news articles, filtered by the tags of the current user.\n\n### Public Endpoint\n\n_Protocol, method, signature, etc. - (TBD, by candidate!)_\n\nRequest must include 2 tags\n\n**Role:**\n\nThis endpoint is called from user's browser/phone/tablet.\n\n**Predicate**\n\n\u003e An article is included in the response if its tags contain _both_ of the tags specified in the request.\n\nThe product team mentioned that they might need to change these predicate values. Modifying both the number \nof tags in the request and that used in the matching criteria. So, bonus points if you make these configurable! ;)\n\n\n**Behaviour:**\n\nReturn news articles, filtered by the tags included in the request.\n\n\n## Prerequisites\n- Handle all failure cases\n- Your code should be tested\n- Provide a `docker-compose.yaml` file for any third party services that you use \n- Provide a clear explanation of your approach and design choices (while submitting your pull request)\n- Provide a proper `README.md`:\n    - Explain how to setup and run your code\n    - Include all information you consider useful for a seamless coworker on-boarding\n\n## Workflow\n- Create a new branch\n- Commit and push to this branch\n- Submit a pull request once you have finished\n\nWe will then write a review for your pull request!\n\n## Bonus\n\n- Add metrics / request tracing / authentication 📈\n- Add whatever you think is necessary to make the app awesome ✨\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabennett%2Faaronb-technical-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabennett%2Faaronb-technical-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabennett%2Faaronb-technical-test/lists"}