Files
BarangaySystem/plans/HashPayloadURLPlan.md
2026-06-06 18:43:00 +08:00

3.3 KiB

Final Implementation Plan for Hashkey/Payload URL Encoding System

Understanding the Requirement

Based on your clarification:

  • Current navigation pattern: navigate({ page: 'EditUser', props: { target_user: hashkey } })
  • URL format should be: /page-name--h:HASHKEY or /page-name--e:PAYLOAD
  • Hashkeys are passed as values (not prop names)
  • Encrypted payloads needed for sensitive data
  • Universal resolver - same mechanism for users, products, stores, etc.

Revised Implementation Plan

1. Frontend - New Composables

File: resources/js/composables/useUrlArgument.js

export function useUrlArgument() {
  // Extract hashkey/payload from URL path segments
  // Parse format like "/edituser--h:HASHKEY" or "/product--e:ENCODED_PAYLOAD"
  // Return: { slug, type, hashkey, payload }
}

File: resources/js/composables/useUrlEncoder.js

export function useUrlEncoder() {
  const encodeHash = (hashkey) => `h:${hashkey}`;
  const encodePayload = (payload) => `e:${base64Encode(JSON.stringify(payload))}`;
  // Returns URL-friendly encoded strings
}

2. Frontend - Updated useNavigate

Modify existing resources/js/composables/Core/useNavigate.js to:

  • Detect hashkey/payload in props and encode them into URL
  • Support format: /page-name--h:HASHKEY or /page-name--e:PAYLOAD
  • Maintain backward compatibility with current navigation
  • Extract from current URL on page load

3. Backend - PHP Helpers

File: app/Support/RouteArgumentParser.php

class RouteArgumentParser {
    public function parseArgument($argument)
    // Parse format: "page-name--h:HASHKEY" or "page-name--e:ENCODED_PAYLOAD"
    // Returns structured data for the resource
}

File: app/Support/HashkeyResolver.php

class HashkeyResolver {
    public function resolveByHashkey($hashkey, $modelClass)
    // Generic resolver that accepts any model class (User, Product, Store, etc.)
}

4. Backend - Middleware

File: app/Middleware/DecodeRouteArgumentMiddleware.php

class DecodeRouteArgumentMiddleware {
    public function handle($request, Closure $next)
    // Automatically parses URL arguments and attaches to request
    // Makes decoded data available as $request->decodedRoute
}

URL Format Examples

  • User route: /edituser--h:USER_HASHKEY123
  • Product route: /product/edit--h:PRODUCT_HASH456
  • Store route: /store/view--h:STORE_HASH789
  • Payload route (encrypted): /data/review--e:ENCODED_PAYLOAD

Current Navigation to URL Mapping

Current Nav New URL Format
navigate({ page: 'EditUser', props: { target_user: hashkey } }) /edituser--h:HASHKEY

Migration Strategy

  1. Phase 1: Composables - Create useUrlArgument.js and useUrlEncoder.js
  2. Phase 2: Frontend Integration - Update useNavigate.js
  3. Phase 3: Backend Parsing - Create PHP helpers
  4. Phase 4: Middleware - Add middleware for automatic parsing
  5. Phase 5: Testing - Verify navigation works with both old and new formats

Key Features

  • Backward compatible (existing navigation still works)
  • Universal hashkey resolver for all resource types
  • Encrypted payload support for sensitive data
  • Standard URL format across all routes