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!
Kolejna strona, którą się skupimy to będzie strona subskrypcji.
Będzie to już ostatnia strona w tym kursie, którą zbudujemy razem.
Dodatkowo jeszcze dodatkowe moduły powiemy
sobie o dodawaniu nowej subskrypcji i o edytowanie ich.
Pokażę Ci w jaki sposób można ograć taką
funkcjonalność i przejdziemy do podsumowania.
Natomiast na chwilę obecną skupmy się
tutaj na na stronie związaną z subskrypcja.
Najpierw musimy zająć się zdecydowanie funkcjami, które pozwolą nam dostać się
tutaj do tych statystyk, które chcemy i tak naprawdę
będziemy potrzebowali statystykę związaną ile mamy aktywnych subskrypcji,
jaka jest najdroższa, jaka jest najtańsza, jaki jest średni koszt subskrypcji naszego
użytkownika, jaki jest totalny miesięczny koszt i totalny roczny koszt?
Chcielibyśmy pokazać takie statystyki.
Przejdźmy teraz do kodu i jeżeli przejdziemy sobie tutaj do naszej
APP to aplikacji do naszych dwóch stron, to mamy stronę z naszymi skryptami.
Jeżeli chodzi o content na razie sobie to zostawimy, natomiast my
zajmiemy się funkcją, która dostarczy nam statystyk, które chcielibyśmy wyświetlić
w naszym komponencie, czyli function get stats.
Możemy nazwać.
Tak naprawdę w tym momencie nie ma to większego znaczenia dla nas.
Możemy sobie to zawsze zrekonstruować, jeżeli chodzi o dane, które przekażemy
do tego, do tego do tej funkcji, to to będzie data,
podobnie jak to miało miejsce w komponencie z danymi dla Dashboard.
Jeżeli chodzi o logikę, to będzie tutaj już troszeczkę to inaczej wyglądało.
Na pewno będziemy potrzebowali aktyw subskrypcji równa się zero.
Na chwilę obecną to jest informacja ile użytkownik ma aktywnych subskrypcji.
Jeżeli chodzi o
COST koszt najbardziej najdroższej, czyli
jest most Expanded i 5.0 oczywiście Let.
I tutaj most.
Most ekspansywny.
Dodatkowe zmienne, jakie będziemy potrzebowali to tak naprawdę.
Czyli.
Czyli najtańszą Total Monthly Cost i
jelly cost, czyli ile miesięcznie użytkownik płaci, za co i ile rocznie.
Teraz przejdźmy do logiki.
Tutaj możemy sobie zrobić data, chwalić.
No i mamy naszą subskrypcję i dla każdej subskrypcji.
Zaczniemy od jednej rzeczy.
Na pewno.
Jeżeli filtrujemy sobie przez subskrypcje,
to chcemy sobie zwiększać aktywne subskrypcje, czyli aktywne subskrypcje.
Możemy sobie zrobić + +.
Dodatkowa rzecz, która będzie potrzebna to
na pewno koszt w złotówkach, czyli cost const.
Post.
N.
N.
I tutaj możemy skorzystać tak naprawdę z tego samego obiektu, który
mieliśmy tutaj przygotowany w naszym komponencie ze statystykami.
Przejdźmy teraz do niego.
Dashboard Main Stats i tutaj w kategorii Projekt to mieliśmy
gdzieś przygotowany obiekt, w którym korzystaliśmy z naszych Exchange rates.
Możemy sobie wyciągnąć to na zewnątrz, czyli wyciągniemy Exchange i eksport.
Const exchange changes.
Możemy sobie dodać komentarz dla przyszłych developerów, że to jest,
że to są Exchange, które nasza aplikacja wspiera, która ma support.
Oczywiście, że w wersji produkcyjnej musielibyśmy to tak naprawdę.
Wspominałem już o tym.
Najlepiej byłoby zrobić opcje użytkownika,
jakiś plik konfiguracyjny, kontekst, odczytywać nasze aplikacje.
My tutaj na potrzeby tego kursu pokazuję tylko i wyłącznie, że
nasza aplikacja może obsługiwać ile chcemy tak naprawdę tych walut.
My skupiamy się tylko na tych najbardziej popularnych u nas.
No i tutaj jeżeli chodzi o koszt internetu, czyli musimy to jest price.
I to razy. Exchange Rate.
Za Importujemy ten obiekt z komponentu Dash Pool Category Projekt Dom.
Prawdopodobnie powinniśmy sobie
dodać jakiś utilities albo model i wrzucić Exchange w ten folder.
Natomiast zostawimy sobie z tego względu,
że tylko mamy dwa widoki w naszej aplikacji.
Możemy to sobie zostawić w taki sposób.
I tutaj jeżeli chodzi o kod,
którym się będziemy posługiwać, to potrzebujemy currency
notes, bierzemy się do odpowiedniego exchange rate.
No i teraz if cost in PLN czyli cost per ta wartość.
Będzie większa niż mostek z pensji.
No to musimy sobie przypisać most ekspansji.
Jest równy koszt PLN. Tak?
Kolejny IF to jest post.
Jeżeli ta wartość w złotówkach będzie
mniejsza niż najtańsza aktualna, to też warto sobie chipset ustawić na PLN.
Mamy już informację na temat ile kosztuje najdroższa i ile kosztuje najtańsza.
Nie potrzebujemy tutaj w statystykach de facto wyświetlenia jaka to jest
subskrypcja, dlatego też nie uwzględniamy tego w naszej logice na chwilę obecną.
Kolejna rzecz, którą potrzebujemy to musimy kalkulować
miesięczny i roczny koszt bazując na billing period subskrypcje, bo subsydia
możemy mieć billing period roczny, miesięczny i bazując na tym musimy musimy
sobie tutaj kalkulować miesięczny i roczny koszt.
Czyli możemy sobie skorzystać z instrukcji switch.
I w tym momencie jeżeli chodzi o nasz KI to będzie subskrypcją billing period.
Jeżeli chodzi o nasze value jeżeli chodzi
o pierwszą wartość, czyli subskrypcję Billing Period zróbmy na monthly.
Jeżeli to będzie monthly no to
total monthly cost musimy dodać nasz koszt pln pln.
Jeżeli chodzi o Total Jelly Cost.
To też musimy dodać.
Tą wartość oczywiście pomnożone razy 12 czyli costam PLN razy 12, bo to jest
dodajemy do rocznego kosztu jeżeli mamy subskrypcję.
Tak naprawdę.
O koszcie miesięcznym.
No to musimy pomnożyć razy 12.
Tyle ona będzie nas kosztowała w jednym roku.
Przechodzimy teraz do następnego case.
Możemy sobie skopiować tutaj ten KS, który mamy poniżej.
Oczywiście tutaj.
W tej logice nie uwzględniamy tego, że zaczyna się w czerwcu.
Czerwiec jest miesiącem numer 6 w danym roku.
Dlatego pewnie, żeby to zrobić poprawnie
totalnie musielibyśmy tutaj uwzględnić start danej subskrypcji.
W którym miesiącu ona wystartowała i wtedy na rok 2000 np.
23 moglibyśmy policzyć dokładny koszt roczny.
Ja tutaj upraszczam,
po prostu liczę razy 12 miesięcy, jeżeli zakładam, że użytkownik po prostu będzie
korzystał z danej rzeczy przez następne 12 miesięcy.
Tutaj jeżeli chodzi o drugą wartość, to quarterly i my wykorzystujemy tutaj.
Jeżeli chodzi o monthly cost to musimy sobie to podzielić przez 12.
Też jest uproszczona logika tutaj pokazać.
Jeżeli chodzi o cost to razy 4, bo mamy 4 kwartały.
No i ostatni case możemy sobie zrobić Jolly.
I tutaj sytuacja będzie podobna.
Tutaj po prostu PLN dodajemy.
Ja to po prostu podzielimy to przez 12
forteli tutaj oczywiście nie przez 12 dzielimy tylko przez 3.
Myślę, że tak jak to jest teraz, możemy to zostawić.
To jest podstawowa logika, która pozwoli nam tutaj dostać Total Monthly.
Oczywiście, że tak.
Jak mówię, żeby zrobić to w stu procentach poprawnie, musielibyśmy
prawdopodobnie odczytywać wartości każdej subskrypcji start date.
Porównywać to z miesiącem, który to miesiąc jest danym roku i wtedy tyle
miesięcy, ile zostało odpowiednio to sobie pomnożyć.
Natomiast przyjmijmy, że tak naprawdę kondycja będzie po prostu zawsze.
Jeżeli chodzi o roczny koszt, to będzie po prostu trwała 12 miesięcy.
Jeżeli chodzi o average, czyli
cost per se możemy sobie to policzyć jako total monthly cost.
Przez aktywne subskrypcje SMS.
Czy to będzie nasza średnia?
Ile kosztuje średnio nasza jedna subskrypcja?
I tutaj musimy zwrócić obiekt z naszymi,
z naszymi danymi na lepiej odpowiednio sformatowany.
Już sobie przygotowałem z boku i zwracamy
obiekt w takiej postaci, że mamy 5 ki walk.
PS. Mamy wszystkie aktywne subskrypcje.
Mamy najdroższą, najtańszą.
Średni koszt, miesięczny koszt i roczny koszt nasze subskrypcji.
Co teraz możemy sobie zrobić?
To tak naprawdę musimy zacząć tutaj
pracować nad częścią naszego contentu w naszej aplikacji.
Czyli zaczniemy od ogólnego ułożenia i komponenty ze statystykami.
Przejdźmy teraz do implementacji
naszego u naszego ogólnego ułożenia naszej strony naszego Playa.
Czyli zrobimy sobie main i własny i tutaj mix.
Chcemy wyśrodkować sobie ten cały wrapper.
Wyświetlimy to jako grid, podobnie jak to było przepraszam w poprzednim przypadku.
FA ustawimy na full jeżeli chodzi o max.
Ustawimy to też na 7 XL tak jak w przypadku tutaj Grid.
Potrzebujemy tak naprawdę jedną kolumnę.
Grid rows ustawimy też na customowe wartości.
W naszym przypadku będzie to podobnie jak poprzednio mieliśmy 80 pikseli u góry
i tutaj będzie reszta, którą zajmuje nasza strona.
Ustawimy sobie też na 6, podobnie jak to miało miejsce w naszym Wordzie.
Jeżeli chodzi o padding y też ustawimy sobie na 6.
Zapiszemy tą wartość.
Przejdźmy do naszej przeglądarki, żebyśmy
już tutaj widzieli czy cokolwiek zaczyna się dziać.
Teraz musimy sobie wrzucić tutaj 2 wrapper.
Otóż 1 wrapper będzie potrzebny do naszych
statystyk, a drugi wrapper będzie potrzebny na naszą tabelkę.
Czyli zaczniemy od tego pierwszego na statystyki.
Potem będziemy mogli sobie ten kod
rysować, wydzielić osobny komponent na statystyki, osobny komponent na tabelkę,
tak jak to robiliśmy w dashboard wlasnej i tutaj Round.
XL.
Bedzie leasing 50 i padding na 6.
Zapiszemy sobie tą wartość.
Już w tym momencie pojawia się pierwszy wrapper na komponent ze statystykami.
No i kolejna rzecz to też div tutaj class name.
Ustawiłem sobie flex flex
round też na XL i leasing 50 i na padding ustawimy sobie na 6.
Zapiszemy to sobie.
No i już mamy kolejny komponent na naszą tabelkę.
Teraz możemy sobie przejść tutaj do
implementacji naszego komponentu ze statystykami.
Otóż co będziemy do tego potrzebować?
To na pewno kolejny wrapper, który nam
wyszukuje te wszystkie elementy, czyli div class.
I tutaj sobie wpiszemy Flex Fusion i Items Center.
Proszę ustawcie sobie GAP pomiędzy tymi tematami na 6.
Mamy i tutaj możemy tak naprawdę wykorzystać nasze
komponenty do Single Stack Component czyli Single Stack Component.
No i czego ten nasz component tutaj oczekuje?
Od nas oczekuje sumy, czyli pierwszy.
Pierwsza statystyka, którą będziemy chcieli pokazać.
Będzie to statystyka związana z najdroższą subskrypcją.
Tak. Czyli wróćmy do naszego edytora kodu.
Jeżeli chodzi o naszą najdroższą subskrypcję, mamy tutaj mostek z pensji.
Możemy sobie to wrzucić i.
Oczywiście jeszcze zanim dostaniemy pensję, musimy to wszystko użyć
i przekazać nasze dane do funkcji Get stats.
Czyli const równa się get.
Wstac i potrzebujemy Date date.
Data przychodzi nam z zewnątrz jako
property do tego komponentu i możemy sobie analogicznie do strony Dashboard Page.
Tutaj albo możemy wywołać funkcję Data Full port, czyli tutaj mieliśmy
funkcję, która wysłała nam po prostu te dane.
Natomiast myślę, że możemy sobie to ograć w inny sposób.
To jest. Kopiujemy na razie po prostu tą funkcję,
zaraz sobie sprawdzimy, jak można ten kod bardziej zresztą autoryzować.
Czyli tutaj jeżeli chodzi o
dane, to po prostu kopiujemy tą samą wersję z odczytywania danych,
którą mieliśmy poprzednio w naszym Wordzie i tutaj jako data czyli const data
możemy sobie po prostu odwołać się też tutaj do tej funkcji.
Jeżeli chodzi o logikę związaną z tą
funkcją to możemy sobie ustawić na desce link tutaj.
To będzie w porządku.
Tutaj zrobimy sobie to, jeżeli nie będziemy mieli danych.
Na chwilę obecną i tutaj jeżeli chodzi o
Get Stats, no to musimy przekazać odpowiednie dane.
Prom jest, Oczywiście trzeba poczekać.
Komponent po stronie serwera.
Cały czas możemy wykorzystać te dane.
Teraz już mamy nasze statystyki, czyli
możemy wykorzystać sobie stat kropka mostek z pensji.
Zobaczmy czy zwracamy nasze dane.
No i tutaj mieliśmy błąd, bo wskoczyliśmy
w ciało funkcji, co jest generalnie błędem.
Musieliśmy sobie wyskoczyć z tego average cost person.
Musimy sobie też to tutaj wyciągnąć.
Poza tym instrukcja data for, lecz.
No i teraz już mamy tak naprawdę nasze dane w odpowiedniej formie.
Możemy to wykorzystać.
No i tutaj jeżeli chodzi o pierwsze, to mostek z pensji potrzebujemy.
No i dodatkową rzeczą, którą potrzebujemy to jest nasz sam title i nasz title.
To będzie po prostu mostek z pensji.
Tak, zapiszemy nasz komponent.
Sprawdźmy.
No i już mamy odpowiedź na informację, ile
kosztuje najdroższa subskrypcja naszego użytkownika.
Żeby sobie sprawdzić poprawność danych możemy sobie odwiedzić localhost 5 1555,
sprawdzić sobie nasze subskrypcje i zobaczmy co tu jest najdroższe.
30 dolarów.
Odpalamy kalkulator tak na szybko.
Jeżeli chodzi o walidację 30 razy 4,5 to jest około 135 dolarów.
To jest najdroższa subskrypcja, którą mamy w naszej bazie danych.
No i generalnie to jest wartość podobna, bardzo zbliżona do tej, którą mamy tutaj.
Także to jest pierwsza statystyka.
Teraz analogicznie do tego możemy sobie przejść do statystyki numer dwa.
To będzie najtańsza subskrypcja, czyli Chips i tutaj, czyli po subskrypcji.
Mamy statystykę numer 2.
Wyszło nam 0 PLNów.
Sprawdźmy.
Dlaczego?
Prawdopodobnie dlatego, że sprawdzamy, czy jest mniejsze.
Tej najtańszej.
Możemy to zamienić na Infinity.
I w tym momencie już nie mamy wartości
domyślnej jako 0, tylko tu mamy wartość domyślna, po prostu jako numer.
I w tym momencie nasza statystyka powinna mieć już naszą ostatnią
najtańszą wartość, czyli nie dopuszczamy domyślnej wartości w żaden sposób.
Jeżeli chodzi o kolejną statystykę, którą potrzebujemy tutaj w tym komponencie,
to będzie statystyka związana z Average Cost.
Czyli post.
I my możemy powiedzieć mamy nasz nowy, lecz troszeczkę powiększone.
Mamy już kolejną statystykę.
Kolejna rzecz musimy Total Monthly to chcieliśmy
wyświetla użytkownikowi Total Monthly Closed.
Mamy 473.
I kolejna, prawdopodobnie już ostatnia
Total record, czyli ile rocznie użytkownik płaci.
I tutaj host wrzucamy sobie tą wartość.
Mamy te wartości już pokazane tak jak powinny być.
Natomiast jest jedna rzecz, której nam brakuje.
Wróćmy do firmy.
I tutaj mamy active subskrypcje.
Czyli to są subskrypcje, które są aktywne.
To też sobie musimy tutaj pokazać.
Wróćmy do naszego komponentu i Items Center Full.
Zróbmy sobie znowu trik z oddzieleniem tych dwóch części.
Czyli załóżmy, że normalne statystyki po prostu będą po prawej stronie.
Wrzucimy je tutaj, w tego diva.
I kolejna rzecz, którą będziemy potrzebować to tutaj kolejny wrapper
i tutaj sobie wrzucimy tą pojedynczą statystykę.
Jeżeli chodzi o aktywne subskrypcje, czyli aktywne subskrypcje.
I tutaj Total Act w subskrypcji.
Teraz oczywiście musimy sobie tu te style troszeczkę zmienić.
Jeżeli chodzi o nasz pojedynczy wrapper to przyklejamy
na tym, ale żeby dane się wyświetlały dobrze.
Natomiast tutaj ten.
Jeżeli chodzi o.
Nie potrzebujemy GAP, tylko potrzebujemy czas swipe between tak
aby przesunąć od siebie te dwie rzeczy, które nie mają nic wspólnego.
Oczywiście mamy problem teraz jeżeli
chodzi o wyświetlanie tego na ekranach mobilnych i mniejszych ekranach.
To zostawiam Ci jako zadanie domowe.
Myślę, że łatwo tutaj odnieść się do tych
pojedynczych elementów, po prostu rachować i w miarę tego jak się jaki mamy, jaką
mamy wielkość ekranu w odpowiedni sposób to wyświetla nas masz.
Jeżeli zobaczysz widzimy na dużych ekranach jak najbardziej.
Te elementy tutaj ze statystykami możemy uznać już tak naprawdę za zakończone.