44 lines
1.2 KiB
Go

package tabletoken
import (
"encoding/base64"
"encoding/json"
"fmt"
"github.com/google/uuid"
)
type TableTokenPayload struct {
TableID uuid.UUID `json:"table_id"`
OrganizationID uuid.UUID `json:"organization_id"`
OutletID uuid.UUID `json:"outlet_id"`
}
func Encode(tableID, organizationID, outletID uuid.UUID) string {
payload := TableTokenPayload{
TableID: tableID,
OrganizationID: organizationID,
OutletID: outletID,
}
jsonBytes, _ := json.Marshal(payload)
return base64.URLEncoding.EncodeToString(jsonBytes)
}
func Decode(token string) (tableID, organizationID, outletID uuid.UUID, err error) {
jsonBytes, err := base64.URLEncoding.DecodeString(token)
if err != nil {
return uuid.Nil, uuid.Nil, uuid.Nil, fmt.Errorf("invalid token encoding: %w", err)
}
var payload TableTokenPayload
if err := json.Unmarshal(jsonBytes, &payload); err != nil {
return uuid.Nil, uuid.Nil, uuid.Nil, fmt.Errorf("invalid token format: %w", err)
}
if payload.TableID == uuid.Nil || payload.OrganizationID == uuid.Nil || payload.OutletID == uuid.Nil {
return uuid.Nil, uuid.Nil, uuid.Nil, fmt.Errorf("token missing required fields")
}
return payload.TableID, payload.OrganizationID, payload.OutletID, nil
}