diff --git a/models/discord/channel.go b/models/discord/channel.go index e0f4f49..507c915 100644 --- a/models/discord/channel.go +++ b/models/discord/channel.go @@ -119,3 +119,17 @@ func (p *ChannelModel) GetFacebookPageList() (pages []*pubmodel.FacebookPageMode func (p *ChannelModel) GetFacebookPageByID(id string) (page *pubmodel.FacebookPageModel, err error) { return pubmodel.GetFacebookPageByChannelAndID(id, p.ID) } + +// GetFacebookPageTmpl - +func (p *ChannelModel) GetFacebookPageTmpl(fbid string) (tmpl string, err error) { + if len(fbid) == 0 { + return "", errors.New("id is empty") + } + rt, err := GetFacebookRT(p.ID, fbid) + if err != nil { + return "", err + } + tmpl = rt.Tmpl + rt = nil + return tmpl, nil +} diff --git a/models/discord/rt_table.go b/models/discord/rt_table.go index 56274f3..f86cb53 100644 --- a/models/discord/rt_table.go +++ b/models/discord/rt_table.go @@ -69,3 +69,21 @@ func GetFacebookRT(channel, facebook string) (rt *ChannelFacebookRT, err error) } return } + +// Write - +func (p *ChannelFacebookRT) Write() (err error) { + db := models.GetConn() + query := `insert into discord.channel_facebook_rt ("channel", "facebook", "tmpl") values (:channel, :facebook, :tmpl) returning *` + row, err := db.NamedQuery(query, p) + if err != nil { + return err + } + defer row.Close() + if row.Next() { + err = row.StructScan(p) + if err != nil { + return err + } + } + return +} diff --git a/models/public/facebook.go b/models/public/facebook.go index c2fb05d..8e6b31a 100644 --- a/models/public/facebook.go +++ b/models/public/facebook.go @@ -35,10 +35,10 @@ func GetFacebookPageByID(id string) (page *FacebookPageModel, err error) { db := models.GetConn() query := `select id, lastpost, ctime, mtime from public.facebook_page where id = $1` err = db.Get(page, query, id) - if err != nil { + if err != nil && err != sql.ErrNoRows { return } - return + return page, nil } // GetFacebookPageListByChannel - @@ -64,7 +64,7 @@ func GetFacebookPageByChannelAndID(id, channel string) (page *FacebookPageModel, page = &FacebookPageModel{} query := `select id, lastpost, ctime, mtime from public.facebook_page where id = $1 and channel = $2` err = db.Get(page, query, channel) - if err != nil { + if err != nil && err != sql.ErrNoRows { return nil, err } return diff --git a/pkg/svc/discord/actions.go b/pkg/svc/discord/actions.go index 86ab6f0..30b8aa5 100644 --- a/pkg/svc/discord/actions.go +++ b/pkg/svc/discord/actions.go @@ -2,6 +2,7 @@ package discord import ( dsmodel "dorisbot/models/discord" + pubmodel "dorisbot/models/public" "log" ) @@ -39,6 +40,35 @@ func addServer(info EvtInfo, name string) string { } func addFacebookPage(info EvtInfo, fbid, tmpl string) string { + ch, err := dsmodel.GetChannelByID(info.Channel) + if err != nil { + return "" + } + var page *pubmodel.FacebookPageModel + + page, err = pubmodel.GetFacebookPageByID(fbid) + if err != nil { + return "check facebook fail" + } + if page == nil { + // TODO: write facebook page + page, err = pubmodel.NewFacebookPage(fbid) + if err != nil { + return "write data fail" + } + err = page.Write() + if err != nil { + return "write data fail" + } + } else { + fbrt, err := ch.GetFacebookPageByID(fbid) + if err != nil { + return "check data fail" + } + if fbrt != nil { + return "facebook page already linked" + } + } return "" }