maptile/model/feature.go

69 lines
1.8 KiB
Go
Executable File

package model
import (
"encoding/json"
"time"
"github.com/google/uuid"
)
const (
StatusNormal = "normal"
StatusDeleted = "deleted"
StatusBanned = "banned"
)
type Feature struct {
ID uuid.UUID `db:"id" json:"id"`
Name string `db:"name" json:"name"`
Geometry []byte `db:"geometry" json:"geometry" swaggertype:"object"`
Status string `db:"status" json:"status"`
CreatedAt int64 `db:"created_at" json:"created_at"`
UpdatedAt int64 `db:"updated_at" json:"updated_at"`
}
type FeatureList struct {
ListQuery
Name string `json:"name" query:"name"`
Status string `json:"status" query:"status"`
}
type FeatureCreate struct {
Name string `json:"name" binding:"required"`
Geometry map[string]interface{} `json:"geometry" binding:"required"`
}
type FeatureUpdate struct {
ID uuid.UUID `json:"id" binding:"required"`
Name string `json:"name" binding:"required"`
Geometry map[string]interface{} `json:"geometry" binding:"required"`
}
type FeatureDeleteOrBanned struct {
ID uuid.UUID `json:"id" binding:"required"`
}
type FeaturePublic struct {
ID string `json:"id"`
Name string `json:"name"`
Geometry map[string]interface{} `json:"geometry"`
Status string `json:"status"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
func (f *Feature) ToPublic() FeaturePublic {
return FeaturePublic{
ID: f.ID.String(),
Name: f.Name,
Geometry: func() map[string]interface{} {
var geom map[string]interface{}
_ = json.Unmarshal(f.Geometry, &geom)
return geom
}(),
Status: f.Status,
CreatedAt: time.Unix(f.CreatedAt, 0),
UpdatedAt: time.Unix(f.UpdatedAt, 0),
}
}