devicemanager

package module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 7, 2026 License: MIT Imports: 9 Imported by: 0

README

device_manager

Network device inventory module for the Velty ecosystem: tenant-scoped CRUD registry of computers, printers, servers and other office/network equipment.

Ops

Op Action Resource
list_devices read device
get_device read device
create_device create device
update_device update device
upsert_device create/update device
deactivate_device update device
delete_device delete device

Quick Start

import devicemanager "github.com/veltylabs/device_manager"

dm, err := devicemanager.New(db, devicemanager.Deps{
    IDs:       idGenerator,    // model.IDGenerator, required
    Publisher: eventPublisher, // events.Publisher, optional
})
dm.MountOps(opRegistry)    // router.OpRegistry
view := dm.NewView(caller) // router.Caller -> view.Presenter

Key files

File Purpose
model.go Device definition, errors, event topics
model_orm.go Generated by ormc — do not edit
module.go Module, New, service methods
ops.go router.OpModuleMountOps + handlers
view.go NewView(caller) view.Presenter

Documentation

Document Description
ARCHITECTURE.md Domain scope, entities, patterns, Ops table
Database Diagram Mermaid ERD

Documentation

Index

Constants

View Source
const (
	DeviceTypeComputer = "computer"
	DeviceTypePrinter  = "printer"
	DeviceTypeServer   = "server"
	DeviceTypeOther    = "other"
)

Exported, greppable, the ONLY place these literals exist — enum-valued column rule (AGENTS.md).

View Source
const (
	TopicDeviceCreated     = "device_manager.device.created"
	TopicDeviceUpdated     = "device_manager.device.updated"
	TopicDeviceDeactivated = "device_manager.device.deactivated"
	TopicDeviceDeleted     = "device_manager.device.deleted"
)

<module>.<entity>.<past-tense-verb> — tenant_id goes in the event payload, never the topic name.

View Source
const (
	OpListDevices      = "list_devices"
	OpGetDevice        = "get_device"
	OpCreateDevice     = "create_device"
	OpUpdateDevice     = "update_device"
	OpUpsertDevice     = "upsert_device"
	OpDeactivateDevice = "deactivate_device"
	OpDeleteDevice     = "delete_device"
)

Variables

View Source
var (
	BaseBool_FieldBool = model.Bool()
	BaseInt_FieldInt   = model.Int()
)

Helpers to satisfy ormc's AST static type parser when the same Kind constructor is reused across more than one Definition (same defensive pattern as item_catalog/model.go).

View Source
var (
	ErrNotFound        = fmt.Err("device not found")
	ErrIPAlreadyExists = fmt.Err("device ip already exists")
)
View Source
var DeactivateDeviceArgsModel = model.Definition{
	Name: "deactivate_device_args",
	Fields: model.Fields{
		{Name: "tenant_id", Type: model.Text()},
		{Name: "id", Type: model.Text()},
	},
}
View Source
var DeleteDeviceArgsModel = model.Definition{
	Name: "delete_device_args",
	Fields: model.Fields{
		{Name: "tenant_id", Type: model.Text()},
		{Name: "id", Type: model.Text()},
	},
}
View Source
var DeviceModel = model.Definition{
	Name: "device",
	Fields: model.Fields{
		{Name: "id", Type: model.Text(), DB: &model.FieldDB{PK: true}, OmitEmpty: true},
		{Name: "tenant_id", Type: model.Text(), NotNull: true},
		{Name: "name", Type: input.Text(), NotNull: true, Permitted: model.Permitted{Minimum: 1, Maximum: 255}},
		{Name: "ip", Type: input.IP(), NotNull: true},
		{Name: "type", Type: deviceType(), NotNull: true},
		{Name: "location", Type: input.Text(), OmitEmpty: true, Permitted: model.Permitted{Maximum: 255}},
		{Name: "is_active", Type: input.Checkbox(), NotNull: true},
		{Name: "updated_at", Type: BaseInt_FieldInt, OmitEmpty: true},
	},
}
View Source
var Device_ = struct {
	Id        string
	TenantId  string
	Name      string
	Ip        string
	Type      string
	Location  string
	IsActive  string
	UpdatedAt string
}{
	Id:        "id",
	TenantId:  "tenant_id",
	Name:      "name",
	Ip:        "ip",
	Type:      "type",
	Location:  "location",
	IsActive:  "is_active",
	UpdatedAt: "updated_at",
}
View Source
var GetDeviceArgsModel = model.Definition{
	Name: "get_device_args",
	Fields: model.Fields{
		{Name: "tenant_id", Type: model.Text()},
		{Name: "id", Type: model.Text()},
	},
}
View Source
var ListDevicesArgsModel = model.Definition{
	Name: "list_devices_args",
	Fields: model.Fields{
		{Name: "tenant_id", Type: model.Text()},
		{Name: "type", Type: model.Text()},
		{Name: "active_only", Type: BaseBool_FieldBool},
		{Name: "limit", Type: BaseInt_FieldInt},
		{Name: "offset", Type: BaseInt_FieldInt},
	},
}

