39 lines
1.4 KiB
Go
39 lines
1.4 KiB
Go
package storage
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"gardomatic.kleiax.de/internal/platform/validate"
|
|
)
|
|
|
|
// GardenModelInterface persists gardens and their initial owner membership.
|
|
type GardenModelInterface interface {
|
|
Insert(garden Garden, ownerID int) (Garden, error)
|
|
Get(id int) (Garden, error)
|
|
GetAllForUser(userID int) ([]Garden, error)
|
|
Update(garden Garden) (Garden, error)
|
|
Delete(id int) error
|
|
}
|
|
|
|
// Garden is the tenant boundary for garden-specific resources.
|
|
type Garden struct {
|
|
ID int `json:"id"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
ImageData string `json:"image_data,omitempty"`
|
|
ImageID *int `json:"image_id,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
Version int `json:"version"`
|
|
Role GardenRole `json:"role,omitempty"`
|
|
Permissions []GardenPermission `json:"permissions"`
|
|
}
|
|
|
|
// ValidateGarden applies persistence-independent garden validation rules.
|
|
func ValidateGarden(v *validate.Validator, garden Garden) {
|
|
v.Check(strings.TrimSpace(garden.Name) != "", "name", "must be provided")
|
|
v.Check(len(garden.Name) <= 500, "name", "must not be more than 500 bytes long")
|
|
v.Check(len(garden.Description) <= 5000, "description", "must not be more than 5000 bytes long")
|
|
}
|