54 lines
1.5 KiB
Go
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()
|
|
}
|
|
}
|