Adatbázis Kapcsolatok
Az alkalmazás kettő PostgreSQL adatbázishoz kapcsolódik. Az előbbi a Neon Serverless Postgres -nél kerül hostolásra, míg az utóbbi Supabase -nél. A Neon adatbázis kapcsolat kiépítéséhez a Drizzle ORM -et vettük igénybe, míg a Supabase-nél a supabase-js SDK-t.
Neon Adatbázis (planit-db)
Ez az adatbázis 13 táblával büszkélkedhet, melyek a következők:
User Tábla
A felhasználó adatai kerülnek eltárolásra ebben a táblában.
id
(Text) - Random UUID-t kap. - A felhasználó egyedi azonosítója (elsődleges kulcs).
name
(Text)
- A felhasználó regisztrációkor megadott neve.
email
(Text)
- A felhasználó e-mail címe.
emailVerified
(Timestamp)
- Időzóna specifikus.
- A regisztráció megerősítésének időpillanatát tárolja.
password
(Text)
- A felhasználó jelszava
- Hash-elt érték kerül eltárolásra (A Password Hashing-et a bcrypt hash függvényével oldottuk meg.)
- Az OAuth-al regisztrált felhasználóknak nincs jelszavuk.
birthDate
(Timestamp)
- A felhasználó beállított születésnapját tárolja.
tier
(Enum)
- Két értéket kaphat: free vagy paid.
image
(Text)
- A felhasználó által feltöltött kép url címét tárolja.
nameChangedAt
(Timestamp)
- Értéket akkor kap, mikor a felhasználó megváltoztatja a nevét. 90 naponta van erre lehetőség.
imageChangedAt
(Timestamp)
- Értéket akkor kap, mikor a felhasználó megváltoztatja a profilképét. 90 naponta van erre lehetőség.
createdAt
(Timestamp)
- A felhasználó regisztrációjának idejét tárolja.
Account Tábla
Az Account tábla az OAuth-al regisztrált felhasználókról tárol további adatokat.
userId
(Text)
- A user tábla
id
mezőjével áll relation-ben.
type
(Text)
- A szolgáltató típusa. Ez például a GitHub-nál a következő: OAuth
provider
(Text)
- A szolgáltató neve. Jelen esetben github vagy google.
providerAccountId
(Text)
- A szolgáltatói fiók egyedi azonosítója.
refresh_token
(Text)
- A szolgáltató által kiadott token, amivel új access tokent lehet kérni amikor az lejár.
access_token
(Text)
- A védett erőforrások eléréséhez használt token.
expires_at
(Integer)
- Az access token lejárati időpontja.
token_type
(Text)
- A token típusa, általában “Bearer”.
scope
(Text)
- Az access token által engedélyezett jogosultságok listája.
- Például “email profile” - email cím és profil információk lekérése
id_token
(Text)
- JWT token ami a felhasználó személyazonosságát igazolja.
- Tartalmazza a felhasználó alapvető adatait.
session_state
(Text)
- A szolgáltató oldali session állapotának azonosítója.
- Opcionális, nem minden provider használja.
Session Tábla
A felhasználó bejelentkezéskor kap egy session token-t, ez itt kerül eltárolásra elősegítve az alkalmazás biztonságát.
sessionToken
(Text)
- Bejelentkezéskor kapott session token, mellyel hozzáférést kapnak a felhasználók az alkalmazáshoz.
userId
(Text)
- A user tábla
id
mezőjével áll relation-ben.
expires
(Timestamp)
- Adott idő, amikor a sessionToken lejár. (30 nap)
VerificationToken Tábla
Regisztrációkor kapott token itt kerül tárolásra, amellyel hitelesíteni tudja a felhasználó a regisztrációját.
identifier
(Text)
- Egyedi azonosító a Verification Token-nek.
token
(Text)
- Az emailben elküldött URL-ben található token, az azonosítás érdekében eltárolva ebben a mezőben.
expires
(Timestamp)
- A Token lejárati dátuma.
Chat Conversations Tábla
Ez a tábla egy párbeszédet tárol, amihez egy másik táblában az üzenetek kerülnek hozzárendelésre.
id
(Text)
- UUID
- A párbeszéd sor egyedi azonosítója.
user_id
(Text)
- A user tábla
id
mezőjével áll relation-ben.
title
(Text)
- A párbeszéd elkészítésekor kapott cím.
createdAt
(Timestamp)
- A párbeszéd elkészítési idejét tárolja.
Chat Messages Tábla
Ez a tábla tárolja a Planie AI-al való üzenetváltásokat.
id
(Text) - UUID - Az üzenetek egyedi azonosítója
conversation_id
(Text)
- Az adott párbeszéd azonosítóját tárolja, amivel össze lehet kötni az üzenetet.
user_id
(Text)
- A user tábla
id
mezőjével áll relation-ben. - Ezzel kötjük vissza a user táblához az üzeneteket.
user_input
(Text)
- A felhasználó által elküldött üzenet.
bot_response
(Text)
- A Planie AI által válaszolt üzenet.
createdAt
(Timestamp)
- Az üzenet készítésének időpontja kerül eltárolásra.
Daily Message Counts Tábla
Ez a tábla a napi AI üzenet limitet tartja számon. Ez a szám napi 20 üzenet a free tier-nél.
user_id
(Text)
- A user tábla
id
mezőjével áll relation-ben.
date
(Timestamp)
- A napi időpontot tárolja, amellyel megmondható a napi limit.
count
(integer)
- A napi üzenetek számát tárolja.
Projects Tábla
A készített projektekről tárol adatokat, illetve az itt tárolt azonosítóval lehet kapcsolatba hozni az altáblák adatait.
id
(Text)
- UUID
- A projekt egyedi azonosítója.
user_id
(Text)
- A user táblából kapott id, amivel beazonosítjuk, hogy kihez tartozik a projekt.
name
(Text)
- A projekt nevét tárolja.
createdAt
(Timestamp)
- A projekt készítésének idejét tárolja.
tier
(Enum)
- Kettő értéket kaphat: free vagy paid.
status
(Enum)
- Három értéket kaphat: active, completed vagy archived.
nameChanged
(Timestamp)
- A projekt nevének módosítási időpontját tárolja. 90 naponta lehetséges nevet változtatni.
Project Members Tábla
A projekt tagokat tárolja, a projekt tábla id-jával áll kapcsolatban, így kerül összeköttetésre a két tábla.
id
(Text)
- UUID
- A projekt tag azonosítója.
project_id
(Text)
- UUID
- Ezáltal kerül azonosításra a tag, hogy milyen projekt tagja.
user_id
(Text)
- UUID
- Így kerül visszakapcsolásra a user táblával a tag.
role
(Enum)
- Kettő értéket kaphat: member, illetve admin.
addedAt
(Timestamp)
- A projekthez felvétel pillanatát tárolja.
Project Tasks Tábla
A projekthez tartozó feladatokat tárolja ez a tábla.
id
(Text)
- UUID
- Egy projekt feladat azonosítója.
project_id
(Text)
- UUID
- Ezáltal kerül az adott projekttel összekapcsolásra a feladat.
task_name
(Text)
- Egy adott feladat címét tárolja.
task_description
(Text)
- Egy adott feladat leírása.
status
(Enum)
- Három féle értéket kaphat: pending, in progress vagy completed
priority
(Enum)
- Három féle értéket kaphat: low, medium vagy high
createdAt
(Timestamp)
- A feladat készítésének idejét tárolja.
created_by
(Text)
- Az adott felhasználó azonosítóját tárolja, aki a feladatot készítette.
Project Task Assigns Tábla
A feladathoz kiadott felhasználó adata, összekötve a user táblával.
id
(Text)
- UUID
- egyedi azonosító
task_id
(Text)
- UUID
- Egy adott feladat azonosítója, amelyhez egy tag ki lett osztva.
user_id
(Text)
- UUID
- A felhasználó azonosítója, aki ki lett rendelve a feladathoz.
assignedAt
(Timestamp)
- A kirendelés időpontja.
Project Issues Tábla
A projekthez tartozó problémákat tároljuk ebben a táblában.
id
(Serial)
- Integer, Auto Increment, Primary Key
- A projekt probléma egyedi azonosítója
project_id
(Text)
- UUID
- A projekt azonosítója, amelyhez a probléma tartozik.
issue_name
(Text)
- A probléma címe.
issue_description
(Text)
- A probléma leírása.
task_issue_id
(Text)
- UUID
- Lehet NULL értéke, egy adott feladatot lehet hozzárendelni a problémához.
is_open
(Boolean)
- True vagy False. Ha True akkor a probléma nyitva áll, egyébként pedig Lezárt.
replies
(Integer)
- A válaszok számát tartalmazza. Alapértéke 0.
labels
(Text[])
- Alap címkéket hozzáadni a problémához.
opened_at
(Timestamp)
- A probléma megnyitásának időpontját tárolja.
opened_by
(Text)
- Annak a tagnak az azonosítója a user táblából, aki ezt a problémát nyitotta meg.
Project Issue Replies Tábla
A Problémához kapcsolódó válaszokat tároljuk ebben a táblában.
id
(Text)
- UUID
- A probléma válasz egyedi azonosítója.
issue_id
(Text)
- UUID
- A probléma azonosítója, amelyhez a válasz érkezett.
reply
(Text)
- A válaszüzenet szöveget tárolja.
replied_at
(Timestamp)
- Válasz elküldésének idejét tárolja.
replied_by
(Text)
- UUID
- Annak a felhasználónak az azonosítóját tárolja, aki a problémára válaszolt.
Supabase Adatbázis
Ez az adatbázis kettő táblát tartalmaz. Azért kerültek ide, mivel supabase-n megvalósítható a Real Time funkció, így valós időben hallgathatjuk a változásokat a táblákban.
Messages Tábla
A projekten belüli üzeneteket tárolja, amelyek valós időben frissülnek az oldalon. Encrypt-elve kerülnek eltárolásra.
id
(UUID)
- Az üzenet egyedi azonosítója.
user_id
(Text)
- A felhasználó azonosítója, aki az üzenetet küldte.
project_id
(Text)
- A projekt azonosítója, amelyhez az üzenet tartozik.
content
(Text)
- Az üzenetben tárolt szöveg.
- Encrypt-elt üzenetet tároljuk el, CryptoJS-el encrypt-elve.
is_edited
(Boolean)
- True vagy False, attól függetlenül, hogy az üzenet szerkesztve lett vagy sem.
created_at
(Timestamp)
- Az üzenet elküldésének időpontja.
Notifications Tábla
A projekt meghívókat tárolja, amelyek valós időben kerülnek frissítésre az alkalmazásban.
id
(Integer)
- Az értesítés egyedi azonosítója
senderId
(Text)
- A felhasználónak az egyedi azonosítója, aki a meghívót küldte.
senderProjectId
(Text)
- A projekt azonosítója, amelybe a meghívó szól.
receiverId
(Text)
- A felhasználó azonosítója, akinek a meghívó érkezett.
created_at
(Timestamp)
- A meghívó elküldésének ideje