Projekt aplikacji SaaS
8 godz. 8 min · Next.js · Full-stack i Programowanie
Daniel NoworytaFull stack DeveloperNaucz się tworzyć bezpieczne systemy uwierzytelniania i autoryzacji, korzystając z Clerk. Pokażę Ci, jak to robić krok po kroku, aby Twoje aplikacje były bezpieczne i profesjonalne.
Zrozumiesz, jak skutecznie i bezboleśnie połączyć swoją aplikację Next.js z bazą danych PostgreSQL na DigitalOcean. Pokażę Ci, jak używać Prismy, aby ułatwić ten proces.
Dowiesz się, jak zarządzać routingiem i nawigacją w swojej aplikacji, aby użytkownicy mogli łatwo i intuicyjnie poruszać się po Twojej stronie.
Pokażę Ci, jak z łatwością wdrożyć swoją aplikację na Vercel, jednym z najpopularniejszych środowisk hostingowych dla aplikacji Next.js.
Nauczysz się zarządzać stanem aplikacji i jak wykorzystać server actions w praktyce, co pozwoli Ci na tworzenie bardziej zaawansowanych i dynamicznych funkcji.
Ten kurs jest dla osób, które już mają pewne doświadczenie z JavaScript i chcą zgłębić swoje zrozumienie Next.js. Zakładamy, że znasz podstawy TypeScript, TailwindCSS, ale nie potrzebujesz doświadczenia z Next.js - wszystko wyjaśnię Ci od podstaw!
Komponent statystyk możemy uznać za skończony.
Na chwilę obecną myślę, że to jest dobra
baza do tego, żebyś mógł mogła dalej rozwijać swoją aplikację.
I widzisz teraz sposób, w jaki można sobie
podchodzić do kolorowania, do budowania pewnych funkcjonalności.
Oczywiście, że jest tutaj jeszcze mnóstwo rzeczy, które można było torować.
Natomiast na chwilę obecną myślę, że sobie to zostawimy.
Przejdziemy teraz do kolejnego elementu
naszej aplikacji, mianowicie tutaj tej strony, którą widzimy po prawej stronie.
Zajmiemy się teraz dokładnie tym
elementem, który widzisz po prawej stronie tutaj.
I jeżeli chodzi o design,
to przejdźmy do naszej firmy i zobaczmy w jaki sposób to wygląda.
Tutaj mamy jakiś header, który mam tutaj u góry.
Mamy jakoś.
Można powiedzieć to jest tabelka z kategorią i z kosztem.
No i mamy na dole wyszczególnienie na najbardziej drogą kategorię naszej
subskrypcji i najtańszą kategorię naszych subskrypcji.
Także możemy teraz przejść do implementacji tego komponentu.
Ja sobie troszeczkę tutaj to zostawię na
pełny ekran, natomiast przejdziemy do naszego edytora kodu.
Będziemy widzieć zmiany, które będą tutaj
po prawej stronie się pojawiały w miarę pisania naszego komponentu.
Myślę, że ma sens jak najbardziej.
Znowu wyodrębnienie sobie czegoś takiego, do czego przekazujemy te
dane, które już i tak zostały czytane na tej stronie.
Dlatego przejdźmy teraz tutaj do naszych komponentów i wyodrębnienie w dashboard
kategorii Project Down Component, czyli Dashboard Can't Break Down tez X.
No i analogicznie jeżeli chodzi o komponent ze statystykami, tutaj możemy
sobie tak naprawdę skopiować początek, zmienimy nazwę.
No i tu potrzebujemy zamknąć nasz build kategorii breakdown tu jako read.
Nie zapominajmy o tym.
Możemy sobie wrzucić już nasz wrapper,
który jest odpowiednio przygotowany do tego, żeby pokazać naszą treść.
No i teraz tutaj w to miejsce możemy sobie wrzucić nasz dashboard Category Breakdown.
Zapiszemy to sobie wyświetlania naszej strony.
To się nie zmieniło, bo nie zmieniliśmy
jeszcze nic, ale teraz już możemy przejść do naszego komponentu.
Ja sobie zamykam tutaj te wszystkie okna i
możemy przejść do implementacji tego co jest w środku.
Mianowicie rozpoczniemy sobie od jakiegoś tytułu, bo z tego co widać na naszym
designie to mamy jakiś tytuł kategorii breakdown tutaj tego komponentu.
Dlatego możemy przejść do edytora kodu i zacząć implementować nasz tytuł.
Niech to będzie dwójka w tym przypadku.
I w tym momencie kategorii
break down zapiszemy i już nam się coś pojawia jeżeli chodzi o style.
Sprawdźmy czy tutaj mamy wszystko rozpisane I1 Run the beginning, xn Flex.
Jeszcze przydałby się jakiś padding, żeby to wszystko od siebie odsunąć, czyli P6.
Myślę, że jest jak najbardziej ok.
No i tutaj rysujemy sobie teraz ten napis
to będzie tekst i oczywiście class najpierw
tutaj text, czyli zwiększymy sobie rozmiar i font też sobie zmniejszymy, zwiększymy.
No sami bold no mamy już ładniejszy napis, kategorie biegną.
Kolejną częścią tutaj będzie nasza tabelka z danymi.
To sobie tutaj zostawimy.
Na chwilę obecną wrzucimy komentarz
data table i tutaj kolejną częścią będzie tak naprawdę wyświetlenie statystyk.
Tak.
Czyli możemy zająć się może tą częścią na początku.
Jeżeli chodzi o to zajmiemy się, zrobimy sobie jakieś nagłówki.
Na początku będzie Most ekspansji w kategorii I tutaj poniżej
musimy sobie dać miejsce na wyświetlenie informacji na temat tych kategorii.
Na razie wpiszemy to na sztywno.
Te informacje w naszym przypadku to będzie jakaś cena prawdopodobnie.
Czyli zrobimy sobie 36 77.
Na chwilę obecną pakujemy to w paragraf.
Napisz sobie budujemy to rozwiązanie,
później zobaczymy w jaki sposób to będzie tutaj wyglądało.
Jeżeli chodzi o name tutaj to możemy sobie zrobić czwórkę i na razie napiszemy enter,
dopóki nie zajmiemy się logiką tego wszystkiego.
Widzimy, że tutaj wyświetlanie tych
elementów w naszym głównym kontenerze nie jest za bardzo poprawne.
Myślę, że musimy dodać tutaj flex column, żeby to wszystko ustawiało się pod sobą.
Jest jak najbardziej ok.
I teraz to możemy sobie zostawić.
Jeżeli chodzi o ten komponent to chcemy, żeby tabelka zajmowała
praktycznie całą wysokość tutaj i to chcemy przenieść na sam koniec.
Czyli w tym momencie możemy sobie tutaj
ustawić już tak naprawdę margin na top, na dwójkę, na full i grą,
no i w przesunie nam to całe category na dół.
Tu tak jak mówię, jest miejsce właśnie.
Teraz rysowaliśmy na naszą tabelkę z poszczególnymi statystykami kategorii,
natomiast zajmiemy się teraz wyświetlaniem tutaj tego pojedynczego elementu.
Czyli przeskoczymy tutaj ten div i postaramy się to postulować.
Class name i w naszym przypadku niech to będzie flex.
Niech to będzie Items Center.
Żeby wyśrodkować te elementy i niech to będzie czas HiFi Between.
Z tego względu, że chcemy od by odsunąć od siebie cenę i nazwę danej kategorii.
Jeżeli chodzi o nazwę kategorii to też tutaj będziemy musieli
prawdopodobnie sobie jakieś style zastosować.
To jest na chwilę obecną to zostawimy, przejdziemy sobie to
oscylowały tutaj tej ceny, czyli klasy name i w naszym przypadku font semi bold.
Dodatkowo będziemy potrzebować text z.
Zrobimy sobie 950 i to wszystko na chwilę obecną.
Tu mamy już cyferka nam się wyszczególnia.
Jeżeli chodzi o tą czwórkę to zostawimy sobie tak jak ma być.
Tak naprawdę jeżeli chodzi tutaj o Most
ekspansji w kategorii to też możemy to wystylizować, czyli fast text.
Zróbmy sobie LG znowu i font semi bold.
No już mamy mostek z pensji w kategorii też się fajnie.
To wystylizować, to teraz jeszcze żeby przesunąć te elementy
od siebie, to możemy sobie tutaj popracować nad tym w raperem Flex.
Niech to będzie flex column,
bo elementy były pod sobą i jeżeli chodzi o garb ustawimy go na wartość 4.
Odsunąć od siebie te dane?
Myślę, że na chwilę obecną możemy to sobie zostawić.
Ja tutaj widzę potencjał do
tego, żeby wyodrębnić sobie znowu taki komponent tutaj.
Natomiast na razie po prostu sobie to
tutaj kopiujemy, myślę i będziemy mogli sobie wykorzystać tak
naprawdę ten sam, ten sam komponent tutaj poniżej.
Żeby go wykorzystać, to musimy sobie głowy
skopiować z jakiegoś diva kolejnego i przesuniemy to w taki sposób i to już w
tym momencie możemy sobie zrobić kopiuj wklej.
I tutaj niech będzie chips, czyli najtańsza kategoria.
Niech to będzie Siemens.
Cyferki możemy sobie tu zostawić.
Myślę, że wygląda to już jak najbardziej poprawnie.
Tutaj jeszcze ten napis mógłby być chyba troszeczkę mniejszy.
Sprawdźcie sobie na naszym dizajnie na
naszej stronie internetowej jest on troszkę za duży.
Przejdźmy do nazwy tych Entertainment Instruments Class Name Text.
No i już wygląda to troszeczkę lepiej.
Mamy mostek w kategorii Entertainment Instruments.
Teraz musimy zająć się tak naprawdę logiką.
Póki co tabelki sobie na sztywno nie będziemy budować z tego względu, że
najpierw zbudujemy sobie teraz funkcję, która będzie odpowiadała za
logikę, która policzy nam koszt poszczególnych kategorii.
Przejdźmy teraz wyżej i najpierw zaczniemy od funkcji, która będzie nam zaliczała
sumy poszczególne dla poszczególnych kategorii sumy.
Koszty dla poszczególnych kategorii, czyli zsumowane subskrypcje należące do
poszczególnej kategorii wynoszą na rzecz użytkownika, czyli function.
I tutaj w tym momencie sam Price z
kategorii No i tutaj jako dane podamy sobie data subskrypcji.
I jeżeli chodzi o to, to musimy jak
najbardziej zaimportować tutaj ten typ z Primy.
I w tym momencie musimy zrobić edytor.
I tutaj i tutaj za pomocą funkcji Radius musimy skorzystać coś z logiki.
Jeżeli chodzi o nasz Accelerator to
niech to będzie record typu record String number.
I jeżeli chodzi o item to zostawimy to tak jak jest.
Dobrze i teraz zrobimy LED Prize.
To się równa tolerancji i stworzymy sobie nasz obiekt westchnień.
To troszkę inne podejście do tworzenia swoich statystyk.
Poprzednio robiliśmy to za pomocą po prostu stałych sztywno za.
Natomiast tutaj zrobimy sobie cały obiekt.
Tak naprawdę jeżeli chodzi o euro zrobimy sobie cenę 4,7 tak jak poprzednio.
Jeżeli chodzi o oczywiście dwukropek.
Tutaj jeżeli chodzi o dolary zrobimy sobie 4 5 jeżeli chodzi o PLN oczywiście 1.
Jest to główna waluta naszej naszej aplikacji i jeżeli chodzi o.
O nasz protest.
No to tutaj musimy sprawdzić, czy kadencji Leppera jest karencji exchange rate.
Jeżeli tak to item price
razy exchange rates i tu możemy sobie wykorzystać item currency.
Jeżeli nie ma to item.
Zrzucimy w tym przypadku.
Tu mamy już funkcję jeżeli chodzi o nasz projekt.
Teraz musimy sobie dodawać tą cenę do
obecnej kategorii, czyli IV kategorii In Accelerator.
Możemy sobie zrobić akcelerator.
Item category i robimy plus równa się nasz price Tak?
Natomiast jeżeli nie.
Przy przeciwnym przypadku musimy
zainicjować tak czyli else i Accelerator też Item Category.
Jest równy pracom.
Zwrócimy.
Rytualny akcelerator tutaj.
Teraz jeżeli chodzi o problem, nasz problem tutaj z typami.
Musimy to przenieść do naszego komponentu, tutaj do środka.
Niech to będzie funkcja i tutaj.
Jeżeli chodzi o dane to data i musimy stworzyć typ.
Będzie to typ analogiczny do tego co mieliśmy w main.
Tutaj nie będzie interfejs Dash, bo od break down props.
Są to subskrypcje.
Tutaj musimy sobie zaimportować znowu Payments.
Jeżeli chodzi o ten typ to wrzucimy.
Coś takiego.
Natomiast w naszym przypadku to będzie tata, ok.
I tutaj w tym momencie, w którym
przekazujemy to do naszego komponentu, możemy zrobić i widoczną datę wieczór.
W naszym przypadku zapiszemy sobie to wszystko.
Teraz, już po zapisaniu tego komponentu jest wszystko w porządku z naszymi typami.
Tutaj jeżeli chodzi o te data retro null
możemy sobie to darować tak naprawdę, bo dane są nam zawsze przekazywane.
Nie, my nie mamy undefined.
Tylko tutaj jeżeli chodzi o nasz dashboard musimy sobie przekazać teraz nasze dane.
Oczywiście będzie problem tutaj z typami.
Zróbmy na razie tutaj.
I znowu data.
Zrobimy sobie return. Będzie to tam.
To, że tutaj jesteśmy pewni, że dane istnieją.
Mamy naszą kategorię teraz musimy sobie wykorzystać tutaj.
Z tych danych, które zostają dla nas
obliczone, czyli mamy sam Prices by category i tak naprawdę z powrotem
dostaniemy obiekt, w którym będziemy mieli kategorię i cenę.
Jeżeli teraz wykorzystamy to
w praktyce, czyli teraz sprawdźmy w jakiej formie dostaniemy nasz kod.
Resort równa się sam procesor kategorii data.
Zobaczymy konsolowy resort.
Zapiszemy to sobie.
Sprawdźmy.
Jako, że jest to komponent po stronie
serwera, to musimy wejść nasz w nasz terminali.
Zobaczymy po odświeżeniu jakiego typu dane dostajemy.
Póki co mamy tylko i wyłącznie mamy Entertainment Info Tours, TBL Tours
Tours i mamy wszystkie dane sumowane razem z kosztami.
No przydałoby się coś zrobić z tymi
z tymi danymi, żeby to troszeczkę jednak lepiej było wyświetlane.
Dlatego możemy sobie tutaj skorzystać z Object Countries.
Ja troszkę przerobię te funkcje i te same kategorie zrobimy Object Entry.
I już w tym momencie dostaniemy tablicę.
Tutaj wykorzystujemy Object Entry, żeby
zmapować to w tablicę, gdzie wartością w tej tablicy będzie obiekt,
który będzie zawierał imię, kategorii i cenę.
Myślę, że będzie dużo łatwiej nam pracować z czymś takim w tabelce.
No i tutaj dostajemy już właśnie nazwę kategorii i cenę danej kategorii.
Przejdźmy teraz z powrotem.
Już mamy tak naprawdę wszystko to, co potrzebujemy do wyświetlenia tabelki.
Natomiast jeszcze potrzebujemy jedną funkcję.
Jeżeli chodzi o funkcję, która wyszukuje
nam najdroższe i najtańsze jest już to skrypcie, jeszcze przygotowałem na boku.
Logika polega na tym, że przekazujemy
tutaj rezultat z tego gdzie mamy nazwę kategorii i cenę.
Mamy taką tablicę.
I tutaj redukujemy tą tablicę i
sprawdzamy, że jeżeli current price jest większy niż mostek z pensji w który
powstaje nam w torze, to przypisujemy ten current.
Natomiast jeżeli current price jest
mniejszy to przypisujemy do paska rent i zwracamy tak naprawdę w akcelerator.
No i tutaj podajemy obiekt jakiego
spodziewamy się na końcu dostać tutaj z tego rezultatu.
No i w tym momencie możemy
zrobić już Connect Most ekspansji I, czyli po prostu
i wykorzystać już naszą funkcję tutaj, która jako parametr przyjmie sobie
rezultat tutaj, który mieliśmy wcześniej i już mamy najdroższą i najtańszą
kategorię, możemy sobie zrobić console log.
Czyli podkategorii.
Przejdźmy teraz do naszego terminala. No i mamy.
Najbardziej droga kategoria jest Entertainment naszego użytkownika.
Najtańsza jest ubezpieczenia, czyli 22 784.
Mamy już dane potrzebne do wykorzystywania ich tutaj.
Przejdźmy teraz do wykorzystania tych danych.
Mamy mostek z pensji w kategorii, czyli mamy nami pracę.
Czyli tak naprawdę możemy sobie tutaj.
Jeżeli chodzi o mostek z powyższych kategorii.
Możemy sobie to tutaj wykorzystać i mostek z pensji i wykorzystać nasz name.
Tutaj możemy sobie zrobić mostek z pensji, wykorzystać nasz price.
Most Ekspansji.
Proste i.
Natomiast będziemy musieli zrobić dwa miejsca po przecinku.
Chcemy dostać i już mamy uaktualniony ten komponent.
Jeżeli chodzi o najtańszą kategorię, to zróbmy test
name i w tym przypadku też musimy tak naprawdę zrobić podobną logikę.
W tym miejscu jeżeli chodzi o najtańszą
kategorię tylko zmienimy, zapisujemy to mamy już poprawną cenę.
Natomiast zróbmy jeszcze. Sprawdźmy jeszcze design, bo
mamy tutaj jeszcze walutę, która powinna być dodana na końcu.
W naszym przypadku ma być to główna waluta
ze statystyk wyświetlanych dla naszego użytkownika.
Czyli tak naprawdę musimy teraz tutaj wykorzystać SPAN, a np.
w tym przypadku span.
I tutaj zapiszemy sobie PLN i użyjemy to klasy name i tam
jeden margin po lewej stronie tekst zrobimy na 8 pikseli.
Nie mamy takiej wartości.
Musimy to troszkę pomniejszyć i
możemy skopiować to poniżej tutaj i już mamy złotówki.
Ile to kosztuje? Ile kosztuje najdroższa kategoria?
Ile kosztuje najtańsza kategoria?
Teraz zajmijmy się zbudowaniem tabelki, którą będziemy mieli powyżej
właśnie z danymi związanymi z tymi wszystkimi kategoriami.
Może usuniemy ten console log?
Dobrze, no to teraz przejdźmy do budowy tej tabelki.