Compare commits

...

4 Commits
v1.0.8 ... main

2 changed files with 129 additions and 0 deletions

View File

@ -2,6 +2,9 @@ package push_common
import (
"context"
"encoding/json"
"io"
"net/http"
"strconv"
"strings"
@ -95,6 +98,27 @@ type TextVariant struct {
Message string `json:"message"`
}
func FindTextVariantByLang(textVariants []*TextVariant, lang int) *TextVariant {
for _, textVariant := range textVariants {
if textVariant.Lang == lang {
return textVariant
}
}
return nil
}
func ReadTextVariantsFromRequest(request *http.Request, textVariants *[]*TextVariant) error {
b, err := io.ReadAll(request.Body)
if err != nil {
return err
}
if b == nil {
return errors.New("Can not read text variants. Request body bytes is nil.")
}
return json.Unmarshal(b, textVariants)
}
//-----------------------------------------------------------------------------
type PushRequest struct {
@ -203,3 +227,65 @@ type PushPayload struct {
ImageUrl string `json:"imageUrl"`
TextVariants []*TextVariant `json:"textVariants"`
}
func ReadPayloadFromRequest(request *http.Request, payload *PushPayload) error {
b, err := io.ReadAll(request.Body)
if err != nil {
return err
}
if b == nil {
return errors.New("Can not read text variants. Request body bytes is nil.")
}
return json.Unmarshal(b, payload)
}
//-----------------------------------------------------------------------------
type Push struct {
Id uint32 `json:"id"`
Status int `json:"status"`
Ctime uint32 `json:"ctime"`
Mtime uint32 `json:"mtime"`
Ttl uint32 `json:"ttl"`
Stime uint32 `json:"stime"`
Srtime uint32 `json:"srtime"`
Info string `json:"info"`
Label string `json:"label"`
MaxVersion string `json:"maxVersion,omitempty"`
Platforms []uint32 `json:"platforms,omitempty"`
PlayersIds []uint32 `json:"playersIds,omitempty"`
Title string `json:"title"`
Message string `json:"message"`
TextVariants []*TextVariant `json:"textVariants"` // For incoming push only.
Jobs []*PushJob `json:"jobs"` // Incoming push has no jobs.
Total int `json:"total"`
Sent int `json:"sent"` // Incoming push has not field "Sent".
Fails int `json:"fails"` // Incoming push has not field "Fails".
ForTest bool `json:"forTest,omitempty"`
ImageUrl string `json:"imageUrl,omitempty"`
}
func (push *Push) IsDone() bool {
return push.Total == (push.Sent + push.Fails)
}
//-----------------------------------------------------------------------------
type JobId uint32
type PushJob struct {
Id JobId `json:"id"`
Platform Platform `json:"platform"`
Message string `json:"message"`
Title string `json:"title"`
Language int `json:"language"`
Utc_delta int `json:"utc_delta"`
Total int `json:"total"`
Sent int `json:"sent"`
Fails int `json:"fails"`
}
func (job *PushJob) IsDone() bool {
return job.Total == (job.Sent + job.Fails)
}

43
push_type.go Normal file
View File

@ -0,0 +1,43 @@
package push_common
import "strings"
type PushType uint8
const (
PushType_User PushType = 1
PushType_Auto PushType = 2
)
func PushTypeToString(pt PushType) string {
switch pt {
case PushType_User:
return "user"
case PushType_Auto:
return "auto"
}
return "error"
}
const AutoPushInfoPrefix = "#"
// Автоматическое пуш-оповещение - пуш-оповещение,
// которое было создано автоматически (а не пользователем инсайдера).
func IsAutoPush(pushInfo string) bool {
return strings.HasPrefix(pushInfo, AutoPushInfoPrefix)
}
// Пользовательское пуш-оповещение - пуш-оповещение,
// которое было создано пользователем инсайдера (а не автоматически).
func IsUserPush(pushInfo string) bool {
isAuto := IsAutoPush(pushInfo)
return !isAuto
}
func ConvertPushInfoToType(pushInfo string) PushType {
if IsAutoPush(pushInfo) {
return PushType_Auto
} else {
return PushType_User
}
}