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), } }