83 lines
3.5 KiB
Go
Raw Normal View History

2025-07-30 23:18:20 +07:00
package contract
import (
"time"
"github.com/google/uuid"
)
type CreateTableRequest struct {
OutletID uuid.UUID `json:"outlet_id" validate:"required"`
TableName string `json:"table_name" validate:"required,max=100"`
PositionX float64 `json:"position_x" validate:"required"`
PositionY float64 `json:"position_y" validate:"required"`
Capacity int `json:"capacity" validate:"required,min=1,max=20"`
Metadata map[string]interface{} `json:"metadata,omitempty"`
}
type UpdateTableRequest struct {
TableName *string `json:"table_name,omitempty" validate:"omitempty,max=100"`
Status *string `json:"status,omitempty" validate:"omitempty,oneof=available occupied reserved cleaning maintenance"`
PositionX *float64 `json:"position_x,omitempty"`
PositionY *float64 `json:"position_y,omitempty"`
Capacity *int `json:"capacity,omitempty" validate:"omitempty,min=1,max=20"`
IsActive *bool `json:"is_active,omitempty"`
Metadata map[string]interface{} `json:"metadata,omitempty"`
}
type OccupyTableRequest struct {
OrderID uuid.UUID `json:"order_id" validate:"required"`
StartTime time.Time `json:"start_time" validate:"required"`
}
type ReleaseTableRequest struct {
PaymentAmount float64 `json:"payment_amount" validate:"required,min=0"`
}
type TableResponse struct {
ID uuid.UUID `json:"id"`
OrganizationID uuid.UUID `json:"organization_id"`
OutletID uuid.UUID `json:"outlet_id"`
TableName string `json:"table_name"`
StartTime *time.Time `json:"start_time,omitempty"`
Status string `json:"status"`
OrderID *uuid.UUID `json:"order_id,omitempty"`
PaymentAmount float64 `json:"payment_amount"`
PositionX float64 `json:"position_x"`
PositionY float64 `json:"position_y"`
Capacity int `json:"capacity"`
IsActive bool `json:"is_active"`
Metadata map[string]interface{} `json:"metadata,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Order *OrderResponse `json:"order,omitempty"`
}
type ListTablesQuery struct {
OrganizationID string `form:"organization_id"`
OutletID string `form:"outlet_id"`
Status string `form:"status"`
IsActive string `form:"is_active"`
Search string `form:"search"`
Page int `form:"page,default=1"`
Limit int `form:"limit,default=10"`
}
type ListTablesRequest struct {
Page int `json:"page" validate:"min=1"`
Limit int `json:"limit" validate:"min=1,max=100"`
OrganizationID *uuid.UUID `json:"organization_id,omitempty"`
OutletID *uuid.UUID `json:"outlet_id,omitempty"`
Status *string `json:"status,omitempty" validate:"omitempty,oneof=available occupied reserved cleaning maintenance"`
IsActive *bool `json:"is_active,omitempty"`
Search string `json:"search,omitempty"`
}
type ListTablesResponse struct {
Tables []TableResponse `json:"tables"`
TotalCount int `json:"total_count"`
Page int `json:"page"`
Limit int `json:"limit"`
TotalPages int `json:"total_pages"`
}