{"id":16998369,"url":"https://github.com/zigad/outfit-7-expertise-test","last_synced_at":"2026-05-19T15:11:15.846Z","repository":{"id":190636091,"uuid":"461543400","full_name":"zigad/Outfit-7-Expertise-Test","owner":"zigad","description":null,"archived":false,"fork":false,"pushed_at":"2022-02-20T16:18:42.000Z","size":36704,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-27T07:42:03.661Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":false,"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/zigad.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}},"created_at":"2022-02-20T16:18:35.000Z","updated_at":"2023-08-25T12:48:38.000Z","dependencies_parsed_at":"2023-08-25T18:07:57.532Z","dependency_job_id":null,"html_url":"https://github.com/zigad/Outfit-7-Expertise-Test","commit_stats":null,"previous_names":["zigad/outfit-7-expertise-test"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zigad%2FOutfit-7-Expertise-Test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zigad%2FOutfit-7-Expertise-Test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zigad%2FOutfit-7-Expertise-Test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zigad%2FOutfit-7-Expertise-Test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zigad","download_url":"https://codeload.github.com/zigad/Outfit-7-Expertise-Test/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244921018,"owners_count":20532154,"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-10-14T04:05:01.525Z","updated_at":"2026-05-19T15:11:10.810Z","avatar_url":"https://github.com/zigad.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Instructions\n\nYou have 2 options to run the program:\n\n- Use IDE, open src/java/si/deisinger/Services/Fun7Application.class and run it,\n- Open terminal, cd into /target/ folder and run: java -jar Outfit-7-Expertise-Test-1.0-SNAPSHOT.jar (Please note that you should have environmental variables to be able to access Google Cloud - DataStore)\n\nThere are some comments about API endpoints in the code but for easier understanding you can access Swagger UI here: `http://localhost:1598/swagger-ui/index.html`\n\nYou will also find POSTMAN json, so you can import API requests with sample data into the application. You can find it under `src/main/resources/Outfit 7 Backend.postman_collection.json`\n\n\n# Software Engineer Expertise Test: Services\n\nMobile game “Fun7” includes many different features e.g. multiplayer, in-app purchases, cross \npromotion, ads or internal surveys. However not all of the features are available to all users all \nthe time. For simplicity purposes you can assume that “Fun7” supports only 3 features: \nmultiplayer, customer-support and ads.\n\n\nIn order for “Fun7” to know if it should enable or disable a particular feature, it will contact \nbackend servers via a REST endpoint.\n\nApplication should expose two REST APIs, one for checking the state of the services by the \nusers and one for administrators.\n\n### Check services API\n1. It should expose the endpoint that will return the status of the three services.\n\n2. It should accept three query parameters:\n   - `timezone`: timezone of the user \n   - `userId`: string id of the user \n   - `cc`: country code of the user\n3. Response should contain information about enabled services in json format. Sample json: `{“multiplayer”: “enabled”, ”user-support”: “disabled”, “ads”: “enabled”}`,\n   \n### Admin API\n1. API is used by administrators to enable managing of users\n2. It should expose one or more endpoints with the following features:\n   - List all users\n   - Get user details\n   - Delete a user\n   \n\nEach service should be enabled based on the following checks:\n\n### Multiplayer\nMultiplayer is a feature that is available only for more skilled players so it should be enabled if a \nuser has used the “Fun7” game more than 5 times (based on the number of API calls). Also our \nmultiplayer server infrastructure is located in the US so it should be enabled only if the user \ncomes from the US.\n\n\n### Customer Support\nCustomer support should be enabled only on work days between 9:00 - 15:00 Ljubljana time, \nbecause only then support personnel is available.\n\n\n### Ads\nAds in the game are served by the external partner so this service should be enabled only if our \nexternal partner supports user device. And to know it, we must call partner’s public API which is \nalready provided and is secured by basic access authentication (via HTTP header).\n\nThe (external) API specs:\n\nHTTP Method: GET\n\nURL : https://us-central1-o7tools.cloudfunctions.net/fun7-ad-partner\n\nQuery params expected:\n\ncountryCode: The country code of the user User name (for basic auth): fun7user\n\nPassword (for basic auth): fun7pass\n\n**HTTP Response body:**\n- 200OK \n  - If ads are enabled:\n  Response body: {“ads”: “sure, why not!”}\n  - If ads are disabled:\n  Response body: {“ads”: “you shall not pass!”}\n  - 400 BAD REQUEST - missing mandatory parameters\n  - 401 UNAUTHORIZED - invalid credentials\n  - 500 SERVER ERROR - server is temporarily not available\n\n\n  Your assignment is to design and implement a backend application for “Fun7” mobile game \n  and prepare unit and integration tests that will validate your solution.\n\n\n### Technical requirements:\n1. The solution should be written in Java or Kotlin.\n2. Your solution should leverage Google Cloud (App Engine, Cloud Run or similar) and you\n   can (but don’t have to) use other Google Cloud components (e.g. Firestore, CloudSQL,\n   Memorystore etc).\n3. Feel free to use any external libraries of your choice (e.g. REST framework or\n   persistence library).\n4. Please send us either a zip archive or a link to project on the github/bitbucket (preferred).\n5. Make sure that your solution is production ready so apply all the techniques that you\n   would normally do when writing code in a real life situation.\n6. Please provide a readme file with the description on how to build your application and how to run it.\n7. If something is not clear feel free to make some assumptions. In that case make sure to put it in the readme file. It should contain all the assumptions you made and all the extra information or explanations that you think might be useful for anybody reading your solution.\n ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzigad%2Foutfit-7-expertise-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzigad%2Foutfit-7-expertise-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzigad%2Foutfit-7-expertise-test/lists"}