package util import ( "crypto/rand" "encoding/hex" "regexp" "time" ) func Round64(input float64) int64 { if input < 0 { return int64(input - 0.5) } return int64(input + 0.5) } func TimeToMs(date time.Time) int64 { return date.UnixNano() / 1000000 } func MsToTime(ms int64) time.Time { return time.Unix(0, ms*1000000) } func NewGuid() (string, error) { byteArray := make([]byte, 16) _, err := rand.Read(byteArray) if err != nil { return "", err } return hex.EncodeToString(byteArray), nil } func NewInviteId() (string, error) { byteArray := make([]byte, 4) _, err := rand.Read(byteArray) if err != nil { return "", err } return hex.EncodeToString(byteArray), nil } func NewUUID() string { guid, err := NewGuid() if err != nil { // Fallback to timestamp-based UUID if random generation fails return hex.EncodeToString([]byte(time.Now().Format("20060102150405"))) } return guid } func IsValidUUID(uuid string) bool { // Check if the string is a valid 32-character hex string (16 bytes * 2 hex chars) if len(uuid) != 32 { return false } // Check if all characters are valid hex characters matched, _ := regexp.MatchString("^[0-9a-f]{32}$", uuid) return matched }