You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.5 KiB
Go
48 lines
1.5 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type Article struct {
|
|
ID string `mapstructure:"id" json:"-" validate:"uuid_rfc4122"`
|
|
InReplyToID string `mapstructure:"in-reply-to-id" json:"-" validate:"omitempty,uuid_rfc4122"`
|
|
From string `mapstructure:"from" json:"-" validate:"required,printascii"`
|
|
Newsgroup string `mapstructure:"newsgroup" json:"-" validate:"required,min=2,max=80,printascii,lowercase"`
|
|
Subject string `mapstructure:"subject" json:"-" validate:"required,min=2,max=128,printascii"`
|
|
Date int64 `mapstructure:"date" json:"-" validate:"required,number"`
|
|
Organization string `mapstructure:"organization" json:"-" validate:"printascii"`
|
|
Body string `mapstructure:"body" json:"-" validate:"required,min=3,max=524288"`
|
|
|
|
Replies []*Article `mapstructure:"-" json:"-" validate:"-"`
|
|
LatestReply int64 `mapstructure:"-" json:"-" validate:"-"`
|
|
|
|
Read bool `mapstructure:"-" json:"read" validate:"-"`
|
|
}
|
|
|
|
func NewArticle() (*Article) {
|
|
article := new(Article)
|
|
|
|
id, _ := uuid.NewUUID()
|
|
article.ID = id.String()
|
|
|
|
article.Date = time.Now().UnixNano() / int64(time.Millisecond)
|
|
|
|
return article
|
|
}
|
|
|
|
func (article *Article) IsValid() (bool, error) {
|
|
validate := validator.New()
|
|
errs := validate.Struct(article)
|
|
if errs != nil {
|
|
// validationErrors := errs.(validator.ValidationErrors)
|
|
return false, errs
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|