apskel-pos-backend/internal/middleware/self_order_middleware.go
2026-05-04 16:23:29 +07:00

54 lines
1.5 KiB
Go

package middleware
import (
"apskel-pos-be/internal/constants"
"apskel-pos-be/internal/contract"
"apskel-pos-be/internal/repository"
"apskel-pos-be/internal/util"
"github.com/gin-gonic/gin"
)
type SelfOrderMiddleware struct {
tableRepo repository.TableRepositoryInterface
}
func NewSelfOrderMiddleware(tableRepo repository.TableRepositoryInterface) *SelfOrderMiddleware {
return &SelfOrderMiddleware{
tableRepo: tableRepo,
}
}
func (m *SelfOrderMiddleware) ResolveToken() gin.HandlerFunc {
return func(c *gin.Context) {
token := c.Query("token")
if token == "" {
token = c.GetHeader("X-Table-Token")
}
if token == "" {
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{
contract.NewResponseError(constants.ValidationErrorCode, constants.SelfOrderEntity, "token is required"),
}), "SelfOrderMiddleware::ResolveToken")
c.Abort()
return
}
table, err := m.tableRepo.GetByToken(c.Request.Context(), token)
if err != nil {
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{
contract.NewResponseError(constants.NotFoundErrorCode, constants.SelfOrderEntity, "invalid or expired table token"),
}), "SelfOrderMiddleware::ResolveToken")
c.Abort()
return
}
c.Set("self_order_table_id", table.ID.String())
c.Set("self_order_table_name", table.TableName)
c.Set("self_order_outlet_id", table.OutletID.String())
c.Set("self_order_organization_id", table.OrganizationID.String())
c.Next()
}
}