2020-11-09 13:19:03 +01:00
|
|
|
package utils
|
|
|
|
|
|
|
|
import (
|
2021-09-16 21:31:02 +02:00
|
|
|
"encoding/json"
|
2022-03-26 00:21:56 +01:00
|
|
|
"reflect"
|
2021-07-08 16:36:43 +02:00
|
|
|
"time"
|
2021-10-05 15:52:59 +02:00
|
|
|
|
|
|
|
mm_model "github.com/mattermost/mattermost-server/v6/model"
|
2020-11-09 13:19:03 +01:00
|
|
|
)
|
|
|
|
|
2021-10-05 15:52:59 +02:00
|
|
|
type IDType byte
|
|
|
|
|
|
|
|
const (
|
2022-03-22 15:24:34 +01:00
|
|
|
IDTypeNone IDType = '7'
|
|
|
|
IDTypeTeam IDType = 't'
|
|
|
|
IDTypeBoard IDType = 'b'
|
|
|
|
IDTypeCard IDType = 'c'
|
|
|
|
IDTypeView IDType = 'v'
|
|
|
|
IDTypeSession IDType = 's'
|
|
|
|
IDTypeUser IDType = 'u'
|
|
|
|
IDTypeToken IDType = 'k'
|
|
|
|
IDTypeBlock IDType = 'a'
|
2021-10-05 15:52:59 +02:00
|
|
|
)
|
2020-11-09 13:19:03 +01:00
|
|
|
|
2021-10-05 15:52:59 +02:00
|
|
|
// NewId is a globally unique identifier. It is a [A-Z0-9] string 27
|
|
|
|
// characters long. It is a UUID version 4 Guid that is zbased32 encoded
|
|
|
|
// with the padding stripped off, and a one character alpha prefix indicating the
|
|
|
|
// type of entity or a `7` if unknown type.
|
|
|
|
func NewID(idType IDType) string {
|
|
|
|
return string(idType) + mm_model.NewId()
|
2020-11-09 13:19:03 +01:00
|
|
|
}
|
2021-07-08 16:36:43 +02:00
|
|
|
|
|
|
|
// GetMillis is a convenience method to get milliseconds since epoch.
|
|
|
|
func GetMillis() int64 {
|
2021-10-05 15:52:59 +02:00
|
|
|
return mm_model.GetMillis()
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetMillisForTime is a convenience method to get milliseconds since epoch for provided Time.
|
|
|
|
func GetMillisForTime(thisTime time.Time) int64 {
|
|
|
|
return mm_model.GetMillisForTime(thisTime)
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetTimeForMillis is a convenience method to get time.Time for milliseconds since epoch.
|
|
|
|
func GetTimeForMillis(millis int64) time.Time {
|
|
|
|
return mm_model.GetTimeForMillis(millis)
|
|
|
|
}
|
|
|
|
|
|
|
|
// SecondsToMillis is a convenience method to convert seconds to milliseconds.
|
|
|
|
func SecondsToMillis(seconds int64) int64 {
|
|
|
|
return seconds * 1000
|
2021-07-08 16:36:43 +02:00
|
|
|
}
|
2021-09-16 21:31:02 +02:00
|
|
|
|
|
|
|
func StructToMap(v interface{}) (m map[string]interface{}) {
|
|
|
|
b, _ := json.Marshal(v)
|
|
|
|
_ = json.Unmarshal(b, &m)
|
|
|
|
return
|
|
|
|
}
|
2022-03-26 00:21:56 +01:00
|
|
|
|
|
|
|
func intersection(a []interface{}, b []interface{}) []interface{} {
|
|
|
|
set := make([]interface{}, 0)
|
|
|
|
hash := make(map[interface{}]bool)
|
|
|
|
av := reflect.ValueOf(a)
|
|
|
|
bv := reflect.ValueOf(b)
|
|
|
|
|
|
|
|
for i := 0; i < av.Len(); i++ {
|
|
|
|
el := av.Index(i).Interface()
|
|
|
|
hash[el] = true
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := 0; i < bv.Len(); i++ {
|
|
|
|
el := bv.Index(i).Interface()
|
|
|
|
if _, found := hash[el]; found {
|
|
|
|
set = append(set, el)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return set
|
|
|
|
}
|
|
|
|
|
|
|
|
func Intersection(x ...[]interface{}) []interface{} {
|
|
|
|
if len(x) == 0 {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(x) == 1 {
|
|
|
|
return x[0]
|
|
|
|
}
|
|
|
|
|
|
|
|
result := x[0]
|
|
|
|
i := 1
|
|
|
|
for i < len(x) {
|
|
|
|
result = intersection(result, x[i])
|
|
|
|
i++
|
|
|
|
}
|
|
|
|
|
|
|
|
return result
|
|
|
|
}
|