113 lines
2.4 KiB
Go
113 lines
2.4 KiB
Go
package badgesmodel
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
type BadgeType string
|
|
type BadgeID string
|
|
|
|
type Ownership struct {
|
|
User string `json:"user"`
|
|
GrantedBy string `json:"granted_by"`
|
|
Badge BadgeID `json:"badge"`
|
|
Reason string `json:"reason"`
|
|
Time time.Time `json:"time"`
|
|
}
|
|
|
|
type OwnershipList []Ownership
|
|
|
|
type Badge struct {
|
|
ID BadgeID `json:"id"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
Image string `json:"image"`
|
|
ImageType ImageType `json:"image_type"`
|
|
Multiple bool `json:"multiple"`
|
|
Type BadgeType `json:"type"`
|
|
CreatedBy string `json:"created_by"`
|
|
}
|
|
|
|
type UserBadge struct {
|
|
Badge
|
|
Ownership
|
|
GrantedByUsername string `json:"granted_by_name"`
|
|
TypeName string `json:"type_name"`
|
|
}
|
|
|
|
type BadgeDetails struct {
|
|
Badge
|
|
Owners []Ownership `json:"owners"`
|
|
CreatedByUsername string `json:"created_by_username"`
|
|
TypeName string `json:"type_name"`
|
|
}
|
|
|
|
type AllBadgesBadge struct {
|
|
Badge
|
|
Granted int `json:"granted"`
|
|
GrantedTimes int `json:"granted_times"`
|
|
TypeName string `json:"type_name"`
|
|
}
|
|
|
|
type BadgeTypeDefinition struct {
|
|
ID BadgeType `json:"id"`
|
|
Name string `json:"name"`
|
|
Frame string `json:"frame"`
|
|
CreatedBy string `json:"created_by"`
|
|
CanGrant PermissionScheme `json:"can_grant"`
|
|
CanCreate PermissionScheme `json:"can_create"`
|
|
}
|
|
|
|
type PermissionScheme struct {
|
|
Everyone bool `json:"everyone"`
|
|
Roles map[string]bool `json:"roles"`
|
|
AllowList map[string]bool `json:"allow_list"`
|
|
BlockList map[string]bool `json:"block_list"`
|
|
}
|
|
|
|
type BadgeTypeList []*BadgeTypeDefinition
|
|
|
|
type ImageType string
|
|
|
|
type EnsureBadgesRequest struct {
|
|
Badges []*Badge
|
|
BotID string
|
|
}
|
|
|
|
type GrantBadgeRequest struct {
|
|
BadgeID BadgeID
|
|
UserID string
|
|
BotID string
|
|
Reason string
|
|
}
|
|
|
|
type Subscription struct {
|
|
TypeID BadgeType
|
|
ChannelID string
|
|
}
|
|
|
|
func (b Badge) IsValid() bool {
|
|
return len(b.Name) <= NameMaxLength &&
|
|
len(b.Description) <= DescriptionMaxLength &&
|
|
b.Image != ""
|
|
}
|
|
|
|
func (l OwnershipList) IsOwned(user string, badge BadgeID) bool {
|
|
for _, ownership := range l {
|
|
if user == ownership.User && badge == ownership.Badge {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (l BadgeTypeList) GetType(id BadgeType) *BadgeTypeDefinition {
|
|
for _, t := range l {
|
|
if t.ID == id {
|
|
return t
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|