Select Git revision
item.go 1.45 KiB
package id
import (
"fmt"
"git.perx.ru/perxis/perxis-go/pkg/items"
)
const (
Item = "item"
ItemsPrefix = "items"
)
type ItemId struct {
CollectionId
ItemID string `json:"item_id,omitempty" bson:"item_id,omitempty"`
}
var _ Descriptor = &ItemId{}
func (i *ItemId) New() Descriptor {
return &ItemId{}
}
func (i *ItemId) Type() string { return Item }
func (i *ItemId) String() string {
return Join(i.CollectionId.String(), ItemsPrefix, i.ItemID)
}
func (i *ItemId) Map() map[string]any {
m := i.CollectionId.Map()
m["item_id"] = i.ItemID
m["type"] = Item
return m
}
func (i *ItemId) FromParts(parts []string) error {
if len(parts) != 8 || parts[6] != ItemsPrefix {
return ErrInvalidID
}
if err := i.CollectionId.FromParts(parts[:6]); err != nil {
return err
}
i.ItemID = parts[7]
return nil
}
func (i *ItemId) FromMap(m map[string]any) error {
i.ItemID = m["item_id"].(string)
if i.ItemID == "" {
return fmt.Errorf("%w: ItemId required", ErrInvalidID)
}
return i.CollectionId.FromMap(m)
}
func (i *ItemId) Validate() error {
if i.ItemID == "" {
return fmt.Errorf("%w: ItemId required", ErrInvalidID)
}
return i.CollectionId.Validate()
}
func NewItemId(i items.Item) *ObjectId {
return &ObjectId{Descriptor: &ItemId{
CollectionId: CollectionId{
EnvironmentId: EnvironmentId{
SpaceId: SpaceId{
SpaceID: i.SpaceID,
},
EnvironmentID: i.EnvID,
},
CollectionID: i.CollectionID,
},
ItemID: i.ID,
}}
}