UNPKG

@servemate/dto

Version:

Type-safe DTO package for ServeMate types and Zod validation. Shared across server and client.

206 lines 5.45 kB
/** * Types for working with server data * ⚠️ IMPORTANT: This file does NOT depend on @prisma/client * * These types are generated/updated based on Prisma schema * but these are just TypeScript types - they work everywhere! * * On server: used with Prisma models * On client: used as regular types for API responses */ export interface User { id: number; name: string; email: string; password: string; role: string; createdAt: Date; updatedAt: Date; isActive: boolean; lastLogin: Date | null; } export interface Order { id: number; tableNumber: number; guestsCount: number; orderTime: Date; updatedAt: Date; serverId: number; totalAmount: number; status: string; comments: string | null; completionTime: Date | null; discount: number; tip: number; shiftId: string | null; } export interface Table { id: number; tableNumber: number; capacity: number; status: string; additionalCapacity: number; isOccupied: boolean; originalCapacity: number; guests: number; } export interface Reservation { id: number; guestsCount: number; time: Date; name: string; phone: string; email: string | null; status: string; comments: string | null; createdAt: Date; updatedAt: Date; isActive: boolean; } export interface FoodItem { id: number; name: string; price: number; type: string; category: string; description: string; isAvailable: boolean; preparationTime: number; calories: number | null; image: string | null; } export interface DrinkItem { id: number; name: string; price: number; category: string; description: string; isAvailable: boolean; volume: number; alcoholPercentage: number | null; image: string | null; } export interface OrderFoodItem { id: number; guestNumber: number; price: number; specialRequest: string | null; orderId: number; itemId: number; discount: number; finalPrice: number; fired: boolean; printed: boolean; paymentStatus: string; } export interface OrderDrinkItem { id: number; guestNumber: number; price: number; specialRequest: string | null; orderId: number; itemId: number; discount: number; finalPrice: number; fired: boolean; printed: boolean; paymentStatus: string; } export interface Payment { id: number; orderId: number; amount: number; tax: number; tip: number; serviceCharge: number; totalAmount: number; paymentType: string; status: string; createdAt: Date; completedAt: Date | null; } export interface TableAssignmentModel { id: number; tableId: number; serverId: number; } /** * Response types - what is sent to the client * Exclude sensitive fields and use only necessary ones */ /** * User response - basic user data for client * Exclude password and sensitive data */ export type UserResponse = Pick<User, 'id' | 'name' | 'email' | 'role' | 'isActive' | 'createdAt' | 'updatedAt' | 'lastLogin'>; /** * User auth response - data on login */ export type UserAuthResponse = Pick<User, 'id' | 'name' | 'email' | 'role' | 'isActive'>; /** * Order response - full order with relations */ export type OrderResponse = Order & { server?: Pick<User, 'id' | 'name'> | null; table?: Pick<Table, 'id' | 'tableNumber'> | null; foodItems?: Array<OrderFoodItem & { foodItem?: Pick<FoodItem, 'id' | 'name' | 'price'>; }>; drinkItems?: Array<OrderDrinkItem & { drinkItem?: Pick<DrinkItem, 'id' | 'name' | 'price'>; }>; }; /** * Table response */ export type TableResponse = Table & { activeOrder?: Order | null; assignments?: Array<TableAssignmentModel & { server?: Pick<User, 'id' | 'name'>; }>; }; /** * Reservation response - reservation with tables and order */ export type ReservationResponse = Reservation & { tables?: Pick<Table, 'id' | 'tableNumber'>[]; order?: Order | null; }; /** * Food/Drink response types */ export type FoodResponse = Pick<FoodItem, 'id' | 'name' | 'description' | 'price' | 'category' | 'isAvailable'>; export type DrinkResponse = Pick<DrinkItem, 'id' | 'name' | 'description' | 'price' | 'category' | 'isAvailable'>; /** * Payment response - payment information */ export type PaymentResponse = Pick<Payment, 'id' | 'orderId' | 'amount' | 'status' | 'paymentType' | 'createdAt' | 'completedAt'>; /** * Creation types - for POST/PUT requests * Exclude id and dates that are generated by the database */ export type CreateUserInput = Pick<User, 'name' | 'email' | 'password' | 'role'>; export type UpdateUserInput = Partial<Pick<User, 'name' | 'email' | 'role' | 'isActive'>>; export type CreateOrderInput = Pick<Order, 'tableNumber' | 'guestsCount' | 'serverId'>; export type CreateReservationInput = Pick<Reservation, 'guestsCount' | 'time' | 'name' | 'phone' | 'email' | 'comments'>; /** * Utility types for working with pagination */ export type PaginatedResponse<T> = { data: T[]; total: number; page: number; pageSize: number; totalPages: number; }; /** * API Response wrapper - standard API response format */ export type ApiResponse<T> = { success: boolean; data?: T; error?: string; message?: string; timestamp: string; }; //# sourceMappingURL=prisma-types.d.ts.map