Zadatak je napraviti from scratch jednostavnu aplikaciju za upravljanje zadacima.
- Vue.js frontend dio aplikacije mora sadržavati mogućnost dodavanja, brisanja i označavanja zadataka kao završene.
- Express.js backend mora sadržavati osnovne funkcionalnosti za CRUD operacije nad zadacima na odgovarajućim endpointima.
- Koristite MongoDB Atlas bazu podataka za pohranu zadataka
- Komunikaciju između frontenda i backenda realizirajte pomoću Axios biblioteke.
CHALLENGE🔥: Pokušajmo riješiti bez ChatGPT-a i drugih AI alata.
- Googlajte, koristite dokumentaciju, skripte iz kolegija, komunicirajte s kolegama, bacite oko na Stack Overflow, itd.
- Klonirajte repozitorij s predloškom:
https://github.com/lukablaskovic/TaskManager/tree/main - Instalirajte sve potrebne pakete:
npm install - Pokrenite lokalno Vue.js aplikaciju:
npm run dev - Proučite definiranu HTML strukturu u
App.vue
App.vue je podijeljen u 3 dijela:
script setup- Vue 3 script setup dio: U Vue3 ne definiramo višedata,methods,computed,watchipropsobjekte kao što smo uVue2
<script setup></script>template- predstavlja jednostavnu HTML strukturu s TailwindCSS klasama
<template></template>style scoped- ovdje želimo pisati dodatni CSS kod koji se odnosi samo na ovu komponentu (scoped)
<style scoped></style>Uočite u HTML komentarima osnovne template dijelove:
<!-- Header -->Naslov i button za dodavanje novog zadatka<!-- Task List -->Prozor s naslovom "Vaši zadaci" koji sadrži zadatke (trenutno samo 1)<!-- Task Item -->Blok koji sadrži jedan zadatak s naslovom, opisom i buttonima (<!-- Task Actions -->)<!-- Task Actions -->Buttoni za označavanje zadatka kao završenog te brisanje
- Izradite Vue3 komponentu
Task.vueusrc/componentsdirektoriju. U njega prebacitetemplatedio koji se odnosi na jedan zadatak, te definirajte 2 propsa:nasloviopis - Otvorite
TaskManagerBackenddirektorij i pokrenite Express.js server:nodemon/node index.js. Prvo treba instalirati sve potrebne pakete:npm install - Definirajte prvo GET endpoint za dohvaćanje svih zadataka s Expressa. Dodajte endpoint u odgovarajući Router te definirajte nekoliko dummy in-memory zadataka:
let tasks = [
{
id: 1,
naslov: "Kupiti kruh",
opis: "Idi kupiti kruh danas",
zavrsen: false,
},
{
id: 2,
naslov: "Naučiti Vue.js",
opis: "Prouči malo Vue.js dokumentaciju",
zavrsen: false,
},
{
id: 3,
naslov: "Riješi zadaću iz UPP-a",
opis: "Please natjeraj se riješiti zadaću iz UPP-a, moraš i taj kolegij proći!",
zavrsen: false,
},
];- Pošaljite zahtjev s Vue.js aplikacije jednom kad se komponenta
App.vuemounta. Koristite axios biblioteku za slanje GET zahtjeva nahttp://localhost:3000/tasksendpoint. - Dohvaćene zadatke s Express.js poslužitelja pohranite u
tasksreaktivnu varijablu u Vue.js-u te koristećiv-forrenderirajte odgovarajući brojTask.vuekomponenti. - Napravite novi MongoDB Atlas Cluster. Dodajte kolekciju
tasksgdje će biti spremljeni zadaci. - Dodajte POST metodu na endpoint
/taskskoja će odjednom dodati sve zadatke koje pošaljete u tijelu zahtjeva. Pozovite metodu preko HTTP klijenta i dodajte postojeće zadatke. Dodajte jednostavnu validaciju podataka za postojanje obaveznih ključeva. - Nadogradite endpoint GET
/tasksna način da vraća zadatke iz MongoDB kolekcijetasks. - Za svaki task dodajte tagove.
tagsneka bude polje stringova koji predstavljaju tagove zadatka. Npr.["hitno", "faks", "pomalo"]. Svaki zadatak može imati proizvoljan broj tagova. Na frontendu prikažite tagove uz svaki zadatak. - Prikažite određeni tag različitom bojom. Npr. tag
hitnoneka bude crvene boje,faksplave boje,pomalozelene boje. Napravite novu Vue komponentuTaskTagkoja će definirati 1 tag.
Primjer:
- Implementirajte sve potrebno (frontend + backend) za označavanje zadatka kao dovršenog. Na frontendu možete "pozeleniti"
divzadatka koji je završen i sakriti button za označavanje zadatka kao završenog.
- poslužite se skriptom WA5 - koju MongoDB metodu ćete koristiti za ažuriranje zadatka?
- koju HTTP metodu ćete koristiti za ažuriranje zadatka?
- kako će izgledati URL ove rute?
-
Implementirajte promjene na templateu čim se zadatak označi kao završen. Bez potrebe za osvježavanjem stranice (reactive kopija)
-
Implementirajte sve potrebno (frontend + backend) za brisanje zadatka.
- poslužite se skriptom WA5 - koju MongoDB metodu ćete koristiti za brisanje zadatka?
- koju HTTP metodu ćete koristiti za brisanje zadatka?
- kako će izgledati URL ove rute?
-
Promptajte korisnika prije brisanja je li siguran u radnju, funkcija
confirm -
Nakon uspješnog brisanja, filtrirajte postojeće zadatke bez ručnog osvježavanja aplikacije (component events).
-
Implementirajte mogućnost dodavanja novog zadatka (frontend + backend). Dodajte novi zadatak u MongoDB kolekciju
tasks. Poslužite se templateom definiranim uApp_primjer_s_dodavanjem.vue


