add twitch apis , bar api not ok
This commit is contained in:
+271
-1
@@ -1,13 +1,283 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"git.trj.tw/golang/mtfosbot/model"
|
||||
"git.trj.tw/golang/mtfosbot/module/context"
|
||||
"git.trj.tw/golang/mtfosbot/module/twitch-irc"
|
||||
"git.trj.tw/golang/mtfosbot/module/utils"
|
||||
"github.com/gin-gonic/contrib/sessions"
|
||||
)
|
||||
|
||||
func sessionTypeTwitch(id string) (ch []*model.TwitchChannel, err error) {
|
||||
return
|
||||
chdata, err := model.GetTwitchChannelWithID(id)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if chdata == nil {
|
||||
return nil, nil
|
||||
}
|
||||
list := make([]*model.TwitchChannel, 1)
|
||||
list = append(list, chdata)
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func sessionTypeSystem() (ch []*model.TwitchChannel, err error) {
|
||||
ch, err = model.GetAllTwitchChannel()
|
||||
return
|
||||
}
|
||||
|
||||
// GetChannels - middleware
|
||||
func GetChannels(c *context.Context) {
|
||||
sess := sessions.Default(c.Context)
|
||||
logingType := sess.Get("loginType")
|
||||
if logingType == nil {
|
||||
c.LoginFirst(nil)
|
||||
return
|
||||
}
|
||||
|
||||
ltype, ok := logingType.(string)
|
||||
if !ok {
|
||||
c.LoginFirst(nil)
|
||||
return
|
||||
}
|
||||
if ltype == "twitch" {
|
||||
u := sess.Get("user")
|
||||
if u == nil {
|
||||
c.LoginFirst(nil)
|
||||
return
|
||||
}
|
||||
user, ok := u.(model.TwitchChannel)
|
||||
if !ok {
|
||||
c.LoginFirst(nil)
|
||||
return
|
||||
}
|
||||
chs, err := sessionTypeTwitch(user.ID)
|
||||
if err != nil || chs == nil {
|
||||
c.ServerError(nil)
|
||||
return
|
||||
}
|
||||
c.Set("channels", chs)
|
||||
} else if ltype == "system" {
|
||||
u := sess.Get("user")
|
||||
if u == nil {
|
||||
c.LoginFirst(nil)
|
||||
return
|
||||
}
|
||||
_, ok := u.(model.Account)
|
||||
if !ok {
|
||||
c.LoginFirst(nil)
|
||||
return
|
||||
}
|
||||
chs, err := sessionTypeSystem()
|
||||
if err != nil || chs == nil {
|
||||
c.LoginFirst(nil)
|
||||
return
|
||||
}
|
||||
c.Set("channels", chs)
|
||||
} else {
|
||||
c.LoginFirst(nil)
|
||||
return
|
||||
}
|
||||
|
||||
c.Next()
|
||||
}
|
||||
|
||||
func hasChannel(id string, c *context.Context) *model.TwitchChannel {
|
||||
if len(id) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
channels, exists := c.Get("channels")
|
||||
if !exists {
|
||||
return nil
|
||||
}
|
||||
chs, ok := channels.([]*model.TwitchChannel)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, v := range chs {
|
||||
if v.ID == id {
|
||||
return v
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetChannelList -
|
||||
func GetChannelList(c *context.Context) {
|
||||
channels, exists := c.Get("channels")
|
||||
if !exists {
|
||||
c.ServerError(nil)
|
||||
return
|
||||
}
|
||||
list, ok := channels.([]*model.TwitchChannel)
|
||||
if !ok {
|
||||
c.ServerError(nil)
|
||||
return
|
||||
}
|
||||
|
||||
mapList := make([]map[string]interface{}, len(list))
|
||||
for k, v := range list {
|
||||
mapList[k] = utils.ToMap(v)
|
||||
}
|
||||
|
||||
c.Success(map[string]interface{}{
|
||||
"list": mapList,
|
||||
})
|
||||
}
|
||||
|
||||
// GetChannelData -
|
||||
func GetChannelData(c *context.Context) {
|
||||
chid := c.Param("chid")
|
||||
chdata := hasChannel(chid, c)
|
||||
if chdata == nil {
|
||||
c.NotFound(nil)
|
||||
return
|
||||
}
|
||||
|
||||
c.Success(map[string]interface{}{
|
||||
"channel": utils.ToMap(chdata),
|
||||
})
|
||||
}
|
||||
|
||||
// BotJoinChannel -
|
||||
func BotJoinChannel(c *context.Context) {
|
||||
chid := c.Param("chid")
|
||||
chdata := hasChannel(chid, c)
|
||||
if chdata == nil {
|
||||
c.NotFound(nil)
|
||||
return
|
||||
}
|
||||
|
||||
bodyArg := struct {
|
||||
Join int `json:"join"`
|
||||
}{}
|
||||
err := c.BindData(&bodyArg)
|
||||
if err != nil {
|
||||
c.DataFormat(nil)
|
||||
return
|
||||
}
|
||||
|
||||
if bodyArg.Join != 0 && bodyArg.Join != 1 {
|
||||
c.DataFormat(nil)
|
||||
return
|
||||
}
|
||||
|
||||
err = chdata.UpdateJoin(bodyArg.Join == 1)
|
||||
if err != nil {
|
||||
c.ServerError(nil)
|
||||
return
|
||||
}
|
||||
|
||||
if bodyArg.Join == 1 {
|
||||
twitchirc.JoinChannel(chdata.Name)
|
||||
} else {
|
||||
twitchirc.LeaveChannel(chdata.Name)
|
||||
}
|
||||
|
||||
c.Success(nil)
|
||||
}
|
||||
|
||||
// OpayIDChange -
|
||||
func OpayIDChange(c *context.Context) {
|
||||
chid := c.Param("chid")
|
||||
chdata := hasChannel(chid, c)
|
||||
if chdata == nil {
|
||||
c.NotFound(nil)
|
||||
return
|
||||
}
|
||||
|
||||
bodyArg := struct {
|
||||
Opay string `json:"opay" binding:"required"`
|
||||
}{}
|
||||
err := c.BindData(&bodyArg)
|
||||
if err != nil {
|
||||
c.DataFormat(nil)
|
||||
return
|
||||
}
|
||||
|
||||
err = chdata.UpdateOpayID(bodyArg.Opay)
|
||||
if err != nil {
|
||||
c.ServerError(nil)
|
||||
return
|
||||
}
|
||||
|
||||
c.Success(nil)
|
||||
}
|
||||
|
||||
// GetDonateSetting -
|
||||
func GetDonateSetting(c *context.Context) {
|
||||
chid := c.Param("chid")
|
||||
chdata := hasChannel(chid, c)
|
||||
if chdata == nil {
|
||||
c.NotFound(nil)
|
||||
return
|
||||
}
|
||||
|
||||
ds, err := model.GetDonateSettingByChannel(chdata.ID)
|
||||
if err != nil {
|
||||
fmt.Println(ds, err)
|
||||
c.ServerError(nil)
|
||||
return
|
||||
}
|
||||
|
||||
var mapData map[string]interface{}
|
||||
if ds != nil {
|
||||
mapData = utils.ToMap(ds)
|
||||
} else {
|
||||
mapData = map[string]interface{}{}
|
||||
}
|
||||
|
||||
c.Success(map[string]interface{}{
|
||||
"setting": mapData,
|
||||
})
|
||||
}
|
||||
|
||||
// UpdateDonateSetting -
|
||||
func UpdateDonateSetting(c *context.Context) {
|
||||
chid := c.Param("chid")
|
||||
chdata := hasChannel(chid, c)
|
||||
if chdata == nil {
|
||||
c.NotFound(nil)
|
||||
return
|
||||
}
|
||||
|
||||
bodyArg := struct {
|
||||
End int64 `json:"end" binding:"exists"`
|
||||
Title string `json:"title" binding:"required"`
|
||||
Amount int `json:"amount" binding:"exists"`
|
||||
StartAmount int `json:"start_amount"`
|
||||
}{}
|
||||
err := c.BindData(&bodyArg)
|
||||
if err != nil {
|
||||
c.DataFormat(nil)
|
||||
return
|
||||
}
|
||||
|
||||
if bodyArg.End > 10000000000-1 {
|
||||
bodyArg.End = bodyArg.End / 1000
|
||||
}
|
||||
|
||||
t := time.Unix(bodyArg.End, 0)
|
||||
|
||||
ds := &model.DonateSetting{
|
||||
Title: bodyArg.Title,
|
||||
EndDate: t,
|
||||
StartDate: time.Now(),
|
||||
StartAmount: bodyArg.StartAmount,
|
||||
TargetAmount: bodyArg.Amount,
|
||||
Twitch: chdata.ID,
|
||||
}
|
||||
err = ds.InsertOrUpdate()
|
||||
if err != nil {
|
||||
c.ServerError(nil)
|
||||
return
|
||||
}
|
||||
|
||||
c.Success(nil)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user