feat: implement customer registration flow and business hours system

Major changes:
- Add customer registration with email/phone lookup (app/booking/registro)
- Add customers API endpoint (app/api/customers/route)
- Implement business hours for locations (mon-fri 10-7, sat 10-6, sun closed)
- Fix availability function type casting issues
- Add business hours utilities (lib/utils/business-hours.ts)
- Update Location type to include business_hours JSONB
- Add mock payment component for testing
- Remove Supabase auth from booking flow
- Fix /cita redirect path in booking flow

Database migrations:
- Add category column to services table
- Add business_hours JSONB column to locations table
- Fix availability functions with proper type casting
- Update get_detailed_availability to use business_hours

Features:
- Customer lookup by email or phone
- Auto-redirect to registration if customer not found
- Pre-fill customer data if exists
- Business hours per day of week
- Location-specific opening/closing times
This commit is contained in:
Marco Gallegos
2026-01-17 00:29:49 -06:00
parent fb60178c86
commit 583a25a6f6
56 changed files with 2676 additions and 491 deletions

View File

@@ -8,6 +8,22 @@ export type InvitationStatus = 'pending' | 'used' | 'expired'
export type ResourceType = 'station' | 'room' | 'equipment'
export type AuditAction = 'create' | 'update' | 'delete' | 'reset_invitations' | 'payment' | 'status_change'
export interface DayHours {
open: string
close: string
is_closed: boolean
}
export interface BusinessHours {
monday: DayHours
tuesday: DayHours
wednesday: DayHours
thursday: DayHours
friday: DayHours
saturday: DayHours
sunday: DayHours
}
/** Represents a salon location with timezone and contact info */
export interface Location {
id: string
@@ -16,6 +32,7 @@ export interface Location {
address?: string
phone?: string
is_active: boolean
business_hours?: BusinessHours
created_at: string
updated_at: string
}
@@ -151,8 +168,8 @@ export type Database = {
Tables: {
locations: {
Row: Location
Insert: Omit<Location, 'id' | 'created_at' | 'updated_at'>
Update: Partial<Omit<Location, 'id' | 'created_at'>>
Insert: Omit<Location, 'id' | 'created_at' | 'updated_at'> & { business_hours?: BusinessHours }
Update: Partial<Omit<Location, 'id' | 'created_at'> & { business_hours?: BusinessHours }>
}
resources: {
Row: Resource