status-im/status-go

View on GitHub
protocol/requests/community_metrics_request.go

Summary

Maintainability
A
0 mins
Test Coverage
C
77%
package requests

import (
    "errors"

    "github.com/status-im/status-go/eth-node/types"
)

var ErrNoCommunityID = errors.New("community metrics request has no community id")
var ErrInvalidTimestampIntervals = errors.New("community metrics request invalid time intervals")

type CommunityMetricsRequestType uint

const (
    CommunityMetricsRequestMessagesTimestamps CommunityMetricsRequestType = iota
    CommunityMetricsRequestMessagesCount
    CommunityMetricsRequestMembers
    CommunityMetricsRequestControlNodeUptime
)

type MetricsIntervalRequest struct {
    StartTimestamp uint64 `json:"startTimestamp"`
    EndTimestamp   uint64 `json:"endTimestamp"`
}

type CommunityMetricsRequest struct {
    CommunityID types.HexBytes              `json:"communityId"`
    Type        CommunityMetricsRequestType `json:"type"`
    Intervals   []MetricsIntervalRequest    `json:"intervals"`
}

func (r *CommunityMetricsRequest) Validate() error {
    if len(r.CommunityID) == 0 {
        return ErrNoCommunityID
    }

    for _, interval := range r.Intervals {
        if interval.StartTimestamp == 0 || interval.EndTimestamp == 0 || interval.StartTimestamp >= interval.EndTimestamp {
            return ErrInvalidTimestampIntervals
        }
    }

    return nil
}