Alexey Kim před 2 měsíci
rodič
revize
8bbeeb2e5b
15 změnil soubory, kde provedl 896 přidání a 1872 odebrání
  1. 0 0
      assistant_callback.go
  2. 20 8
      go.mod
  3. 105 44
      go.sum
  4. 67 31
      message.go
  5. 0 11
      role.go
  6. 51 47
      ticket.go
  7. 576 233
      ticket.pb.go
  8. 77 39
      ticket.proto
  9. 0 16
      v2/Makefile
  10. 0 29
      v2/go.mod
  11. 0 116
      v2/go.sum
  12. 0 87
      v2/message.go
  13. 0 75
      v2/ticket.go
  14. 0 1040
      v2/ticket.pb.go
  15. 0 96
      v2/ticket.proto

+ 0 - 0
v2/assistant_callback.go → assistant_callback.go


+ 20 - 8
go.mod

@@ -1,17 +1,29 @@
-module git.beejay.kim/Gshopper/ticket
+module git.beejay.kim/Gshopper/ticket/v2
 
-go 1.20
+go 1.21
+
+toolchain go1.21.4
 
 require (
-	github.com/confluentinc/confluent-kafka-go/v2 v2.3.0
-	github.com/google/uuid v1.4.0
+	github.com/ClickHouse/clickhouse-go/v2 v2.20.0
 	github.com/kelindar/bitmap v1.5.2
-	github.com/sashabaranov/go-openai v1.17.9
-	google.golang.org/protobuf v1.31.0
+	google.golang.org/protobuf v1.33.0
 )
 
 require (
+	github.com/ClickHouse/ch-go v0.61.3 // indirect
+	github.com/go-faster/city v1.0.1 // indirect
+	github.com/go-faster/errors v0.7.1 // indirect
+	github.com/google/uuid v1.6.0 // indirect
 	github.com/kelindar/simd v1.1.2 // indirect
-	github.com/klauspost/cpuid/v2 v2.2.5 // indirect
-	golang.org/x/sys v0.11.0 // indirect
+	github.com/klauspost/compress v1.17.7 // indirect
+	github.com/klauspost/cpuid/v2 v2.2.4 // indirect
+	github.com/paulmach/orb v0.11.1 // indirect
+	github.com/pierrec/lz4/v4 v4.1.21 // indirect
+	github.com/segmentio/asm v1.2.0 // indirect
+	github.com/shopspring/decimal v1.3.1 // indirect
+	go.opentelemetry.io/otel v1.24.0 // indirect
+	go.opentelemetry.io/otel/trace v1.24.0 // indirect
+	golang.org/x/sys v0.17.0 // indirect
+	gopkg.in/yaml.v3 v3.0.1 // indirect
 )

+ 105 - 44
go.sum

@@ -1,55 +1,116 @@
-github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
-github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA=
-github.com/Microsoft/hcsshim v0.9.4 h1:mnUj0ivWy6UzbB1uLFqKR6F+ZyiDc7j4iGgHTpO+5+I=
-github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
-github.com/confluentinc/confluent-kafka-go/v2 v2.3.0 h1:icCHutJouWlQREayFwCc7lxDAhws08td+W3/gdqgZts=
-github.com/confluentinc/confluent-kafka-go/v2 v2.3.0/go.mod h1:/VTy8iEpe6mD9pkCH5BhijlUl8ulUXymKv1Qig5Rgb8=
-github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA=
-github.com/containerd/containerd v1.6.8 h1:h4dOFDwzHmqFEP754PgfgTeVXFnLiRc6kiqC7tplDJs=
+github.com/ClickHouse/ch-go v0.61.3 h1:MmBwUhXrAOBZK7n/sWBzq6FdIQ01cuF2SaaO8KlDRzI=
+github.com/ClickHouse/ch-go v0.61.3/go.mod h1:1PqXjMz/7S1ZUaKvwPA3i35W2bz2mAMFeCi6DIXgGwQ=
+github.com/ClickHouse/clickhouse-go/v2 v2.20.0 h1:bvlLQ31XJfl7MxIqAq2l1G6JhHYzqEXdvfpMeU6bkKc=
+github.com/ClickHouse/clickhouse-go/v2 v2.20.0/go.mod h1:VQfyA+tCwCRw2G7ogfY8V0fq/r0yJWzy8UDrjiP/Lbs=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
-github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE=
-github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
-github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw=
+github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw=
+github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg=
+github.com/go-faster/errors v0.7.1/go.mod h1:5ySTjWFiphBs07IKuiL69nxdfd5+fzh1u7FPGZP2quo=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/kelindar/bitmap v1.5.2 h1:XwX7CTvJtetQZ64zrOkApoZZHBJRkjE23NfqUALA/HE=
 github.com/kelindar/bitmap v1.5.2/go.mod h1:j3qZjxH9s4OtvsnFTP2bmPkjqil9Y2xQlxPYHexasEA=
 github.com/kelindar/simd v1.1.2 h1:KduKb+M9cMY2HIH8S/cdJyD+5n5EGgq+Aeeleos55To=
 github.com/kelindar/simd v1.1.2/go.mod h1:inq4DFudC7W8L5fhxoeZflLRNpWSs0GNx6MlWFvuvr0=
-github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
-github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
-github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
-github.com/moby/sys/mount v0.3.3 h1:fX1SVkXFJ47XWDoeFW4Sq7PdQJnV2QIDZAqjNqgEjUs=
-github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
-github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc=
-github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
-github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
-github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 h1:rc3tiVYb5z54aKaDfakKn0dDjIyPpTtszkjuMzyt7ec=
-github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
+github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
+github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
+github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
+github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
+github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU=
+github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
+github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
+github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
+github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/sashabaranov/go-openai v1.17.9 h1:QEoBiGKWW68W79YIfXWEFZ7l5cEgZBV4/Ow3uy+5hNY=
-github.com/sashabaranov/go-openai v1.17.9/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
-github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
-github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
-github.com/testcontainers/testcontainers-go v0.14.0 h1:h0D5GaYG9mhOWr2qHdEKDXpkce/VlvaYOCzTRi6UBi8=
-go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
-golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
-golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
+github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
+github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
+github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
+github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
+github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
+github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
+github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
+go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
+go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
+go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
+go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
+golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633 h1:0BOZf6qNozI3pkN3fJLwNubheHJYHhMh91GRFOWWK08=
-google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

+ 67 - 31
message.go

@@ -1,51 +1,87 @@
 package ticket
 
 import (
-	"github.com/confluentinc/confluent-kafka-go/v2/kafka"
-	"github.com/google/uuid"
+	"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
 	"github.com/kelindar/bitmap"
+	"google.golang.org/protobuf/types/known/timestamppb"
+	"time"
 )
 
