diff --git a/client/social_post.go b/client/social_post.go new file mode 100644 index 0000000..f8bcc3b --- /dev/null +++ b/client/social_post.go @@ -0,0 +1,41 @@ +package client + +import ( + "encoding/json" + "errors" + "git.selly.red/Selly-Modules/natsio" + "git.selly.red/Selly-Modules/natsio/model" + "git.selly.red/Selly-Modules/natsio/subject" +) + +// SocialPost ... +type SocialPost struct{} + +// GetSocialPost ... +func GetSocialPost() SocialPost { + return SocialPost{} +} + +// GetListSocialPostAppInfoByIDs ... +func (s Seller) GetListSocialPostAppInfoByIDs(p model.GetListSocialPostAppByIDsRequest) (*model.ResponseListSocialPostAppInfo, error) { + msg, err := natsio.GetServer().Request(subject.SocialPost.GetListSocialPostAppInfoByIDs, toBytes(p)) + + if err != nil { + return nil, err + } + + var r struct { + Data *model.ResponseListSocialPostAppInfo `json:"data"` + Error string `json:"error"` + } + + if err = json.Unmarshal(msg.Data, &r); err != nil { + return nil, err + } + + if r.Error != "" { + return nil, errors.New(r.Error) + + } + return r.Data, nil +} diff --git a/model/file_response.go b/model/file_response.go new file mode 100644 index 0000000..6eff304 --- /dev/null +++ b/model/file_response.go @@ -0,0 +1,56 @@ +package model + +import "go.mongodb.org/mongo-driver/bson/primitive" + +// FilePhoto ... +type FilePhoto struct { + ID string `json:"_id"` + Name string `json:"name,omitempty"` + Dimensions *FileDimensions `json:"dimensions"` +} + +// FileSize ... +type FileSize struct { + Width int `json:"width"` + Height int `json:"height"` + URL string `json:"url"` +} + +// FileDimensions ... +type FileDimensions struct { + Small *FileSize `json:"sm"` + Medium *FileSize `json:"md"` +} + +// ListPhoto ... +type ListPhoto []*FilePhoto + +// Video ... +type Video struct { + ID primitive.ObjectID `json:"_id"` + Name string `json:"name"` + Dimensions *FileVideoDimensions `json:"dimensions"` + VideoExtension string `json:"ext"` + Thumbnail *FilePhoto `json:"thumbnail"` + Status string `json:"status"` +} + +// FileVideoDimensions ... +type FileVideoDimensions struct { + Dimension480p *FileVideoSize `json:"size480p"` + Dimension720p *FileVideoSize `json:"size720p"` + Dimension1080p *FileVideoSize `json:"size1080p"` + DimensionOriginal *FileVideoSize `json:"original"` +} + +// FileVideoSize ... +type FileVideoSize struct { + Name string `json:"name"` + Width int `json:"width"` + Height int `json:"height"` + Size string `json:"size"` + URL string `json:"url"` +} + +// ListVideo ... +type ListVideo []Video diff --git a/model/social_post_request.go b/model/social_post_request.go new file mode 100644 index 0000000..179e378 --- /dev/null +++ b/model/social_post_request.go @@ -0,0 +1,8 @@ +package model + +import "go.mongodb.org/mongo-driver/bson/primitive" + +// GetListSocialPostAppByIDsRequest ... +type GetListSocialPostAppByIDsRequest struct { + SocialPostIDs []primitive.ObjectID `json:"socialPostIDs"` +} diff --git a/model/social_post_response.go b/model/social_post_response.go new file mode 100644 index 0000000..cb6469b --- /dev/null +++ b/model/social_post_response.go @@ -0,0 +1,49 @@ +package model + +import ( + "go.mongodb.org/mongo-driver/bson/primitive" + "time" +) + +// ResponseListSocialPostAppInfo ... +type ResponseListSocialPostAppInfo struct { + SocialPosts []SocialPostAppInfo `json:"socialPosts"` +} + +// SocialPostAppInfo ... +type SocialPostAppInfo struct { + ID primitive.ObjectID `json:"_id"` + Title string `json:"title"` + Content string `json:"content"` + Statistic SocialPostStatistic `json:"statistic"` + Author *SocialPostSellerInfo `json:"author"` + Photos ListPhoto `json:"photos"` + PublishedAt time.Time `json:"publishedAt"` + IsLiked bool `json:"isLiked"` + IsPin bool `json:"isPin"` + Contributor *SocialPostSellerInfo `json:"contributor"` + CreatedAt time.Time `json:"createdAt"` + Status string `json:"status"` + HasUpdate bool `json:"hasUpdate"` + Order int `json:"order"` + Videos ListVideo `json:"videos"` +} + +// SocialPostStatistic ... +type SocialPostStatistic struct { + Views int `json:"views"` + UniqueViews int `json:"uniqueViews"` + Likes int `json:"likes"` + Shares int `json:"shares"` + UniqueShares int `json:"uniqueShares"` + Comments int `json:"comments"` +} + +// SocialPostSellerInfo ... +type SocialPostSellerInfo struct { + ID primitive.ObjectID `json:"_id"` + Name string `json:"name"` + Membership SellerMembershipInfo `json:"membership"` + Logo *FilePhoto `json:"logo"` + IsMine bool `json:"isMine"` +} diff --git a/subject/config.go b/subject/config.go index 867d934..8837975 100644 --- a/subject/config.go +++ b/subject/config.go @@ -16,6 +16,7 @@ var prefixes = struct { SupplierPermission string Withdraw string Notification string + SocialPost string }{ Communication: "communication", Order: "order", @@ -32,4 +33,5 @@ var prefixes = struct { SupplierPermission: "supplier_permission", Withdraw: "withdraw", Notification: "notification", + SocialPost: "social_post", } diff --git a/subject/social_post.go b/subject/social_post.go new file mode 100644 index 0000000..ff585c9 --- /dev/null +++ b/subject/social_post.go @@ -0,0 +1,15 @@ +package subject + +import "fmt" + +// getSocialPostValue ... +func getSocialPostValue(val string) string { + return fmt.Sprintf("%s.%s", prefixes.SocialPost, val) +} + +// SocialPost ... +var SocialPost = struct { + GetListSocialPostAppInfoByIDs string +}{ + GetListSocialPostAppInfoByIDs: getSocialPostValue("get_list_social_post_app_info_by_ids"), +}