- Fork la acest repo
git clone
la forkul nou creat (nu acest repo)npm install --legacy-peer-deps
pentru a descărca toate dependențele necesare- Creează un branch nou
quest
dinmain
și lucrează pe el. - Oferă-mi access la fork, de pe GitHub
settings/access
, invită un colaborator, cautăvictor@locoman.ro
.
- într-un terminal
npm run server
- va porni serverul - în alt terminal
npm start
- va porni UI-ul
! atenție, e important să rămână ambele terminale deschise pentru a rula aplicația corespunzător.
Modifică ceva din /server/index.js
și ceva din /src/index.js
. Verifică dacă apar modificările!
- Se va deschide automat un tab cu
localhost:3000
cu aplicația. Ar trebui să vezi mesajul "Up and running!" - Dacă ai întâmpinat probleme până aici, cere ajutor pe chat. Dacă nu, urmează partea interesantă 🤩
Se ocupă de server, ne permite să definim rutele.
Reîncarcă serverul când modificăm fișierele lui.
O bază de date populară. Vedeți Rush 10.
Se ocupă de UI. Noi scriem componente care depind de state
. React are grijă să afișeze în DOM
componentele noastre în dependență de state
. Matematic vorbind:
UI = React(state)
Folosim 🪝hooks pentru cod frumos.
Pentru a face React corect, avem nevoie de mai multe instrumente, care îngreunează mult folosirea React-ului. Din fericire, avem acest instrument care are grijă să configureze toate acele instrumente și ne lasă pe noi să facem partea frumoasă.
La fel cum express se ocupă de rutare pe server, acest instrument se ocupă de rutare în UI. Mai
întâi definim rutele existente prin Route
, apoi înlocuim anchor
tag cu Link
component și de
restul se ocupă instrumentul.
Ne permite să scriem CSS fără să scriem CSS 🤩. Și mai are și multe componente gata făcute. Nu e nevoie să-l folosiți pentru a scrie cod, CSS-ul poate fi folosit în continuare. Dar, există opțiunea să o faceți mai simplu, diferit.
The Movie Database oferă un API puternic, bogat în funcționalități. De la ei vom lua filmele și tot ce ne interesează despre filme.
A: Nu e necesar, sunt doar alegerea mea. Te invit să înlocuiești oricare din ele după bun plac. E un exercițiu bun să faci același proiect cu tehnologii diferite.
Utilizatorul dorește să privească un film și are nevoie de ajutor să aleagă filmul potrivit.
Ii oferim o aplicație prin care să poată salva filmele favorite și filmele privite. Pe baza acestor informații vom oferi recomandări.
Vom face o aplicație web unde utilizatorul va putea căuta filmele preferate, și apoi le poate salva în favorite/istoric. Informațiile despre filme va fi luată de pe TMDB prin API-ul lor. Stocarea informațiilor se va face în baza noastră de date, care o vom putea accesa printr-un server. Recomandările le vom face pe baza informațiilor din BD.
public
index.html
- De aici se va încărca aplicația în browser
server
index.js
- aici pornește serveruldb.js
- ne conectăm la MongoDBapi.js
- configurăm rutele de pe serverutils.js
- aici ținem funcțiile reutilizabile pentru server
src
- UI/clientindex.js
- aici pornește UI-ultheme.js
- tema pentru chakra-uiutils.js
- funcții reutilizabile pe clientpages
- o pagină are o rută prin care poate fi accesatăHome.js
- prima pagină, câte puțin de toate (caută rapid un film, vezi câteva din listele tale, vezi recomandările)Search.js
- o căutare simplă pe TMDBWatchlist.js
- filmele favorite pe care utilizatorul dorește să le priveascăHistory.js
- filmele priviteRecommendations.js
- aici utilizatorul va primi recomandări la ce film să privească acumMovie.js
- Pagina unui film, de aici se adaugă un film la favorite/istoric
components
- componente de React care nu sunt paginiApp.js
- structura aplicației = Header + pagina curentă, de care se ocupă routerulHeader.js
- Bara de sus din pagină, cu meniuWatchlistButton.js
- Un buton folosit înpages/Movie.js
connectors
- informații despre API-urile consumateapi.js
- serverul nostru cu rutele lui și alte info ce țin de eltmdb.js
- serverul TMDB, inclusiv rutele și API key-ul
hooks
- custom hooks, pentru logică reutilizabilăuseFetchEffect.js
- pentru fetch la mount, l-am făcut împreună la un RushuseFetchCallback.js
- pentru fetch la apelul unei funcțiiuseMovie.js
- logica de încărcare și actualizare a unui film, folosită înpages/Movie.js
Acum să trecem la muncă. Am pregătit o listă cu sarcini, pentru fiecare sarcină realizată, primești un punct. Cu 5 puncte primești badge, cu 10 deja ai punctaj maxim. cu 10+ vei fi lăudat de mentor, mândru de realizarea ta.
-
Deschide
README.md
în VS Code. O să verzi sursa textului în format Markdown. E chiar simpatic, dar dacă vrei să-l vezi ca și pe GitHub, apasăPreview
din bara de sus. Acum, după ce ai completat un task,✂️ îl tai de aici. Incepe cu acesta.Apoi modifică datele de conectare (user, pass, url) la MongoDB în
server/db.js -> CONFIG
. E important ca să evităm conflictele. Cel puțin, folosește o bază de date diferită. -
Completează pagina Search cu mai multe informații (popularitatea, ratingul, posterul, orice altceva ți se pare interesant). Adaptează design-ul.
-
Completeaza pagina unui film cu mai multe informații (backdrop, genres, link to imdb, durata, profit, rating, orice altceva ți se pare interesant). Adaptează design-ul.
-
Pe pagina unui film există 2 acțiuni - adaugă la favorite și adaugă în istoric. Primul este deja implementat. Sarcina este să-l implementezi și pe-al doilea - adaugă în istoric, care la click, face un request către server, care va salva starea nouă în BD.
-
Acum că avem funcționalitatea de a adăuga în istoric, să o îmbunătățim cu data când a fost salvat. Și dacă utilizatorul a privit filmul în altă zi? Pentru asta mai adaugă și opțiunea de a schimba data. Oare putem privi un film care încă nu a fost lansat?
-
Afișează istoricul în pagina corespunzătoare. Poți să te inspiri de la pagina de favorite, dar să modifici design-ul. Iar pentru sortare, ne vom folosi de data când a fost privit.
-
Implementează funcția de recomandări filme - afișează 3 filme random din lista de favorite. O să ai nevoie de un buton de actualizare listă, în caz că utilizatorului nu-i plac recomandările. Nu afișa filmele favorite deja privite. Lasă utilizatorul să poată șterge un film din favorite direct din această pagină.
-
Completează căutarea cu seriale folosind API-ul de search-tv-shows. Ești liber să alegi dacă le afișezi împreună cu filmele, în acest caz va trebui să marchezi care e film și care e serial, sau să afișezi 2 liste separate. Pentru a fi mai ușor de implementat, îți recomand să o faci în aceeași pagină, doar mai faci un call către API-ul nou.
-
Completează homepage-ul cu o căutare rapidă (câmpul de căutare și 3 filme/seriale), ultimele 3 privite, ultimele 3 favorite, o recomandare cu un singur film. Poți refolosi bucăți de UI prin componente, sunt ca funcțiile, doar că pentru UI. Dacă nu știi cum să afișezi informațiile, eu aș împărți pagina în 2: în dreapta afișez recomandarea cu ce să privești, iar în stânga, una sub alta: search, watchlist, history. Provocarea e să arate bine.
-
Salvează și sortează după momentul când filmul a fost adăugat la favorite.
-
Adaugă un filtru după categorii pentru Recomandări. Vezi că există un API cu toate categoriile existente.
-
Oferă aplicației o altă interfață. E o oportunitate bună să experimentezi, lasă designerul din tine liber să-și facă de cap.
-
Îmbunătățește algoritmul de recomandări cu ceva mai inteligent.
deschide un PR din [username]/quest
în [username]/main
și adaugă-mă la Reviews
, unde
[username]
trebuie înlocuit cu username-ul tău de GitHub. Apoi "mark as done" pe classroom.