{"id":17034228,"url":"https://github.com/ar3s3ru/goquiz","last_synced_at":"2026-05-04T14:34:49.319Z","repository":{"id":96046881,"uuid":"97872371","full_name":"ar3s3ru/goquiz","owner":"ar3s3ru","description":"Repository for Go Codelab from GeoUniq+GDG Pisa","archived":false,"fork":false,"pushed_at":"2017-07-22T16:13:50.000Z","size":43,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-03-03T03:32:05.141Z","etag":null,"topics":["backend","codelab","examples","go","golang","project"],"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/ar3s3ru.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":"2017-07-20T19:44:38.000Z","updated_at":"2024-06-19T07:41:09.517Z","dependencies_parsed_at":null,"dependency_job_id":"da4d2cbb-c213-4a6d-a28c-509267592a1d","html_url":"https://github.com/ar3s3ru/goquiz","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ar3s3ru%2Fgoquiz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ar3s3ru%2Fgoquiz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ar3s3ru%2Fgoquiz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ar3s3ru%2Fgoquiz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ar3s3ru","download_url":"https://codeload.github.com/ar3s3ru/goquiz/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245026004,"owners_count":20549067,"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":["backend","codelab","examples","go","golang","project"],"created_at":"2024-10-14T08:42:56.971Z","updated_at":"2026-05-04T14:34:44.287Z","avatar_url":"https://github.com/ar3s3ru.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# goquiz\n\nQuiz a risposta multipla online, in cui le domande sono a tema Go :-)\n\n## Overview\n\nIl topic di questo codelab è di sviluppare assieme il server del gioco.  \nAll'interno di questo repository troverete:\n- il file `.json` delle domande del quiz\n- dei *working samples* che vi spiegheranno come implementare alcune feature del server\n- implementazione di alcune *componenti* del server opzionali (i.e. *__bonus points__*)\n\n## First steps\n\nPresupponendo che il vostro [`GOPATH` sia settato](https://golang.org/doc/code.html#GOPATH) correttamente, dobbiamo creare ora il *package* che ospiterà il vostro server.\n\nUsando il vostro terminale, eseguite il comando  \n```bash\n$ mkdir -p $GOPATH/src/goquiz \u0026\u0026 cd $GOPATH/src/goquiz\n```\n\nAvete creato il package `goquiz` all'interno del vostro `GOPATH`!  \nOra possiamo iniziare a scrivere codice, ma...\n\n...parliamo della *gestione delle dipendenze*.\n\n### Dependency management\n\nPer installare nuovi package nel vosto `GOPATH` locale, affinchè altri package possano usarli, è tramite il comando `go get`.  \nUn esempio:  \n```bash\n$ go get -u github.com/go-chi/chi\n```\n\nQuesto comando eseguirà una `git clone` automatica del package `github.com/go-chi/chi`, compilerà il package e renderà disponibile\ni file compilati all'interno di `$GOPATH/pkg/\u003cplatform\u003e/github.com/go-chi/chi`.\n\nNel corso del codelab faremo uso di diverse librerie esterne (tra cui proprio `chi`), dunque avrete bisogno di eseguire\n`go get` più volte.\n\nIn alternativa, potete usare [`glide`](https://github.com/Masterminds/glide).\n\n`glide` risolve automaticamente gli import necessari a partire da un file `glide.yaml`.  \nIl `glide.yaml` necessario al codice è fornito all'interno di questo repository.\n\nVi basterà copiare `glide.yaml`, `glide.lock` ed eseguire il comando  \n```bash\n$ glide install\n```\n\nNel caso in cui voleste utilizzare una libreria esterna non contenuta nel `glide.yaml` all'interno del vostro codice,\nvi basterà eseguire il comando  \n```bash\n$ glide get \u003cnome libreria\u003e\n```\nin maniera analoga al comando `go get`.\n\n## Specifications\n\nLe specifiche del server sono date dall'*__API REST__ che espone*.  \n\nNel nostro caso, il server presenterà *__3 endpoints__*:\n\n| **Metodo HTTP** | **Endpoint**      | **Dettagli**                                     |\n|-----------------|-------------------|--------------------------------------------------|\n| GET             | `/new-quiz`       | Richiedi un nuovo quiz al server                 |\n| POST            | `/submit/:quizId` | Invia le risposte del quiz al server             |\n| GET             | `/leaderboard`    | Richiedi la lista degli score migliori al server |\n\nIl *JSON schema* delle risposte e delle richieste del/al server è il seguente\n\n### `/new-quiz`\n\nDopo la richiesta `GET` al server su questo endpoint, il server ci manderà un JSON così formato:  \n```json\n{\n    \"id\": string,\n    \"questions\": [\n        {\n            \"question\": string,\n            \"answers\": [\n                string,\n                string,\n                string,\n                ...\n            ]\n        }\n    ]\n}\n```\n\n### `/submit/:quizId`\n\nDopo una `POST` al server su questo endpoint\n- se `quizId` è un ID invalido, il server risponde con `400 Bad Request`\n- se `quizId` è un ID valido, ma non assegnato alla propria utenza, il server risponde con `403 Forbidden`\n- se `quizId` è un ID valido ed assegnato alla propria utenza, il server risponde con `200 OK`\n\nIl JSON che il server si aspetta è:  \n```json\n{\n    \"answers\": [\n        0,  // Indice della risposta alla domanda 1\n        1,  // Indice della risposta alla domanda 2\n        2,\n        -1, // Se una domanda è stata skippata, usare -1\n        ...\n    ]\n}\n```\n\nIl server invece risponderà così:  \n```json\n{\n    \"score\": \u003cvalore intero dello score totale\u003e,\n    \"results\": [\n        {\n            \"given\": \u003cintero della risposta data\u003e,\n            \"correct\": \u003cintero della risposta corretta\u003e,\n        },\n        {\n            ...\n        }\n    ]\n}\n```\n\n### `/leaderboard`\n\nIl server risponderà sempre `200 OK` su questo endpoint, usando il JSON:  \n```json\n{\n    \"scores\": [\n        {\n            \"user\": string,\n            \"score\": int\n        },\n        {\n            ...\n        }\n    ]\n}\n```\n\n## Frontend (by [@CDimonaco](https://github.com/CDimonaco))\n\nTutto ciò che c'è da fare e modificare il file `main.js`. \n\nNella variabile `apiUrl` inserire la base path della vostra API.\n\nSostituire nelle varie chiamate `fetch` l'endpoint corrispondente alla descrizione.\n\n__N.B.__ Inserire solo la parte `/endpoint`!  \nOmettere tutto ciò che viene prima, dato che è esplicitato nella variabile `apiUrl`!\n\n---\n\nCreated by [@ar3s3ru](https://github.com/ar3s3ru) and [@CDimonaco](https://github.com/CDimonaco).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Far3s3ru%2Fgoquiz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Far3s3ru%2Fgoquiz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Far3s3ru%2Fgoquiz/lists"}