Functions

func NewView added in v0.1.0

func NewView(caller router.Caller) view.Presenter

NewView builds the device Presenter — the tech-agnostic engine a renderer (crudview, or any other) wraps. This module builds it (view + model + router only); the app decides which renderer draws it.

Types

type DeactivateDeviceArgs added in v0.1.0

type DeactivateDeviceArgs struct {
	TenantId string
	Id       string
}

func (*DeactivateDeviceArgs) DecodeFields added in v0.1.0

func (m *DeactivateDeviceArgs) DecodeFields(r model.FieldReader)

func (*DeactivateDeviceArgs) EncodeFields added in v0.1.0

func (m *DeactivateDeviceArgs) EncodeFields(w model.FieldWriter)

func (*DeactivateDeviceArgs) IsNil added in v0.1.0

func (m *DeactivateDeviceArgs) IsNil() bool

func (*DeactivateDeviceArgs) ModelName added in v0.1.0

func (m *DeactivateDeviceArgs) ModelName() string

func (*DeactivateDeviceArgs) Pointers added in v0.1.0

func (m *DeactivateDeviceArgs) Pointers() []any

func (*DeactivateDeviceArgs) Schema added in v0.1.0

func (m *DeactivateDeviceArgs) Schema() []model.Field

type DeactivateDeviceArgsList added in v0.1.0

type DeactivateDeviceArgsList []*DeactivateDeviceArgs

func (*DeactivateDeviceArgsList) Append added in v0.1.0

func (*DeactivateDeviceArgsList) At added in v0.1.0

func (*DeactivateDeviceArgsList) DecodeFields added in v0.1.0

func (s *DeactivateDeviceArgsList) DecodeFields(_ model.FieldReader)

func (*DeactivateDeviceArgsList) EncodeFields added in v0.1.0

func (s *DeactivateDeviceArgsList) EncodeFields(_ model.FieldWriter)

func (*DeactivateDeviceArgsList) IsNil added in v0.1.0

func (s *DeactivateDeviceArgsList) IsNil() bool

func (*DeactivateDeviceArgsList) Len added in v0.1.0

func (s *DeactivateDeviceArgsList) Len() int

func (*DeactivateDeviceArgsList) Pointers added in v0.1.0

func (s *DeactivateDeviceArgsList) Pointers() []any

func (*DeactivateDeviceArgsList) Schema added in v0.1.0

func (s *DeactivateDeviceArgsList) Schema() []model.Field

type DeleteDeviceArgs added in v0.1.0

type DeleteDeviceArgs struct {
	TenantId string
	Id       string
}

func (*DeleteDeviceArgs) DecodeFields added in v0.1.0

func (m *DeleteDeviceArgs) DecodeFields(r model.FieldReader)

func (*DeleteDeviceArgs) EncodeFields added in v0.1.0

func (m *DeleteDeviceArgs) EncodeFields(w model.FieldWriter)

func (*DeleteDeviceArgs) IsNil added in v0.1.0

func (m *DeleteDeviceArgs) IsNil() bool

func (*DeleteDeviceArgs) ModelName added in v0.1.0

func (m *DeleteDeviceArgs) ModelName() string

func (*DeleteDeviceArgs) Pointers added in v0.1.0

func (m *DeleteDeviceArgs) Pointers() []any

func (*DeleteDeviceArgs) Schema added in v0.1.0

func (m *DeleteDeviceArgs) Schema() []model.Field

type DeleteDeviceArgsList added in v0.1.0

type DeleteDeviceArgsList []*DeleteDeviceArgs

func (*DeleteDeviceArgsList) Append added in v0.1.0

func (s *DeleteDeviceArgsList) Append() model.Fielder

func (*DeleteDeviceArgsList) At added in v0.1.0

func (*DeleteDeviceArgsList) DecodeFields added in v0.1.0

func (s *DeleteDeviceArgsList) DecodeFields(_ model.FieldReader)

func (*DeleteDeviceArgsList) EncodeFields added in v0.1.0

func (s *DeleteDeviceArgsList) EncodeFields(_ model.FieldWriter)

func (*DeleteDeviceArgsList) IsNil added in v0.1.0

func (s *DeleteDeviceArgsList) IsNil() bool

func (*DeleteDeviceArgsList) Len added in v0.1.0

func (s *DeleteDeviceArgsList) Len() int

func (*DeleteDeviceArgsList) Pointers added in v0.1.0

func (s *DeleteDeviceArgsList) Pointers() []any

func (*DeleteDeviceArgsList) Schema added in v0.1.0

func (s *DeleteDeviceArgsList) Schema() []model.Field

type Deps added in v0.1.0

type Deps struct {
	IDs       model.IDGenerator // required — the module never builds its own
	Publisher events.Publisher  // optional — nil disables publishing silently
}

Deps are the module's infrastructure ports — never a concrete implementation.

type Device added in v0.1.0

type Device struct {
	Id        string
	TenantId  string
	Name      string
	Ip        string
	Type      string
	Location  string
	IsActive  bool
	UpdatedAt int64
}

func ReadOneDevice added in v0.1.0

func ReadOneDevice(qb *orm.QB, model *Device) (*Device, error)

func (*Device) DecodeFields added in v0.1.0

func (m *Device) DecodeFields(r model.FieldReader)

func (*Device) EncodeFields added in v0.1.0

func (m *Device) EncodeFields(w model.FieldWriter)

func (*Device) IsNil added in v0.1.0

func (m *Device) IsNil() bool

func (*Device) Item added in v0.1.0

func (d *Device) Item() view.Item

Item implements view.Itemizer if needed or defined.

func (*Device) ModelName added in v0.1.0

func (m *Device) ModelName() string

func (*Device) Pointers added in v0.1.0

func (m *Device) Pointers() []any

func (*Device) Schema added in v0.1.0

func (m *Device) Schema() []model.Field

func (*Device) Validate added in v0.1.0

func (m *Device) Validate(action byte) error

type DeviceFilter added in v0.1.0

type DeviceFilter struct {
	Type       string
	ActiveOnly bool
	Limit      int64
	Offset     int64
}

DeviceFilter narrows ListDevices — a plain internal type, never ormc-generated (only its transport twin ListDevicesArgs, in model_orm.go, is).

type DeviceList added in v0.1.0

type DeviceList []*Device

func ReadAllDevice added in v0.1.0

func ReadAllDevice(qb *orm.QB) (DeviceList, error)

func (*DeviceList) Append added in v0.1.0

func (s *DeviceList) Append() model.Fielder

func (*DeviceList) At added in v0.1.0

func (s *DeviceList) At(i int) model.Fielder

func (*DeviceList) DecodeFields added in v0.1.0

func (s *DeviceList) DecodeFields(_ model.FieldReader)

func (*DeviceList) EncodeFields added in v0.1.0

func (s *DeviceList) EncodeFields(_ model.FieldWriter)

func (*DeviceList) IsNil added in v0.1.0

func (s *DeviceList) IsNil() bool

func (*DeviceList) Len added in v0.1.0

func (s *DeviceList) Len() int

func (*DeviceList) Pointers added in v0.1.0

func (s *DeviceList) Pointers() []any

func (*DeviceList) Schema added in v0.1.0

func (s *DeviceList) Schema() []model.Field

type GetDeviceArgs added in v0.1.0

type GetDeviceArgs struct {
	TenantId string
	Id       string
}

func (*GetDeviceArgs) DecodeFields added in v0.1.0

func (m *GetDeviceArgs) DecodeFields(r model.FieldReader)

func (*GetDeviceArgs) EncodeFields added in v0.1.0

func (m *GetDeviceArgs) EncodeFields(w model.FieldWriter)

func (*GetDeviceArgs) IsNil added in v0.1.0

func (m *GetDeviceArgs) IsNil() bool

func (*GetDeviceArgs) ModelName added in v0.1.0

func (m *GetDeviceArgs) ModelName() string

func (*GetDeviceArgs) Pointers added in v0.1.0

func (m *GetDeviceArgs) Pointers() []any

func (*GetDeviceArgs) Schema added in v0.1.0

func (m *GetDeviceArgs) Schema() []model.Field

type GetDeviceArgsList added in v0.1.0

type GetDeviceArgsList []*GetDeviceArgs

func (*GetDeviceArgsList) Append added in v0.1.0

func (s *GetDeviceArgsList) Append() model.Fielder

func (*GetDeviceArgsList) At added in v0.1.0

func (*GetDeviceArgsList) DecodeFields added in v0.1.0

func (s *GetDeviceArgsList) DecodeFields(_ model.FieldReader)

func (*GetDeviceArgsList) EncodeFields added in v0.1.0

func (s *GetDeviceArgsList) EncodeFields(_ model.FieldWriter)

func (*GetDeviceArgsList) IsNil added in v0.1.0

func (s *GetDeviceArgsList) IsNil() bool

func (*GetDeviceArgsList) Len added in v0.1.0

func (s *GetDeviceArgsList) Len() int

func (*GetDeviceArgsList) Pointers added in v0.1.0

func (s *GetDeviceArgsList) Pointers() []any

func (*GetDeviceArgsList) Schema added in v0.1.0

func (s *GetDeviceArgsList) Schema() []model.Field

type ListDevicesArgs added in v0.1.0

type ListDevicesArgs struct {
	TenantId   string
	Type       string
	ActiveOnly bool
	Limit      int64
	Offset     int64
}

func (*ListDevicesArgs) DecodeFields added in v0.1.0

func (m *ListDevicesArgs) DecodeFields(r model.FieldReader)

func (*ListDevicesArgs) EncodeFields added in v0.1.0

func (m *ListDevicesArgs) EncodeFields(w model.FieldWriter)

func (*ListDevicesArgs) IsNil added in v0.1.0

func (m *ListDevicesArgs) IsNil() bool

func (*ListDevicesArgs) ModelName added in v0.1.0

func (m *ListDevicesArgs) ModelName() string

func (*ListDevicesArgs) Pointers added in v0.1.0

func (m *ListDevicesArgs) Pointers() []any

func (*ListDevicesArgs) Schema added in v0.1.0

func (m *ListDevicesArgs) Schema() []model.Field

type ListDevicesArgsList added in v0.1.0

type ListDevicesArgsList []*ListDevicesArgs

func (*ListDevicesArgsList) Append added in v0.1.0

func (s *ListDevicesArgsList) Append() model.Fielder

func (*ListDevicesArgsList) At added in v0.1.0

func (*ListDevicesArgsList) DecodeFields added in v0.1.0

func (s *ListDevicesArgsList) DecodeFields(_ model.FieldReader)

func (*ListDevicesArgsList) EncodeFields added in v0.1.0

func (s *ListDevicesArgsList) EncodeFields(_ model.FieldWriter)

func (*ListDevicesArgsList) IsNil added in v0.1.0

func (s *ListDevicesArgsList) IsNil() bool

func (*ListDevicesArgsList) Len added in v0.1.0

func (s *ListDevicesArgsList) Len() int

func (*ListDevicesArgsList) Pointers added in v0.1.0

func (s *ListDevicesArgsList) Pointers() []any

func (*ListDevicesArgsList) Schema added in v0.1.0

func (s *ListDevicesArgsList) Schema() []model.Field

type Module added in v0.1.0

type Module struct {
	// contains filtered or unexported fields
}

func New

func New(db *orm.DB, deps Deps) (*Module, error)

New connects the module to an already-connected *orm.DB and migrates its own schema when the backend supports DDL (storage/mem, used by this module's own tests, does not — the type assertion below is how the module stays agnostic to that, same idiom as every sibling module).

func (*Module) CreateDevice added in v0.1.0

func (m *Module) CreateDevice(d Device) (Device, error)

func (*Module) DeactivateDevice added in v0.1.0

func (m *Module) DeactivateDevice(tenantId, id string) error

func (*Module) DeleteDevice added in v0.1.0

func (m *Module) DeleteDevice(tenantId, id string) error

func (*Module) FindByIP added in v0.1.0

func (m *Module) FindByIP(tenantId, ip string) (Device, error)

func (*Module) GetDevice added in v0.1.0

func (m *Module) GetDevice(tenantId, id string) (Device, error)

func (*Module) ListDevices added in v0.1.0

func (m *Module) ListDevices(tenantId string, filter DeviceFilter) ([]Device, error)

func (*Module) ModelName added in v0.1.0

func (m *Module) ModelName() string

func (*Module) MountOperations added in v0.1.2

func (m *Module) MountOperations(reg router.OperationRegistry)

func (*Module) UpdateDevice added in v0.1.0

func (m *Module) UpdateDevice(d Device) (Device, error)

type ValidationError added in v0.1.0

type ValidationError struct{ Err error }

func (ValidationError) Error added in v0.1.0

func (v ValidationError) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL