Download src/types/database.ts from HamzaAri/ScanMenu: direct link, hf CLI and curl.
- Browser
- Download file 4.44 kB
-
https://huggingface.co/spaces/HamzaAri/ScanMenu/resolve/main/src/types/database.ts
- Command line
-
hf download hf://spaces/HamzaAri/ScanMenu/src/types/database.ts
-
curl -L -o database.ts https://huggingface.co/spaces/HamzaAri/ScanMenu/resolve/main/src/types/database.ts
4.44 kB
| // ============================================================ | |
| // ScanMenu – Complete Database Types | |
| // ============================================================ | |
| export type UserRole = 'admin' | 'owner' | 'staff' | 'customer'; | |
| export type OrderStatus = 'pending' | 'confirmed' | 'preparing' | 'ready' | 'delivered' | 'cancelled'; | |
| export type OrderType = 'dine_in' | 'takeaway' | 'delivery'; | |
| export type SubscriptionTier = 'free' | 'starter' | 'pro' | 'enterprise'; | |
| export type SubscriptionStatus = 'active' | 'past_due' | 'cancelled' | 'trialing'; | |
| export interface User { | |
| id: string; | |
| email: string; | |
| full_name: string; | |
| avatar_url?: string; | |
| role: UserRole; | |
| created_at: string; | |
| updated_at: string; | |
| } | |
| export interface Restaurant { | |
| id: string; | |
| owner_id: string; | |
| name: string; | |
| slug: string; | |
| description?: string; | |
| logo_url?: string; | |
| cover_image_url?: string; | |
| address?: string; | |
| phone?: string; | |
| email?: string; | |
| website?: string; | |
| currency: string; | |
| timezone: string; | |
| is_active: boolean; | |
| opening_hours?: Record<string, { open: string; close: string; closed?: boolean }>; | |
| theme_color: string; | |
| created_at: string; | |
| updated_at: string; | |
| } | |
| export interface Menu { | |
| id: string; | |
| restaurant_id: string; | |
| name: string; | |
| description?: string; | |
| is_active: boolean; | |
| sort_order: number; | |
| created_at: string; | |
| updated_at: string; | |
| } | |
| export interface Category { | |
| id: string; | |
| menu_id: string; | |
| restaurant_id: string; | |
| name: string; | |
| description?: string; | |
| image_url?: string; | |
| is_active: boolean; | |
| sort_order: number; | |
| created_at: string; | |
| updated_at: string; | |
| } | |
| export interface Product { | |
| id: string; | |
| category_id: string; | |
| restaurant_id: string; | |
| name: string; | |
| description?: string; | |
| price: number; | |
| image_url?: string; | |
| is_available: boolean; | |
| is_featured: boolean; | |
| preparation_time?: number; // minutes | |
| calories?: number; | |
| allergens?: string[]; | |
| tags?: string[]; | |
| sort_order: number; | |
| created_at: string; | |
| updated_at: string; | |
| } | |
| export interface ProductOption { | |
| id: string; | |
| product_id: string; | |
| name: string; // e.g. "Size", "Spice Level" | |
| type: 'single' | 'multiple'; | |
| required: boolean; | |
| min_selections?: number; | |
| max_selections?: number; | |
| sort_order: number; | |
| } | |
| export interface ProductOptionItem { | |
| id: string; | |
| option_id: string; | |
| name: string; // e.g. "Small", "Medium", "Large" | |
| price_modifier: number; | |
| is_default: boolean; | |
| sort_order: number; | |
| } | |
| export interface Table { | |
| id: string; | |
| restaurant_id: string; | |
| number: string; | |
| name?: string; | |
| capacity?: number; | |
| is_active: boolean; | |
| qr_code_id?: string; | |
| created_at: string; | |
| } | |
| export interface QRCode { | |
| id: string; | |
| restaurant_id: string; | |
| table_id?: string; | |
| label: string; | |
| url: string; | |
| scans: number; | |
| is_active: boolean; | |
| created_at: string; | |
| } | |
| export interface Order { | |
| id: string; | |
| restaurant_id: string; | |
| customer_name?: string; | |
| customer_phone?: string; | |
| customer_email?: string; | |
| order_type: OrderType; | |
| table_number?: string; | |
| status: OrderStatus; | |
| subtotal: number; | |
| tax: number; | |
| total: number; | |
| notes?: string; | |
| delivery_address?: string; | |
| estimated_time?: number; | |
| created_at: string; | |
| updated_at: string; | |
| } | |
| export interface OrderItem { | |
| id: string; | |
| order_id: string; | |
| product_id: string; | |
| product_name: string; | |
| quantity: number; | |
| unit_price: number; | |
| total_price: number; | |
| options?: Record<string, string | string[]>; | |
| notes?: string; | |
| } | |
| export interface Subscription { | |
| id: string; | |
| restaurant_id: string; | |
| stripe_customer_id?: string; | |
| stripe_subscription_id?: string; | |
| tier: SubscriptionTier; | |
| status: SubscriptionStatus; | |
| current_period_start?: string; | |
| current_period_end?: string; | |
| created_at: string; | |
| updated_at: string; | |
| } | |
| export interface AnalyticsEvent { | |
| id: string; | |
| restaurant_id: string; | |
| event_type: string; | |
| event_data?: Record<string, unknown>; | |
| created_at: string; | |
| } | |
| // ============================================================ | |
| // Cart Types (Client-side) | |
| // ============================================================ | |
| export interface CartItem { | |
| id: string; | |
| product: Product; | |
| quantity: number; | |
| options: Record<string, string | string[]>; | |
| notes?: string; | |
| total: number; | |
| } | |
| export interface Cart { | |
| restaurant_id: string; | |
| restaurant_name: string; | |
| items: CartItem[]; | |
| order_type: OrderType; | |
| table_number?: string; | |
| subtotal: number; | |
| tax: number; | |
| total: number; | |
| } | |