diff --git a/data/generated/openapi/openapi.go b/data/generated/openapi/openapi.go index ce159dfb..87af7e3f 100755 --- a/data/generated/openapi/openapi.go +++ b/data/generated/openapi/openapi.go @@ -77,7 +77,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _openapiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5c\x5f\x8f\xdb\xb8\x11\x7f\xdf\x4f\x31\x40\x5b\xf8\x72\xf0\xda\x4e\xef\x0a\xb4\x46\x72\x40\x72\xbd\x14\x77\xc8\x25\x69\x36\x69\x1f\x8a\xc2\x4b\x93\x23\x8b\x89\x44\x2a\x24\xb5\x59\xa7\xed\x77\x2f\x48\xea\xbf\x25\xad\xec\xee\xc6\xda\xad\xf3\x92\x35\x35\x1c\xce\x90\xbf\xf9\x69\x48\x8e\x2d\x13\x14\x24\xe1\x4b\xf8\x6e\xb6\x98\x2d\xce\xb8\x08\xe4\xf2\x0c\xc0\x70\x13\xe1\x12\x62\x82\xda\x28\x09\x17\xa8\xae\x38\x45\x78\xf6\xe6\xe7\x33\x00\x86\x9a\x2a\x9e\x18\x2e\x45\x97\xc8\x15\x2a\xed\x1e\x2f\x66\x8b\xd9\xe3\x33\x8d\xca\xb6\x58\xcd\xe7\x90\xaa\x68\x09\xa1\x31\xc9\x72\x3e\x8f\x24\x25\x51\x28\xb5\x59\xfe\x71\xb1\x58\x9c\x01\x34\xb4\xd3\x54\x29\x14\x06\x98\x8c\x09\x17\xf5\xee\x7a\x39\x9f\x93\x84\xcf\xac\x0b\x3a\xe4\x81\x99\x51\x19\xef\xaa\xf8\x95\x70\x01\xdf\x24\x4a\xb2\x94\xda\x96\x47\xe0\xad\x69\x57\xa6\x0d\xd9\xe0\x4d\x2a\x2f\x0c\xd9\x70\xb1\xc9\x15\x25\xc4\x84\xce\x37\xab\x61\x9e\x4d\xc8\xfc\xea\xf1\x5c\xa1\x96\xa9\xa2\xe8\x1e\x02\x6c\xd0\xf8\x3f\x00\x74\x1a\xc7\x44\x6d\x97\xf0\x16\x4d\xaa\x84\x06\x02\x11\xd7\x06\x64\x00\x45\xa7\x5c\x14\x69\xaa\xb8\xd9\xe6\x5d\xad\xd9\xcf\x91\x28\x54\x4b\xf8\xc7\x3f\xb3\x46\x85\x3a\x91\x42\xe7\x23\xd9\x7f\x93\xdf\x2f\x16\x93\xf2\x63\xc3\x85\x67\xf0\xcb\xc5\xeb\x57\x40\x94\x22\xdb\xea\xa8\x20\xd7\x1f\x90\x1a\x5d\xe9\x47\xa5\x30\x28\x4c\x55\x15\x00\x49\x92\x88\x53\x62\x95\xcd\x3f\x68\x29\xea\x4f\x01\x34\x0d\x31\x26\xcd\x56\x80\xdf\x2a\x0c\x96\x30\xf9\xcd\x9c\xca\x38\x91\x02\x85\xd1\x73\x2f\xab\xe7\x6f\x33\x1b\x5e\x72\x6d\x26\xa5\x1f\xdf\x2f\x1e\xf7\xf8\x91\x9a\x10\x8c\xfc\x88\x02\xb8\x06\x2e\xae\x48\xc4\xd9\x31\x8c\xff\x49\x29\xa9\x6a\x56\x7f\xd7\x6d\xf5\x7b\x41\x52\x13\x4a\xc5\xbf\x20\x03\x23\x21\x41\x15\x48\x15\x83\x4c\x50\x39\xb3\xc6\xe0\xc1\x1f\xfa\xf0\xf3\x5e\xe0\x75\x82\xd4\x20\x03\xb4\xfd\x40\x52\x17\xab\xc7\x9f\xfb\x84\x28\x12\xa3\xc9\xe8\x06\x5c\xbc\xb4\x75\x2e\xe5\xe6\x09\xd9\xe0\x64\xa8\xb0\xe6\x5f\xf6\x10\x46\xa2\x68\x38\x58\x5c\x2a\x86\xea\xf9\x76\xb0\x7c\xc0\x31\x62\xda\x8b\x27\x96\x45\x9b\xf4\xf2\xa3\x42\x62\x10\x08\x08\xfc\x5c\xc4\xf8\x7e\xc4\xf2\x29\x45\x6d\x9e\x4b\x56\x91\xab\x21\x21\x8f\x5a\x60\xc4\x90\x42\xc4\xf6\xe3\x0a\xd9\x12\x8c\x4a\xf1\xac\x07\x12\xfd\x80\x68\x87\xc3\x10\x16\x99\xf4\x52\x63\x0f\xa5\xf8\x39\x3b\x0a\x90\x9b\xb6\x3b\x1e\xe9\x89\xc2\xbf\x59\xb6\x73\x26\xf8\x28\xd4\xe3\x09\xc3\x13\x71\x1f\xd1\x83\x3f\x75\x7b\x50\x84\x2b\x89\x14\x12\xb6\x05\xbc\xe6\xfa\x38\xef\xfb\xbd\x5e\x38\xcf\x04\xa4\x5d\xef\x1c\xa0\x36\x64\x6d\x46\x66\x42\x6c\xd2\xdc\x71\x5c\xea\x4c\x05\xe7\xff\xe2\xec\x3f\xdd\xf9\xe0\x5f\xd0\x00\x11\x65\x3a\xb6\xde\x42\x11\x16\x77\x93\x09\x16\x80\x08\x64\x2a\x58\x6d\xc0\xaf\x3a\x75\xad\xdc\x77\x22\x90\xe3\x78\xf0\x7d\xb7\x07\xaf\x64\x89\xce\xcf\xdc\x84\xa0\x13\xa4\x3c\xe0\xc8\x80\xb3\xfb\xc2\x26\x63\x4d\x5f\x13\x62\x68\xb8\x43\x0a\xef\x13\xe6\xb2\x38\x71\x47\x29\x9c\xd7\xcf\xca\x75\x1d\x59\x2a\xf7\xc6\xce\xca\x5b\xef\x46\x7f\x5a\x37\x84\xe7\xd2\xcc\x5b\x9d\x52\x8a\x5a\x07\x69\x14\x6d\x47\x43\x78\xa7\x64\xef\x2b\x5b\x7d\xe2\xea\x51\x38\xf1\x00\x33\xd6\x9d\x77\x8c\x23\x1e\x9b\xa5\x8e\x22\x43\xb5\xd6\x46\x68\x70\xe7\x6d\xf3\x67\xd7\x0c\xe4\xc0\x97\x4d\x1b\x2d\xf7\x40\xb4\x3c\x3e\x70\xc3\x76\xd0\xf2\x89\x19\xbf\xbe\xd5\x27\x66\x1c\x81\x13\xfb\x31\x8c\x8b\xa1\x11\x31\x4c\xf3\x2c\xf6\xc6\x03\x4d\xce\xfa\x36\xcf\xe7\xeb\x54\xb0\xe8\xb0\xeb\x14\xc8\xfa\xde\xe9\x5e\xba\xf3\x56\xc5\x0f\x3e\x86\xcb\x95\xe7\xce\x92\xd3\x15\xcb\x28\x28\xea\x5e\xee\x51\xff\x5f\xaf\x58\x6e\x62\xa5\x7d\x4f\xf6\x3c\x25\x7c\xc5\x03\xbe\x6c\xc4\x91\x9c\xf3\x79\x22\x3a\x91\xd0\x08\x3c\x18\x98\x27\x65\xf8\x79\x38\xe9\xd2\x7d\x26\xd4\xf6\x4c\x89\x4a\xa1\xd3\xb8\xd0\x33\x2c\x45\x2a\x3a\x7d\xd5\xdc\x28\x1f\xf5\x98\x49\xd1\x8f\x99\x0d\xa7\x74\x68\x14\x4c\xf4\x60\xa2\x77\xcf\x84\x68\xcf\x94\x68\xef\xa4\x68\xff\xb4\xe8\xd6\x6b\x4f\xf2\x68\xdf\x8f\x62\x6e\xba\xb8\xc8\xe3\x77\x2c\x17\x16\xb9\x3d\xf7\xb1\xf6\xa4\x69\xfb\xe9\xd0\xed\x44\xe1\x87\x78\xd0\x73\x92\x5f\x84\xeb\x3d\x3b\xc9\x1f\x5e\x7b\xd2\xa0\xb9\xe3\xb8\xd4\x99\x14\x0e\xdb\xa1\x16\x89\xd9\xdd\x6f\x4d\x0b\x40\x1c\x79\x4f\xda\xca\x7d\x27\x02\x19\xe3\x6e\xb4\x40\xe7\x69\x1b\x7a\xeb\x87\xf5\xfd\xb5\x27\x77\x93\xc2\xe5\xb5\x27\x74\xa4\xa9\xdc\xad\xd4\x9e\x14\x3c\x37\x96\xda\x93\x53\xb2\x37\x06\xab\x4f\x5c\x3d\x0a\x27\x1e\x60\xc6\xda\x5d\x7b\x32\x8a\x0c\xf5\xe6\xda\x93\xc3\x5e\x36\x7b\xd6\x9e\x94\xc7\x07\xa7\xda\x93\x13\x33\xde\xae\x07\x0f\x80\x19\x0f\xac\x3d\x19\x09\xc3\x1c\x78\xa7\x52\x3e\xb1\xdd\x72\xde\xb9\xb0\xfa\x73\x62\xc9\x88\x27\xd3\x6a\xb6\x09\xfa\xef\x10\x9f\x55\xec\xc6\x25\xac\x9d\x58\xd6\xe8\x3f\xbc\x90\x2a\x26\x66\x09\xbf\xfc\xfd\xdd\x59\xee\x60\xa6\xf4\xb5\xbb\x05\x79\x8b\x01\x2a\x14\x14\xeb\xda\xfd\x15\x49\xd6\x94\x28\x0b\x75\xc3\xab\x3c\xc7\x59\x75\x9e\x7c\x27\x6d\x14\x17\x9b\xa2\xf9\x23\x17\x37\x0b\x85\x76\x82\xfa\x84\x5e\xf2\xf2\xa4\x77\xa0\x6d\x83\x06\x4e\xc8\x06\x77\x85\xb8\x30\xb8\xa9\x20\x49\xf3\x2f\x03\xa4\x8c\x34\x24\xba\x49\xac\xd8\x59\x54\xde\x28\xd6\xd2\xca\x47\x6b\x53\xe5\xa3\x1d\xbc\xf2\xd1\x8d\x52\xf9\xcc\x0d\xc6\x3e\x6c\x1d\x08\x73\xbd\x24\x8a\x5e\x07\xfd\x08\xcc\xc1\xdb\x80\x40\x59\xa2\xd0\x32\xd1\xed\x53\x6d\x23\x8d\x61\x3d\x64\x5a\xa7\xdb\xfa\x4f\x76\x62\xae\x43\xb4\x60\xd6\x55\x1d\x66\x2d\x1d\x9c\xeb\x55\x8c\xec\xe1\x7e\xf5\x12\x6e\x2f\x9f\xdd\xcc\xb7\x19\xe6\xee\x1a\x6b\xed\x2d\xa2\x83\x09\x25\x2f\x5c\x38\xd2\xca\x0a\x12\x0f\x5b\xd9\x9c\x7f\x57\x83\x7b\xe4\xbf\xd6\xd0\x22\xdb\x8c\x2d\xf0\xe7\x9d\xc8\x56\xc4\x0c\xd2\x0d\x10\x64\xa4\x67\x77\xbe\xe7\x86\xc7\xd5\xa2\xc4\x6c\x3f\x7c\x3b\xca\x62\x22\x78\x80\xba\x55\x55\x63\x8a\xf3\x04\x74\x25\xfd\xeb\x6c\x48\x0f\x6f\xeb\x4a\x1b\x45\x0c\x6e\xb6\x83\xfa\x68\x43\x4c\xda\x8a\xcd\x8a\x68\xf5\x77\x0f\x1e\x4a\xdc\xd4\xbf\xdc\xd2\xf6\x45\x9e\x3d\xdf\x22\x2d\x18\x6d\x47\x68\x1b\x0a\x5a\x27\xa5\x13\x01\xad\xd2\x3d\xab\xdf\xb9\xa0\x65\xad\xe5\x43\x5b\xd6\x6a\xf1\x56\xbd\xed\xc4\x8e\x23\x67\xc7\xff\x05\x1a\xb7\xc6\xa5\xb9\x31\x2b\x2a\x45\xc0\x37\x77\x60\xd3\x20\xe6\xcd\x0f\x00\x5a\x41\x7b\x20\x6c\x3b\x81\xdb\x05\xdd\x36\xf0\xf6\xac\x71\x44\xd6\x18\x0d\x9d\x05\xe7\x14\x63\xdc\x2e\x0c\x89\xde\x74\x8c\xdf\x3b\x5e\x17\xa2\x7b\xba\xf4\x03\xb1\x1b\xd7\x07\xa8\xac\x56\x70\x1d\xb4\x8a\xf5\xd2\xaf\xbd\x97\xae\x07\x92\xbb\xf8\xed\x10\xdf\xe7\xa8\xbe\xed\x5a\x62\xcf\x37\xe9\x2e\x80\x3a\x7c\xbe\x19\x38\x8d\xe5\x6a\x6e\xb9\xcb\xed\x82\x43\x78\x79\xb9\xcb\xc5\x12\x12\x62\xc2\xec\x63\xed\x60\xe1\x5d\x88\xc0\x99\xff\xf6\x04\x95\x2a\xef\xd2\x7a\x13\xd4\x3c\x22\xd8\x81\x4f\x75\x5b\xe9\x6d\xa8\x6c\xea\xac\x15\x9f\x52\x54\xdb\x36\x33\xde\x90\x0d\x82\x48\xe3\x35\xaa\xd2\x16\x5f\x32\xf9\x39\x44\x51\x6b\xc0\x6b\x8a\xc8\x74\xe5\x1c\xc7\x8e\x52\xdd\x30\xb6\x1b\xda\x7c\x7d\x30\x0c\x48\x1a\x99\x25\x3c\x2e\xb3\x19\x2e\x78\x9c\xc6\x65\x53\x39\x0f\x01\x89\xb4\xd7\x5f\xdd\x16\x7b\x2f\x2b\x43\xf7\x7a\xf9\x2b\xb9\xb6\xea\x77\x1c\xd5\x60\x24\x28\x57\x29\x7a\xa0\x07\xd9\xaf\xb9\xd5\x7c\x58\xf4\xf9\xe0\x2a\xd6\x1a\x5e\xb8\xb6\x0e\x3f\xda\x94\x34\xbc\xfb\xf7\x79\x61\xc3\x45\xb6\x34\xda\x95\x69\x78\xc5\x40\x15\x37\xa8\x38\x99\x39\xd0\xe9\xad\x30\xe4\xda\xce\x81\x09\xb9\x2e\xc1\x0c\xbc\x3c\x8d\xd3\x3c\xe6\x11\x51\x76\x76\x4c\xa3\x0b\xc2\xea\x73\x88\x0a\x57\x40\x23\x92\x6a\xb4\xad\x44\xc0\xc5\x5f\x5f\xba\x77\x11\xc6\x28\xcc\xb4\x4c\x27\x75\x5e\x32\x62\x5d\xd5\xb9\x8a\x0f\x5a\x0a\x20\xc6\x28\xbe\x4e\x0d\x6a\x98\x03\x95\x51\x1a\x8b\xba\x14\xa1\x54\xa6\xc2\xcc\xa0\x50\xf7\x42\x2a\xc0\x6b\x12\x27\x11\x4e\x81\x0b\x70\xe5\x7c\xd9\x1a\x2a\x8e\x57\x68\x49\xb1\xda\x57\xfb\x93\x47\x02\xa9\x46\x65\x95\x97\x2e\x1a\xa2\xdc\x39\x9e\x13\xb8\x8c\xb7\x97\xcb\xb3\xe2\xe1\xe5\xe5\xa5\xfe\x14\x55\xbc\xf0\x9d\x21\xe2\x1f\x11\x26\xf1\xf6\x77\x93\xaa\x68\xd9\xef\xdd\xee\xa4\x03\x25\x02\x48\xa4\x25\xac\xd1\x9f\x05\x22\x03\x69\x03\x2b\xaa\xfd\x18\xc1\xec\x00\x27\x75\xba\x2e\x60\xa0\x3d\xe1\xa1\x2b\x2f\xb9\x0c\xa4\x7c\xba\x26\xea\x72\xda\xe9\x53\xb5\xef\xca\x73\xe5\xec\x23\x6e\xe1\x29\x4c\x02\x29\x27\x40\x04\x6b\x95\xb9\x22\x51\x8a\x56\x6a\x4d\x54\xc7\x2c\xfc\xec\x97\xaf\x8a\x2c\x31\x31\x96\xa4\xaf\x38\x43\x36\x05\xa9\x80\x7b\x19\xaf\x8d\x6b\xc0\x38\x31\xdb\xa9\x6d\x2b\x0f\xb6\x77\xd6\xd2\x84\xc4\xb8\x16\xbb\x20\x10\x12\x0d\x09\xaa\x98\x6b\x9b\xb7\xda\x09\xd2\x88\xf0\x99\x47\x11\xac\xcb\x75\xf6\xd1\x8d\x6c\x36\x94\x4b\xb3\x12\xd1\x7a\x88\x66\x8d\x77\x10\xa3\x7e\x75\xd7\xdb\x5b\x8f\xd2\x5c\xf1\xb0\x40\x5d\xa7\x66\xef\x60\x6d\x84\xe9\x9e\x00\x2e\x56\xd5\x3d\xf6\xb8\xcd\x03\x6d\x40\x28\x12\x4d\xdb\xd1\xf7\x5a\x1d\x36\x26\xac\x88\x60\x2b\x08\xb8\xd2\x06\x86\x1b\x31\xf5\x3d\x5e\xf5\xda\x74\x5b\x11\x21\x24\xe0\x75\x12\x71\xca\x8d\x77\xc1\x13\x98\x43\x7c\x4e\x2e\x83\x81\xee\x2b\x9b\xeb\x38\xf7\x6d\xb7\x03\xf3\xd4\xd9\xa3\xdd\x2d\x67\x1c\x93\x73\x8d\xd6\x7f\xcb\x79\xf9\x37\x32\xfc\x68\x76\x95\xd6\xb8\x13\xa8\x00\x2f\xfc\x63\x19\x58\x22\x3a\xd7\x46\xa5\xd4\xa4\xca\x6a\x14\x2e\x71\x72\x99\xa7\xb6\xab\x01\x4f\x8a\xa7\x3f\xcc\x9e\x38\xb5\x3f\x80\x90\xc6\x1d\xe7\x96\x0a\x9f\x68\x93\x0b\x7d\x0b\x31\x12\xa1\x1d\x2a\x9c\xbc\x53\x08\x85\x9a\xa2\xcf\x4f\x1e\xc8\x4b\x8f\x6a\x42\x43\xb8\xa8\xb0\xa2\xb5\x7d\x83\x06\x38\x9b\xba\x4b\x85\x29\x24\x11\x11\xdf\x70\xe6\x6c\xfc\xc8\x05\x7b\xe4\xfe\xf2\xe4\x09\xdf\x14\xc3\xe9\x47\x35\x74\x15\x7f\x4b\x1a\x3b\x85\x75\x6a\x3f\x3f\x2f\xa1\xe3\xbb\x3f\xe5\x6c\xea\x06\xb4\xe3\xcd\x38\xf3\xff\xdb\x01\xa7\x19\x51\x7f\x5b\xef\x85\x86\x86\x2f\xdd\x93\xa7\xb5\x1a\xa3\x72\xf0\x5e\xc0\xfc\x37\x00\x00\xff\xff\x66\x05\x16\x0d\x41\x57\x00\x00") +var _openapiYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5c\x5f\x8f\xdb\xb8\x11\x7f\xdf\x4f\x31\x40\x5b\x38\x39\xec\xda\x4e\xef\x0a\xb4\x46\x72\x40\x72\xbd\x14\x77\xc8\x25\x69\x36\x69\x1f\x8a\xc2\x4b\x93\x23\x8b\x89\x44\x2a\x24\xb5\x59\xa7\xed\x77\x2f\x48\xea\xbf\x25\xad\xec\xf3\xc6\xca\x9e\xf3\x92\x15\x35\x33\x9c\x21\x67\x7e\x1c\x92\x23\xcb\x04\x05\x49\xf8\x02\xbe\x9d\xce\xa7\xf3\x33\x2e\x02\xb9\x38\x03\x30\xdc\x44\xb8\x80\x98\xa0\x36\x4a\xc2\x25\xaa\x6b\x4e\x11\x9e\xbe\xfe\xe9\x0c\x80\xa1\xa6\x8a\x27\x86\x4b\xd1\x45\x72\x8d\x4a\xbb\xd7\xf3\xe9\x7c\xfa\xe8\x4c\xa3\xb2\x2d\x56\xf2\x05\xa4\x2a\x5a\x40\x68\x4c\xb2\x98\xcd\x22\x49\x49\x14\x4a\x6d\x16\x7f\x9e\xcf\xe7\x67\x00\x0d\xe9\x34\x55\x0a\x85\x01\x26\x63\xc2\x45\x9d\x5d\x2f\x66\x33\x92\xf0\xa9\x35\x41\x87\x3c\x30\x53\x2a\xe3\x6d\x11\xbf\x10\x2e\xe0\x41\xa2\x24\x4b\xa9\x6d\x79\x08\x5e\x9b\x76\x61\xda\x90\x35\xde\x26\xf2\xd2\x90\x35\x17\xeb\x5c\x50\x42\x4c\xe8\x6c\xb3\x12\x66\xd9\x80\xcc\xae\x1f\xcd\x14\x6a\x99\x2a\x8a\xee\x25\xc0\x1a\x8d\xff\x03\x40\xa7\x71\x4c\xd4\x66\x01\x6f\xd0\xa4\x4a\x68\x20\x10\x71\x6d\x40\x06\x50\x30\xe5\xa4\x48\x53\xc5\xcd\x26\x67\xb5\x6a\x3f\x43\xa2\x50\x2d\xe0\x5f\xff\xce\x1a\x15\xea\x44\x0a\x9d\xf7\x64\xff\x4d\xfe\x38\x9f\x4f\xca\xc7\x86\x09\x4f\xe1\xe7\xcb\x57\x2f\x81\x28\x45\x36\xd5\x5e\x41\xae\xde\x23\x35\xba\xc2\x47\xa5\x30\x28\x4c\x55\x14\x00\x49\x92\x88\x53\x62\x85\xcd\xde\x6b\x29\xea\x6f\x01\x34\x0d\x31\x26\xcd\x56\x80\xdf\x2b\x0c\x16\x30\xf9\xdd\x8c\xca\x38\x91\x02\x85\xd1\x33\x4f\xab\x67\x6f\x32\x1d\x5e\x70\x6d\x26\xa5\x1d\xdf\xcd\x1f\xf5\xd8\x91\x9a\x10\x8c\xfc\x80\x02\xb8\x06\x2e\xae\x49\xc4\xd9\x31\x94\xff\x51\x29\xa9\x6a\x5a\x7f\xdb\xad\xf5\x3b\x41\x52\x13\x4a\xc5\x3f\x23\x03\x23\x21\x41\x15\x48\x15\x83\x4c\x50\x39\xb5\xc6\x60\xc1\x9f\xfa\xfc\xe7\x9d\xc0\x9b\x04\xa9\x41\x06\x68\xf9\x40\x52\x17\xab\xc7\x1f\xfb\x84\x28\x12\xa3\xc9\xe0\x06\x5c\xbc\xb4\x31\x97\x74\xb3\x84\xac\x71\x32\x94\x58\xf3\xcf\x3b\x10\x23\x51\x34\x1c\x4c\x2e\x15\x43\xf5\x6c\x33\x98\x3e\xe0\x18\x31\xed\xc9\x13\x8b\xa2\x4d\x78\xf9\x41\x21\x31\x08\x04\x04\x7e\x2a\x62\x7c\x37\x60\xf9\x98\xa2\x36\xcf\x24\xab\xd0\xd5\x3c\x21\x8f\x5a\x60\xc4\x90\x82\xc4\xf2\x71\x85\x6c\x01\x46\xa5\x78\xd6\xe3\x12\xfd\x0e\xd1\xee\x0e\x43\x50\x64\xd2\x0b\x8d\x3d\x90\xe2\xc7\xec\x28\x8e\xdc\xd4\xdd\xe1\x48\x4f\x14\xfe\xc3\xa2\x9d\x53\xc1\x47\xa1\x1e\x4f\x18\x9e\x80\xfb\x88\x16\xfc\xa5\xdb\x82\x22\x5c\x49\xa4\x90\xb0\x0d\xe0\x0d\xd7\xc7\x59\xef\x77\x5a\x70\x9e\x0a\x48\xbb\xd6\x1c\xa0\x36\x64\x6d\x46\x66\x42\x6c\xc2\xdc\x71\x4c\xea\x4c\x05\x67\xff\xe1\xec\x7f\xdd\xf9\xe0\xdf\xd0\x00\x11\x65\x3a\xb6\xda\x40\x11\x16\x77\x93\x09\x16\x0e\x11\xc8\x54\xb0\x5a\x87\x5f\x74\xe8\x5a\xb1\xef\x04\x20\xc7\xb1\xe0\xbb\x6e\x0b\x5e\xca\xd2\x3b\x3f\x71\x13\x82\x4e\x90\xf2\x80\x23\x03\xce\xbe\x16\x34\x19\x6b\xfa\x9a\x10\x43\xc3\x2d\x50\x78\x97\x30\x97\xc5\x89\x3b\x4a\xe1\xbc\x7c\x56\xce\xeb\xc8\x52\xb9\xd7\x76\x54\xde\x78\x33\xfa\xd3\xba\x21\x38\x97\x66\xd6\xea\x94\x52\xd4\x3a\x48\xa3\x68\x33\x1a\xc0\x3b\x25\x7b\x5f\x58\xeb\x13\x56\x8f\xc2\x88\x7b\x98\xb1\x6e\xad\x31\x0e\x78\x6c\x96\x3a\x8a\x0c\xd5\x6a\x1b\xa1\xc1\xad\xd5\xe6\xaf\xae\x19\xc8\x9e\x8b\x4d\x1b\x2c\xf7\xb8\x68\x79\x7c\xe0\xba\xed\x80\xe5\x13\x32\x7e\x79\xad\x4f\xc8\x38\x02\x23\x76\x43\x18\x17\x43\x23\x42\x98\xe6\x59\xec\xad\x07\x9a\x9c\xf5\x6d\x9e\x2f\x56\xa9\x60\xd1\x7e\xd7\x29\x90\xf1\xde\xe9\x5e\xba\xf3\x56\xc5\x77\x3e\x86\xcb\x95\x67\x4e\x93\xd3\x15\xcb\x28\x20\xea\xab\xdc\xa3\xfe\x56\xaf\x58\x6e\x43\xa5\x5d\x4f\xf6\x3c\x24\x7c\xc1\x03\xbe\xac\xc7\x91\x9c\xf3\x79\x20\x3a\x81\xd0\x08\x2c\x18\x98\x27\x65\xfe\x73\x7f\xd2\xa5\xaf\x19\x50\xdb\x33\x25\x2a\x85\x4e\xe3\x42\xce\xb0\x14\xa9\x60\xfa\xa2\xb9\x51\xde\xeb\x31\x93\xa2\x1f\x32\x1d\x4e\xe9\xd0\x28\x90\xe8\xde\x44\xef\x8e\x09\xd1\x8e\x29\xd1\xce\x49\xd1\xee\x69\xd1\xc1\x6b\x4f\xf2\x68\xdf\x0d\x62\x6e\xbb\xb8\xc8\xe3\x77\x2c\x17\x16\xb9\x3e\x5f\x63\xed\x49\x53\xf7\xd3\xa1\xdb\x09\xc2\xf7\xb1\xa0\xe7\x24\xbf\x08\xd7\xaf\xec\x24\x7f\x78\xed\x49\x03\xe6\x8e\x63\x52\x67\x52\x38\x6c\x87\x5a\x24\x66\x77\xbf\x35\x2d\x1c\xe2\xc8\x7b\xd2\x56\xec\x3b\x01\xc8\x18\x77\xa3\x85\x77\x9e\xb6\xa1\x07\x3f\xac\xef\xaf\x3d\xb9\x9b\x14\x2e\xaf\x3d\xa1\x23\x4d\xe5\x0e\x52\x7b\x52\xe0\xdc\x58\x6a\x4f\x4e\xc9\xde\x18\xb4\x3e\x61\xf5\x28\x8c\xb8\x87\x19\x6b\x77\xed\xc9\x28\x32\xd4\xdb\x6b\x4f\xf6\x5b\x6c\x76\xac\x3d\x29\x8f\x0f\x4e\xb5\x27\x27\x64\x3c\xac\x05\xf7\x00\x19\xf7\xac\x3d\x19\x09\xc2\xec\x79\xa7\x52\xbe\xb1\x6c\x39\xee\x5c\x5a\xf9\x39\xb0\x64\xc0\x93\x49\x35\x9b\x04\xfd\x37\xc4\x67\x15\xbd\x71\x01\x2b\x47\x96\x35\xfa\x87\xe7\x52\xc5\xc4\x2c\xe0\xe7\x7f\xbe\x3d\xcb\x0d\xcc\x84\xbe\x72\xb7\x20\x6f\x30\x40\x85\x82\x62\x5d\xba\xbf\x22\xc9\x9a\x12\x65\x5d\xdd\xf0\x2a\xce\x71\x56\x1d\x27\xcf\xa4\x8d\xe2\x62\x5d\x34\x7f\xe0\xe2\x76\xa2\xd0\x0e\x50\x1f\xd1\x0b\x5e\x9e\xf4\x0e\xd4\x6d\x50\xc7\x09\x59\xe3\x36\x11\x17\x06\xd7\x15\x4f\xd2\xfc\xf3\x00\x2a\x23\x0d\x89\x6e\x23\x2b\x76\x16\x95\x15\xc5\x6a\x5a\x79\xb4\x3a\x55\x1e\x6d\xe7\x95\x47\xd7\x4b\xe5\x99\x1b\x8c\x7d\xd8\x3a\x27\xcc\xe5\x92\x28\x7a\x15\xf4\x7b\x60\xee\xbc\x0d\x17\x28\x4b\x14\x5a\x06\xba\x7d\xa8\x6d\xa4\x31\xac\x87\x4c\xeb\x70\x5b\xfb\xc9\x56\xcc\x75\x90\x16\xc8\xba\xac\xbb\x59\x0b\x83\x33\xbd\xea\x23\x3b\x98\x5f\xbd\x84\xdb\xc9\x66\x37\xf2\x6d\x8a\xb9\xbb\xc6\x5a\x7b\x0b\xe9\x60\x40\xc9\x0b\x17\x8e\x34\xb3\x82\xc4\xc3\x66\x36\xc7\xdf\xe5\x60\x8e\xfc\xd7\x1a\x5a\x68\x9b\xb1\x05\xfe\xbc\x13\xd9\x92\x98\x41\xb2\x01\x82\x0c\xf4\xec\xce\xf7\xc2\xf0\xb8\x5a\x94\x98\xed\x87\x0f\x23\x2c\xcb\xe2\x0e\x23\x2c\x26\x82\x07\xa8\x5b\x45\x35\xe6\x2b\xef\x79\x29\xfd\xda\x38\x84\xc3\x1b\xbe\xd4\x46\x11\x83\xeb\xcd\x20\x1e\x6d\x88\x49\x5b\x1d\xbd\x42\x5a\xfd\x11\x85\xfb\x12\x84\xf5\x2f\x65\xda\xbe\x0a\xda\x71\x49\x6a\x71\xf8\x76\x77\x6f\xf3\x82\xd6\x41\xe9\xf4\x80\x56\xea\x9e\xd9\xef\x9c\xd0\xb2\x70\xf3\xbe\x4d\x6b\xb5\x12\xac\xde\x76\x82\xda\xdf\x12\xd4\xfe\x1a\x3f\x3b\x18\x30\xe7\xca\x2c\xa9\x14\x01\x5f\xdf\x81\x4e\x83\x60\x3c\x3f\x9a\x68\x8d\x80\x3d\x63\xa0\x33\x0a\xba\xe2\xa0\x2d\x12\x7a\xe6\x38\x22\x2b\x8c\x86\x8e\x82\x33\x8a\x31\x6e\x27\x86\x44\xaf\x3b\xfa\xef\xed\xaf\x2b\x3c\x7a\x58\xfa\x1d\xb1\x3b\x48\xf6\x10\x59\xad\x2d\xdb\x6b\x16\xeb\x45\x69\x3b\x4f\x5d\x8f\x4b\x6e\xfb\x6f\x07\xf9\x2e\x97\x08\x6d\x17\x26\x3b\x2e\xcb\xdb\x0e\xd4\x61\xf3\xed\x8e\xd3\x98\xae\xe6\x61\x40\xb9\x91\x71\x1e\x5e\x5e\x3b\x73\xb1\x80\x84\x98\x30\x7b\xac\x1d\x79\xbc\x0d\x11\x38\xf3\xdf\x75\x50\xa9\x72\x96\xd6\x3b\xaa\xe6\xe1\xc5\x96\xfb\x54\x37\xbc\x5e\x87\xca\x76\xd3\x6a\xf1\x31\x45\xb5\x69\x53\xe3\x35\x59\x23\x88\x34\x5e\xa1\x2a\x75\xf1\xc5\x9c\x9f\x42\x14\xb5\x06\xbc\xa1\x88\x4c\x57\x4e\x98\x6c\x2f\xd5\xad\x6c\xbb\xa2\xcd\xb5\x88\x61\x40\xd2\xc8\x2c\xe0\x51\x99\x1a\x71\xc1\xe3\x34\x2e\x9b\xca\x71\x08\x48\xa4\xbd\xfc\xea\x86\xdd\x5b\x59\xe9\xba\xd7\xca\x5f\xc8\x8d\x15\xbf\x65\xa8\x06\x23\x41\xb9\x1a\xd6\x3d\x2d\xc8\x7e\x67\xae\x66\xc3\xbc\xcf\x06\x57\x4b\xd7\xb0\xc2\xb5\x75\xd8\xd1\x26\xa4\x61\xdd\x7f\x2f\x0a\x1d\x2e\xb3\xa9\xd1\xae\x80\xc4\x0b\x06\xaa\xb8\x41\xc5\xc9\xd4\x39\x9d\xde\x08\x43\x6e\xec\x18\x98\x90\xeb\xd2\x99\x81\x97\xe7\x84\x9a\xc7\x3c\x22\xca\x8e\x8e\x69\xb0\x20\x2c\x3f\x85\xa8\x70\x09\x34\x22\xa9\x46\xdb\x4a\x04\x5c\xfe\xfd\x85\x5b\x8b\x30\x46\x61\xce\xcb\xdc\x54\xe7\xc5\x2c\xd6\x54\x9d\x8b\x78\xaf\xa5\x00\x62\x8c\xe2\xab\xd4\xa0\x86\x19\x50\x19\xa5\xb1\xa8\x53\x11\x4a\x65\x2a\xcc\x14\x0a\x71\xcf\xa5\x02\xbc\x21\x71\x12\xe1\x39\x70\x01\xae\xd0\x30\x9b\x43\xc5\xf1\x1a\x2d\x28\x56\x79\xb5\x3f\x13\x25\x90\x6a\x54\x56\x78\x69\xa2\x21\xca\x9d\x30\x3a\x82\xab\x78\x73\xb5\x38\x2b\x5e\x5e\x5d\x5d\xe9\x8f\x51\xc5\x0a\xcf\x0c\x11\xff\x80\x30\x89\x37\x7f\x98\x54\x49\x4b\xbe\xb7\xdb\x83\x0e\x94\x08\x20\x91\x96\xb0\x42\x7f\x4a\x89\x0c\xa4\x0d\xac\xa8\xf6\x33\x09\xd3\x3d\x8c\xd4\xe9\xaa\x70\x03\xed\x01\x0f\x5d\xe1\xcb\x55\x20\xe5\x93\x15\x51\x57\xe7\x9d\x36\x55\x79\x97\x1e\x2b\xa7\x1f\x70\x03\x4f\x60\x12\x48\x39\x01\x22\x58\x2b\xcd\x35\x89\x52\xb4\x54\x2b\xa2\x3a\x46\xe1\x27\x3f\x7d\x55\xcf\x12\x13\x63\x41\xfa\x9a\x33\x64\xe7\x20\x15\x70\x4f\xe3\xa5\x71\x0d\x18\x27\x66\x73\x6e\xdb\xca\x23\xf7\xad\xb9\x34\x21\x31\xae\xc5\x4e\x08\x84\x44\x43\x82\x2a\xe6\xda\x26\xc1\x76\x80\x34\x22\x7c\xe2\x51\x04\xab\x72\x9e\x7d\x74\x23\x9b\x0e\xc5\xd2\xac\x78\xb5\x1e\xa2\x59\xe3\x1d\xc4\xa8\x9f\xdd\xd5\xe6\xe0\x51\x9a\x0b\x1e\x16\xa8\xab\xd4\xec\x1c\xac\x8d\x30\xdd\xd1\x81\x8b\x59\x75\xaf\xbd\xdf\xe6\x81\x36\x20\x14\x89\xa6\xed\xde\xf7\x4a\xed\xd7\x27\x2c\x89\x60\x4b\x08\xb8\xd2\x06\x86\x2b\x71\xee\x39\x5e\xf6\xea\x74\xa8\x88\x10\x12\xf0\x26\x89\x38\xe5\xc6\x9b\xe0\x01\xcc\x79\x7c\x0e\x2e\x83\x1d\xdd\xd7\x5c\xd7\xfd\xdc\xb7\x1d\xc6\xcd\x53\xa7\x8f\x76\xf7\xaf\x71\x4c\x2e\x34\x5a\xfb\x2d\xe6\xe5\xdf\x8a\xf8\xde\xec\x2c\xad\x70\x2b\x50\x01\x9e\xfb\xd7\x32\xb0\x40\x74\xa1\x8d\x4a\xa9\x49\x95\x95\x28\x5c\xe2\xe4\x32\x4f\x6d\x67\x03\x1e\x17\x6f\xbf\x9f\x3e\x76\x62\xbf\x07\x21\x8d\x3b\x68\x2e\x05\x3e\xd6\x26\x27\xfa\x06\x62\x24\x42\x3b\xaf\x70\xf4\x4e\x20\x14\x62\x0a\x9e\x1f\xbd\x23\x2f\xbc\x57\x13\x1a\xc2\x65\x05\x15\xad\xee\x6b\x34\xc0\xd9\xb9\xbb\xee\x38\x87\x24\x22\xe2\x01\x67\x4e\xc7\x0f\x5c\xb0\x87\xee\x2f\x0f\x9e\xf0\xa0\xe8\x4e\x3f\xac\x79\x57\xf1\xb7\xa4\xb1\x13\x58\x87\xf6\x8b\x8b\xd2\x75\x3c\xfb\x13\xce\xce\x5d\x87\xb6\xbf\x29\x67\xfe\x7f\xdb\xe1\x79\x06\xd4\xdf\xd4\xb9\xd0\xd0\xf0\x85\x7b\xf3\xa4\x56\xfd\x54\x76\xde\xeb\x30\xff\x0f\x00\x00\xff\xff\x5d\x61\x06\x2e\xdb\x57\x00\x00") func openapiYamlBytes() ([]byte, error) { return bindataRead( @@ -92,7 +92,7 @@ func openapiYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "openapi.yaml", size: 22337, mode: os.FileMode(493), modTime: time.Unix(1717126081, 0)} + info := bindataFileInfo{name: "openapi.yaml", size: 22491, mode: os.FileMode(493), modTime: time.Unix(1717557372, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml index 1da772aa..6f13455d 100755 --- a/openapi/openapi.yaml +++ b/openapi/openapi.yaml @@ -581,6 +581,9 @@ components: updated_at: type: string format: date-time + deleted_at: + type: string + format: date-time manifest: type: object delete_option: @@ -635,6 +638,9 @@ components: updated_at: type: string format: date-time + deleted_at: + type: string + format: date-time manifests: type: array items: diff --git a/pkg/api/openapi/api/openapi.yaml b/pkg/api/openapi/api/openapi.yaml index fa69af04..0cb3048a 100644 --- a/pkg/api/openapi/api/openapi.yaml +++ b/pkg/api/openapi/api/openapi.yaml @@ -1001,6 +1001,9 @@ components: updated_at: format: date-time type: string + deleted_at: + format: date-time + type: string manifest: type: object delete_option: @@ -1041,6 +1044,9 @@ components: updated_at: format: date-time type: string + deleted_at: + format: date-time + type: string manifests: items: type: object diff --git a/pkg/api/openapi/docs/Resource.md b/pkg/api/openapi/docs/Resource.md index 0736ecc4..a97f6bec 100644 --- a/pkg/api/openapi/docs/Resource.md +++ b/pkg/api/openapi/docs/Resource.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **Version** | Pointer to **int32** | | [optional] **CreatedAt** | Pointer to **time.Time** | | [optional] **UpdatedAt** | Pointer to **time.Time** | | [optional] +**DeletedAt** | Pointer to **time.Time** | | [optional] **Manifest** | Pointer to **map[string]interface{}** | | [optional] **DeleteOption** | Pointer to **map[string]interface{}** | | [optional] **UpdateStrategy** | Pointer to **map[string]interface{}** | | [optional] @@ -236,6 +237,31 @@ SetUpdatedAt sets UpdatedAt field to given value. HasUpdatedAt returns a boolean if a field has been set. +### GetDeletedAt + +`func (o *Resource) GetDeletedAt() time.Time` + +GetDeletedAt returns the DeletedAt field if non-nil, zero value otherwise. + +### GetDeletedAtOk + +`func (o *Resource) GetDeletedAtOk() (*time.Time, bool)` + +GetDeletedAtOk returns a tuple with the DeletedAt field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetDeletedAt + +`func (o *Resource) SetDeletedAt(v time.Time)` + +SetDeletedAt sets DeletedAt field to given value. + +### HasDeletedAt + +`func (o *Resource) HasDeletedAt() bool` + +HasDeletedAt returns a boolean if a field has been set. + ### GetManifest `func (o *Resource) GetManifest() map[string]interface{}` diff --git a/pkg/api/openapi/docs/ResourceAllOf.md b/pkg/api/openapi/docs/ResourceAllOf.md index 7a0f972c..ed03f0f1 100644 --- a/pkg/api/openapi/docs/ResourceAllOf.md +++ b/pkg/api/openapi/docs/ResourceAllOf.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **Version** | Pointer to **int32** | | [optional] **CreatedAt** | Pointer to **time.Time** | | [optional] **UpdatedAt** | Pointer to **time.Time** | | [optional] +**DeletedAt** | Pointer to **time.Time** | | [optional] **Manifest** | Pointer to **map[string]interface{}** | | [optional] **DeleteOption** | Pointer to **map[string]interface{}** | | [optional] **UpdateStrategy** | Pointer to **map[string]interface{}** | | [optional] @@ -158,6 +159,31 @@ SetUpdatedAt sets UpdatedAt field to given value. HasUpdatedAt returns a boolean if a field has been set. +### GetDeletedAt + +`func (o *ResourceAllOf) GetDeletedAt() time.Time` + +GetDeletedAt returns the DeletedAt field if non-nil, zero value otherwise. + +### GetDeletedAtOk + +`func (o *ResourceAllOf) GetDeletedAtOk() (*time.Time, bool)` + +GetDeletedAtOk returns a tuple with the DeletedAt field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetDeletedAt + +`func (o *ResourceAllOf) SetDeletedAt(v time.Time)` + +SetDeletedAt sets DeletedAt field to given value. + +### HasDeletedAt + +`func (o *ResourceAllOf) HasDeletedAt() bool` + +HasDeletedAt returns a boolean if a field has been set. + ### GetManifest `func (o *ResourceAllOf) GetManifest() map[string]interface{}` diff --git a/pkg/api/openapi/docs/ResourceBundle.md b/pkg/api/openapi/docs/ResourceBundle.md index 29ee9474..354756e5 100644 --- a/pkg/api/openapi/docs/ResourceBundle.md +++ b/pkg/api/openapi/docs/ResourceBundle.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **Version** | Pointer to **int32** | | [optional] **CreatedAt** | Pointer to **time.Time** | | [optional] **UpdatedAt** | Pointer to **time.Time** | | [optional] +**DeletedAt** | Pointer to **time.Time** | | [optional] **Manifests** | Pointer to **[]map[string]interface{}** | | [optional] **DeleteOption** | Pointer to **map[string]interface{}** | | [optional] **ManifestConfigs** | Pointer to **[]map[string]interface{}** | | [optional] @@ -236,6 +237,31 @@ SetUpdatedAt sets UpdatedAt field to given value. HasUpdatedAt returns a boolean if a field has been set. +### GetDeletedAt + +`func (o *ResourceBundle) GetDeletedAt() time.Time` + +GetDeletedAt returns the DeletedAt field if non-nil, zero value otherwise. + +### GetDeletedAtOk + +`func (o *ResourceBundle) GetDeletedAtOk() (*time.Time, bool)` + +GetDeletedAtOk returns a tuple with the DeletedAt field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetDeletedAt + +`func (o *ResourceBundle) SetDeletedAt(v time.Time)` + +SetDeletedAt sets DeletedAt field to given value. + +### HasDeletedAt + +`func (o *ResourceBundle) HasDeletedAt() bool` + +HasDeletedAt returns a boolean if a field has been set. + ### GetManifests `func (o *ResourceBundle) GetManifests() []map[string]interface{}` diff --git a/pkg/api/openapi/docs/ResourceBundleAllOf.md b/pkg/api/openapi/docs/ResourceBundleAllOf.md index 127f8b4c..254a2c12 100644 --- a/pkg/api/openapi/docs/ResourceBundleAllOf.md +++ b/pkg/api/openapi/docs/ResourceBundleAllOf.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **Version** | Pointer to **int32** | | [optional] **CreatedAt** | Pointer to **time.Time** | | [optional] **UpdatedAt** | Pointer to **time.Time** | | [optional] +**DeletedAt** | Pointer to **time.Time** | | [optional] **Manifests** | Pointer to **[]map[string]interface{}** | | [optional] **DeleteOption** | Pointer to **map[string]interface{}** | | [optional] **ManifestConfigs** | Pointer to **[]map[string]interface{}** | | [optional] @@ -158,6 +159,31 @@ SetUpdatedAt sets UpdatedAt field to given value. HasUpdatedAt returns a boolean if a field has been set. +### GetDeletedAt + +`func (o *ResourceBundleAllOf) GetDeletedAt() time.Time` + +GetDeletedAt returns the DeletedAt field if non-nil, zero value otherwise. + +### GetDeletedAtOk + +`func (o *ResourceBundleAllOf) GetDeletedAtOk() (*time.Time, bool)` + +GetDeletedAtOk returns a tuple with the DeletedAt field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetDeletedAt + +`func (o *ResourceBundleAllOf) SetDeletedAt(v time.Time)` + +SetDeletedAt sets DeletedAt field to given value. + +### HasDeletedAt + +`func (o *ResourceBundleAllOf) HasDeletedAt() bool` + +HasDeletedAt returns a boolean if a field has been set. + ### GetManifests `func (o *ResourceBundleAllOf) GetManifests() []map[string]interface{}` diff --git a/pkg/api/openapi/model_resource.go b/pkg/api/openapi/model_resource.go index 8dbc705d..4e155383 100644 --- a/pkg/api/openapi/model_resource.go +++ b/pkg/api/openapi/model_resource.go @@ -28,6 +28,7 @@ type Resource struct { Version *int32 `json:"version,omitempty"` CreatedAt *time.Time `json:"created_at,omitempty"` UpdatedAt *time.Time `json:"updated_at,omitempty"` + DeletedAt *time.Time `json:"deleted_at,omitempty"` Manifest map[string]interface{} `json:"manifest,omitempty"` DeleteOption map[string]interface{} `json:"delete_option,omitempty"` UpdateStrategy map[string]interface{} `json:"update_strategy,omitempty"` @@ -307,6 +308,38 @@ func (o *Resource) SetUpdatedAt(v time.Time) { o.UpdatedAt = &v } +// GetDeletedAt returns the DeletedAt field value if set, zero value otherwise. +func (o *Resource) GetDeletedAt() time.Time { + if o == nil || IsNil(o.DeletedAt) { + var ret time.Time + return ret + } + return *o.DeletedAt +} + +// GetDeletedAtOk returns a tuple with the DeletedAt field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Resource) GetDeletedAtOk() (*time.Time, bool) { + if o == nil || IsNil(o.DeletedAt) { + return nil, false + } + return o.DeletedAt, true +} + +// HasDeletedAt returns a boolean if a field has been set. +func (o *Resource) HasDeletedAt() bool { + if o != nil && !IsNil(o.DeletedAt) { + return true + } + + return false +} + +// SetDeletedAt gets a reference to the given time.Time and assigns it to the DeletedAt field. +func (o *Resource) SetDeletedAt(v time.Time) { + o.DeletedAt = &v +} + // GetManifest returns the Manifest field value if set, zero value otherwise. func (o *Resource) GetManifest() map[string]interface{} { if o == nil || IsNil(o.Manifest) { @@ -469,6 +502,9 @@ func (o Resource) ToMap() (map[string]interface{}, error) { if !IsNil(o.UpdatedAt) { toSerialize["updated_at"] = o.UpdatedAt } + if !IsNil(o.DeletedAt) { + toSerialize["deleted_at"] = o.DeletedAt + } if !IsNil(o.Manifest) { toSerialize["manifest"] = o.Manifest } diff --git a/pkg/api/openapi/model_resource_all_of.go b/pkg/api/openapi/model_resource_all_of.go index 79d99f8d..233fda37 100644 --- a/pkg/api/openapi/model_resource_all_of.go +++ b/pkg/api/openapi/model_resource_all_of.go @@ -25,6 +25,7 @@ type ResourceAllOf struct { Version *int32 `json:"version,omitempty"` CreatedAt *time.Time `json:"created_at,omitempty"` UpdatedAt *time.Time `json:"updated_at,omitempty"` + DeletedAt *time.Time `json:"deleted_at,omitempty"` Manifest map[string]interface{} `json:"manifest,omitempty"` DeleteOption map[string]interface{} `json:"delete_option,omitempty"` UpdateStrategy map[string]interface{} `json:"update_strategy,omitempty"` @@ -208,6 +209,38 @@ func (o *ResourceAllOf) SetUpdatedAt(v time.Time) { o.UpdatedAt = &v } +// GetDeletedAt returns the DeletedAt field value if set, zero value otherwise. +func (o *ResourceAllOf) GetDeletedAt() time.Time { + if o == nil || IsNil(o.DeletedAt) { + var ret time.Time + return ret + } + return *o.DeletedAt +} + +// GetDeletedAtOk returns a tuple with the DeletedAt field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ResourceAllOf) GetDeletedAtOk() (*time.Time, bool) { + if o == nil || IsNil(o.DeletedAt) { + return nil, false + } + return o.DeletedAt, true +} + +// HasDeletedAt returns a boolean if a field has been set. +func (o *ResourceAllOf) HasDeletedAt() bool { + if o != nil && !IsNil(o.DeletedAt) { + return true + } + + return false +} + +// SetDeletedAt gets a reference to the given time.Time and assigns it to the DeletedAt field. +func (o *ResourceAllOf) SetDeletedAt(v time.Time) { + o.DeletedAt = &v +} + // GetManifest returns the Manifest field value if set, zero value otherwise. func (o *ResourceAllOf) GetManifest() map[string]interface{} { if o == nil || IsNil(o.Manifest) { @@ -361,6 +394,9 @@ func (o ResourceAllOf) ToMap() (map[string]interface{}, error) { if !IsNil(o.UpdatedAt) { toSerialize["updated_at"] = o.UpdatedAt } + if !IsNil(o.DeletedAt) { + toSerialize["deleted_at"] = o.DeletedAt + } if !IsNil(o.Manifest) { toSerialize["manifest"] = o.Manifest } diff --git a/pkg/api/openapi/model_resource_bundle.go b/pkg/api/openapi/model_resource_bundle.go index e363b5c5..15e11398 100644 --- a/pkg/api/openapi/model_resource_bundle.go +++ b/pkg/api/openapi/model_resource_bundle.go @@ -28,6 +28,7 @@ type ResourceBundle struct { Version *int32 `json:"version,omitempty"` CreatedAt *time.Time `json:"created_at,omitempty"` UpdatedAt *time.Time `json:"updated_at,omitempty"` + DeletedAt *time.Time `json:"deleted_at,omitempty"` Manifests []map[string]interface{} `json:"manifests,omitempty"` DeleteOption map[string]interface{} `json:"delete_option,omitempty"` ManifestConfigs []map[string]interface{} `json:"manifest_configs,omitempty"` @@ -307,6 +308,38 @@ func (o *ResourceBundle) SetUpdatedAt(v time.Time) { o.UpdatedAt = &v } +// GetDeletedAt returns the DeletedAt field value if set, zero value otherwise. +func (o *ResourceBundle) GetDeletedAt() time.Time { + if o == nil || IsNil(o.DeletedAt) { + var ret time.Time + return ret + } + return *o.DeletedAt +} + +// GetDeletedAtOk returns a tuple with the DeletedAt field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ResourceBundle) GetDeletedAtOk() (*time.Time, bool) { + if o == nil || IsNil(o.DeletedAt) { + return nil, false + } + return o.DeletedAt, true +} + +// HasDeletedAt returns a boolean if a field has been set. +func (o *ResourceBundle) HasDeletedAt() bool { + if o != nil && !IsNil(o.DeletedAt) { + return true + } + + return false +} + +// SetDeletedAt gets a reference to the given time.Time and assigns it to the DeletedAt field. +func (o *ResourceBundle) SetDeletedAt(v time.Time) { + o.DeletedAt = &v +} + // GetManifests returns the Manifests field value if set, zero value otherwise. func (o *ResourceBundle) GetManifests() []map[string]interface{} { if o == nil || IsNil(o.Manifests) { @@ -469,6 +502,9 @@ func (o ResourceBundle) ToMap() (map[string]interface{}, error) { if !IsNil(o.UpdatedAt) { toSerialize["updated_at"] = o.UpdatedAt } + if !IsNil(o.DeletedAt) { + toSerialize["deleted_at"] = o.DeletedAt + } if !IsNil(o.Manifests) { toSerialize["manifests"] = o.Manifests } diff --git a/pkg/api/openapi/model_resource_bundle_all_of.go b/pkg/api/openapi/model_resource_bundle_all_of.go index 88fc764a..0eee6e65 100644 --- a/pkg/api/openapi/model_resource_bundle_all_of.go +++ b/pkg/api/openapi/model_resource_bundle_all_of.go @@ -25,6 +25,7 @@ type ResourceBundleAllOf struct { Version *int32 `json:"version,omitempty"` CreatedAt *time.Time `json:"created_at,omitempty"` UpdatedAt *time.Time `json:"updated_at,omitempty"` + DeletedAt *time.Time `json:"deleted_at,omitempty"` Manifests []map[string]interface{} `json:"manifests,omitempty"` DeleteOption map[string]interface{} `json:"delete_option,omitempty"` ManifestConfigs []map[string]interface{} `json:"manifest_configs,omitempty"` @@ -208,6 +209,38 @@ func (o *ResourceBundleAllOf) SetUpdatedAt(v time.Time) { o.UpdatedAt = &v } +// GetDeletedAt returns the DeletedAt field value if set, zero value otherwise. +func (o *ResourceBundleAllOf) GetDeletedAt() time.Time { + if o == nil || IsNil(o.DeletedAt) { + var ret time.Time + return ret + } + return *o.DeletedAt +} + +// GetDeletedAtOk returns a tuple with the DeletedAt field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ResourceBundleAllOf) GetDeletedAtOk() (*time.Time, bool) { + if o == nil || IsNil(o.DeletedAt) { + return nil, false + } + return o.DeletedAt, true +} + +// HasDeletedAt returns a boolean if a field has been set. +func (o *ResourceBundleAllOf) HasDeletedAt() bool { + if o != nil && !IsNil(o.DeletedAt) { + return true + } + + return false +} + +// SetDeletedAt gets a reference to the given time.Time and assigns it to the DeletedAt field. +func (o *ResourceBundleAllOf) SetDeletedAt(v time.Time) { + o.DeletedAt = &v +} + // GetManifests returns the Manifests field value if set, zero value otherwise. func (o *ResourceBundleAllOf) GetManifests() []map[string]interface{} { if o == nil || IsNil(o.Manifests) { @@ -361,6 +394,9 @@ func (o ResourceBundleAllOf) ToMap() (map[string]interface{}, error) { if !IsNil(o.UpdatedAt) { toSerialize["updated_at"] = o.UpdatedAt } + if !IsNil(o.DeletedAt) { + toSerialize["deleted_at"] = o.DeletedAt + } if !IsNil(o.Manifests) { toSerialize["manifests"] = o.Manifests } diff --git a/pkg/api/presenters/resource.go b/pkg/api/presenters/resource.go index b3e18093..a980bc42 100755 --- a/pkg/api/presenters/resource.go +++ b/pkg/api/presenters/resource.go @@ -48,7 +48,7 @@ func PresentResource(resource *api.Resource) (*openapi.Resource, error) { return nil, err } reference := PresentReference(resource.ID, resource) - return &openapi.Resource{ + res := &openapi.Resource{ Id: reference.Id, Kind: reference.Kind, Href: reference.Href, @@ -61,7 +61,14 @@ func PresentResource(resource *api.Resource) (*openapi.Resource, error) { DeleteOption: deleteOption, UpdateStrategy: updateStrategy, Status: status, - }, nil + } + + // set the deletedAt field if the resource has been marked as deleted + if !resource.DeletedAt.Time.IsZero() { + res.DeletedAt = openapi.PtrTime(resource.DeletedAt.Time) + } + + return res, nil } // PresentResourceBundle converts a resource from the API to the openapi representation. @@ -115,7 +122,7 @@ func PresentResourceBundle(resource *api.Resource) (*openapi.ResourceBundle, err } manifestConfigs = append(manifestConfigs, m) } - return &openapi.ResourceBundle{ + res := &openapi.ResourceBundle{ Id: reference.Id, Kind: reference.Kind, Href: reference.Href, @@ -128,5 +135,12 @@ func PresentResourceBundle(resource *api.Resource) (*openapi.ResourceBundle, err DeleteOption: deleteOption, ManifestConfigs: manifestConfigs, Status: status, - }, nil + } + + // set the deletedAt field if the resource has been marked as deleted + if !resource.DeletedAt.Time.IsZero() { + res.DeletedAt = openapi.PtrTime(resource.DeletedAt.Time) + } + + return res, nil } diff --git a/pkg/api/resource_bundle_types_test.go b/pkg/api/resource_bundle_types_test.go index abefa0b7..a021ca99 100644 --- a/pkg/api/resource_bundle_types_test.go +++ b/pkg/api/resource_bundle_types_test.go @@ -71,7 +71,7 @@ func TestDecodeManifestBundle(t *testing.T) { } if c.expected != nil && got != nil { if !equality.Semantic.DeepDerivative(c.expected.Manifests[1], got.Manifests[1]) { - t.Errorf("==== expected Manifests %s but got: %s", c.expected.Manifests[1].RawExtension.Raw, got.Manifests[1].RawExtension.Raw) + t.Errorf("expected Manifests %s but got: %s", c.expected.Manifests[1].RawExtension.Raw, got.Manifests[1].RawExtension.Raw) } } if !equality.Semantic.DeepDerivative(c.expected, got) { diff --git a/pkg/client/cloudevents/source_client.go b/pkg/client/cloudevents/source_client.go index 1c38cf65..52563fb2 100644 --- a/pkg/client/cloudevents/source_client.go +++ b/pkg/client/cloudevents/source_client.go @@ -5,7 +5,6 @@ import ( "crypto/sha256" "encoding/json" "fmt" - "time" "github.com/openshift-online/maestro/pkg/api" "github.com/openshift-online/maestro/pkg/logger" @@ -107,8 +106,10 @@ func (s *SourceClientImpl) OnDelete(ctx context.Context, id string) error { return err } - // mark the resource as deleting - resource.Meta.DeletedAt.Time = time.Now() + // ensure the resource has been marked as deleting + if resource.Meta.DeletedAt.Time.IsZero() { + return fmt.Errorf("resource %s has not been marked as deleting", resource.ID) + } logger.Infof("Publishing resource %s for db row delete", resource.ID) eventType := cetypes.CloudEventsType{ CloudEventsDataType: s.Codec.EventDataType(), diff --git a/pkg/dao/generic.go b/pkg/dao/generic.go index 96de1947..d033a978 100755 --- a/pkg/dao/generic.go +++ b/pkg/dao/generic.go @@ -54,7 +54,7 @@ func (d *sqlGenericDao) GetInstanceDao(ctx context.Context, model interface{}) G } func (d *sqlGenericDao) Fetch(offset int, limit int, resourceList interface{}) error { - return d.g2.Debug().Offset(offset).Limit(limit).Find(resourceList).Error + return d.g2.Debug().Unscoped().Offset(offset).Limit(limit).Find(resourceList).Error } func (d *sqlGenericDao) Preload(preload string) { @@ -92,7 +92,7 @@ func (d *sqlGenericDao) Count(model interface{}, total *int64) { if okl { delete(g2.Statement.Clauses, "LIMIT") } - g2.Count(total) + g2.Unscoped().Count(total) if oko { g2.Statement.Clauses["ORDER BY"] = order } diff --git a/pkg/dao/mocks/resource.go b/pkg/dao/mocks/resource.go index 8b841602..4b3565db 100755 --- a/pkg/dao/mocks/resource.go +++ b/pkg/dao/mocks/resource.go @@ -50,7 +50,7 @@ func (d *resourceDaoMock) Update(ctx context.Context, resource *api.Resource) (* return nil, errors.NotImplemented("Resource").AsError() } -func (d *resourceDaoMock) Delete(ctx context.Context, id string) error { +func (d *resourceDaoMock) Delete(ctx context.Context, id string, unscoped bool) error { return errors.NotImplemented("Resource").AsError() } diff --git a/pkg/dao/resource.go b/pkg/dao/resource.go index ccfcfba4..fabf9add 100755 --- a/pkg/dao/resource.go +++ b/pkg/dao/resource.go @@ -14,7 +14,7 @@ type ResourceDao interface { GetBundle(ctx context.Context, id string) (*api.Resource, error) Create(ctx context.Context, resource *api.Resource) (*api.Resource, error) Update(ctx context.Context, resource *api.Resource) (*api.Resource, error) - Delete(ctx context.Context, id string) error + Delete(ctx context.Context, id string, unscoped bool) error FindByIDs(ctx context.Context, ids []string) (api.ResourceList, error) FindBySource(ctx context.Context, source string) (api.ResourceList, error) FindByConsumerName(ctx context.Context, consumerName string) (api.ResourceList, error) @@ -34,7 +34,7 @@ func NewResourceDao(sessionFactory *db.SessionFactory) ResourceDao { func (d *sqlResourceDao) Get(ctx context.Context, id string) (*api.Resource, error) { g2 := (*d.sessionFactory).New(ctx) var resource api.Resource - if err := g2.Take(&resource, "id = ?", id).Error; err != nil { + if err := g2.Unscoped().Take(&resource, "id = ?", id).Error; err != nil { return nil, err } return &resource, nil @@ -43,7 +43,7 @@ func (d *sqlResourceDao) Get(ctx context.Context, id string) (*api.Resource, err func (d *sqlResourceDao) GetBundle(ctx context.Context, id string) (*api.Resource, error) { g2 := (*d.sessionFactory).New(ctx) var resource api.Resource - if err := g2.Take(&resource, "id = ? AND type = ?", id, api.ResourceTypeBundle).Error; err != nil { + if err := g2.Unscoped().Take(&resource, "id = ? AND type = ?", id, api.ResourceTypeBundle).Error; err != nil { return nil, err } return &resource, nil @@ -67,8 +67,12 @@ func (d *sqlResourceDao) Update(ctx context.Context, resource *api.Resource) (*a return resource, nil } -func (d *sqlResourceDao) Delete(ctx context.Context, id string) error { +func (d *sqlResourceDao) Delete(ctx context.Context, id string, unscoped bool) error { g2 := (*d.sessionFactory).New(ctx) + if unscoped { + // Unscoped is used to permanently delete the record + g2 = g2.Unscoped() + } if err := g2.Omit(clause.Associations).Delete(&api.Resource{Meta: api.Meta{ID: id}}).Error; err != nil { db.MarkForRollback(ctx, err) return err @@ -79,7 +83,7 @@ func (d *sqlResourceDao) Delete(ctx context.Context, id string) error { func (d *sqlResourceDao) FindByIDs(ctx context.Context, ids []string) (api.ResourceList, error) { g2 := (*d.sessionFactory).New(ctx) resources := api.ResourceList{} - if err := g2.Where("id in (?)", ids).Find(&resources).Error; err != nil { + if err := g2.Unscoped().Where("id in (?)", ids).Find(&resources).Error; err != nil { return nil, err } return resources, nil @@ -88,7 +92,7 @@ func (d *sqlResourceDao) FindByIDs(ctx context.Context, ids []string) (api.Resou func (d *sqlResourceDao) FindBySource(ctx context.Context, source string) (api.ResourceList, error) { g2 := (*d.sessionFactory).New(ctx) resources := api.ResourceList{} - if err := g2.Where("source = ?", source).Find(&resources).Error; err != nil { + if err := g2.Unscoped().Where("source = ?", source).Find(&resources).Error; err != nil { return nil, err } return resources, nil @@ -97,7 +101,7 @@ func (d *sqlResourceDao) FindBySource(ctx context.Context, source string) (api.R func (d *sqlResourceDao) FindByConsumerName(ctx context.Context, consumerName string) (api.ResourceList, error) { g2 := (*d.sessionFactory).New(ctx) resources := api.ResourceList{} - if err := g2.Where("consumer_name = ?", consumerName).Find(&resources).Error; err != nil { + if err := g2.Unscoped().Where("consumer_name = ?", consumerName).Find(&resources).Error; err != nil { return nil, err } return resources, nil @@ -106,7 +110,7 @@ func (d *sqlResourceDao) FindByConsumerName(ctx context.Context, consumerName st func (d *sqlResourceDao) All(ctx context.Context) (api.ResourceList, error) { g2 := (*d.sessionFactory).New(ctx) resources := api.ResourceList{} - if err := g2.Find(&resources).Error; err != nil { + if err := g2.Unscoped().Find(&resources).Error; err != nil { return nil, err } return resources, nil diff --git a/pkg/services/resource.go b/pkg/services/resource.go index a87c7492..00cc1955 100755 --- a/pkg/services/resource.go +++ b/pkg/services/resource.go @@ -214,20 +214,23 @@ func (s *sqlResourceService) UpdateStatus(ctx context.Context, resource *api.Res return updated, true, nil } -// MarkAsDeleting marks the resource as deleting by setting the deleted_at timestamp. +// MarkAsDeleting marks the resource as deleting by setting the delete_at timestamp. // The Resource Deletion Flow: // 1. User requests deletion -// 2. Maestro marks resource as deleting, adds delete event to DB +// 2. Maestro marks resource as deleting by soft delete, adds delete event to DB // 3. Maestro handles delete event and sends CloudEvent to work-agent // 4. Work-agent deletes resource, sends CloudEvent back to Maestro -// 5. Maestro deletes resource from DB +// 5. Maestro hard deletes resource from DB func (s *sqlResourceService) MarkAsDeleting(ctx context.Context, id string) *errors.ServiceError { - _, err := s.events.Create(ctx, &api.Event{ + if err := s.resourceDao.Delete(ctx, id, false); err != nil { + return handleDeleteError("Resource", errors.GeneralError("Unable to delete resource: %s", err)) + } + + if _, err := s.events.Create(ctx, &api.Event{ Source: "Resources", SourceID: id, EventType: api.DeleteEventType, - }) - if err != nil { + }); err != nil { return handleDeleteError("Resource", err) } @@ -235,7 +238,7 @@ func (s *sqlResourceService) MarkAsDeleting(ctx context.Context, id string) *err } func (s *sqlResourceService) Delete(ctx context.Context, id string) *errors.ServiceError { - if err := s.resourceDao.Delete(ctx, id); err != nil { + if err := s.resourceDao.Delete(ctx, id, true); err != nil { return handleDeleteError("Resource", errors.GeneralError("Unable to delete resource: %s", err)) }