69 lines
1.8 KiB
Go
Executable File
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),
|
|
}
|
|
}
|