@servemate/dto
Version:
Type-safe DTO package for ServeMate types and Zod validation. Shared across server and client.
206 lines • 5.45 kB
TypeScript
/**
* 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