| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 8859924 commit e3cac34
8 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -17,8 +17,8 @@ buildscript { | |||
| 17 | 17 | } | |
| 18 | 18 | ||
| 19 | 19 | plugins { | |
| 20 | - id 'com.android.application' version '8.7.3' apply false | ||
| 21 | - id 'com.android.library' version '8.7.3' apply false | ||
| 20 | + id 'com.android.application' version '8.8.0' apply false | ||
| 21 | + id 'com.android.library' version '8.8.0' apply false | ||
| 22 | 22 | id 'org.jetbrains.kotlin.android' version '1.6.21' apply false | |
| 23 | 23 | } | |
| 24 | 24 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,6 +1,6 @@ | |||
| 1 | 1 | #Thu Jun 23 15:32:32 EEST 2022 | |
| 2 | 2 | distributionBase=GRADLE_USER_HOME | |
| 3 | - distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip | ||
| 3 | + distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip | ||
| 4 | 4 | distributionPath=wrapper/dists | |
| 5 | 5 | zipStorePath=wrapper/dists | |
| 6 | 6 | zipStoreBase=GRADLE_USER_HOME | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -51,3 +51,10 @@ REDIS_URL=redis://@redis:6379 | |||
| 51 | 51 | # [optional] If you would like to use uptrace.dev for distributed tracing, you can set the DSN here. | |
| 52 | 52 | # This is optional and you can leave it empty if you don't want to use uptrace | |
| 53 | 53 | UPTRACE_DSN= | |
| 54 | + | ||
| 55 | + | ||
| 56 | + # [optional] Websocket configuration for https://pusher.com if you will like to frontend to update in real time | ||
| 57 | + PUSHER_APP_ID= | ||
| 58 | + PUSHER_KEY= | ||
| 59 | + PUSHER_SECRET= | ||
| 60 | + PUSHER_CLUSTER= | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -35,6 +35,7 @@ require ( | |||
| 35 | 35 | github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 | |
| 36 | 36 | github.com/patrickmn/go-cache v2.1.0+incompatible | |
| 37 | 37 | github.com/pkg/errors v0.9.1 | |
| 38 | + github.com/pusher/pusher-http-go/v5 v5.1.1 | ||
| 38 | 39 | github.com/redis/go-redis/extra/redisotel/v9 v9.7.1 | |
| 39 | 40 | github.com/redis/go-redis/v9 v9.7.3 | |
| 40 | 41 | github.com/rs/zerolog v1.34.0 | |
@@ -151,13 +152,13 @@ require ( | |||
| 151 | 152 | go.opentelemetry.io/proto/otlp v1.5.0 // indirect | |
| 152 | 153 | go.uber.org/multierr v1.11.0 // indirect | |
| 153 | 154 | go.uber.org/zap v1.27.0 // indirect | |
| 154 | - golang.org/x/crypto v0.36.0 // indirect | ||
| 155 | + golang.org/x/crypto v0.37.0 // indirect | ||
| 155 | 156 | golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect | |
| 156 | 157 | golang.org/x/net v0.38.0 // indirect | |
| 157 | 158 | golang.org/x/oauth2 v0.27.0 // indirect | |
| 158 | - golang.org/x/sync v0.12.0 // indirect | ||
| 159 | - golang.org/x/sys v0.31.0 // indirect | ||
| 160 | - golang.org/x/text v0.23.0 // indirect | ||
| 159 | + golang.org/x/sync v0.13.0 // indirect | ||
| 160 | + golang.org/x/sys v0.32.0 // indirect | ||
| 161 | + golang.org/x/text v0.24.0 // indirect | ||
| 161 | 162 | golang.org/x/time v0.10.0 // indirect | |
| 162 | 163 | golang.org/x/tools v0.31.0 // indirect | |
| 163 | 164 | google.golang.org/appengine v1.6.8 // indirect | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -246,6 +246,8 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgm | |||
| 246 | 246 | github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= | |
| 247 | 247 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | |
| 248 | 248 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | |
| 249 | + github.com/pusher/pusher-http-go/v5 v5.1.1 h1:ZLUGdLA8yXMvByafIkS47nvuXOHrYmlh4bsQvuZnYVQ= | ||
| 250 | + github.com/pusher/pusher-http-go/v5 v5.1.1/go.mod h1:Ibji4SGoUDtOy7CVRhCiEpgy+n5Xv6hSL/QqYOhmWW8= | ||
| 249 | 251 | github.com/redis/go-redis/extra/rediscmd/v9 v9.7.1 h1:+o7rrBoj54t8fqQSmnwRLdLzp5rps7bW4xiYZp2MBjs= | |
| 250 | 252 | github.com/redis/go-redis/extra/rediscmd/v9 v9.7.1/go.mod h1:bWIjbxmrAk9eKGg9LSko3oQefoYGyWV4xzNS55PgL60= | |
| 251 | 253 | github.com/redis/go-redis/extra/redisotel/v9 v9.7.1 h1:LJF39lvUagUpKfL2/gZIp5vHv3AwXt9zOZ/Xual/CzI= | |
@@ -363,11 +365,12 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= | |||
| 363 | 365 | go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= | |
| 364 | 366 | golang.org/x/crypto v0.0.0-20181029175232-7e6ffbd03851/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | |
| 365 | 367 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | |
| 368 | + golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||
| 366 | 369 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | |
| 367 | 370 | golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= | |
| 368 | 371 | golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= | |
| 369 | - golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= | ||
| 370 | - golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= | ||
| 372 | + golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= | ||
| 373 | + golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= | ||
| 371 | 374 | golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= | |
| 372 | 375 | golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= | |
| 373 | 376 | golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= | |
@@ -378,6 +381,7 @@ golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= | |||
| 378 | 381 | golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= | |
| 379 | 382 | golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |
| 380 | 383 | golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |
| 384 | + golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||
| 381 | 385 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | |
| 382 | 386 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | |
| 383 | 387 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= | |
@@ -393,10 +397,11 @@ golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT | |||
| 393 | 397 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |
| 394 | 398 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |
| 395 | 399 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |
| 396 | - golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= | ||
| 397 | - golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= | ||
| 400 | + golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= | ||
| 401 | + golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= | ||
| 398 | 402 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |
| 399 | 403 | golang.org/x/sys v0.0.0-20190225065934-cc5685c2db12/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |
| 404 | + golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
| 400 | 405 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |
| 401 | 406 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
| 402 | 407 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
@@ -409,8 +414,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
| 409 | 414 | golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |
| 410 | 415 | golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | |
| 411 | 416 | golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | |
| 412 | - golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= | ||
| 413 | - golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= | ||
| 417 | + golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= | ||
| 418 | + golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= | ||
| 414 | 419 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | |
| 415 | 420 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= | |
| 416 | 421 | golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= | |
@@ -425,8 +430,8 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= | |||
| 425 | 430 | golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= | |
| 426 | 431 | golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= | |
| 427 | 432 | golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= | |
| 428 | - golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= | ||
| 429 | - golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= | ||
| 433 | + golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= | ||
| 434 | + golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= | ||
| 430 | 435 | golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= | |
| 431 | 436 | golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= | |
| 432 | 437 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | |
@@ -457,6 +462,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 | |||
| 457 | 462 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | |
| 458 | 463 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | |
| 459 | 464 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | |
| 465 | + gopkg.in/stretchr/testify.v1 v1.2.2 h1:yhQC6Uy5CqibAIlk1wlusa/MJ3iAN49/BsR/dCCKz3M= | ||
| 466 | + gopkg.in/stretchr/testify.v1 v1.2.2/go.mod h1:QI5V/q6UbPmuhtm10CaFZxED9NreB8PnFYN9JcR6TxU= | ||
| 460 | 467 | gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | |
| 461 | 468 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | |
| 462 | 469 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -9,6 +9,8 @@ import ( | |||
| 9 | 9 | "strconv" | |
| 10 | 10 | "time" | |
| 11 | 11 | ||
| 12 | + "github.com/pusher/pusher-http-go/v5" | ||
| 13 | + | ||
| 12 | 14 | "github.com/NdoleStudio/httpsms/docs" | |
| 13 | 15 | ||
| 14 | 16 | otelMetric "go.opentelemetry.io/otel/metric" | |
@@ -149,6 +151,7 @@ func NewContainer(projectID string, version string) (container *Container) { | |||
| 149 | 151 | container.RegisterPhoneAPIKeyListeners() | |
| 150 | 152 | ||
| 151 | 153 | container.RegisterMarketingListeners() | |
| 154 | + container.RegisterWebsocketListeners() | ||
| 152 | 155 | ||
| 153 | 156 | // this has to be last since it registers the /* route | |
| 154 | 157 | container.RegisterSwaggerRoutes() | |
@@ -1142,6 +1145,18 @@ func (container *Container) LemonsqueezyClient() (client *lemonsqueezy.Client) { | |||
| 1142 | 1145 | ) | |
| 1143 | 1146 | } | |
| 1144 | 1147 | ||
| 1148 | + // PusherClient creates a new instance of pusher.Client | ||
| 1149 | + func (container *Container) PusherClient() (client *pusher.Client) { | ||
| 1150 | + container.logger.Debug(fmt.Sprintf("creating %T", client)) | ||
| 1151 | + return &pusher.Client{ | ||
| 1152 | + AppID: os.Getenv("PUSHER_APP_ID"), | ||
| 1153 | + Key: os.Getenv("PUSHER_KEY"), | ||
| 1154 | + Secret: os.Getenv("PUSHER_SECRET"), | ||
| 1155 | + Cluster: os.Getenv("PUSHER_CLUSTER"), | ||
| 1156 | + Secure: true, | ||
| 1157 | + } | ||
| 1158 | + } | ||
| 1159 | + | ||
| 1145 | 1160 | // DiscordClient creates a new instance of discord.Client | |
| 1146 | 1161 | func (container *Container) DiscordClient() (client *discord.Client) { | |
| 1147 | 1162 | container.logger.Debug(fmt.Sprintf("creating %T", client)) | |
@@ -1316,6 +1331,26 @@ func (container *Container) RegisterPhoneAPIKeyListeners() { | |||
| 1316 | 1331 | } | |
| 1317 | 1332 | } | |
| 1318 | 1333 | ||
| 1334 | + // RegisterWebsocketListeners registers event listeners for listeners.WebsocketListener | ||
| 1335 | + func (container *Container) RegisterWebsocketListeners() { | ||
| 1336 | + container.logger.Debug(fmt.Sprintf("registering listeners for %T", listeners.WebsocketListener{})) | ||
| 1337 | + | ||
| 1338 | + if os.Getenv("PUSHER_SECRET") == "" { | ||
| 1339 | + container.logger.Warn(stacktrace.NewError("skipping websocket listeners because the PUSHER_SECRET env variable is not set")) | ||
| 1340 | + return | ||
| 1341 | + } | ||
| 1342 | + | ||
| 1343 | + _, routes := listeners.NewWebsocketListener( | ||
| 1344 | + container.Logger(), | ||
| 1345 | + container.Tracer(), | ||
| 1346 | + container.PusherClient(), | ||
| 1347 | + ) | ||
| 1348 | + | ||
| 1349 | + for event, handler := range routes { | ||
| 1350 | + container.EventDispatcher().Subscribe(event, handler) | ||
| 1351 | + } | ||
| 1352 | + } | ||
| 1353 | + | ||
| 1319 | 1354 | // RegisterWebhookListeners registers event listeners for listeners.WebhookListener | |
| 1320 | 1355 | func (container *Container) RegisterWebhookListeners() { | |
| 1321 | 1356 | container.logger.Debug(fmt.Sprintf("registering listeners for %T", listeners.WebhookListener{})) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -103,7 +103,7 @@ func (h *PhoneAPIKeyHandler) Store(c *fiber.Ctx) error { | |||
| 103 | 103 | // @Failure 404 {object} responses.NotFound | |
| 104 | 104 | // @Failure 422 {object} responses.UnprocessableEntity | |
| 105 | 105 | // @Failure 500 {object} responses.InternalServerError | |
| 106 | - // @Router /messages/{phoneAPIKeyID} [delete] | ||
| 106 | + // @Router /api-keys/{phoneAPIKeyID} [delete] | ||
| 107 | 107 | func (h *PhoneAPIKeyHandler) Delete(c *fiber.Ctx) error { | |
| 108 | 108 | ctx, span, ctxLogger := h.tracer.StartFromFiberCtxWithLogger(c, h.logger) | |
| 109 | 109 | defer span.End() | |
@@ -144,7 +144,7 @@ func (h *PhoneAPIKeyHandler) Delete(c *fiber.Ctx) error { | |||
| 144 | 144 | // @Failure 404 {object} responses.NotFound | |
| 145 | 145 | // @Failure 422 {object} responses.UnprocessableEntity | |
| 146 | 146 | // @Failure 500 {object} responses.InternalServerError | |
| 147 | - // @Router /messages/{phoneAPIKeyID}/phones/{phoneID} [delete] | ||
| 147 | + // @Router /api-keys/{phoneAPIKeyID}/phones/{phoneID} [delete] | ||
| 148 | 148 | func (h *PhoneAPIKeyHandler) DeletePhone(c *fiber.Ctx) error { | |
| 149 | 149 | ctx, span, ctxLogger := h.tracer.StartFromFiberCtxWithLogger(c, h.logger) | |
| 150 | 150 | defer span.End() | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,56 @@ | |||
| 1 | + package listeners | ||
| 2 | + | ||
| 3 | + import ( | ||
| 4 | + "context" | ||
| 5 | + "fmt" | ||
| 6 | + | ||
| 7 | + cloudevents "github.com/cloudevents/sdk-go/v2" | ||
| 8 | + "github.com/palantir/stacktrace" | ||
| 9 | + | ||
| 10 | + "github.com/NdoleStudio/httpsms/pkg/events" | ||
| 11 | + "github.com/NdoleStudio/httpsms/pkg/telemetry" | ||
| 12 | + "github.com/pusher/pusher-http-go/v5" | ||
| 13 | + ) | ||
| 14 | + | ||
| 15 | + // WebsocketListener handles cloud events that send a websocket event to the frontend | ||
| 16 | + type WebsocketListener struct { | ||
| 17 | + logger telemetry.Logger | ||
| 18 | + tracer telemetry.Tracer | ||
| 19 | + client *pusher.Client | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + // NewWebsocketListener creates a new instance of WebsocketListener | ||
| 23 | + func NewWebsocketListener( | ||
| 24 | + logger telemetry.Logger, | ||
| 25 | + tracer telemetry.Tracer, | ||
| 26 | + client *pusher.Client, | ||
| 27 | + ) (l *WebsocketListener, routes map[string]events.EventListener) { | ||
| 28 | + l = &WebsocketListener{ | ||
| 29 | + logger: logger.WithService(fmt.Sprintf("%T", l)), | ||
| 30 | + tracer: tracer, | ||
| 31 | + client: client, | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + return l, map[string]events.EventListener{ | ||
| 35 | + events.EventTypePhoneUpdated: l.onPhoneUpdated, | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + // onPhoneUpdated handles the events.EventTypePhoneUpdated event | ||
| 40 | + func (listener *WebsocketListener) onPhoneUpdated(ctx context.Context, event cloudevents.Event) error { | ||
| 41 | + ctx, span, _ := listener.tracer.StartWithLogger(ctx, listener.logger) | ||
| 42 | + defer span.End() | ||
| 43 | + | ||
| 44 | + var payload events.PhoneUpdatedPayload | ||
| 45 | + if err := event.DataAs(&payload); err != nil { | ||
| 46 | + msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload) | ||
| 47 | + return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + if err := listener.client.Trigger(payload.UserID.String(), event.Type(), event); err != nil { | ||
| 51 | + msg := fmt.Sprintf("cannot trigger websocket [%s] event with ID [%s] for user with ID [%s]", event.Type(), event.ID(), payload.UserID) | ||
| 52 | + return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + return nil | ||
| 56 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments