Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["service_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/creative/conf:go_default_library",
"//app/interface/main/creative/service:go_default_library",
"//app/interface/openplatform/article/model:go_default_library",
"//vendor/github.com/davecgh/go-spew/spew:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"article.go",
"draft.go",
"pre.go",
"service.go",
],
importpath = "go-common/app/interface/main/creative/service/article",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/creative/conf:go_default_library",
"//app/interface/main/creative/dao/account:go_default_library",
"//app/interface/main/creative/dao/activity:go_default_library",
"//app/interface/main/creative/dao/article:go_default_library",
"//app/interface/main/creative/dao/bfs:go_default_library",
"//app/interface/main/creative/model/article:go_default_library",
"//app/interface/main/creative/service:go_default_library",
"//app/interface/openplatform/article/model:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,206 @@
package article
import (
"context"
artMdl "go-common/app/interface/main/creative/model/article"
article "go-common/app/interface/openplatform/article/model"
"go-common/library/ecode"
"go-common/library/log"
"strconv"
)
// SubArticle submit article.
func (s *Service) SubArticle(c context.Context, mid int64, art *artMdl.ArtParam, ak, ck, ip string) (aid int64, err error) {
identified, _ := s.acc.IdentifyInfo(c, mid, 0, ip)
if err = s.acc.CheckIdentify(identified); err != nil {
log.Error("s.acc.IdentifyInfo mid(%d),ip(%s)", mid, ip)
return
}
aid, err = s.art.AddArticle(c, art)
return
}
// UpdateArticle update article.
func (s *Service) UpdateArticle(c context.Context, mid int64, art *artMdl.ArtParam, ak, ck, ip string) (err error) {
identified, _ := s.acc.IdentifyInfo(c, mid, 0, ip)
if err = s.acc.CheckIdentify(identified); err != nil {
log.Error("s.acc.IdentifyInfo mid(%d),ip(%s)", mid, ip)
return
}
return s.art.UpdateArticle(c, art)
}
// DelArticle delete article.
func (s *Service) DelArticle(c context.Context, aid, mid int64, ip string) (err error) {
if err = s.art.DelArticle(c, aid, mid, ip); err != nil {
log.Error("s.art.DelArticle(%d) error(%v)", aid, err)
return
}
return
}
// View get article detail.
func (s *Service) View(c context.Context, aid, mid int64, ip string) (res *artMdl.Meta, err error) {
var art *article.Article
if art, err = s.art.Article(c, aid, mid, ip); err != nil {
return
}
res = &artMdl.Meta{
ID: art.ID,
Category: art.Category,
Title: art.Title,
Content: art.Content,
Summary: art.Summary,
BannerURL: art.BannerURL,
TemplateID: art.TemplateID,
State: art.State,
Reprint: art.Reprint,
Reason: art.Reason,
PTime: art.PublishTime,
Author: art.Author,
Stats: art.Stats,
CTime: art.Ctime,
MTime: art.Mtime,
DynamicIntro: art.Dynamic,
ImageURLs: art.ImageURLs,
OriginImageURLs: art.OriginImageURLs,
}
if res.ImageURLs == nil {
res.ImageURLs = []string{}
}
if res.OriginImageURLs == nil {
res.OriginImageURLs = []string{}
}
if len(art.Tags) > 0 {
var tags []string
for _, v := range art.Tags {
tags = append(tags, v.Name)
}
res.Tags = tags
}
return
}
// Articles get article list.
func (s *Service) Articles(c context.Context, mid int64, pn, ps, sort, group, category int, ip string) (arts *artMdl.ArtList, err error) {
var res *article.CreationArts
res, err = s.art.Articles(c, mid, pn, ps, sort, group, category, ip)
if err != nil || res == nil || res.Articles == nil || len(res.Articles) <= 0 {
if err != nil {
log.Error("s.art.Articles(%d) res(%v) error(%v)", mid, res, err)
}
return
}
ms := make([]*artMdl.Meta, 0, len(res.Articles))
for _, v := range res.Articles {
id := strconv.FormatInt(v.ID, 10)
m := &artMdl.Meta{
ID: v.ID,
Category: v.Category,
Title: v.Title,
Summary: v.Summary,
BannerURL: v.BannerURL,
TemplateID: v.TemplateID,
State: v.State,
Reprint: v.Reprint,
Reason: v.Reason,
PTime: v.PublishTime,
Author: v.Author,
Stats: v.Stats,
CTime: v.Ctime,
MTime: v.Mtime,
EditURL: "https://member.bilibili.com/article-text/mobile?aid=" + id + "&type=2",
DynamicIntro: v.Dynamic,
ImageURLs: v.ImageURLs,
OriginImageURLs: v.OriginImageURLs,
}
if m.ImageURLs == nil {
m.ImageURLs = []string{}
}
if m.OriginImageURLs == nil {
m.OriginImageURLs = []string{}
}
if m.State == 0 {
m.ViewURL = "https://www.bilibili.com/read/cv" + id
m.IsPreview = 0
} else { //预览
m.ViewURL = "https://www.bilibili.com/read/preview/" + id
m.IsPreview = 1
}
tags := []string{}
m.Tags = tags
if len(v.Tags) > 0 {
for _, vv := range v.Tags {
tags = append(tags, vv.Name)
}
m.Tags = tags
}
ms = append(ms, m)
}
arts = &artMdl.ArtList{}
arts.Articles = ms
arts.Page = res.Page
arts.Type = res.Type
return
}
// Categories get article category.
func (s *Service) Categories(c context.Context) (*article.Categories, error) {
return s.art.Categories(c, "")
}
// WithDrawArticle withdraw article.
func (s *Service) WithDrawArticle(c context.Context, aid, mid int64, ip string) (err error) {
if err = s.art.WithDrawArticle(c, aid, mid, ip); err != nil {
log.Error("s.art.WithdrawArticle(%d,%d) error(%v)", aid, mid, err)
}
return
}
// ArticleUpCover article upload cover.
func (s *Service) ArticleUpCover(c context.Context, fileType string, body []byte) (url string, err error) {
if len(body) == 0 {
err = ecode.FileNotExists
log.Error("s.ArticleUpCover file not exist")
return
}
if len(body) > s.c.BFS.MaxFileSize {
log.Error("s.ArticleUpCover too max file size")
err = ecode.FileTooLarge
return
}
url, err = s.bfs.Upload(c, fileType, body)
if err != nil {
log.Error("s.bfs.Upload error(%v)", err)
}
return
}
// IsAuthor checks that whether user has permission to write article.
func (s *Service) IsAuthor(c context.Context, mid int64, ip string) (ok bool, err error) {
if ok, err = s.art.IsAuthor(c, mid, ip); err != nil {
log.Error("s.art.IsAuthor(%v)", err)
}
return
}
// RemainCount article up limit.
func (s *Service) RemainCount(c context.Context, mid int64, ip string) (rc int, err error) {
rc, err = s.art.RemainCount(c, mid, ip)
return
}
// ArticleCapture article capture.
func (s *Service) ArticleCapture(c context.Context, url string) (loc string, size int, err error) {
loc, size, err = s.bfs.Capture(c, url)
if err != nil {
log.Error("s.bfs.Capture error(%v)", err)
}
return
}
// ArticleStat get article base data.
func (s *Service) ArticleStat(c context.Context, mid int64, ip string) (stat article.UpStat, err error) {
stat, err = s.art.ArticleStat(c, mid, ip)
return
}

View File

@@ -0,0 +1,117 @@
package article
import (
"context"
artMdl "go-common/app/interface/main/creative/model/article"
article "go-common/app/interface/openplatform/article/model"
"go-common/library/ecode"
"go-common/library/log"
)
// AddDraft add draft.
func (s *Service) AddDraft(c context.Context, mid int64, art *artMdl.ArtParam) (aid int64, err error) {
return s.art.AddDraft(c, art)
}
// DelDraft delete draft.
func (s *Service) DelDraft(c context.Context, aid, mid int64, ip string) (err error) {
if err = s.art.DelDraft(c, aid, mid, ip); err != nil {
log.Error("s.art.DelArticle(%d) error(%v)", aid, err)
}
return
}
// Draft get draft.
func (s *Service) Draft(c context.Context, aid, mid int64, ip string) (res *artMdl.Meta, err error) {
var df *article.Draft
if df, err = s.art.Draft(c, aid, mid, ip); err != nil {
return
}
if df == nil || df.Article == nil {
err = ecode.CreativeArticleNotExist
return
}
res = &artMdl.Meta{
ID: df.Article.ID,
Category: df.Article.Category,
Title: df.Article.Title,
Content: df.Article.Content,
Summary: df.Article.Summary,
BannerURL: df.Article.BannerURL,
TemplateID: df.Article.TemplateID,
State: df.Article.State,
Author: df.Article.Author,
Stats: df.Article.Stats,
Reprint: df.Article.Reprint,
Reason: df.Article.Reason,
PTime: df.Article.PublishTime,
CTime: df.Article.Ctime,
MTime: df.Article.Mtime,
DynamicIntro: df.Article.Dynamic,
ImageURLs: df.ImageURLs,
OriginImageURLs: df.OriginImageURLs,
}
if res.ImageURLs == nil {
res.ImageURLs = []string{}
}
if res.OriginImageURLs == nil {
res.OriginImageURLs = []string{}
}
res.Tags = df.Tags
if len(df.Tags) == 0 {
res.Tags = []string{}
}
return
}
// Drafts get draft list.
func (s *Service) Drafts(c context.Context, mid int64, pn, ps int, ip string) (dls *artMdl.DraftList, err error) {
var res *article.Drafts
res, err = s.art.Drafts(c, mid, pn, ps, ip)
if err != nil || res == nil || res.Drafts == nil || len(res.Drafts) <= 0 {
if err != nil {
log.Error("s.art.Drafts(%d) res(%v) error(%v)", mid, res, err)
}
return
}
ms := make([]*artMdl.Meta, 0, len(res.Drafts))
for _, v := range res.Drafts {
m := &artMdl.Meta{
ID: v.ID,
Category: v.Category,
Title: v.Title,
Summary: v.Summary,
BannerURL: v.BannerURL,
TemplateID: v.TemplateID,
State: v.State,
Reprint: v.Reprint,
Reason: v.Reason,
PTime: v.PublishTime,
Author: v.Author,
Stats: v.Stats,
CTime: v.Ctime,
MTime: v.Mtime,
DynamicIntro: v.Dynamic,
ImageURLs: v.ImageURLs,
OriginImageURLs: v.OriginImageURLs,
}
if m.ImageURLs == nil {
m.ImageURLs = []string{}
}
if m.OriginImageURLs == nil {
m.OriginImageURLs = []string{}
}
m.Tags = v.Tags
if len(v.Tags) == 0 {
m.Tags = []string{}
}
ms = append(ms, m)
}
dls = &artMdl.DraftList{
DraftURL: s.c.H5Page.Draft,
}
dls.Drafts = ms
dls.Page = res.Page
return
}

View File

@@ -0,0 +1,99 @@
package article
import (
"context"
"strconv"
"strings"
artMdl "go-common/app/interface/main/creative/model/article"
"go-common/library/ecode"
)
// ParseParam parse article param which type is int.
func (s *Service) ParseParam(c context.Context, categoryStr, reprintStr, tidStr, imageURLs, originImageURLs string) (art *artMdl.ArtParam, err error) {
var (
category int64
tid, reprint int
)
category, err = strconv.ParseInt(categoryStr, 10, 64)
if err != nil || category <= 0 { //文章要求必须传大于0的分类
err = ecode.CreativeArticleCategoryErr
return
}
tid, err = strconv.Atoi(tidStr)
if err != nil || tid < 0 {
err = ecode.CreativeArticleTIDErr
return
}
reprint, err = strconv.Atoi(reprintStr)
if err != nil || reprint < 0 {
err = ecode.CreativeArticleReprintErr
return
}
imgs, oimgs, err := ParseImageURLs(imageURLs, originImageURLs)
if err != nil {
return
}
art = &artMdl.ArtParam{
Category: category,
TemplateID: int32(tid),
Reprint: int32(reprint),
ImageURLs: imgs,
OriginImageURLs: oimgs,
}
return
}
// ParseDraftParam parse draft param which type is int.
func (s *Service) ParseDraftParam(c context.Context, categoryStr, reprintStr, tidStr, imageURLs, originImageURLs string) (art *artMdl.ArtParam, err error) {
var (
category int64
tid, reprint int
)
if categoryStr != "" {
category, err = strconv.ParseInt(categoryStr, 10, 64)
if err != nil || category < 0 {
err = ecode.CreativeArticleCategoryErr
return
}
}
if tidStr != "" {
tid, err = strconv.Atoi(tidStr)
if err != nil || tid < 0 {
err = ecode.CreativeArticleTIDErr
return
}
}
if reprintStr != "" {
reprint, err = strconv.Atoi(reprintStr)
if err != nil || reprint < 0 {
err = ecode.CreativeArticleReprintErr
return
}
}
imgs, oimgs, err := ParseImageURLs(imageURLs, originImageURLs)
if err != nil {
return
}
art = &artMdl.ArtParam{
Category: category,
TemplateID: int32(tid),
Reprint: int32(reprint),
ImageURLs: imgs,
OriginImageURLs: oimgs,
}
return
}
//ParseImageURLs parse img urls to []string.
func ParseImageURLs(imageURLs, originImageURLs string) (imgs, oimgs []string, err error) {
if originImageURLs == "" {
originImageURLs = imageURLs
}
imgs = strings.Split(imageURLs, ",")
oimgs = strings.Split(originImageURLs, ",")
if len(imgs) != len(oimgs) {
err = ecode.CreativeArticleImageURLsErr
}
return
}

View File

@@ -0,0 +1,31 @@
package article
import (
"go-common/app/interface/main/creative/conf"
"go-common/app/interface/main/creative/dao/account"
"go-common/app/interface/main/creative/dao/activity"
"go-common/app/interface/main/creative/dao/article"
"go-common/app/interface/main/creative/dao/bfs"
"go-common/app/interface/main/creative/service"
)
//Service struct.
type Service struct {
c *conf.Config
art *article.Dao
acc *account.Dao
bfs *bfs.Dao
act *activity.Dao
}
//New get service.
func New(c *conf.Config, rpcdaos *service.RPCDaos) *Service {
s := &Service{
c: c,
art: rpcdaos.Art,
acc: rpcdaos.Acc,
bfs: bfs.New(c),
act: activity.New(c),
}
return s
}

View File

@@ -0,0 +1,64 @@
package article
import (
"context"
"flag"
"go-common/app/interface/main/creative/conf"
article "go-common/app/interface/openplatform/article/model"
"path/filepath"
"testing"
"time"
"github.com/davecgh/go-spew/spew"
. "github.com/smartystreets/goconvey/convey"
"go-common/app/interface/main/creative/service"
)
var (
s *Service
)
func init() {
dir, _ := filepath.Abs("../../cmd/creative.toml")
flag.Set("conf", dir)
conf.Init()
rpcdaos := service.NewRPCDaos(conf.Conf)
s = New(conf.Conf, rpcdaos)
time.Sleep(time.Second)
}
func WithService(f func(s *Service)) func() {
return func() {
Reset(func() {})
f(s)
}
}
func Test_Categories(t *testing.T) {
var (
c = context.TODO()
err error
res *article.Categories
)
Convey("Categories", t, WithService(func(s *Service) {
res, err = s.Categories(c)
So(err, ShouldBeNil)
So(res, ShouldNotBeNil)
}))
}
func Test_Article(t *testing.T) {
var (
c = context.TODO()
err error
size int
loc string
url = "https://i0.hdslb.com/bfs/article/8fce42a26ce128140d2ee7dec599a46cd1bccbb6.jpg"
)
Convey("Capture", t, WithService(func(s *Service) {
loc, size, err = s.ArticleCapture(c, url)
So(err, ShouldBeNil)
spew.Dump(loc, size)
}))
}