{"id":30617656,"url":"https://github.com/ismiljanic/otvrac","last_synced_at":"2026-04-14T19:31:28.758Z","repository":{"id":311147674,"uuid":"878853925","full_name":"ismiljanic/otvrac","owner":"ismiljanic","description":"Repozitorij za predmet \"Otvoreno računarstvo\" koji sadrži laboratorijske vježbe iz akademske godine 2024./2025.","archived":false,"fork":false,"pushed_at":"2025-01-18T11:23:37.000Z","size":2050,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-30T11:06:44.580Z","etag":null,"topics":["auth0","csv","jsonschema","laboratory-exercises","nodejs","openapi","postgresql"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ismiljanic.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,"zenodo":null}},"created_at":"2024-10-26T09:39:18.000Z","updated_at":"2025-08-21T14:13:43.000Z","dependencies_parsed_at":"2025-08-22T12:46:04.663Z","dependency_job_id":"d1e5f05a-93e2-477a-9ecc-098ec939deba","html_url":"https://github.com/ismiljanic/otvrac","commit_stats":null,"previous_names":["ismiljanic/otvrac"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/ismiljanic/otvrac","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ismiljanic%2Fotvrac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ismiljanic%2Fotvrac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ismiljanic%2Fotvrac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ismiljanic%2Fotvrac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ismiljanic","download_url":"https://codeload.github.com/ismiljanic/otvrac/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ismiljanic%2Fotvrac/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31812968,"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":["auth0","csv","jsonschema","laboratory-exercises","nodejs","openapi","postgresql"],"created_at":"2025-08-30T11:01:07.828Z","updated_at":"2026-04-14T19:31:28.735Z","avatar_url":"https://github.com/ismiljanic.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Laboratorijske vježbe\n\n![License](https://img.shields.io/badge/license-CC0%201.0%20Universal-brightgreen.svg)\n![Version](https://img.shields.io/badge/version-1.0-blue.svg)\n\n## Sadržaj\n\n1. [Tema](#tema)\n2. [Cilj](#cilj)\n3. [Licencija](#licencija)\n    - [Opis CC0 1.0 Universal](#opis-cc0-10-universal)\n4. [Autor](#autor)\n5. [Verzija skupa podataka](#verzija-skupa-podataka)\n6. [Jezik skupa podataka](#jezik-skupa-podataka)\n7. [Naslov](#naslov)\n8. [Datum izrade podataka](#datum-izrade-podataka)\n9. [Datum objave podataka](#datum-objave-podataka)\n10. [Opis skupa podataka](#opis-skupa-podataka)\n    - [1. Club](#1-club)\n    - [2. Player](#2-player)\n    - [3. Season](#3-season)\n11. [Funkcionalni zahtjevi](#funkcionalni-zahtjevi)\n12. [O implementaciji](#o-implementaciji)\n13. [Tehnologije koristene za implementaciju](#tehnologije-koristene-za-implementaciju)\n    - [Frontend](#frontend)\n    - [Backend](#backend)\n14. [Upute za lokalno testiranje](#upute-za-lokalno-testiranje)\n    - [Radno okruzenje](#radno-okruzenje)\n    - [Pokretanje projekta](#pokretanje-projekta)\n        - [Frontend](#frontend)\n        - [Backend](#backend)\n15. [Pregled funkcionalnosti](#pregled-funkcionalnosti)\n    - [Pocetna stranica](#pocetna-stranica)\n    - [Prikaz tablice](#prikaz-tablice)\n    - [Mogucnost filtriranja](#mogucnost-filtriranja)\n    - [Demonstracija filtriranja](#demonstracija-filtriranja)\n    - [Prikaz igraca](#prikaz-igraca)\n    - [Uredivanje postavki igraca](#uredivanje-postavki-igraca)\n    - [Prikaz kluba](#prikaz-kluba)\n    - [Dodavanje novog kluba](#dodavanje-novog-kluba)\n    - [Trenutna tablica lige](#trenutna-tablica-lige)\n16. [Ostalo](#ostalo)\n\n---\n## Tema\n\nTema laboratorijske vježbe izrada je otvorenog skupa podataka. **Otvoreni podaci** podaci su kojima bilo tko može\nslobodno pristupiti, koristiti ih i dijeliti.\n\n---\n## Cilj\n\nCilj prve laboratorijske vježbe je upoznavanje s procesom kreiranja otvorenog skupa podataka te njegovog dijeljenja u obliku javnog\ngit-repozitorija. Za potrebe prve laboratorijske vježbe potrebno je napraviti skup podataka i spremiti taj skup podataka\nu bazu po izboru. Postupak izdvajanja podataka u **CSV** i **JSON** formatu mora biti automatiziran skriptom ili shell naredbom.\nU drugoj laboratorijskoj vježbi potrebno je napraviti prikaz podataka u strojnom i ljudski čitljivom obliku. Za prikaz podataka u ljudima čitljivom formatu potrebno je podatke prikazati u obliku HTML tablice koja se zajedno s obrascem za filtriranje i asinkronim pozivom (AJAX) za dohvaćanje podataka. Dodatno je potrebno ostvariti filtriranje podataka po svim vrijednostima. Za potrebe druge laboratorijske vježbe skup podataka obogaćuje se metapodacima u formatu JSON Schema. Treća laboratorijska vježba treba skup otvorenih podataka iz prijašnjih laboratorijskih vježbi izložiti kroz RESTful API. API mora imati GET, POST, PUT i DELETE kranje točke. Dodatno je potrebno olakšati čitljivost mogućnosti API-ja koristeći standard OpenAPI.\nU četvtoj laboratorijskoj vježbi potrebno je integrirati vlastitu web-aplikaciju s uslugom Auth0 za Single sign-on. Također, potrebno je napraviti zaštićeni dio aplikacije za dohvaćanje profila prijavljenog korisnika. Konačno,  potrebno je semantički opisati barem dva atributa pojedinačnog resursa iz skupa podataka.\n\n---\n\n## Licencija\n\nOva laboratorijska vježba licencirana je pod [CC0 1.0 Universal (CC0 1.0)](https://creativecommons.org/publicdomain/zero/1.0/).\n\n### Opis CC0 1.0 Universal\n\n- **Odricanje prava**: Autor se odriče svih svojih prava na ovo djelo širom svijeta. Možete kopirati, modificirati,\n  distribuirati i izvoditi djelo, čak i u komercijalne svrhe, bez potrebe za traženjem dozvole.\n\n- **Nema obveze navođenja autora**: Nema potrebe za davanjem zasluga autoru.\n\n- **Bez jamstva**: Ovo djelo se pruža \"kako jest\", bez ikakvih jamstava. Creative Commons nije odvjetnička tvrtka i ne\n  pruža pravne usluge; distribucija ovog dokumenta ne stvara odnos odvjetnik-klijent.\n\nViše informacija na [Creative Commons](https://creativecommons.org/publicdomain/zero/1.0/legalcode).\n\n---\n\n## Autor\n\n**Ivan Smiljanić**\n\n## Verzija skupa podataka\n\n**4.0**\n\n## Jezik skupa podataka\n\n**Engleski**\n\n## Naslov\n\nFrancuska prva nogometna liga\n\n## Datum izrade podataka\n\n25. listopada 2024.\n\n## Datum objave podataka\n\n25. listopada 2024.\n\n## Datum zadnjeg ažuriranja\n\n18. siječnja 2025.\n\n---\n\n## Opis skupa podataka\n\nSkup podataka je razvijen u PostgreSQL bazi podataka i obuhvaća informacije o nogometnim klubovima iz prve francuske\nlige (Ligue 1).\nU ovom skupu podataka pohranjeno je ukupno 18 klubova koji sudjeluju u sezoni **2024./2025**.\nPodaci uključuju ključne atribute koji se odnose na klubove, igrače te specifične informacije vezane uz odabranu sezonu.\n\nSkup podataka sadrži tri glavne tablice: **Club**, **Player**, i **Season**, koje su međusobno povezane putem\nidentifikatora kluba i sezone.\n\n### 1. Club\n\nPrva tablica u skupu podataka označava klub i sastoji se od sljedećih stupaca:\n\n| **Naziv Stupca**    | **Opis**                         |\n|---------------------|----------------------------------|\n| **clubid**          | Identifikator kluba              |\n| **clubname**        | Ime kluba                        |\n| **stadium**         | Stadion kluba                    |\n| **location**        | Lokacija kluba                   |\n| **establishedyear** | Godina nastanka kluba            |\n| **manager**         | Trenutni trener                  |\n| **leagueposition**  | Pozicija u ligi                  |\n| **wins**            | Pobjede                          |\n| **losses**          | Porazi                           |\n| **totalplayers**    | Ukupan broj registriranih igrača |\n| **seasonid**        | Identifikator sezone             |\n\n### 2. Player\n\nDruga tablica u skupu podataka označava igrača te se sastoji od sljedećih stupaca:\n\n| **Naziv Stupca**  | **Opis**             |\n|-------------------|----------------------|\n| **playerid**      | Identifikator igrača |\n| **playername**    | Ime igrača           |\n| **position**      | Pozicija igrača      |\n| **age**           | Dob igrača           |\n| **nationality**   | Nacionalnost         |\n| **goalsscored**   | Broj golova          |\n| **assists**       | Broj asistencija     |\n| **matchesplayed** | Odigrane utakmice    |\n| **clubid**        | Identifikator kluba  |\n| **salary**        | Plaća igrača         |\n\n### 3. Season\n\nTreća tablica u skupu podataka označava sezonu te se sastoji od sljedećih stupaca:\n\n| **Naziv Stupca** | **Opis**             |\n|------------------|----------------------|\n| **seasonid**     | Identifikator sezone |\n| **seasonyear**   | Godina sezone        |\n\n---\n\n## Funkcionalni zahtjevi\n\n- asinkroni način dohvaćanja sadržaja\n- osigurati dostupnost podataka u strojno čitljivom obliku\n- prikazane podatke treba dohvatiti iz baze podataka\n- mogućnost jednostavnog filtriranja po vrijednostima podataka\n- filtrirane podatke potrebno je moći preuzeti u .csv i .json formatu\n- korištenje GET metode za dohvat cjelokupnog skupa podataka\n- korištenje barem tri dodatne GET metode\n- korištenje POST metode\n- korištenje PUT metode\n- korištenje DELETE metode\n- odgovori moraju biti omotani u Response omotač\n- aplikacija mora biti otporna na greške i na odgovarajući način vraćati poruke o eventualnim\n  iznimkama ili pogreškama\n- aplikacija ne smije prestati s radom u slučaju pogreške ili prikazati\n  zadane poruke o pogreškama odabranih radnih okvira\n- dokumentiranje uporabom specifikacije OpenAPI\n- integrirati vlastitu web-aplikaciju s uslugom Auth0 za Single sign-on\n- zaštićeni dio aplikacije za dohvaćanje profila prijavljenog korisnika\n- semantički opisati barem dva atributa pojedinačnog resursa iz skupa podataka\n---\n## O implementaciji\n\nLaboratorijska vježba implementirana je pomoću Node.js-a u razvojnom okruženju VSCode. Dodatno, korišten je React\nframework za jednostavni prikaz i generiranje HTML-a koji je uređen pomoću CSS-a.\nProjekt zahtjeva korištenje i instaliranje potrebnih biblioteka putem naredbe `npm install`. Nakon instaliranja\npotrebnih modula, projekt se pokreće putem naredbi `npm start` i `node server.js`.\n\n---\n# Tehnologije koristene za implementaciju\n\n\u003ch3\u003eFrontend\u003c/h3\u003e\n\u003cul class=\"horizontal-list\"\u003e\n    \u003cli\u003e\n        \u003ca href=\"https://www.w3schools.com/css/\" target=\"_blank\" rel=\"noreferrer\"\u003e\n            \u003cimg src=\"https://raw.githubusercontent.com/devicons/devicon/master/icons/css3/css3-original-wordmark.svg\" alt=\"css3\" width=\"40\" height=\"40\"/\u003e\n        \u003c/a\u003e\n        CSS\n    \u003c/li\u003e\n    \u003cli\u003e\n        \u003ca href=\"https://www.w3.org/html/\" target=\"_blank\" rel=\"noreferrer\"\u003e\n            \u003cimg src=\"https://raw.githubusercontent.com/devicons/devicon/master/icons/html5/html5-original-wordmark.svg\" alt=\"html5\" width=\"40\" height=\"40\"/\u003e\n        \u003c/a\u003e\n        HTML5\n    \u003c/li\u003e\n    \u003cli\u003e\n    \u003ca href=\"https://nodejs.org\"\u003e\u003cimg height=48 src=\"https://raw.githubusercontent.com/caiogondim/javascript-server-side-logos/master/node.js/standard/454x128.png\"\u003e\u003c/a\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/git/git-original.svg\" height=\"40\" alt=\"git logo\"  /\u003e\n  \u003cimg width=\"12\" /\u003e Git\n  \u003c/li\u003e\n  \u003cli\u003e\n        \u003ca href=\"https://www.postgresql.org\" target=\"_blank\" rel=\"noreferrer\"\u003e\n            \u003cimg src=\"https://raw.githubusercontent.com/devicons/devicon/master/icons/postgresql/postgresql-original-wordmark.svg\" alt=\"postgresql\" width=\"40\" height=\"40\"/\u003e\n        \u003c/a\u003e\n         PostgreSQL\n    \u003c/li\u003e\n  \u003cli\u003e\n    \u003cimg src=\"https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vscode/vscode-original.svg\" height=\"40\" alt=\"vscode logo\"  /\u003e Visual Studio Code\n    \u003cimg width=\"12\" /\u003e\n  \u003c/li\u003e\n\u003c/ul\u003e\n\n---\n## Upute za lokalno testiranje\n\n### Radno okruzenje\n\nZa radno okruženje koristi se VSCode.\n\n- Kloniranje ili preuzimanje projekta\n- Otvaranje projekta unutar VSCode odabirom odgovarajućeg direktorija\n\n### Pokretanje projekta\n\n#### Frontend\n\n- pozicionirati se unutar /frontend direktorija\n- upisati naredbu `ls` koja će ispisati sve datoteke i mape koje se nalaze u trenutnom direktoriju\n- u slučaju da prethodna naredba nije ispisala `node_modules`, upisati naredbu `npm install`\n- pokrenuti aplikaciju pomoću naredbe `npm start`\n\n#### Backend\n\n- pozicionirati se unutar /backend direktorija\n- upisati naredbu `ls` koja će ispisati sve datoteke i mape koje se nalaze u trenutnom direktoriju\n- u slučaju da prethodna naredba nije ispisala `node_modules`, upisati naredbu `npm install`\n- pokrenuti server pomoću naredbe `node server.js`\n\n---\n## Pregled funkcionalnosti\n\n### Pocetna stranica\n\n\u003cimg src=\"pictures/pic1.png\" style=\"max-width: 100%; height: auto;\"\u003e\n\n### Prikaz tablice\n\n\u003cimg src=\"pictures/pic2.png\" style=\"max-width: 100%; height: auto;\"\u003e\n\n### Mogucnost filtriranja\n\n\u003cimg src=\"pictures/pic3.png\" style=\"max-width: 100%; height: auto;\"\u003e\n\n### Demonstracija filtriranja\n\n\u003cimg src=\"pictures/pic4.png\" style=\"max-width: 100%; height: auto;\"\u003e\n\n### Prikaz igraca\n\n\u003cimg src=\"pictures/pic6.png\" style=\"max-width: 100%; height: auto;\"\u003e\n\n### Uredivanje postavki igraca\n\n\u003cimg src=\"pictures/pic5.png\" style=\"max-width: 100%; height: auto;\"\u003e\n\n### Prikaz kluba\n\n\u003cimg src=\"pictures/pic7.png\" style=\"max-width: 100%; height: auto;\"\u003e\n\n### Dodavanje novog kluba\n\n\u003cimg src=\"pictures/pic8.png\" style=\"max-width: 100%; height: auto;\"\u003e\n\n### Trenutna tablica lige\n\n\u003cimg src=\"pictures/pic9.png\" style=\"max-width: 100%; height: auto;\"\u003e\n\n---\n## Ostalo\n\nPodaci su pohranjeni u **.csv** i **.json** formatu putem shell skripte.\nSkripta je napravljena kako bi povukla podatke u odabranim formatima iz baze podataka te se može pokrenuti\nnaredbom `./script.sh`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fismiljanic%2Fotvrac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fismiljanic%2Fotvrac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fismiljanic%2Fotvrac/lists"}