-func NewKafkaMessage(src *kafka.Message) *Message {
-	m := &Message{
-		Id:       uuid.NewString(),
-		Provider: MessageProvider_EmailMessageProvider,
-		Body:     string(src.Value),
-		Raw:      string(src.Value),
-		Date:     src.Timestamp.UnixMilli(),
-		Headers:  []*Message_Header{},
+func (x *Message) Scan(row driver.Rows) error {
+	var (
+		typ        int32
+		date       time.Time
+		aIds       []string
+		aFilenames []string
+		aTypes     []string
+		aEncodings []string
+		aBuckets   []string
+		aKeys      []string
+		err        error
+	)
+
+	if err = row.Scan(
+		&x.MessageId,
+		&x.TicketId,
+		&x.Role,
+		&typ,
+		&x.Content,
+		&date,
+		&x.Raw,
+		&x.Flags,
+		&x.Headers,
+		&x.Meta,
+		&aIds, &aFilenames, &aTypes, &aEncodings, &aBuckets, &aKeys,
+	); err != nil {
+		return err
 	}
 
-	for _, h := range src.Headers {
-		m.Headers = append(m.Headers, &Message_Header{
-			Key:   h.Key,
-			Value: string(h.Value),
-		})
+	x.Type = Message_Type(typ)
+	x.Date = timestamppb.New(date)
+	x.Attachments = make([]*Attachment, len(aIds))
+
+	for i := range aIds {
+		x.Attachments[i] = &Attachment{
+			Id:              aIds[i],
+			Filename:        aFilenames[i],
+			ContentType:     aTypes[i],
+			ContentEncoding: aEncodings[i],
+			Bucket:          aBuckets[i],
+			Key:             aKeys[i],
+		}
 	}
 
-	return m
+	return nil
 }
 
-func (m *Message) SetFlag(x uint32) {
-	f := m.bitmap()
-	f.Set(x)
+func (x *Message) SetFlags(flags ...MessageFlag) {
+	mask := bitmap.FromBytes(x.Flags)
+	for i := range flags {
+		if MessageFlag_unknown_message_flag == flags[i] {
+			continue
+		}
 
-	m.Flags = f.ToBytes()
-}
+		mask.Set(uint32(flags[i]))
+	}
 
-func (m *Message) HasFlag(x uint32) bool {
-	return m.bitmap().Contains(x)
+	x.Flags = mask.ToBytes()
 }
 
-func (m *Message) SetBitmap(flags bitmap.Bitmap) {
-	m.Flags = flags.ToBytes()
-}
+func (x *Message) RemoveFlags(flags ...MessageFlag) {
+	mask := bitmap.FromBytes(x.Flags)
+	for i := range flags {
+		if MessageFlag_unknown_message_flag == flags[i] {
+			continue
+		}
 
-func (m *Message) bitmap() *bitmap.Bitmap {
-	var flags bitmap.Bitmap
-	if m.Flags != nil {
-		flags = bitmap.FromBytes(m.Flags)
+		mask.Remove(uint32(flags[i]))
 	}
 
-	return &flags
+	x.Flags = mask.ToBytes()
+}
+
+func (x *Message) HasFlag(flag MessageFlag) bool {
+	return bitmap.
+		FromBytes(x.Flags).
+		Contains(uint32(flag))
 }

+ 0 - 11
role.go

@@ -1,11 +0,0 @@
-package ticket
-
-import "github.com/sashabaranov/go-openai"
-
-var Role = map[MessageProvider]string{
-	MessageProvider_EmailMessageProvider: openai.ChatMessageRoleUser,
-	MessageProvider_ChatMessageProvider:  openai.ChatMessageRoleUser,
-	MessageProvider_GptMessageProvider:   openai.ChatMessageRoleAssistant,
-	MessageProvider_ApiMessageProvider:   openai.ChatMessageRoleSystem,
-	MessageProvider_FunctionProvider:     openai.ChatMessageRoleFunction,
-}

+ 51 - 47
ticket.go

@@ -1,71 +1,75 @@
 package ticket
 
 import (
-	_ "embed"
-	"encoding/json"
-	"fmt"
-	"github.com/google/uuid"
-	"github.com/sashabaranov/go-openai"
-	"google.golang.org/protobuf/encoding/protojson"
+	"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
+	"github.com/kelindar/bitmap"
+	"google.golang.org/protobuf/types/known/timestamppb"
 	"time"
 )
 
-func (t *Ticket) Marshal() ([]byte, error) {
-	return protojson.Marshal(t)
-}
-
-func (t *Ticket) AddMessage(m *Message) error {
-	if m == nil {
-		return fmt.Errorf("illegal argument: Message must not be a nil")
-	}
+func (x *Ticket) Scan(row driver.Rows) error {
+	var (
+		from      map[string]string
+		createdAt time.Time
+		updatedAt time.Time
+		err       error
+	)
 
-	if m.TicketId == "" {
-		m.TicketId = t.Id
+	if err = row.Scan(
+		&x.TicketId,
+		&x.ThreadId,
+		&x.To,
+		&from,
+		&x.Flags,
+		&x.Meta,
+		&x.Tags,
+		&createdAt,
+		&updatedAt,
+		&x.MessageIds,
+		&x.Subjects,
+	); err != nil {
+		return err
 	}
 
-	if m.Id == "" {
-		m.Id = uuid.NewString()
+	x.From = &EmailAddress{
+		Address: from["address"],
+		Name:    from["name"],
 	}
 
-	if m.Date == 0 {
-		m.Date = time.Now().UnixMilli()
-	}
+	x.CreatedAt = timestamppb.New(createdAt)
+	x.UpdatedAt = timestamppb.New(updatedAt)
 
-	t.Thread = append(t.Thread, m)
 	return nil
 }
 
-func (t *Ticket) AddGPTResponseMessage(src *openai.ChatCompletionChoice) (*Message, error) {
-	var (
-		message = &Message{
-			Id:       uuid.NewString(),
-			TicketId: t.Id,
-			Provider: MessageProvider_GptMessageProvider,
-			Body:     src.Message.Content,
-			Date:     time.Now().UnixMilli(),
+func (x *Ticket) SetFlags(flags ...TicketFlag) {
+	mask := bitmap.FromBytes(x.Flags)
+	for i := range flags {
+		if TicketFlag_unknown_ticket_flag == flags[i] {
+			continue
 		}
-		buf []byte
-		err error
-	)
-
-	if buf, err = json.Marshal(src.Message); err != nil {
-		return nil, err
-	}
 
-	message.Raw = string(buf)
-	if err = t.AddMessage(message); err != nil {
-		return nil, err
+		mask.Set(uint32(flags[i]))
 	}
 
-	return message, nil
+	x.Flags = mask.ToBytes()
 }
 
-//goland:noinspection GoUnusedExportedFunction
-func Unmarshal(d []byte) (*Ticket, error) {
-	t := &Ticket{}
-	if err := protojson.Unmarshal(d, t); err != nil {
-		return nil, err
+func (x *Ticket) RemoveFlags(flags ...TicketFlag) {
+	mask := bitmap.FromBytes(x.Flags)
+	for i := range flags {
+		if TicketFlag_unknown_ticket_flag == flags[i] {
+			continue
+		}
+
+		mask.Remove(uint32(flags[i]))
 	}
 
-	return t, nil
+	x.Flags = mask.ToBytes()
+}
+
+func (x *Ticket) HasFlag(flag TicketFlag) bool {
+	return bitmap.
+		FromBytes(x.Flags).
+		Contains(uint32(flag))
 }

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 576 - 233
ticket.pb.go


+ 77 - 39
ticket.proto

@@ -5,54 +5,92 @@ package ticket;
 option go_package = "./ticket";
 
 // java
-option java_package = "com.gshopper.crm.ticket";
+option java_package = "com.gshopper.crm.ticket.v2";
 option java_outer_classname = "proto";
 
-enum MessageProvider {
-  UnknownMessageProvider = 0;
-  EmailMessageProvider = 1;
-  ChatMessageProvider = 2;
-  GptMessageProvider = 3;
-  ApiMessageProvider = 4;
-  FunctionProvider = 5;
+import "google/protobuf/timestamp.proto";
+
+message EmailAddress {
+  string address = 1 [json_name = "address"];
+  string name = 2 [json_name = "name"];
+}
+
+message Attachment {
+  string id = 1 [json_name = "id"];
+  string filename = 2 [json_name = "filename"];
+  string content_type = 3 [json_name = "content_type"];
+  string content_encoding = 4 [json_name = "content_encoding"];
+  string bucket = 5 [json_name = "bucket"];
+  string key = 6 [json_name = "key"];
+}
+
+message AssistantRequest {
+  string to = 1 [json_name = "to"];
+  EmailAddress from = 2 [json_name = "from"];
+  string subject = 3 [json_name = "subject"];
+  google.protobuf.Timestamp date = 4 [json_name = "date"];
+  string body = 5 [json_name = "body"];
+  repeated Attachment attachments = 10 [json_name = "attachments"];
+}
+
+message AssistantCallback {
+  EmailAddress to = 1 [json_name = "to"];
+  string subject = 2 [json_name = "subject"];
+  string body = 3 [json_name = "body"];
+  repeated Attachment attachments = 10 [json_name = "attachments"];
+}
+
+enum MessageFlag {
+  unknown_message_flag = 0 [deprecated = true];
+  SENT = 1;
+  MODIFIED = 2;
+}
+
+enum TicketFlag {
+  unknown_ticket_flag = 0 [deprecated = true];
+  READ = 1;
+  REPLIED = 2;
+  HAS_MODIFIED_MESSAGE = 3;
+  PROCESSING = 4;
 }
 
 message Message {
-  message Header {
-    string key = 1;
-    string value = 2;
+  enum Type {
+    unknown = 0 [deprecated = true];
+    TEXT = 1;
+    EMAIL = 2;
+    ASSISTANT_CALLBACK = 3;
+    TICKET_WITH_REASON = 4;
   }
 
-  message Attachment {
-    message Upload {
-      string bucket = 1;
-      string key = 2;
-      string etag = 3;
-      int64 size = 4;
-      int64 last_modified = 5;
-      string location = 6;
-      string version = 7;
-    }
-
-    string id = 1;
-    string filename = 2;
-    string content_type = 3;
-    string content_encoding = 4;
-    Upload upload = 5;
-  }
+  string message_id = 1 [json_name = "message_id"];
+  string ticket_id = 2 [json_name = "ticket_id"];
+  string role = 3 [json_name = "role"];
+  Type type = 4 [json_name = "type"];
+  string content = 5 [json_name = "content"];
+  google.protobuf.Timestamp date = 6 [json_name = "date"];
+  bytes raw = 7 [json_name = "raw"];
+  bytes flags = 8 [json_name = "flags"];
 
-  string ticket_id = 1 [json_name = "ticket_id"];
-  MessageProvider provider = 2 [json_name = "provider"];
-  string body = 3 [json_name = "body"];
-  int64 date = 4 [json_name = "date"];
-  string raw = 5 [json_name = "raw"];
-  string id = 6 [json_name = "id"];
-  bytes flags = 7 [json_name = "flags"];
-  repeated Header headers = 10 [json_name = "headers"];
-  repeated Attachment attachments = 11 [json_name = "attachments"];
+  map<string, string> headers = 10 [json_name = "headers"];
+  map<string, string> meta = 11 [json_name = "meta"];
+  repeated Attachment attachments = 12 [json_name = "attachments"];
 }
 
 message Ticket {
-  string id = 1 [json_name= "id"];
-  repeated Message thread = 10 [json_name = "thread"];
+  string ticket_id = 1 [json_name = "ticket_id"];
+  string thread_id = 2 [json_name = "thread_id"];
+  string to = 3 [json_name = "to"];
+  EmailAddress from = 4 [json_name = "from"];
+  bytes flags = 5 [json_name = "flags"];
+  google.protobuf.Timestamp created_at = 6 [json_name = "created_at"];
+  google.protobuf.Timestamp updated_at = 7 [json_name = "updated_at"];
+  uint32 version = 8 [json_name = "version"];
+
+  repeated Message messages = 10 [json_name = "messages"];
+  map<string, string> meta = 11 [json_name = "meta"];
+  repeated string tags = 12 [json_name = "tags"];
+
+  repeated string message_ids = 100 [json_name = "message_ids"];
+  repeated string subjects = 101 [json_name = "subjects"];
 }

+ 0 - 16
v2/Makefile

@@ -1,16 +0,0 @@
-.DEFAULT_GOAL := all
-.DELETE_ON_ERROR:
-.SUFFIXES:
-
-.PHONY: all
-all: gen deps
-
-.PHONY: gen
-gen:
-	-@echo "-> $@"
-	protoc -I=. --go_out=paths=source_relative:. ticket.proto
-
-.PHONY: deps
-deps:
-	-@echo "-> $@"
-	go mod tidy

+ 0 - 29
v2/go.mod

@@ -1,29 +0,0 @@
-module git.beejay.kim/Gshopper/ticket/v2
-
-go 1.21
-
-toolchain go1.21.4
-
-require (
-	github.com/ClickHouse/clickhouse-go/v2 v2.20.0
-	github.com/kelindar/bitmap v1.5.2
-	google.golang.org/protobuf v1.33.0
-)
-
-require (
-	github.com/ClickHouse/ch-go v0.61.3 // indirect
-	github.com/go-faster/city v1.0.1 // indirect
-	github.com/go-faster/errors v0.7.1 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/kelindar/simd v1.1.2 // indirect
-	github.com/klauspost/compress v1.17.7 // indirect
-	github.com/klauspost/cpuid/v2 v2.2.4 // indirect
-	github.com/paulmach/orb v0.11.1 // indirect
-	github.com/pierrec/lz4/v4 v4.1.21 // indirect
-	github.com/segmentio/asm v1.2.0 // indirect
-	github.com/shopspring/decimal v1.3.1 // indirect
-	go.opentelemetry.io/otel v1.24.0 // indirect
-	go.opentelemetry.io/otel/trace v1.24.0 // indirect
-	golang.org/x/sys v0.17.0 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-)

+ 0 - 116
v2/go.sum

@@ -1,116 +0,0 @@
-github.com/ClickHouse/ch-go v0.61.3 h1:MmBwUhXrAOBZK7n/sWBzq6FdIQ01cuF2SaaO8KlDRzI=
-github.com/ClickHouse/ch-go v0.61.3/go.mod h1:1PqXjMz/7S1ZUaKvwPA3i35W2bz2mAMFeCi6DIXgGwQ=
-github.com/ClickHouse/clickhouse-go/v2 v2.20.0 h1:bvlLQ31XJfl7MxIqAq2l1G6JhHYzqEXdvfpMeU6bkKc=
-github.com/ClickHouse/clickhouse-go/v2 v2.20.0/go.mod h1:VQfyA+tCwCRw2G7ogfY8V0fq/r0yJWzy8UDrjiP/Lbs=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw=
-github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw=
-github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg=
-github.com/go-faster/errors v0.7.1/go.mod h1:5ySTjWFiphBs07IKuiL69nxdfd5+fzh1u7FPGZP2quo=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/kelindar/bitmap v1.5.2 h1:XwX7CTvJtetQZ64zrOkApoZZHBJRkjE23NfqUALA/HE=
-github.com/kelindar/bitmap v1.5.2/go.mod h1:j3qZjxH9s4OtvsnFTP2bmPkjqil9Y2xQlxPYHexasEA=
-github.com/kelindar/simd v1.1.2 h1:KduKb+M9cMY2HIH8S/cdJyD+5n5EGgq+Aeeleos55To=
-github.com/kelindar/simd v1.1.2/go.mod h1:inq4DFudC7W8L5fhxoeZflLRNpWSs0GNx6MlWFvuvr0=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
-github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
-github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
-github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
-github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU=
-github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
-github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
-github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
-github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
-github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
-github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
-github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
-github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
-github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
-github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
-github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
-go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
-go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
-go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
-go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
-golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
-google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

+ 0 - 87
v2/message.go

@@ -1,87 +0,0 @@
-package ticket
-
-import (
-	"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
-	"github.com/kelindar/bitmap"
-	"google.golang.org/protobuf/types/known/timestamppb"
-	"time"
-)
-
-func (x *Message) Scan(row driver.Rows) error {
-	var (
-		typ        int32
-		date       time.Time
-		aIds       []string
-		aFilenames []string
-		aTypes     []string
-		aEncodings []string
-		aBuckets   []string
-		aKeys      []string
-		err        error
-	)
-
-	if err = row.Scan(
-		&x.MessageId,
-		&x.TicketId,
-		&x.Role,
-		&typ,
-		&x.Content,
-		&date,
-		&x.Raw,
-		&x.Flags,
-		&x.Headers,
-		&x.Meta,
-		&aIds, &aFilenames, &aTypes, &aEncodings, &aBuckets, &aKeys,
-	); err != nil {
-		return err
-	}
-
-	x.Type = Message_Type(typ)
-	x.Date = timestamppb.New(date)
-	x.Attachments = make([]*Attachment, len(aIds))
-
-	for i := range aIds {
-		x.Attachments[i] = &Attachment{
-			Id:              aIds[i],
-			Filename:        aFilenames[i],
-			ContentType:     aTypes[i],
-			ContentEncoding: aEncodings[i],
-			Bucket:          aBuckets[i],
-			Key:             aKeys[i],
-		}
-	}
-
-	return nil
-}
-
-func (x *Message) SetFlags(flags ...MessageFlag) {
-	mask := bitmap.FromBytes(x.Flags)
-	for i := range flags {
-		if MessageFlag_unknown_message_flag == flags[i] {
-			continue
-		}
-
-		mask.Set(uint32(flags[i]))
-	}
-
-	x.Flags = mask.ToBytes()
-}
-
-func (x *Message) RemoveFlags(flags ...MessageFlag) {
-	mask := bitmap.FromBytes(x.Flags)
-	for i := range flags {
-		if MessageFlag_unknown_message_flag == flags[i] {
-			continue
-		}
-
-		mask.Remove(uint32(flags[i]))
-	}
-
-	x.Flags = mask.ToBytes()
-}
-
-func (x *Message) HasFlag(flag MessageFlag) bool {
-	return bitmap.
-		FromBytes(x.Flags).
-		Contains(uint32(flag))
-}

+ 0 - 75
v2/ticket.go

@@ -1,75 +0,0 @@
-package ticket
-
-import (
-	"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
-	"github.com/kelindar/bitmap"
-	"google.golang.org/protobuf/types/known/timestamppb"
-	"time"
-)
-
-func (x *Ticket) Scan(row driver.Rows) error {
-	var (
-		from      map[string]string
-		createdAt time.Time
-		updatedAt time.Time
-		err       error
-	)
-
-	if err = row.Scan(
-		&x.TicketId,
-		&x.ThreadId,
-		&x.To,
-		&from,
-		&x.Flags,
-		&x.Meta,
-		&x.Tags,
-		&createdAt,
-		&updatedAt,
-		&x.MessageIds,
-		&x.Subjects,
-	); err != nil {
-		return err
-	}
-
-	x.From = &EmailAddress{
-		Address: from["address"],
-		Name:    from["name"],
-	}
-
-	x.CreatedAt = timestamppb.New(createdAt)
-	x.UpdatedAt = timestamppb.New(updatedAt)
-
-	return nil
-}
-
-func (x *Ticket) SetFlags(flags ...TicketFlag) {
-	mask := bitmap.FromBytes(x.Flags)
-	for i := range flags {
-		if TicketFlag_unknown_ticket_flag == flags[i] {
-			continue
-		}
-
-		mask.Set(uint32(flags[i]))
-	}
-
-	x.Flags = mask.ToBytes()
-}
-
-func (x *Ticket) RemoveFlags(flags ...TicketFlag) {
-	mask := bitmap.FromBytes(x.Flags)
-	for i := range flags {
-		if TicketFlag_unknown_ticket_flag == flags[i] {
-			continue
-		}
-
-		mask.Remove(uint32(flags[i]))
-	}
-
-	x.Flags = mask.ToBytes()
-}
-
-func (x *Ticket) HasFlag(flag TicketFlag) bool {
-	return bitmap.
-		FromBytes(x.Flags).
-		Contains(uint32(flag))
-}

+ 0 - 1040
v2/ticket.pb.go

@@ -1,1040 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// 	protoc-gen-go v1.32.0
-// 	protoc        v4.25.1
-// source: ticket.proto
-
-package ticket
-
-import (
-	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
-	reflect "reflect"
-	sync "sync"
-)
-
-const (
-	// Verify that this generated code is sufficiently up-to-date.
-	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
-	// Verify that runtime/protoimpl is sufficiently up-to-date.
-	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-type MessageFlag int32
-
-const (
-	// Deprecated: Marked as deprecated in ticket.proto.
-	MessageFlag_unknown_message_flag MessageFlag = 0
-	MessageFlag_SENT                 MessageFlag = 1
-	MessageFlag_MODIFIED             MessageFlag = 2
-)
-
-// Enum value maps for MessageFlag.
-var (
-	MessageFlag_name = map[int32]string{
-		0: "unknown_message_flag",
-		1: "SENT",
-		2: "MODIFIED",
-	}
-	MessageFlag_value = map[string]int32{
-		"unknown_message_flag": 0,
-		"SENT":                 1,
-		"MODIFIED":             2,
-	}
-)
-
-func (x MessageFlag) Enum() *MessageFlag {
-	p := new(MessageFlag)
-	*p = x
-	return p
-}
-
-func (x MessageFlag) String() string {
-	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (MessageFlag) Descriptor() protoreflect.EnumDescriptor {
-	return file_ticket_proto_enumTypes[0].Descriptor()
-}
-
-func (MessageFlag) Type() protoreflect.EnumType {
-	return &file_ticket_proto_enumTypes[0]
-}
-
-func (x MessageFlag) Number() protoreflect.EnumNumber {
-	return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use MessageFlag.Descriptor instead.
-func (MessageFlag) EnumDescriptor() ([]byte, []int) {
-	return file_ticket_proto_rawDescGZIP(), []int{0}
-}
-
-type TicketFlag int32
-
-const (
-	// Deprecated: Marked as deprecated in ticket.proto.
-	TicketFlag_unknown_ticket_flag  TicketFlag = 0
-	TicketFlag_READ                 TicketFlag = 1
-	TicketFlag_REPLIED              TicketFlag = 2
-	TicketFlag_HAS_MODIFIED_MESSAGE TicketFlag = 3
-	TicketFlag_PROCESSING           TicketFlag = 4
-)
-
-// Enum value maps for TicketFlag.
-var (
-	TicketFlag_name = map[int32]string{
-		0: "unknown_ticket_flag",
-		1: "READ",
-		2: "REPLIED",
-		3: "HAS_MODIFIED_MESSAGE",
-		4: "PROCESSING",
-	}
-	TicketFlag_value = map[string]int32{
-		"unknown_ticket_flag":  0,
-		"READ":                 1,
-		"REPLIED":              2,
-		"HAS_MODIFIED_MESSAGE": 3,
-		"PROCESSING":           4,
-	}
-)
-
-func (x TicketFlag) Enum() *TicketFlag {
-	p := new(TicketFlag)
-	*p = x
-	return p
-}
-
-func (x TicketFlag) String() string {
-	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (TicketFlag) Descriptor() protoreflect.EnumDescriptor {
-	return file_ticket_proto_enumTypes[1].Descriptor()
-}
-
-func (TicketFlag) Type() protoreflect.EnumType {
-	return &file_ticket_proto_enumTypes[1]
-}
-
-func (x TicketFlag) Number() protoreflect.EnumNumber {
-	return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use TicketFlag.Descriptor instead.
-func (TicketFlag) EnumDescriptor() ([]byte, []int) {
-	return file_ticket_proto_rawDescGZIP(), []int{1}
-}
-
-type Message_Type int32
-
-const (
-	// Deprecated: Marked as deprecated in ticket.proto.
-	Message_unknown            Message_Type = 0
-	Message_TEXT               Message_Type = 1
-	Message_EMAIL              Message_Type = 2
-	Message_ASSISTANT_CALLBACK Message_Type = 3
-	Message_TICKET_WITH_REASON Message_Type = 4
-)
-
-// Enum value maps for Message_Type.
-var (
-	Message_Type_name = map[int32]string{
-		0: "unknown",
-		1: "TEXT",
-		2: "EMAIL",
-		3: "ASSISTANT_CALLBACK",
-		4: "TICKET_WITH_REASON",
-	}
-	Message_Type_value = map[string]int32{
-		"unknown":            0,
-		"TEXT":               1,
-		"EMAIL":              2,
-		"ASSISTANT_CALLBACK": 3,
-		"TICKET_WITH_REASON": 4,
-	}
-)
-
-func (x Message_Type) Enum() *Message_Type {
-	p := new(Message_Type)
-	*p = x
-	return p
-}
-
-func (x Message_Type) String() string {
-	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (Message_Type) Descriptor() protoreflect.EnumDescriptor {
-	return file_ticket_proto_enumTypes[2].Descriptor()
-}
-
-func (Message_Type) Type() protoreflect.EnumType {
-	return &file_ticket_proto_enumTypes[2]
-}
-
-func (x Message_Type) Number() protoreflect.EnumNumber {
-	return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use Message_Type.Descriptor instead.
-func (Message_Type) EnumDescriptor() ([]byte, []int) {
-	return file_ticket_proto_rawDescGZIP(), []int{4, 0}
-}
-
-type EmailAddress struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
-	Name    string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
-}
-
-func (x *EmailAddress) Reset() {
-	*x = EmailAddress{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_ticket_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *EmailAddress) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*EmailAddress) ProtoMessage() {}
-
-func (x *EmailAddress) ProtoReflect() protoreflect.Message {
-	mi := &file_ticket_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use EmailAddress.ProtoReflect.Descriptor instead.
-func (*EmailAddress) Descriptor() ([]byte, []int) {
-	return file_ticket_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *EmailAddress) GetAddress() string {
-	if x != nil {
-		return x.Address
-	}
-	return ""
-}
-
-func (x *EmailAddress) GetName() string {
-	if x != nil {
-		return x.Name
-	}
-	return ""
-}
-
-type Attachment struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Id              string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
-	Filename        string `protobuf:"bytes,2,opt,name=filename,proto3" json:"filename,omitempty"`
-	ContentType     string `protobuf:"bytes,3,opt,name=content_type,proto3" json:"content_type,omitempty"`
-	ContentEncoding string `protobuf:"bytes,4,opt,name=content_encoding,proto3" json:"content_encoding,omitempty"`
-	Bucket          string `protobuf:"bytes,5,opt,name=bucket,proto3" json:"bucket,omitempty"`
-	Key             string `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"`
-}
-
-func (x *Attachment) Reset() {
-	*x = Attachment{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_ticket_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *Attachment) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Attachment) ProtoMessage() {}
-
-func (x *Attachment) ProtoReflect() protoreflect.Message {
-	mi := &file_ticket_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use Attachment.ProtoReflect.Descriptor instead.
-func (*Attachment) Descriptor() ([]byte, []int) {
-	return file_ticket_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *Attachment) GetId() string {
-	if x != nil {
-		return x.Id
-	}
-	return ""
-}
-
-func (x *Attachment) GetFilename() string {
-	if x != nil {
-		return x.Filename
-	}
-	return ""
-}
-
-func (x *Attachment) GetContentType() string {
-	if x != nil {
-		return x.ContentType
-	}
-	return ""
-}
-
-func (x *Attachment) GetContentEncoding() string {
-	if x != nil {
-		return x.ContentEncoding
-	}
-	return ""
-}
-
-func (x *Attachment) GetBucket() string {
-	if x != nil {
-		return x.Bucket
-	}
-	return ""
-}
-
-func (x *Attachment) GetKey() string {
-	if x != nil {
-		return x.Key
-	}
-	return ""
-}
-
-type AssistantRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	To          string                 `protobuf:"bytes,1,opt,name=to,proto3" json:"to,omitempty"`
-	From        *EmailAddress          `protobuf:"bytes,2,opt,name=from,proto3" json:"from,omitempty"`
-	Subject     string                 `protobuf:"bytes,3,opt,name=subject,proto3" json:"subject,omitempty"`
-	Date        *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=date,proto3" json:"date,omitempty"`
-	Body        string                 `protobuf:"bytes,5,opt,name=body,proto3" json:"body,omitempty"`
-	Attachments []*Attachment          `protobuf:"bytes,10,rep,name=attachments,proto3" json:"attachments,omitempty"`
-}
-
-func (x *AssistantRequest) Reset() {
-	*x = AssistantRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_ticket_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *AssistantRequest) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AssistantRequest) ProtoMessage() {}
-
-func (x *AssistantRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_ticket_proto_msgTypes[2]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use AssistantRequest.ProtoReflect.Descriptor instead.
-func (*AssistantRequest) Descriptor() ([]byte, []int) {
-	return file_ticket_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *AssistantRequest) GetTo() string {
-	if x != nil {
-		return x.To
-	}
-	return ""
-}
-
-func (x *AssistantRequest) GetFrom() *EmailAddress {
-	if x != nil {
-		return x.From
-	}
-	return nil
-}
-
-func (x *AssistantRequest) GetSubject() string {
-	if x != nil {
-		return x.Subject
-	}
-	return ""
-}
-
-func (x *AssistantRequest) GetDate() *timestamppb.Timestamp {
-	if x != nil {
-		return x.Date
-	}
-	return nil
-}
-
-func (x *AssistantRequest) GetBody() string {
-	if x != nil {
-		return x.Body
-	}
-	return ""
-}
-
-func (x *AssistantRequest) GetAttachments() []*Attachment {
-	if x != nil {
-		return x.Attachments
-	}
-	return nil
-}
-
-type AssistantCallback struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	To          *EmailAddress `protobuf:"bytes,1,opt,name=to,proto3" json:"to,omitempty"`
-	Subject     string        `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"`
-	Body        string        `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"`
-	Attachments []*Attachment `protobuf:"bytes,10,rep,name=attachments,proto3" json:"attachments,omitempty"`
-}
-
-func (x *AssistantCallback) Reset() {
-	*x = AssistantCallback{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_ticket_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *AssistantCallback) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AssistantCallback) ProtoMessage() {}
-
-func (x *AssistantCallback) ProtoReflect() protoreflect.Message {
-	mi := &file_ticket_proto_msgTypes[3]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use AssistantCallback.ProtoReflect.Descriptor instead.
-func (*AssistantCallback) Descriptor() ([]byte, []int) {
-	return file_ticket_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *AssistantCallback) GetTo() *EmailAddress {
-	if x != nil {
-		return x.To
-	}
-	return nil
-}
-
-func (x *AssistantCallback) GetSubject() string {
-	if x != nil {
-		return x.Subject
-	}
-	return ""
-}
-
-func (x *AssistantCallback) GetBody() string {
-	if x != nil {
-		return x.Body
-	}
-	return ""
-}
-
-func (x *AssistantCallback) GetAttachments() []*Attachment {
-	if x != nil {
-		return x.Attachments
-	}
-	return nil
-}
-
-type Message struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	MessageId   string                 `protobuf:"bytes,1,opt,name=message_id,proto3" json:"message_id,omitempty"`
-	TicketId    string                 `protobuf:"bytes,2,opt,name=ticket_id,proto3" json:"ticket_id,omitempty"`
-	Role        string                 `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"`
-	Type        Message_Type           `protobuf:"varint,4,opt,name=type,proto3,enum=ticket.Message_Type" json:"type,omitempty"`
-	Content     string                 `protobuf:"bytes,5,opt,name=content,proto3" json:"content,omitempty"`
-	Date        *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=date,proto3" json:"date,omitempty"`
-	Raw         []byte                 `protobuf:"bytes,7,opt,name=raw,proto3" json:"raw,omitempty"`
-	Flags       []byte                 `protobuf:"bytes,8,opt,name=flags,proto3" json:"flags,omitempty"`
-	Headers     map[string]string      `protobuf:"bytes,10,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	Meta        map[string]string      `protobuf:"bytes,11,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	Attachments []*Attachment          `protobuf:"bytes,12,rep,name=attachments,proto3" json:"attachments,omitempty"`
-}
-
-func (x *Message) Reset() {
-	*x = Message{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_ticket_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *Message) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Message) ProtoMessage() {}
-
-func (x *Message) ProtoReflect() protoreflect.Message {
-	mi := &file_ticket_proto_msgTypes[4]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use Message.ProtoReflect.Descriptor instead.
-func (*Message) Descriptor() ([]byte, []int) {
-	return file_ticket_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *Message) GetMessageId() string {
-	if x != nil {
-		return x.MessageId
-	}
-	return ""
-}
-
-func (x *Message) GetTicketId() string {
-	if x != nil {
-		return x.TicketId
-	}
-	return ""
-}
-
-func (x *Message) GetRole() string {
-	if x != nil {
-		return x.Role
-	}
-	return ""
-}
-
-func (x *Message) GetType() Message_Type {
-	if x != nil {
-		return x.Type
-	}
-	return Message_unknown
-}
-
-func (x *Message) GetContent() string {
-	if x != nil {
-		return x.Content
-	}
-	return ""
-}
-
-func (x *Message) GetDate() *timestamppb.Timestamp {
-	if x != nil {
-		return x.Date
-	}
-	return nil
-}
-
-func (x *Message) GetRaw() []byte {
-	if x != nil {
-		return x.Raw
-	}
-	return nil
-}
-
-func (x *Message) GetFlags() []byte {
-	if x != nil {
-		return x.Flags
-	}
-	return nil
-}
-
-func (x *Message) GetHeaders() map[string]string {
-	if x != nil {
-		return x.Headers
-	}
-	return nil
-}
-
-func (x *Message) GetMeta() map[string]string {
-	if x != nil {
-		return x.Meta
-	}
-	return nil
-}
-
-func (x *Message) GetAttachments() []*Attachment {
-	if x != nil {
-		return x.Attachments
-	}
-	return nil
-}
-
-type Ticket struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	TicketId   string                 `protobuf:"bytes,1,opt,name=ticket_id,proto3" json:"ticket_id,omitempty"`
-	ThreadId   string                 `protobuf:"bytes,2,opt,name=thread_id,proto3" json:"thread_id,omitempty"`
-	To         string                 `protobuf:"bytes,3,opt,name=to,proto3" json:"to,omitempty"`
-	From       *EmailAddress          `protobuf:"bytes,4,opt,name=from,proto3" json:"from,omitempty"`
-	Flags      []byte                 `protobuf:"bytes,5,opt,name=flags,proto3" json:"flags,omitempty"`
-	CreatedAt  *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,proto3" json:"created_at,omitempty"`
-	UpdatedAt  *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=updated_at,proto3" json:"updated_at,omitempty"`
-	Version    uint32                 `protobuf:"varint,8,opt,name=version,proto3" json:"version,omitempty"`
-	Messages   []*Message             `protobuf:"bytes,10,rep,name=messages,proto3" json:"messages,omitempty"`
-	Meta       map[string]string      `protobuf:"bytes,11,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	Tags       []string               `protobuf:"bytes,12,rep,name=tags,proto3" json:"tags,omitempty"`
-	MessageIds []string               `protobuf:"bytes,100,rep,name=message_ids,proto3" json:"message_ids,omitempty"`
-	Subjects   []string               `protobuf:"bytes,101,rep,name=subjects,proto3" json:"subjects,omitempty"`
-}
-
-func (x *Ticket) Reset() {
-	*x = Ticket{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_ticket_proto_msgTypes[5]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *Ticket) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Ticket) ProtoMessage() {}
-
-func (x *Ticket) ProtoReflect() protoreflect.Message {
-	mi := &file_ticket_proto_msgTypes[5]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use Ticket.ProtoReflect.Descriptor instead.
-func (*Ticket) Descriptor() ([]byte, []int) {
-	return file_ticket_proto_rawDescGZIP(), []int{5}
-}
-
-func (x *Ticket) GetTicketId() string {
-	if x != nil {
-		return x.TicketId
-	}
-	return ""
-}
-
-func (x *Ticket) GetThreadId() string {
-	if x != nil {
-		return x.ThreadId
-	}
-	return ""
-}
-
-func (x *Ticket) GetTo() string {
-	if x != nil {
-		return x.To
-	}
-	return ""
-}
-
-func (x *Ticket) GetFrom() *EmailAddress {
-	if x != nil {
-		return x.From
-	}
-	return nil
-}
-
-func (x *Ticket) GetFlags() []byte {
-	if x != nil {
-		return x.Flags
-	}
-	return nil
-}
-
-func (x *Ticket) GetCreatedAt() *timestamppb.Timestamp {
-	if x != nil {
-		return x.CreatedAt
-	}
-	return nil
-}
-
-func (x *Ticket) GetUpdatedAt() *timestamppb.Timestamp {
-	if x != nil {
-		return x.UpdatedAt
-	}
-	return nil
-}
-
-func (x *Ticket) GetVersion() uint32 {
-	if x != nil {
-		return x.Version
-	}
-	return 0
-}
-
-func (x *Ticket) GetMessages() []*Message {
-	if x != nil {
-		return x.Messages
-	}
-	return nil
-}
-
-func (x *Ticket) GetMeta() map[string]string {
-	if x != nil {
-		return x.Meta
-	}
-	return nil
-}
-
-func (x *Ticket) GetTags() []string {
-	if x != nil {
-		return x.Tags
-	}
-	return nil
-}
-
-func (x *Ticket) GetMessageIds() []string {
-	if x != nil {
-		return x.MessageIds
-	}
-	return nil
-}
-
-func (x *Ticket) GetSubjects() []string {
-	if x != nil {
-		return x.Subjects
-	}
-	return nil
-}
-
-var File_ticket_proto protoreflect.FileDescriptor
-
-var file_ticket_proto_rawDesc = []byte{
-	0x0a, 0x0c, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06,
-	0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
-	0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3c, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c,
-	0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,
-	0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
-	0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68,
-	0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65,
-	0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f,
-	0x74, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f,
-	0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10,
-	0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
-	0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0xe0, 0x01, 0x0a, 0x10, 0x41,
-	0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12,
-	0x28, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e,
-	0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72,
-	0x65, 0x73, 0x73, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62,
-	0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a,
-	0x65, 0x63, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x64,
-	0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63,
-	0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74,
-	0x69, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74,
-	0x52, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x9d, 0x01,
-	0x0a, 0x11, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x62,
-	0x61, 0x63, 0x6b, 0x12, 0x24, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x14, 0x2e, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64,
-	0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62,
-	0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a,
-	0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63,
-	0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74,
-	0x69, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74,
-	0x52, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xe7, 0x04,
-	0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x65, 0x73,
-	0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d,
-	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x63,
-	0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69,
-	0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x74,
-	0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x74, 0x69, 0x63, 0x6b,
-	0x65, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52,
-	0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12,
-	0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
-	0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x12,
-	0x10, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x61,
-	0x77, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c,
-	0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65,
-	0x72, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x69, 0x63, 0x6b, 0x65,
-	0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
-	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12,
-	0x2d, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e,
-	0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d,
-	0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x34,
-	0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0c, 0x20,
-	0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x74, 0x74,
-	0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d,
-	0x65, 0x6e, 0x74, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45,
-	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
-	0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
-	0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
-	0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
-	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5c, 0x0a, 0x04, 0x54, 0x79, 0x70,
-	0x65, 0x12, 0x0f, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x1a, 0x02,
-	0x08, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05,
-	0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x53, 0x53, 0x49, 0x53,
-	0x54, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x12,
-	0x16, 0x0a, 0x12, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x52,
-	0x45, 0x41, 0x53, 0x4f, 0x4e, 0x10, 0x04, 0x22, 0x8c, 0x04, 0x0a, 0x06, 0x54, 0x69, 0x63, 0x6b,
-	0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64,
-	0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x12, 0x0e,
-	0x0a, 0x02, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x28,
-	0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74,
-	0x69, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65,
-	0x73, 0x73, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67,
-	0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x3a,
-	0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a,
-	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x75, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
-	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
-	0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61,
-	0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
-	0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
-	0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73,
-	0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x2c, 0x0a,
-	0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x69,
-	0x63, 0x6b, 0x65, 0x74, 0x2e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61,
-	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x74,
-	0x61, 0x67, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12,
-	0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x64,
-	0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64,
-	0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x65, 0x20,
-	0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x1a, 0x37, 0x0a,
-	0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
-	0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
-	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x43, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
-	0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1c, 0x0a, 0x14, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e,
-	0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x10, 0x00, 0x1a,
-	0x02, 0x08, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0c, 0x0a,
-	0x08, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x6a, 0x0a, 0x0a, 0x54,
-	0x69, 0x63, 0x6b, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x13, 0x75, 0x6e, 0x6b,
-	0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x66, 0x6c, 0x61, 0x67,
-	0x10, 0x00, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x01,
-	0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x10, 0x02, 0x12, 0x18, 0x0a,
-	0x14, 0x48, 0x41, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x4d, 0x45,
-	0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f, 0x43, 0x45,
-	0x53, 0x53, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x42, 0x2d, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x67,
-	0x73, 0x68, 0x6f, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x74, 0x69, 0x63, 0x6b,
-	0x65, 0x74, 0x2e, 0x76, 0x32, 0x42, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x08, 0x2e, 0x2f,
-	0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
-	file_ticket_proto_rawDescOnce sync.Once
-	file_ticket_proto_rawDescData = file_ticket_proto_rawDesc
-)
-
-func file_ticket_proto_rawDescGZIP() []byte {
-	file_ticket_proto_rawDescOnce.Do(func() {
-		file_ticket_proto_rawDescData = protoimpl.X.CompressGZIP(file_ticket_proto_rawDescData)
-	})
-	return file_ticket_proto_rawDescData
-}
-
-var file_ticket_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
-var file_ticket_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
-var file_ticket_proto_goTypes = []interface{}{
-	(MessageFlag)(0),              // 0: ticket.MessageFlag
-	(TicketFlag)(0),               // 1: ticket.TicketFlag
-	(Message_Type)(0),             // 2: ticket.Message.Type
-	(*EmailAddress)(nil),          // 3: ticket.EmailAddress
-	(*Attachment)(nil),            // 4: ticket.Attachment
-	(*AssistantRequest)(nil),      // 5: ticket.AssistantRequest
-	(*AssistantCallback)(nil),     // 6: ticket.AssistantCallback
-	(*Message)(nil),               // 7: ticket.Message
-	(*Ticket)(nil),                // 8: ticket.Ticket
-	nil,                           // 9: ticket.Message.HeadersEntry
-	nil,                           // 10: ticket.Message.MetaEntry
-	nil,                           // 11: ticket.Ticket.MetaEntry
-	(*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp
-}
-var file_ticket_proto_depIdxs = []int32{
-	3,  // 0: ticket.AssistantRequest.from:type_name -> ticket.EmailAddress
-	12, // 1: ticket.AssistantRequest.date:type_name -> google.protobuf.Timestamp
-	4,  // 2: ticket.AssistantRequest.attachments:type_name -> ticket.Attachment
-	3,  // 3: ticket.AssistantCallback.to:type_name -> ticket.EmailAddress
-	4,  // 4: ticket.AssistantCallback.attachments:type_name -> ticket.Attachment
-	2,  // 5: ticket.Message.type:type_name -> ticket.Message.Type
-	12, // 6: ticket.Message.date:type_name -> google.protobuf.Timestamp
-	9,  // 7: ticket.Message.headers:type_name -> ticket.Message.HeadersEntry
-	10, // 8: ticket.Message.meta:type_name -> ticket.Message.MetaEntry
-	4,  // 9: ticket.Message.attachments:type_name -> ticket.Attachment
-	3,  // 10: ticket.Ticket.from:type_name -> ticket.EmailAddress
-	12, // 11: ticket.Ticket.created_at:type_name -> google.protobuf.Timestamp
-	12, // 12: ticket.Ticket.updated_at:type_name -> google.protobuf.Timestamp
-	7,  // 13: ticket.Ticket.messages:type_name -> ticket.Message
-	11, // 14: ticket.Ticket.meta:type_name -> ticket.Ticket.MetaEntry
-	15, // [15:15] is the sub-list for method output_type
-	15, // [15:15] is the sub-list for method input_type
-	15, // [15:15] is the sub-list for extension type_name
-	15, // [15:15] is the sub-list for extension extendee
-	0,  // [0:15] is the sub-list for field type_name
-}
-
-func init() { file_ticket_proto_init() }
-func file_ticket_proto_init() {
-	if File_ticket_proto != nil {
-		return
-	}
-	if !protoimpl.UnsafeEnabled {
-		file_ticket_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*EmailAddress); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_ticket_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Attachment); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_ticket_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AssistantRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_ticket_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AssistantCallback); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_ticket_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Message); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_ticket_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Ticket); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
-	type x struct{}
-	out := protoimpl.TypeBuilder{
-		File: protoimpl.DescBuilder{
-			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_ticket_proto_rawDesc,
-			NumEnums:      3,
-			NumMessages:   9,
-			NumExtensions: 0,
-			NumServices:   0,
-		},
-		GoTypes:           file_ticket_proto_goTypes,
-		DependencyIndexes: file_ticket_proto_depIdxs,
-		EnumInfos:         file_ticket_proto_enumTypes,
-		MessageInfos:      file_ticket_proto_msgTypes,
-	}.Build()
-	File_ticket_proto = out.File
-	file_ticket_proto_rawDesc = nil
-	file_ticket_proto_goTypes = nil
-	file_ticket_proto_depIdxs = nil
-}

+ 0 - 96
v2/ticket.proto

@@ -1,96 +0,0 @@
-syntax = "proto3";
-package ticket;
-
-// golang
-option go_package = "./ticket";
-
-// java
-option java_package = "com.gshopper.crm.ticket.v2";
-option java_outer_classname = "proto";
-
-import "google/protobuf/timestamp.proto";
-
-message EmailAddress {
-  string address = 1 [json_name = "address"];
-  string name = 2 [json_name = "name"];
-}
-
-message Attachment {
-  string id = 1 [json_name = "id"];
-  string filename = 2 [json_name = "filename"];
-  string content_type = 3 [json_name = "content_type"];
-  string content_encoding = 4 [json_name = "content_encoding"];
-  string bucket = 5 [json_name = "bucket"];
-  string key = 6 [json_name = "key"];
-}
-
-message AssistantRequest {
-  string to = 1 [json_name = "to"];
-  EmailAddress from = 2 [json_name = "from"];
-  string subject = 3 [json_name = "subject"];
-  google.protobuf.Timestamp date = 4 [json_name = "date"];
-  string body = 5 [json_name = "body"];
-  repeated Attachment attachments = 10 [json_name = "attachments"];
-}
-
-message AssistantCallback {
-  EmailAddress to = 1 [json_name = "to"];
-  string subject = 2 [json_name = "subject"];
-  string body = 3 [json_name = "body"];
-  repeated Attachment attachments = 10 [json_name = "attachments"];
-}
-
-enum MessageFlag {
-  unknown_message_flag = 0 [deprecated = true];
-  SENT = 1;
-  MODIFIED = 2;
-}
-
-enum TicketFlag {
-  unknown_ticket_flag = 0 [deprecated = true];
-  READ = 1;
-  REPLIED = 2;
-  HAS_MODIFIED_MESSAGE = 3;
-  PROCESSING = 4;
-}
-
-message Message {
-  enum Type {
-    unknown = 0 [deprecated = true];
-    TEXT = 1;
-    EMAIL = 2;
-    ASSISTANT_CALLBACK = 3;
-    TICKET_WITH_REASON = 4;
-  }
-
-  string message_id = 1 [json_name = "message_id"];
-  string ticket_id = 2 [json_name = "ticket_id"];
-  string role = 3 [json_name = "role"];
-  Type type = 4 [json_name = "type"];
-  string content = 5 [json_name = "content"];
-  google.protobuf.Timestamp date = 6 [json_name = "date"];
-  bytes raw = 7 [json_name = "raw"];
-  bytes flags = 8 [json_name = "flags"];
-
-  map<string, string> headers = 10 [json_name = "headers"];
-  map<string, string> meta = 11 [json_name = "meta"];
-  repeated Attachment attachments = 12 [json_name = "attachments"];
-}
-
-message Ticket {
-  string ticket_id = 1 [json_name = "ticket_id"];
-  string thread_id = 2 [json_name = "thread_id"];
-  string to = 3 [json_name = "to"];
-  EmailAddress from = 4 [json_name = "from"];
-  bytes flags = 5 [json_name = "flags"];
-  google.protobuf.Timestamp created_at = 6 [json_name = "created_at"];
-  google.protobuf.Timestamp updated_at = 7 [json_name = "updated_at"];
-  uint32 version = 8 [json_name = "version"];
-
-  repeated Message messages = 10 [json_name = "messages"];
-  map<string, string> meta = 11 [json_name = "meta"];
-  repeated string tags = 12 [json_name = "tags"];
-
-  repeated string message_ids = 100 [json_name = "message_ids"];
-  repeated string subjects = 101 [json_name = "subjects"];
-}

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů