137 lines
3.7 KiB
Go
137 lines
3.7 KiB
Go
/*
|
|
|--------------------------------------------------------------------------
|
|
| Metadata
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Name:
|
|
| - Handler
|
|
|
|
|
| Purpose:
|
|
| - Provide a JSON resource provider for the Retriever utility.
|
|
| - Embed, parse, and expose a complete JSON resource payload.
|
|
| - Abstract resource storage details from consumers.
|
|
|
|
|
| Guideline:
|
|
| - Register the handler through retriever.ObrimRetrieverJsonRegister().
|
|
| - Associate the handler with a unique resource identifier.
|
|
| - Return the complete parsed resource payload only.
|
|
| - Delegate retrieval, traversal, filtering, and selection logic to Retriever.
|
|
| - Do not implement business logic within the handler.
|
|
| - Do not perform querying, transformation, or resource discovery.
|
|
|
|
|
| Example:
|
|
| - retriever.ObrimRetrieverJsonRegister(
|
|
| "software/metadata",
|
|
| obrimHandlerProvider{},
|
|
| )
|
|
| - response := retriever.ObrimRetriever(
|
|
| "json",
|
|
| map[string]any{
|
|
| "resource": "software/metadata",
|
|
| },
|
|
| )
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Credit
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Contributor:
|
|
| - Rajon Ahmed
|
|
| - Blockonite
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
package handler
|
|
|
|
import (
|
|
"embed"
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
"go/module/essential/visible/service/helper/retriever"
|
|
)
|
|
|
|
// constant
|
|
const (
|
|
// resource
|
|
obrimHandlerResourceIdentifier = "framework/glossary" // change identifier if needed
|
|
obrimHandlerResourceFileName = "resource" // change file name if needed
|
|
obrimHandlerResourceFileExt = ".json" // do not change
|
|
|
|
// success
|
|
ObrimHandlerCodeSuccessResourceAvailable = "SUCCESS_RESOURCE_AVAILABLE"
|
|
|
|
// fail
|
|
ObrimHandlerCodeFailedResourceNotFound = "FAILED_RESOURCE_NOT_FOUND"
|
|
ObrimHandlerCodeFailedInvalidResource = "FAILED_INVALID_RESOURCE"
|
|
)
|
|
|
|
// obrimHandlerEmbeddedResource stores the embedded resource file.
|
|
//
|
|
//go:embed resource.json
|
|
var obrimHandlerEmbeddedResource embed.FS
|
|
|
|
// obrimHandlerProvider implements the Retriever JSON provider contract.
|
|
type obrimHandlerProvider struct{}
|
|
|
|
// Retrieve loads and returns the complete parsed resource payload.
|
|
func (provider obrimHandlerProvider) Retrieve() (any, error) {
|
|
return obrimHandlerFetch()
|
|
}
|
|
|
|
// init registers the handler during package initialization.
|
|
func init() {
|
|
obrimHandlerRegister()
|
|
}
|
|
|
|
// obrimHandlerRegister registers the handler with Retriever.
|
|
func obrimHandlerRegister() {
|
|
retriever.ObrimRetrieverJsonRegister(
|
|
obrimHandlerResourceIdentifier,
|
|
obrimHandlerProvider{},
|
|
)
|
|
}
|
|
|
|
// obrimHandlerFetch loads, parses, and returns the complete resource payload.
|
|
func obrimHandlerFetch() (any, error) {
|
|
resource, err := obrimHandlerLoadResource()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
payload, err := obrimHandlerParseResource(resource)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return payload, nil
|
|
}
|
|
|
|
// obrimHandlerLoadResource loads the embedded resource.
|
|
func obrimHandlerLoadResource() ([]byte, error) {
|
|
resource, err := obrimHandlerEmbeddedResource.ReadFile(
|
|
obrimHandlerResourceFileName + obrimHandlerResourceFileExt,
|
|
)
|
|
if err != nil {
|
|
return nil, errors.New(ObrimHandlerCodeFailedResourceNotFound)
|
|
}
|
|
|
|
return resource, nil
|
|
}
|
|
|
|
// obrimHandlerParseResource parses the embedded JSON resource.
|
|
func obrimHandlerParseResource(resource []byte) (map[string]any, error) {
|
|
var payload map[string]any
|
|
|
|
if err := json.Unmarshal(resource, &payload); err != nil {
|
|
return nil, errors.New(ObrimHandlerCodeFailedInvalidResource)
|
|
}
|
|
|
|
return payload, nil
|
|
}
|