github.com/sacloud/iaas-api-go@v1.12.0/internal/define/esme.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package define 16 17 import ( 18 "net/http" 19 20 "github.com/sacloud/iaas-api-go/internal/define/names" 21 "github.com/sacloud/iaas-api-go/internal/define/ops" 22 "github.com/sacloud/iaas-api-go/internal/dsl" 23 "github.com/sacloud/iaas-api-go/internal/dsl/meta" 24 "github.com/sacloud/iaas-api-go/naked" 25 "github.com/sacloud/iaas-api-go/types" 26 ) 27 28 const ( 29 esmeAPIName = "ESME" 30 esmeAPIPathName = "commonserviceitem" 31 ) 32 33 var esmeAPI = &dsl.Resource{ 34 Name: esmeAPIName, 35 PathName: esmeAPIPathName, 36 PathSuffix: dsl.CloudAPISuffix, 37 IsGlobal: true, 38 Operations: dsl.Operations{ 39 // find 40 ops.FindCommonServiceItem(esmeAPIName, esmeNakedType, findParameter, esmeView), 41 42 // create 43 ops.CreateCommonServiceItem(esmeAPIName, esmeNakedType, esmeCreateParam, esmeView), 44 45 // read 46 ops.ReadCommonServiceItem(esmeAPIName, esmeNakedType, esmeView), 47 48 // update 49 ops.UpdateCommonServiceItem(esmeAPIName, esmeNakedType, esmeUpdateParam, esmeView), 50 51 // delete 52 ops.Delete(esmeAPIName), 53 54 // SendMessageWithGeneratedOTP 55 { 56 ResourceName: esmeAPIName, 57 Name: "SendMessageWithGeneratedOTP", 58 PathFormat: dsl.IDAndSuffixPathFormat("esme/2fa/otp"), 59 Method: http.MethodPut, 60 RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{ 61 Type: meta.Static(naked.ESMESendSMSRequest{}), 62 Name: esmeAPIName, 63 }), 64 Arguments: dsl.Arguments{ 65 dsl.ArgumentID, 66 dsl.MappableArgument("param", esmeSendMessageWithGeneratedOTPParam, "ESME"), 67 }, 68 ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{ 69 Type: meta.Static(naked.ESMESendSMSResponse{}), 70 Name: esmeAPIName, 71 }), 72 Results: dsl.Results{ 73 { 74 SourceField: esmeAPIName, 75 DestField: esmeSendMessageResult.Name, 76 Model: esmeSendMessageResult, 77 }, 78 }, 79 }, 80 81 // SendMessageWithInputtedOTP 82 { 83 ResourceName: esmeAPIName, 84 Name: "SendMessageWithInputtedOTP", 85 PathFormat: dsl.IDAndSuffixPathFormat("esme/2fa"), 86 Method: http.MethodPut, 87 RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{ 88 Type: meta.Static(naked.ESMESendSMSRequest{}), 89 Name: esmeAPIName, 90 }), 91 Arguments: dsl.Arguments{ 92 dsl.ArgumentID, 93 dsl.MappableArgument("param", esmeSendMessageWithInputtedOTPParam, "ESME"), 94 }, 95 ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{ 96 Type: meta.Static(naked.ESMESendSMSResponse{}), 97 Name: esmeAPIName, 98 }), 99 Results: dsl.Results{ 100 { 101 SourceField: esmeAPIName, 102 DestField: esmeSendMessageResult.Name, 103 Model: esmeSendMessageResult, 104 }, 105 }, 106 }, 107 108 // Logs 109 { 110 ResourceName: esmeAPIName, 111 Name: "Logs", 112 PathFormat: dsl.IDAndSuffixPathFormat("esme/logs"), 113 Method: http.MethodGet, 114 Arguments: dsl.Arguments{ 115 dsl.ArgumentID, 116 }, 117 ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{ 118 Name: "ESME", 119 Type: meta.Static(&naked.ESMELogs{}), 120 }), 121 Results: dsl.Results{ 122 { 123 SourceField: "ESME.Logs", 124 DestField: "Logs", 125 IsPlural: true, 126 Model: esmeLogsModel, 127 }, 128 }, 129 }, 130 }, 131 } 132 133 var ( 134 esmeNakedType = meta.Static(naked.ESME{}) 135 136 esmeView = &dsl.Model{ 137 Name: esmeAPIName, 138 NakedType: esmeNakedType, 139 Fields: []*dsl.FieldDesc{ 140 fields.ID(), 141 fields.Name(), 142 fields.Description(), 143 fields.Tags(), 144 fields.Availability(), 145 fields.IconID(), 146 fields.CreatedAt(), 147 fields.ModifiedAt(), 148 }, 149 } 150 151 esmeCreateParam = &dsl.Model{ 152 Name: names.CreateParameterName(esmeAPIName), 153 NakedType: esmeNakedType, 154 ConstFields: []*dsl.ConstFieldDesc{ 155 { 156 Name: "Class", 157 Type: meta.TypeString, 158 Tags: &dsl.FieldTags{ 159 MapConv: "Provider.Class", 160 }, 161 Value: `"esme"`, 162 }, 163 }, 164 165 Fields: []*dsl.FieldDesc{ 166 // common fields 167 fields.Name(), 168 fields.Description(), 169 fields.Tags(), 170 fields.IconID(), 171 }, 172 } 173 174 esmeUpdateParam = &dsl.Model{ 175 Name: names.UpdateParameterName(esmeAPIName), 176 NakedType: esmeNakedType, 177 Fields: []*dsl.FieldDesc{ 178 // common fields 179 fields.Name(), 180 fields.Description(), 181 fields.Tags(), 182 fields.IconID(), 183 }, 184 } 185 186 esmeSendMessageWithGeneratedOTPParam = &dsl.Model{ 187 Name: "ESMESendMessageWithGeneratedOTPRequest", 188 NakedType: meta.Static(naked.ESMESendSMSRequest{}), 189 ConstFields: []*dsl.ConstFieldDesc{ 190 { 191 Name: "OTPOperation", 192 Type: meta.Static(types.EOTPOperation("")), 193 Value: `"` + types.OTPOperations.Generate.String() + `"`, 194 }, 195 }, 196 Fields: []*dsl.FieldDesc{ 197 // common fields 198 fields.Def("Destination", meta.TypeString), // 宛先 81開始 199 fields.Def("Sender", meta.TypeString), 200 fields.Def("DomainName", meta.TypeString), 201 }, 202 } 203 204 esmeSendMessageWithInputtedOTPParam = &dsl.Model{ 205 Name: "ESMESendMessageWithInputtedOTPRequest", 206 NakedType: meta.Static(naked.ESMESendSMSRequest{}), 207 ConstFields: []*dsl.ConstFieldDesc{ 208 { 209 Name: "OTPOperation", 210 Type: meta.Static(types.EOTPOperation("")), 211 Value: `"` + types.OTPOperations.Input.String() + `"`, 212 }, 213 }, 214 Fields: []*dsl.FieldDesc{ 215 // common fields 216 fields.Def("Destination", meta.TypeString), // 宛先 81開始 217 fields.Def("Sender", meta.TypeString), 218 fields.Def("DomainName", meta.TypeString), 219 fields.Def("OTP", meta.TypeString), 220 }, 221 } 222 223 esmeSendMessageResult = &dsl.Model{ 224 Name: "ESMESendMessageResult", 225 NakedType: meta.Static(naked.ESMESendSMSResponse{}), 226 Fields: []*dsl.FieldDesc{ 227 // common fields 228 fields.Def("MessageID", meta.TypeString), 229 fields.Def("Status", meta.TypeString), // TODO typesに型定義したいが不明な値があるためstringとしている 230 fields.Def("OTP", meta.TypeString), 231 }, 232 } 233 234 esmeLogsModel = &dsl.Model{ 235 Name: esmeAPIName + "Logs", 236 NakedType: meta.Static(naked.ESMELog{}), 237 IsArray: true, 238 Fields: []*dsl.FieldDesc{ 239 fields.Def("MessageID", meta.TypeString), 240 fields.Def("Status", meta.TypeString), // TODO typesに型定義したいが不明な値があるためstringとしている 241 fields.Def("OTP", meta.TypeString), 242 fields.Def("Destination", meta.TypeString), 243 fields.Def("SentAt", meta.TypeTime), 244 fields.Def("DoneAt", meta.TypeTime), 245 fields.Def("RetryCount", meta.TypeInt), 246 }, 247 } 248 )