dcbot/internal/domain/group.go
Dawid Wysokiński aec3a3736d
All checks were successful
continuous-integration/drone/push Build is passing
feat: add new commands - group set channel-losses/channel-gains (#13)
Reviewed-on: #13
2022-10-11 05:05:35 +00:00

124 lines
2.4 KiB
Go

package domain
import (
"fmt"
"time"
)
type Group struct {
ID string
ServerID string // Discord server ID
ChannelGains string
ChannelLosses string
ServerKey string // Tribal Wars server key
VersionCode string
CreatedAt time.Time
}
type CreateGroupParams struct {
serverID string
serverKey string
versionCode string
channelGains string
channelLosses string
}
func NewCreateGroupParams(serverID, versionCode, serverKey, channelGains, channelLosses string) (CreateGroupParams, error) {
if serverID == "" {
return CreateGroupParams{}, RequiredError{
Field: "ServerID",
}
}
if versionCode == "" {
return CreateGroupParams{}, RequiredError{
Field: "VersionCode",
}
}
if serverKey == "" {
return CreateGroupParams{}, RequiredError{
Field: "ServerKey",
}
}
return CreateGroupParams{
serverID: serverID,
serverKey: serverKey,
versionCode: versionCode,
channelGains: channelGains,
channelLosses: channelLosses,
}, nil
}
func (c CreateGroupParams) ServerID() string {
return c.serverID
}
func (c CreateGroupParams) VersionCode() string {
return c.versionCode
}
func (c CreateGroupParams) ServerKey() string {
return c.serverKey
}
func (c CreateGroupParams) ChannelGains() string {
return c.channelGains
}
func (c CreateGroupParams) ChannelLosses() string {
return c.channelLosses
}
type UpdateGroupParams struct {
ChannelGains NullString
ChannelLosses NullString
ServerKey NullString
VersionCode NullString
}
func (u UpdateGroupParams) IsZero() bool {
return !u.ChannelGains.Valid &&
!u.ChannelLosses.Valid &&
!u.VersionCode.Valid &&
!u.ServerKey.Valid
}
type ListGroupsParams struct {
ServerIDs []string
}
type GroupLimitReachedError struct {
Current int // current number of groups
Limit int // maximum number of groups
}
func (e GroupLimitReachedError) Error() string {
return fmt.Sprintf("group limit has been reached (%d/%d)", e.Current, e.Limit)
}
func (e GroupLimitReachedError) UserError() string {
return e.Error()
}
func (e GroupLimitReachedError) Code() ErrorCode {
return ErrorCodeValidationError
}
type GroupNotFoundError struct {
ID string
}
func (e GroupNotFoundError) Error() string {
return fmt.Sprintf("group (ID=%s) not found", e.ID)
}
func (e GroupNotFoundError) UserError() string {
return e.Error()
}
func (e GroupNotFoundError) Code() ErrorCode {
return ErrorCodeEntityNotFound
}