Schemat bazy danych
CakeMarket wykorzystuje SQLite poprzez Drizzle ORM z driverem better-sqlite3.
Konfiguracja
- ORM: Drizzle ORM
- Driver: better-sqlite3
- Plik konfiguracyjny:
drizzle.config.ts - Lokalizacja schematu:
src/lib/db/schema.ts - Identyfikatory: UUID v4 dla wszystkich kluczy głównych
- Ceny: Przechowywane jako liczby całkowite w groszach (1/100 PLN)
Główne tabele
Users (Użytkownicy)
id(UUID, PK)name,email,phone,imageUrlrole(user, admin)- Pola związane z uwierzytelnianiem
Organisations (Organizacje)
id(UUID, PK)name,address,locationLat,locationLngcontactEmail,contactPhone,profileImageUrlisActive(automatycznie po uzupełnieniu wymaganych danych i onboardingu Stripe)isDisabled(blokada platformy niezależna od konfiguracji sprzedającego)- Możliwości:
acceptedCakeTypes,acceptedTastes,specialRequirements - Operacje:
leadTimeDays,deliveryEnabled,deliveryRangeKm,pickupEnabled minDepositPercent(20-100)- Stripe:
stripeAccountId,stripeOnboardingComplete - Opcjonalny przegląd odznaki: publiczne
certificationLevel; prywatnesanepidCertDocUrlisanepidCertExpiry(wyłącznie administratorzy Organizacji i platformy)
Organisation Members (Członkowie organizacji)
organisationId,userId(klucz złożony)role(admin, baker)status(pending, active, rejected)joinedAt
Requests (Zapytania o tort)
id(UUID, PK)buyerIdlubguestTokeneventType,servings,desiredDatedeliveryMethod,deliveryAddressfillings,dietaryRequirementsthemeDescription,cakeImageUrlisReorder,originalOrderId,targetOrganisationIdstatus(active, expired)expiresAt
Offers (Oferty)
id(UUID, PK)requestId,organisationIdprice(grosze),depositPercentmessage,proposedImageUrl,proposedImageSourcestatus(pending, accepted, withdrawn)holdExpiresAt
Orders (Zamówienia)
id(UUID, PK)orderNumberrequestId,offerId,organisationId,buyerIdtotalPrice(grosze),depositAmount,balanceAmountstatus(deposit_paid, in_progress, ready, delivered, completed, cancelled;disputedpozostaje wyłącznie dla zgodności starszych danych i nie jest aktywnym procesem)balancePaidAt,balancePaymentMethodcancelledBy,cancelReason- Znaczniki czasu:
depositPaidAt,startedAt,readyAt,deliveredAt,completedAt
Payments (Płatności)
id(UUID, PK)orderId,organisationIdtype(deposit, balance, refund)amount(grosze),netAmountstatus(pending, succeeded, failed, refunded)stripePaymentIntentIdmethod(stripe, cash, card_at_pickup)
Messages (Wiadomości)
id(UUID, PK)orderIdlubofferIdsenderId,senderType(buyer, seller)contentreadAt
Reviews (Opinie)
id(UUID, PK)orderId,buyerId,organisationIdrating(1-5),comment
Portfolio Items (Elementy portfolio)
id(UUID, PK)organisationIdimageUrl,captionsortOrder
Notifications (Powiadomienia)
id(UUID, PK)userIdtitle,bodytypereadAt
Migracje
Drizzle obsługuje migracje. Uruchom:
npx drizzle-kit generate
npx drizzle-kit migrate