Nazad na sve projekte

2026Funkcionalan prototip

Multi-tenant zakazivanje na PostgreSQL-u, sa pravilima rezervacije unutar baze

Moja majka ima frizerski salon i termine je vodila u svesci. Ovo sam napravio da je zameni. Radio sam sam, 38 commit-a tokom četiri nedelje.

Dijagram veza između jedanaest tabela sistema za zakazivanje
Model podataka: saloni sadrže zaposlene, usluge i radno vreme; termini referišu sve troje.

Problem

Termini su se pisali u svesku. Dešavali su se dupli termini, raspored se nije mogao videti sa strane, i nije postojala evidencija koji se klijent vraća. Teško nije napraviti formu, nego obezbediti da dva klijenta ne uzmu isti termin kada oboje pošalju zahtev u istom trenutku.

Kako radi

  1. 01

    Pravila su u bazi, ne u klijentu. I računanje slobodnih termina i kreiranje termina su PostgreSQL funkcije pozvane preko RPC-a, pa izmenjeni frontend ne može da ih zaobiđe.

  2. 02

    create_appointment uzima advisory lock za salon i datum, pa ponovo čita dostupnost unutar iste transakcije pre upisa.

  3. 03

    Row Level Security daje tri nivoa: javni pristup vidi samo ono što stranici za zakazivanje treba, zaposleni vide svoj rad, vlasnici i menadžeri ceo salon.

  4. 04

    Svaka promena šeme je fajl migracije pod verzionisanjem, pa se baza može ponovo izgraditi od nule i pregledati kroz diff.

  5. 05

    Pravila zakazivanja su pokrivena SQL testovima u tests/scheduling_rules.sql.

Kompromisi

  • Pretplatnički planovi su modelovani u SQL-u, ali je provera ograničenja isključena kasnijom migracijom. Nijedan platni provajder nije povezan i aplikacija ne naplaćuje.

  • Dve admin stranice su narasle i još nisu podeljene na komponente. To bih prvo refaktorisao.

Šta ovo nije

Ovo je funkcionalan prototip, ne objavljen proizvod. Radi lokalno nad Supabase projektom; javni URL još ne postoji i nema klijenta koji plaća.