{"id":20846759,"url":"https://github.com/kimgoetzke/hyperskill-project-web-quiz-engine","last_synced_at":"2026-04-14T23:32:26.498Z","repository":{"id":158016381,"uuid":"587759655","full_name":"kimgoetzke/hyperskill-project-web-quiz-engine","owner":"kimgoetzke","description":"Java practice app with API to post/get/delete quizzes using the Spring framework, created for 'Java Backend Developer' track on Hyperskill.","archived":false,"fork":false,"pushed_at":"2023-02-02T10:25:12.000Z","size":37,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-13T05:05:29.122Z","etag":null,"topics":["api","database","h2","java","spring"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":false,"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/kimgoetzke.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-11T14:20:30.000Z","updated_at":"2023-05-20T19:14:38.000Z","dependencies_parsed_at":null,"dependency_job_id":"2d8cffa0-e868-4990-9595-22fbb5662ba2","html_url":"https://github.com/kimgoetzke/hyperskill-project-web-quiz-engine","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kimgoetzke/hyperskill-project-web-quiz-engine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimgoetzke%2Fhyperskill-project-web-quiz-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimgoetzke%2Fhyperskill-project-web-quiz-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimgoetzke%2Fhyperskill-project-web-quiz-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimgoetzke%2Fhyperskill-project-web-quiz-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kimgoetzke","download_url":"https://codeload.github.com/kimgoetzke/hyperskill-project-web-quiz-engine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimgoetzke%2Fhyperskill-project-web-quiz-engine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31819718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["api","database","h2","java","spring"],"created_at":"2024-11-18T02:17:52.534Z","updated_at":"2026-04-14T23:32:26.481Z","avatar_url":"https://github.com/kimgoetzke.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The Web Quiz Engine Project\nThis repo contains my second project in Java. It was created in January 2023 for the 'Java Backend Developer' track on Hyperskill (JetBrains Academy).\n\n**About the course**: [https://hyperskill.org/tracks/12](https://hyperskill.org/tracks/12)\u003cbr\u003e\n**About the project**: [https://hyperskill.org/projects/91](https://hyperskill.org/projects/91)\u003cbr\u003e\n**Hyperskill project difficulty rating**: Challenging\n\n\nIn this project, I have developed a multi-users web service for creating and solving quizzes. Some key features include:\n\n+ An API with a Spring Boot REST controller offering endpoints for creating users and adding/requesting/completing/deleting quizzes\n+ Pagination for responses returning more than 10 results e.g. all questions or all individual completions\n+ Using Sprint Crypto to implement BCrypt encoding for passwords\n+ Using Sprint Security to allow only authorised users access (except for user registration)\n+ A locally stored H2 database to store quizzes\n+ Processing and returning data in JSON format\n\n\n## Example\n![image](https://user-images.githubusercontent.com/120580433/213090276-f549982f-50dd-4647-8d3b-f436b5482f9c.png)\n\n## Available endpoints\n\n#### Register user\nPOST `api/register`\n+ Expects JSON with `email` (valid email) and `password` (5 character minimum) \n+ Example: \n`{\n  \"email\": \"test@email.com\",\n  \"password\": \"password\"\n}`\n+ Returns HTTP status code (`200` or `400`) based on success\n\n#### Create quiz\nPOST `api/quizzes`\n+ Expects JSON with `title`, `text` (i.e. displayed question), `options` (min 2), and `answer` (0 possible) and authorisation\n+ Example: \n`{\n  \"title\": \"A question with two correct answers\",\n  \"text\": \"2 + 2 = ?\",\n  \"options\": [\"2\",\"1 * 4\",\"6 + 2\",\"5 - 1\"],\n  \"answer\": [1,3]\n}`\n+ If successful, returns JSON with all submitted fields plus `id` and HTTP status `200`, otherwise `401` if unauthorised\n\n#### Solve quiz\nPOST `api/quizzes/{id}/solve`\n+ Expects JSON with `answer` (can be empty) and authorisation\n+ Example:\n`{\n  \"answer\": [1,3]\n}`\n+ If successful, returns JSON with `success` true/false and `feedback` and HTTP status `200`, otherwise `401` if unauthorised\n\n#### Get quiz\nGET `api/quizzes/{id}`\n+ Expects authorisation, no body required\n+ Returns JSON with `id`, `title`, `text`, `options` and HTTP status `200` if successful, or `401`/`404` if unauthorised/not found\n\n#### Get all quizzes\nGET `api/quizzes`\n+ Expects authorisation, no body required\n+ Accepts `?page=` and `?size=` (number of items per page returned)\n+ Returns sorted and paginated JSON with all quizzes and HTTP status `200` if successful, or `401` if unauthorised\n\n#### Get all completions\nGET `api/quizzes/completed`\n+ Expects authorisation, no body required\n+ Accepts `?page=` and `?size=` (number of items per page returned)\n+ Returns sorted and paginated JSON with all completions for requestor and HTTP status `200` if successful, or `401` if unauthorised\n\n#### Delete quiz\nDELETE `api/quizzes/{id}`\n+ Expects authorisation, no body required\n+ Returns HTTP status `204` if successful, or `403`/`404` if not the owner/not found\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkimgoetzke%2Fhyperskill-project-web-quiz-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkimgoetzke%2Fhyperskill-project-web-quiz-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkimgoetzke%2Fhyperskill-project-web-quiz-engine/lists"}