-
Notifications
You must be signed in to change notification settings - Fork 41
/
site.go
117 lines (111 loc) · 3.18 KB
/
site.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package site
import (
"encoding/json"
"github.com/bububa/oceanengine/marketing-api/enum"
"github.com/bububa/oceanengine/marketing-api/model"
)
// SiteDetail 站点信息
type SiteDetail struct {
// Bricks 具体见返回示例业务数据(新建或更新时传递的数据)
Bricks []Brick `json:"bricks,omitempty"`
// ID 站点ID
ID model.Uint64 `json:"id,omitempty"`
// Status 站点状态
Status enum.SiteStatus `json:"status,omitempty"`
// SiteType 建站类型
SiteType enum.SiteType `json:"site_type,omitempty"`
// Thumbnail 缩略图
Thumbnail string `json:"thumbnail,omitempty"`
}
type tmpSiteDetail struct {
// Bricks 具体见返回示例业务数据(新建或更新时传递的数据)
Bricks []json.RawMessage `json:"bricks,omitempty"`
// ID 站点ID
ID model.Uint64 `json:"id,omitempty"`
// Status 站点状态
Status enum.SiteStatus `json:"status,omitempty"`
// SiteType 建站类型
SiteType enum.SiteType `json:"site_type,omitempty"`
// Thumbnail 缩略图
Thumbnail string `json:"thumbnail,omitempty"`
}
// Site 站点信息
type Site struct {
// SiteID 站点ID
SiteID model.Uint64 `json:"siteId,omitempty"`
// Name 建站名称
Name string `json:"name,omitempty"`
// Status 站点状态
Status enum.SiteStatus `json:"status,omitempty"`
// SiteType 建站类型
SiteType enum.SiteType `json:"siteType,omitempty"`
// FunctionType 建站类别,SITE_FUNC_TYPE_NEW_MODULAR(智能建站)SITE_FUNC_TYPE_NORMAL (普通建站)
FunctionType enum.SiteFunctionType `json:"function_type,omitempty"`
// Thumbnail 缩略图
Thumbnail string `json:"thumbnail,omitempty"`
}
// UnmarshalJSON implement json Unmarshal interface
func (s *SiteDetail) UnmarshalJSON(b []byte) (err error) {
var tmp tmpSiteDetail
if err = json.Unmarshal(b, &tmp); err != nil {
return
}
detail := SiteDetail{
ID: tmp.ID,
Status: tmp.Status,
SiteType: tmp.SiteType,
Thumbnail: tmp.Thumbnail,
}
for _, b := range tmp.Bricks {
var base BaseBrick
if err := json.Unmarshal(b, &base); err != nil {
return err
}
switch base.Type() {
case XrVideo:
var data VideoBrick
if err := json.Unmarshal(b, &data); err != nil {
return err
}
detail.Bricks = append(detail.Bricks, data)
case XrPicture:
var data ImageBrick
if err := json.Unmarshal(b, &data); err != nil {
return err
}
detail.Bricks = append(detail.Bricks, data)
case XrPictureGroup:
var data ImagesBrick
if err := json.Unmarshal(b, &data); err != nil {
return err
}
detail.Bricks = append(detail.Bricks, data)
case XrSimpleText:
var data TextBrick
if err := json.Unmarshal(b, &data); err != nil {
return err
}
detail.Bricks = append(detail.Bricks, data)
case XrRichText:
var data RichTextBrick
if err := json.Unmarshal(b, &data); err != nil {
return err
}
detail.Bricks = append(detail.Bricks, data)
case XrForm:
var data FormBrick
if err := json.Unmarshal(b, &data); err != nil {
return err
}
detail.Bricks = append(detail.Bricks, data)
case XrButton:
var data ButtonBrick
if err := json.Unmarshal(b, &data); err != nil {
return err
}
detail.Bricks = append(detail.Bricks, data)
}
}
*s = detail
return nil
}