{"id":21152111,"url":"https://github.com/mailjet/go-interview","last_synced_at":"2026-01-02T16:05:22.206Z","repository":{"id":49909241,"uuid":"91799207","full_name":"mailjet/go-interview","owner":"mailjet","description":"Go interview tech test project","archived":false,"fork":false,"pushed_at":"2021-06-08T11:54:33.000Z","size":2,"stargazers_count":3,"open_issues_count":0,"forks_count":10,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-01-21T08:24:29.069Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mailjet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-19T11:28:10.000Z","updated_at":"2022-03-03T02:50:14.000Z","dependencies_parsed_at":"2022-09-07T07:22:18.357Z","dependency_job_id":null,"html_url":"https://github.com/mailjet/go-interview","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/mailjet%2Fgo-interview","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailjet%2Fgo-interview/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailjet%2Fgo-interview/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mailjet%2Fgo-interview/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mailjet","download_url":"https://codeload.github.com/mailjet/go-interview/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243597781,"owners_count":20316842,"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-11-20T10:24:56.941Z","updated_at":"2026-01-02T16:05:22.173Z","avatar_url":"https://github.com/mailjet.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Technical test\n\n## Introduction\n\nThe purpose of this test is to ensure you have some basic knowledge of the\ngolang's standard http library, and that you are familiar with objects.\n\nYou have to build an http server that is protected by authentication\nand returns a simple response.\n\n## Deliverable\n\nTo deliver the test, fork this project and provide the following items:\n\n- The source code of the golang http server, with simple build instructions.\n- All necessary script to create and seed the different databases.\n- The software will be compiled with the latest go version.\n- The software and its ecosystem will be run and tested on a local computer.\n\n_Note: You can use Docker and docker-compose to provide the databases._\n_Note: Use only the standard lib, except for the database drivers._\n\n## Authentication\n\nThe authentication is done by basic auth.\nThe crendentials must be checked in redis. If redis fails to respond, \nthen the credentials must be checked in postgres.\n\n| field | type |\n| --- | --- |\n| id | int |\n| login | string |\n| password | string |\n| first_name | string |\n| last_name | string |\n| email | string |\n\n_Note: We expect the usage of an interface here._\n\n## Response\n\nThe server should return the authenticated user or an error.\nThe potential internal errors must not be returned in the reponse,\nbut every request must be logged.\n\nExpected response:\n```\n    {\n        \"ID\": \"1\",\n        \"FirstName\": \"Steve\",\n        \"LastName\": \"Rogers\"\n        \"Email\": \"s.rogers@avenge.rs\"\n    }\n```\n\nThe HTTP return codes can be `200`, `401` and `500`\n\n## Evaluation\n\nThe evaluation criterium are:\n\n1. Validity\n    - The software must do what it is supposed to do.\n\n2. Maintainability \n    - The source code should use interfaces.\n    - The source code should follow golang naming conventions.\n    - The source code must be readable.\n    - The source code must be tested.\n    - The source code must be commented.\n \n3. Exploitability\n    - The support team must be able to troubleshoot with the logs.\n    - The configuration must be easy.\n    - The software must be documented.\n    - The software must be easy to deploy.\n\n4. Security\n    - The password must be crypted in database.\n    - No secret must be present in the repository (password, etc.)\n\n## Help!\n\n- If you are a new gopher, there is a great golang tutorial\n[here](https://tour.golang.org/welcome/1).\n- If you look for a pretty design, at Mailjet, we tend to follow the\n[Ben Johnson's architecture](https://medium.com/@benbjohnson/standard-package-layout-7cdbc8391fc1).\n- Should you need help to write your code or beat your compiler, feel free to\nask us directly!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmailjet%2Fgo-interview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmailjet%2Fgo-interview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmailjet%2Fgo-interview/lists"}