104 lines
2.6 KiB
Go
Raw Normal View History

2025-07-30 23:18:20 +07:00
package models
import (
"apskel-pos-be/internal/constants"
"time"
"github.com/google/uuid"
)
type Table struct {
ID uuid.UUID
OrganizationID uuid.UUID
OutletID uuid.UUID
TableName string
StartTime *time.Time
Status constants.TableStatus
OrderID *uuid.UUID
PaymentAmount float64
PositionX float64
PositionY float64
Capacity int
IsActive bool
Metadata map[string]interface{}
CreatedAt time.Time
UpdatedAt time.Time
}
type CreateTableRequest struct {
OutletID uuid.UUID `validate:"required"`
TableName string `validate:"required,max=100"`
PositionX float64 `validate:"required"`
PositionY float64 `validate:"required"`
Capacity int `validate:"required,min=1,max=20"`
Metadata map[string]interface{}
}
type UpdateTableRequest struct {
TableName *string `validate:"omitempty,max=100"`
Status *constants.TableStatus `validate:"omitempty"`
PositionX *float64 `validate:"omitempty"`
PositionY *float64 `validate:"omitempty"`
Capacity *int `validate:"omitempty,min=1,max=20"`
IsActive *bool `validate:"omitempty"`
Metadata map[string]interface{}
}
type OccupyTableRequest struct {
OrderID uuid.UUID `validate:"required"`
StartTime time.Time `validate:"required"`
}
type ReleaseTableRequest struct {
PaymentAmount float64 `validate:"required,min=0"`
}
type TableResponse struct {
ID uuid.UUID
OrganizationID uuid.UUID
OutletID uuid.UUID
TableName string
StartTime *time.Time
Status constants.TableStatus
OrderID *uuid.UUID
PaymentAmount float64
PositionX float64
PositionY float64
Capacity int
IsActive bool
Metadata map[string]interface{}
CreatedAt time.Time
UpdatedAt time.Time
Order *OrderResponse
}
type ListTablesRequest struct {
OrganizationID *uuid.UUID
OutletID *uuid.UUID
Status *constants.TableStatus
IsActive *bool
Search string
Page int `validate:"required,min=1"`
Limit int `validate:"required,min=1,max=100"`
}
type ListTablesResponse struct {
Tables []TableResponse
TotalCount int
Page int
Limit int
TotalPages int
}
func (t *Table) IsAvailable() bool {
return t.Status == constants.TableStatusAvailable
}
func (t *Table) IsOccupied() bool {
return t.Status == constants.TableStatusOccupied
}
func (t *Table) CanBeOccupied() bool {
return t.Status == constants.TableStatusAvailable || t.Status == constants.TableStatusCleaning
}