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!
Jeszcze zanim zaczniemy budować nasz model
danych, zastanówmy się, jaką w ogóle aplikacje budujemy.
W naszym przypadku będzie to aplikacja do zarządzania swoimi substancjami.
Każdy z użytkowników będzie mógł
trzymać w jednym miejscu wszystkie swoje subskrypcje.
Każde zużycie będą miały jakieś płatności.
Czyli mamy tutaj next payment.
Czy będzie jakaś następna płatność w kolejności?
Będą jeszcze jakieś inne płatności, które będą płatnościami historycznymi?
Prawdopodobnie mamy tutaj last payment.
Jest eksperyment, jest jakiś status tej płatności?
Musimy zwrócić uwagę na to, że jeżeli chodzi o koszt
subskrypcji, którą tutaj mamy, to mogą one być w różnych wyrażone, w różnych
walutach, także też będziemy musieli sobie to jakoś ograć w naszym systemie.
Dodatkowo rzecz biorąc jest jakaś główna
waluta do wyświetlenia wszystkich statystyk, którą prawdopodobnie
użytkownik naszej aplikacji będzie mógł sobie gdzieś ustawić w opcjach.
Dodatkowo mamy jeszcze tutaj jeżeli chodzi o samo wyświetlanie naszych subskrypcji.
Jak widzisz subskrypcja może mieć nazwę
kategorię Billing period, czyli jak często jest blokowane ostatnia płatność, następna
płatność, status następnej płatności, którą mamy.
Tutaj mamy koszt.
Jeżeli chodzi o to to jeszcze mamy jakiś
log URL będzie potrzebne jeżeli chodzi o model naszej subskrypcji.
No bo tutaj musimy sobie zaszyte jakieś obrazki dla danych subskrypcji.
Jeżeli chodzi o pierwszy ekran to widać, że mamy tej kategorii break down.
To będą dwa ekrany, na których się
skupimy, które postaramy sobie zbudować całą logikę tutaj aplikacji.
Mamy infrastrukturę, tu mamy entertainment.
Są różne kategorie, które nasz użytkownik będzie mógł sobie samemu przypisywać.
I tutaj mamy rozbicie statystyk poszczególnie na kategorie.
Tutaj mamy co jakieś wyświetlane statystyki, czyli ile zapłaty w tym
miesiącu, ile już zapłacone, ile w zeszłym miesiącu do zapłacenia, ile
w tym miesiącu do zapłacenia za nasze serwisy, subskrypcje.
Tutaj mamy bardziej rozbite statystyki jeżeli chodzi o poszczególne subskrypcje.
Czyli mamy najdroższą, najtańszą.
Średni koszt to opcji sumę miesięczną.
Ile się płaci za wszystkie subskrypcje użytkownik, sumę roczną, ile użytkownik
płaci rocznie za wszystkie subskrypcje, no i ilość aktywnych subskrypcji aktualnie.
Przejdźmy teraz do przedstawienia modelu danych.
Ja przygotowałem już tutaj taki mały
wykres, żebyśmy mogli sobie teraz porozmawiać na temat danych, które
będziemy sobie modelować w naszej bazie danych.
Jak one będą wyglądały?
Kilka założeń tutaj u góry.
Każdy użytkownik może mieć wiele subskrypcji.
Każda subskrypcja może należeć tylko do jednego użytkownika.
Każda subskrypcja może mieć wiele płatności.
Tak jak mówiliśmy, to jest płatność
następna, czyli ta główna, ale też są płatności, które już były
w przeszłości zapłacone albo będą w przyszłości jeszcze nie są zapłacone.
To będzie potrzebne do tego, żebyś mógł
mogła sobie dalej rozwijać tą aplikację, np.
tworząc lepsze statystyki, pokazując historię, jakieś wykresy.
I każda płatność może należeć tylko do jednej subskrypcji jednego użytkownika.
Czyli tzw.
payment.
Bill Payment jak to nazwiemy,
będzie należał do jednej subskrypcji i będzie miał też jednego użytkownika.
Może to być payment, nie może należeć do dwóch
użytkowników, to może tylko do jednej subskrypcji i do jednego użytkownika.
Sam payment nie może istnieć.
Musi istnieć subskrypcja połączona z
opłatą subskrypcji, żebyśmy mogli to w miarę dobrze śledzić.
Dobrze, przejdźmy teraz do 3 etapu
w naszym projekcie i napiszemy sobie pierwszą wersję.
To jest Hime tutaj, żebyśmy mogli sobie
pracować z jakimiś danymi w naszej aplikacji.
Jeżeli chodzi o Prisma główna strona to jest Prisma.
Dodając możesz sobie przeskoczyć teraz na
tą stronę i mamy tutaj guzik Quick Start w którym wystartujemy.
My mamy Setup from Scratch.
Mamy relacyjną bazę danych, czyli możemy od razu przeskoczyć tutaj w to miejsce.
Jeżeli chodzi o set up jest on bardzo prosty.
Najpierw musimy sobie zainstalować odpowiednie zależności.
Natomiast zobaczmy sobie jak to u nas wygląda w projekcie, bo z tego co wiemy to
mamy już jakieś zależności pewnie zainstalowane.
Jeżeli chodzi o Prisma to Prisma tutaj wymaga także filtra.
My mamy już zainstalowany z projektem tekstowym.
TS z tego nie ma.
Możemy sobie zainstalować Types.
Mamy już.
I saw df.
Czyli tak naprawdę TS i Prime musimy sobie doinstalować do naszego projektu.
Przejdźmy teraz do naszego terminala
i npm install Prisma i potrzebujemy jeszcze test node minus minus.
Gdy zainstalujemy sobie zależności, które
potrzebujemy do tego, żeby móc pracować z Prisma w naszym projekcie.
Po chwili jak mamy zainstalowane zależności, te projektu nie musimy
realizować, bo już go mamy za GO w naszym projekcie.
Natomiast my potrzebujemy MPX Prisma init i to polecenie robi dwie rzeczy stworzy
nam folder w naszym projekcie o nazwie Prisma, w którym będziemy mieli schemat
naszej bazy danych i stworzy plik doc, w którym będziemy mogli sobie wpisać
Environment Variable do połączenia z naszą bazą danych.
My już ten plik mamy stworzony, dlatego
Prisma prawdopodobnie poinformuje nas o tym, że już ten plik jest stworzony i że
prawdopodobna wartość tej zmiennej jest już w naszym pliku.
Zobaczmy sobie jeszcze strukturę folderów w naszym katalogu nasze katalogu i zobacz,
że tutaj jeszcze nie mamy żadnego folderu o nazwie Prisma.
Mamy nasz plik doc, w którym już mamy wklejone naszą BB Connection String,
natomiast nie mamy żadnego katalogu o nazwie Prisma.
I teraz w tym momencie jak ja sobie zrobię tutaj MPX Prisma i nikt.
No to stworzy się katalog o nazwie Prisma.
Mamy tutaj informacje Prisma Schema, bo scripts
Prisma dodała by data wyjść URL, ale już masz ten data bez URL w twoim pliku.
Doc Zauważ, że jest to tak fajnie ograłem tutaj, że nawet dają nam tutaj informację
ok, nie musimy tworzyć dla Ciebie pliku inf.
I teraz pamiętaj, że masz git minor file i nie zapomnij dodać Twojego pliku n.p.
Do Twojego git ignore file, żeby nie
wysyłać wrażliwych danych na swoje repozytorium.
Następne kroki są też bardzo fajnie przedstawione.
Ustaw Database URL do.
Ten file to już mamy za sobą set provider, czyli Data Source.
Potrzebujemy Prisma, żeby Prisma mogła
określić w jaki sposób dodać nam typy danych encji w bazie danych.
My w naszym przypadku mamy post, gdyż
build to jest domyślny domyślny data Souls w każdej domyślnie stworzonej.
Z kim jest, z kim jest Prime i później robimy Prisma DB to chcemy.
Jeżeli mamy już
jakby bazę danych z tabelami to możemy sobie stworzyć typy w naszej aplikacji na
bazie tej bazy danych tych tabele, które już są w bazie danych.
Natomiast my zrobimy sobie Generate, czyli
chcemy wygenerować klienta Primy i też musimy sobie zrobić migracje, żeby nasze.
Nasza struktura danych, którą sobie za
chwilkę określimy w pliku schema prisma była tą strukturą tabel,
które będą w naszej bazie danych w naszej bazie danych.
Teraz przejdziemy do
budowania naszego schematu danych, który jest tutaj w pliku schema.
Z kim ma?