github.com/sacloud/iaas-api-go@v1.12.0/internal/define/sim.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  )
    26  
    27  const (
    28  	simAPIName     = "SIM"
    29  	simAPIPathName = "commonserviceitem"
    30  )
    31  
    32  var simAPI = &dsl.Resource{
    33  	Name:       simAPIName,
    34  	PathName:   simAPIPathName,
    35  	PathSuffix: dsl.CloudAPISuffix,
    36  	IsGlobal:   true,
    37  	Operations: dsl.Operations{
    38  		// find
    39  		ops.FindCommonServiceItem(simAPIName, simNakedType, findParameter, simView),
    40  
    41  		// create
    42  		ops.CreateCommonServiceItem(simAPIName, simNakedType, simCreateParam, simView),
    43  
    44  		// read
    45  		ops.ReadCommonServiceItem(simAPIName, simNakedType, simView),
    46  
    47  		// update
    48  		ops.UpdateCommonServiceItem(simAPIName, simNakedType, simUpdateParam, simView),
    49  
    50  		// delete
    51  		ops.Delete(simAPIName),
    52  
    53  		// activate
    54  		ops.WithIDAction(simAPIName, "Activate", http.MethodPut, "sim/activate"),
    55  		// deactivate
    56  		ops.WithIDAction(simAPIName, "Deactivate", http.MethodPut, "sim/deactivate"),
    57  
    58  		// assignIP
    59  		{
    60  			ResourceName: simAPIName,
    61  			Name:         "AssignIP",
    62  			PathFormat:   dsl.IDAndSuffixPathFormat("sim/ip"),
    63  			Method:       http.MethodPut,
    64  			RequestEnvelope: dsl.RequestEnvelope(
    65  				&dsl.EnvelopePayloadDesc{
    66  					Name: "SIM",
    67  					Type: meta.Static(naked.SIMAssignIPRequest{}),
    68  					Tags: &dsl.FieldTags{
    69  						JSON: "sim",
    70  					},
    71  				},
    72  			),
    73  			Arguments: dsl.Arguments{
    74  				dsl.ArgumentID,
    75  				dsl.MappableArgument("param", simAssignIPParam, "SIM"),
    76  			},
    77  		},
    78  
    79  		// clearIP
    80  		ops.WithIDAction(simAPIName, "ClearIP", http.MethodDelete, "sim/ip"),
    81  
    82  		// IMEILock
    83  		{
    84  			ResourceName: simAPIName,
    85  			Name:         "IMEILock",
    86  			PathFormat:   dsl.IDAndSuffixPathFormat("sim/imeilock"),
    87  			Method:       http.MethodPut,
    88  			RequestEnvelope: dsl.RequestEnvelope(
    89  				&dsl.EnvelopePayloadDesc{
    90  					Name: "SIM",
    91  					Type: meta.Static(naked.SIMIMEILockRequest{}),
    92  					Tags: &dsl.FieldTags{
    93  						JSON: "sim",
    94  					},
    95  				},
    96  			),
    97  			Arguments: dsl.Arguments{
    98  				dsl.ArgumentID,
    99  				dsl.MappableArgument("param", simIMEILockParam, "SIM"),
   100  			},
   101  		},
   102  
   103  		// IMEIUnlock
   104  		ops.WithIDAction(simAPIName, "IMEIUnlock", http.MethodDelete, "sim/imeilock"),
   105  
   106  		// Logs
   107  		{
   108  			ResourceName:     simAPIName,
   109  			PathFormat:       dsl.IDAndSuffixPathFormat("sim/sessionlog"),
   110  			Method:           http.MethodGet,
   111  			Name:             "Logs",
   112  			UseWrappedResult: true,
   113  			Arguments: dsl.Arguments{
   114  				dsl.ArgumentID,
   115  			},
   116  			ResponseEnvelope: dsl.ResponseEnvelopePlural(&dsl.EnvelopePayloadDesc{
   117  				Name: "Logs",
   118  				Type: meta.Static(naked.SIMLog{}),
   119  				Tags: &dsl.FieldTags{
   120  					JSON: "logs",
   121  				},
   122  			}),
   123  			Results: dsl.Results{
   124  				{
   125  					SourceField: "Logs",
   126  					DestField:   "Logs",
   127  					IsPlural:    true,
   128  					Model:       simLogView,
   129  				},
   130  			},
   131  		},
   132  
   133  		// GetNetworkOperator
   134  		{
   135  			ResourceName: simAPIName,
   136  			Name:         "GetNetworkOperator",
   137  			PathFormat:   dsl.IDAndSuffixPathFormat("sim/network_operator_config"),
   138  			Method:       http.MethodGet,
   139  			Arguments: dsl.Arguments{
   140  				dsl.ArgumentID,
   141  			},
   142  			ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{
   143  				Name: "NetworkOperationConfigs",
   144  				Type: meta.Static([]*naked.SIMNetworkOperatorConfig{}),
   145  				Tags: &dsl.FieldTags{
   146  					JSON: "network_operator_config",
   147  				},
   148  			}),
   149  			Results: dsl.Results{
   150  				{
   151  					SourceField: "NetworkOperationConfigs",
   152  					DestField:   "Configs",
   153  					IsPlural:    true,
   154  					Model:       simNetworkOperatorConfigView,
   155  				},
   156  			},
   157  		},
   158  
   159  		// SetNetworkOperator
   160  		{
   161  			ResourceName: simAPIName,
   162  			Name:         "SetNetworkOperator",
   163  			PathFormat:   dsl.IDAndSuffixPathFormat("sim/network_operator_config"),
   164  			Method:       http.MethodPut,
   165  			RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{
   166  				Name: "NetworkOperatorConfigs",
   167  				Type: meta.Static([]*naked.SIMNetworkOperatorConfig{}),
   168  				Tags: &dsl.FieldTags{
   169  					JSON: "network_operator_config",
   170  				},
   171  			}),
   172  			Arguments: dsl.Arguments{
   173  				dsl.ArgumentID,
   174  				&dsl.Argument{
   175  					Name:       "configs",
   176  					Type:       simNetworkOperatorConfigView,
   177  					MapConvTag: "[]NetworkOperatorConfigs,recursive",
   178  				},
   179  			},
   180  		},
   181  
   182  		// monitor
   183  		ops.MonitorChild(simAPIName, "SIM", "sim/metrics",
   184  			monitorParameter, monitors.linkModel()),
   185  
   186  		// status
   187  		{
   188  			ResourceName: simAPIName,
   189  			Name:         "Status",
   190  			PathFormat:   dsl.IDAndSuffixPathFormat("sim/status"),
   191  			Method:       http.MethodGet,
   192  			Arguments: dsl.Arguments{
   193  				dsl.ArgumentID,
   194  			},
   195  			ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{
   196  				Name: "SIM",
   197  				Type: meta.Static(naked.SIMInfo{}),
   198  				Tags: &dsl.FieldTags{
   199  					JSON: "sim",
   200  				},
   201  			}),
   202  			Results: dsl.Results{
   203  				{
   204  					SourceField: "SIM",
   205  					DestField:   "SIM",
   206  					IsPlural:    false,
   207  					Model:       models.simInfo(),
   208  				},
   209  			},
   210  		},
   211  	},
   212  }
   213  
   214  var (
   215  	simNakedType = meta.Static(naked.SIM{})
   216  
   217  	simView = &dsl.Model{
   218  		Name:      simAPIName,
   219  		NakedType: simNakedType,
   220  		Fields: []*dsl.FieldDesc{
   221  			fields.ID(),
   222  			fields.Name(),
   223  			fields.Description(),
   224  			fields.Tags(),
   225  			fields.Availability(),
   226  			fields.Class(),
   227  			fields.SIMICCID(),
   228  			fields.Def("Info", models.simInfo(), mapConvTag("Status.SIMInfo")),
   229  			fields.IconID(),
   230  			fields.CreatedAt(),
   231  			fields.ModifiedAt(),
   232  		},
   233  	}
   234  
   235  	simCreateParam = &dsl.Model{
   236  		Name:      names.CreateParameterName(simAPIName),
   237  		NakedType: simNakedType,
   238  		ConstFields: []*dsl.ConstFieldDesc{
   239  			{
   240  				Name: "Class",
   241  				Type: meta.TypeString,
   242  				Tags: &dsl.FieldTags{
   243  					MapConv: "Provider.Class",
   244  				},
   245  				Value: `"sim"`,
   246  			},
   247  		},
   248  		Fields: []*dsl.FieldDesc{
   249  			fields.Name(),
   250  			fields.Description(),
   251  			fields.Tags(),
   252  			fields.IconID(),
   253  			fields.SIMICCID(),
   254  			fields.SIMPassCode(),
   255  		},
   256  	}
   257  
   258  	simUpdateParam = &dsl.Model{
   259  		Name:      names.UpdateParameterName(simAPIName),
   260  		NakedType: simNakedType,
   261  		Fields: []*dsl.FieldDesc{
   262  			fields.Name(),
   263  			fields.Description(),
   264  			fields.Tags(),
   265  			fields.IconID(),
   266  		},
   267  	}
   268  
   269  	simAssignIPParam = &dsl.Model{
   270  		Name: "SIMAssignIPRequest",
   271  		Fields: []*dsl.FieldDesc{
   272  			{
   273  				Name: "IP",
   274  				Type: meta.TypeString,
   275  			},
   276  		},
   277  		NakedType: meta.Static(naked.SIMAssignIPRequest{}),
   278  	}
   279  	simIMEILockParam = &dsl.Model{
   280  		Name: "SIMIMEILockRequest",
   281  		Fields: []*dsl.FieldDesc{
   282  			{
   283  				Name: "IMEI",
   284  				Type: meta.TypeString,
   285  			},
   286  		},
   287  		NakedType: meta.Static(naked.SIMIMEILockRequest{}),
   288  	}
   289  
   290  	simLogView = &dsl.Model{
   291  		Name: "SIMLog",
   292  		Fields: []*dsl.FieldDesc{
   293  			fields.Def("Date", meta.TypeTime),
   294  			fields.Def("SessionStatus", meta.TypeString),
   295  			fields.Def("ResourceID", meta.TypeString),
   296  			fields.Def("IMEI", meta.TypeString),
   297  			fields.Def("IMSI", meta.TypeString),
   298  		},
   299  		NakedType: meta.Static(naked.SIMLog{}),
   300  	}
   301  	simNetworkOperatorConfigView = &dsl.Model{
   302  		Name:    "SIMNetworkOperatorConfig",
   303  		IsArray: true,
   304  		Fields: []*dsl.FieldDesc{
   305  			fields.Def("Allow", meta.TypeFlag),
   306  			fields.Def("CountryCode", meta.TypeString),
   307  			fields.Def("Name", meta.TypeString),
   308  		},
   309  		NakedType: meta.Static(naked.SIMNetworkOperatorConfig{}),
   310  	}
   311  )