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 }