2023-12-20 07:03:03 +00:00
|
|
|
package domain
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/url"
|
|
|
|
)
|
|
|
|
|
2023-12-27 08:07:40 +00:00
|
|
|
const (
|
|
|
|
versionCodeMinLength = 2
|
|
|
|
versionCodeMaxLength = 2
|
|
|
|
)
|
|
|
|
|
2023-12-20 07:03:03 +00:00
|
|
|
type Version struct {
|
|
|
|
code string
|
|
|
|
name string
|
|
|
|
host string
|
|
|
|
timezone string
|
|
|
|
}
|
|
|
|
|
2023-12-28 10:56:59 +00:00
|
|
|
var versionModelName = "Version"
|
|
|
|
|
2023-12-20 07:03:03 +00:00
|
|
|
// UnmarshalVersionFromDatabase unmarshals Version from the database.
|
|
|
|
//
|
|
|
|
// It should be used only for unmarshalling from the database!
|
|
|
|
// You can't use UnmarshalVersionFromDatabase as constructor - It may put domain into the invalid state!
|
|
|
|
func UnmarshalVersionFromDatabase(
|
|
|
|
code string,
|
|
|
|
name string,
|
|
|
|
host string,
|
|
|
|
timezone string,
|
|
|
|
) (Version, error) {
|
|
|
|
if code == "" {
|
2023-12-28 10:56:59 +00:00
|
|
|
return Version{}, ValidationError{
|
|
|
|
Model: versionModelName,
|
|
|
|
Field: "code",
|
|
|
|
Err: ErrRequired,
|
|
|
|
}
|
2023-12-20 07:03:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if name == "" {
|
2023-12-28 10:56:59 +00:00
|
|
|
return Version{}, ValidationError{
|
|
|
|
Model: versionModelName,
|
|
|
|
Field: "name",
|
|
|
|
Err: ErrRequired,
|
|
|
|
}
|
2023-12-20 07:03:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if host == "" {
|
2023-12-28 10:56:59 +00:00
|
|
|
return Version{}, ValidationError{
|
|
|
|
Model: versionModelName,
|
|
|
|
Field: "host",
|
|
|
|
Err: ErrRequired,
|
|
|
|
}
|
2023-12-20 07:03:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if timezone == "" {
|
2023-12-28 10:56:59 +00:00
|
|
|
return Version{}, ValidationError{
|
|
|
|
Model: versionModelName,
|
|
|
|
Field: "timezone",
|
|
|
|
Err: ErrRequired,
|
|
|
|
}
|
2023-12-20 07:03:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return Version{
|
|
|
|
code: code,
|
|
|
|
name: name,
|
|
|
|
host: host,
|
|
|
|
timezone: timezone,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v Version) Code() string {
|
|
|
|
return v.code
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v Version) Name() string {
|
|
|
|
return v.name
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v Version) Host() string {
|
|
|
|
return v.host
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v Version) Timezone() string {
|
|
|
|
return v.timezone
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v Version) URL() *url.URL {
|
|
|
|
return &url.URL{
|
|
|
|
Scheme: "https",
|
|
|
|
Host: v.host,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
type Versions []Version
|
|
|
|
|
|
|
|
type VersionSort uint8
|
|
|
|
|
|
|
|
const (
|
|
|
|
VersionSortCodeASC VersionSort = iota + 1
|
|
|
|
VersionSortCodeDESC
|
|
|
|
)
|
|
|
|
|
|
|
|
type ListVersionsParams struct {
|
|
|
|
sort []VersionSort
|
|
|
|
}
|
|
|
|
|
2023-12-27 08:07:40 +00:00
|
|
|
const listVersionsParamsModelName = "ListVersionsParams"
|
|
|
|
|
2023-12-20 07:03:03 +00:00
|
|
|
func NewListVersionsParams() ListVersionsParams {
|
|
|
|
return ListVersionsParams{sort: []VersionSort{VersionSortCodeASC}}
|
|
|
|
}
|
|
|
|
|
|
|
|
const (
|
|
|
|
versionSortMinLength = 1
|
|
|
|
versionSortMaxLength = 1
|
|
|
|
)
|
|
|
|
|
2023-12-24 10:44:20 +00:00
|
|
|
func (params *ListVersionsParams) Sort() []VersionSort {
|
|
|
|
return params.sort
|
|
|
|
}
|
|
|
|
|
2023-12-20 07:03:03 +00:00
|
|
|
func (params *ListVersionsParams) SetSort(sort []VersionSort) error {
|
|
|
|
if err := validateSliceLen(sort, versionSortMinLength, versionSortMaxLength); err != nil {
|
|
|
|
return ValidationError{
|
2023-12-27 08:07:40 +00:00
|
|
|
Model: listVersionsParamsModelName,
|
2023-12-20 07:03:03 +00:00
|
|
|
Field: "sort",
|
|
|
|
Err: err,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
params.sort = sort
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|