Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

78 linhas
2.8 KiB

  1. package service
  2. import (
  3. "strings"
  4. "github.com/QuantumNous/new-api/common"
  5. )
  6. type AssetOperation string
  7. const (
  8. AssetOperationAssetCreate AssetOperation = "asset.create"
  9. AssetOperationAssetList AssetOperation = "asset.list"
  10. AssetOperationAssetGet AssetOperation = "asset.get"
  11. AssetOperationAssetUpdate AssetOperation = "asset.update"
  12. AssetOperationAssetDelete AssetOperation = "asset.delete"
  13. AssetOperationAssetGroupCreate AssetOperation = "asset_group.create"
  14. AssetOperationAssetGroupList AssetOperation = "asset_group.list"
  15. AssetOperationAssetGroupGet AssetOperation = "asset_group.get"
  16. AssetOperationAssetGroupUpdate AssetOperation = "asset_group.update"
  17. AssetOperationAssetGroupDelete AssetOperation = "asset_group.delete"
  18. )
  19. type AssetActionSpec struct {
  20. Action string
  21. Operation AssetOperation
  22. Delete bool
  23. }
  24. var assetActionSpecs = map[string]AssetActionSpec{
  25. "createassetgroup": {Action: "CreateAssetGroup", Operation: AssetOperationAssetGroupCreate},
  26. "createasset": {Action: "CreateAsset", Operation: AssetOperationAssetCreate},
  27. "listassetgroups": {Action: "ListAssetGroups", Operation: AssetOperationAssetGroupList},
  28. "listassets": {Action: "ListAssets", Operation: AssetOperationAssetList},
  29. "getasset": {Action: "GetAsset", Operation: AssetOperationAssetGet},
  30. "getassetgroup": {Action: "GetAssetGroup", Operation: AssetOperationAssetGroupGet},
  31. "updateasset": {Action: "UpdateAsset", Operation: AssetOperationAssetUpdate},
  32. "updateassetgroup": {Action: "UpdateAssetGroup", Operation: AssetOperationAssetGroupUpdate},
  33. "deleteasset": {Action: "DeleteAsset", Operation: AssetOperationAssetDelete, Delete: true},
  34. "deleteassetgroup": {Action: "DeleteAssetGroup", Operation: AssetOperationAssetGroupDelete, Delete: true},
  35. }
  36. func ParseAssetAction(action string) (AssetActionSpec, bool) {
  37. spec, ok := assetActionSpecs[strings.ToLower(strings.TrimSpace(action))]
  38. return spec, ok
  39. }
  40. type assetResponseMetadata struct {
  41. RequestID string `json:"RequestId,omitempty"`
  42. Action string `json:"Action"`
  43. Version string `json:"Version"`
  44. Service string `json:"Service"`
  45. Region string `json:"Region"`
  46. }
  47. func BuildAssetSuccessResponse(action string, version string, result any) ([]byte, error) {
  48. return buildAssetSuccessResponseWithRequestID(action, version, "", result)
  49. }
  50. func buildAssetSuccessResponseWithRequestID(action string, version string, requestID string, result any) ([]byte, error) {
  51. if strings.TrimSpace(version) == "" {
  52. version = "2024-01-01"
  53. }
  54. payload := map[string]any{
  55. "ResponseMetadata": assetResponseMetadata{
  56. RequestID: requestID,
  57. Action: action,
  58. Version: version,
  59. Service: "ark",
  60. Region: "cn-beijing",
  61. },
  62. }
  63. if result != nil {
  64. payload["Result"] = result
  65. }
  66. return common.Marshal(payload)
  67. }