131 lines
4.4 KiB
Go
131 lines
4.4 KiB
Go
package model
|
|
|
|
import (
|
|
"backend/msg"
|
|
util "backend/util"
|
|
"fmt"
|
|
"log"
|
|
)
|
|
|
|
type Mail struct {
|
|
AppId int `json:"AppId"`
|
|
ServerId int `json:"ServerId"`
|
|
PageSize int `json:"PageSize"`
|
|
CurrentPage int `json:"CurrentPage"`
|
|
|
|
MailId int `json:"mail_id" db:"mail_id"`
|
|
Title string `json:"title" db:"title"`
|
|
SubTitle string `json:"subtitle" db:"subTitle"`
|
|
Content string `json:"content" db:"content"`
|
|
|
|
TitleEn string `json:"title_en" db:"title_en"`
|
|
SubTitleEn string `json:"subtitle_en" db:"subTitle_en"`
|
|
ContentEn string `json:"content_en" db:"content_en"`
|
|
|
|
TitlePtBr string `json:"title_ptbr" db:"title_ptbr"`
|
|
SubTitlePtBr string `json:"subtitle_ptbr" db:"subTitle_ptbr"`
|
|
ContentPtBr string `json:"content_ptbr" db:"content_ptbr"`
|
|
|
|
TitleEsLatam string `json:"title_es_latam" db:"title_es_latam"`
|
|
SubTitleEsLatam string `json:"subtitle_es_latam" db:"subtitle_es_latam"`
|
|
ContentEsLatam string `json:"content_es_latam" db:"content_es_latam"`
|
|
|
|
StartTime int64 `json:"start_time" db:"start_time"`
|
|
EndTime int64 `json:"end_time" db:"end_time"`
|
|
Items string `json:"items" db:"items"`
|
|
RegisterTime int64 `json:"register_time" db:"register_time"`
|
|
MailType int `json:"mail_type" db:"mail_type"`
|
|
SendType int `json:"send_type" db:"send_type"`
|
|
ToUids string `json:"to_uids" db:"to_uids"`
|
|
CreateTime int64 `json:"create_time" db:"create_time"`
|
|
}
|
|
|
|
type Result struct {
|
|
Data interface{} `json:"data"`
|
|
Total int `json:"total"`
|
|
OperationList []string `json:"operationList,omitempty"`
|
|
}
|
|
|
|
func (m *Mail) MailList() (*Result, error) {
|
|
// do something
|
|
AppCfg, err := util.GetAppConfig(m.AppId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, m.ServerId)
|
|
if Db == nil {
|
|
return nil, fmt.Errorf("failed to get mysql db")
|
|
}
|
|
defer Db.Close()
|
|
var mail []*Mail
|
|
err = Db.Select(&mail, "SELECT `mail_id`, `title`, `content`, `start_time`, `end_time`, `items`, `register_time`, `mail_type`,`send_type`, `to_uids`, `create_time`, `subTitle`, `subTitle_en`, `content_en`, `title_en`, `title_ptbr`,`subTitle_ptbr`, `content_ptbr`, `title_es_latam`, `subtitle_es_latam`, `content_es_latam` FROM system_mail_info")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to scan rows: %v", err)
|
|
}
|
|
var total int
|
|
err = Db.Get(&total, "SELECT COUNT(*) FROM system_mail_info")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get total count: %v", err)
|
|
}
|
|
for _, v := range mail {
|
|
v.AppId = m.AppId
|
|
v.ServerId = m.ServerId
|
|
}
|
|
return &Result{
|
|
Data: mail,
|
|
Total: total,
|
|
}, nil
|
|
}
|
|
|
|
func (m *Mail) SendMail() error {
|
|
AppCfg, err := util.GetAppConfig(m.AppId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, m.ServerId)
|
|
if Db == nil {
|
|
return fmt.Errorf("failed to get mysql db")
|
|
}
|
|
defer Db.Close()
|
|
_, err = Db.Exec("INSERT INTO system_mail_info (`title`, `content`, `title_en`, `content_en`, `start_time`, `end_time`, `items`, `register_time`, `mail_type`, `send_type`, `to_uids`, `create_time`, `subTitle`, `subTitle_en`, `title_ptbr`,`content_ptbr`,`subTitle_ptbr`, `title_es_latam`, `subTitle_es_latam`, `content_es_latam`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.Title, m.Content, m.TitleEn, m.ContentEn, m.StartTime, m.EndTime, m.Items, m.RegisterTime, m.MailType, m.SendType, m.ToUids, m.CreateTime, m.SubTitle, m.SubTitleEn, m.TitlePtBr, m.ContentPtBr, m.SubTitlePtBr, m.TitleEsLatam, m.SubTitleEsLatam, m.ContentEsLatam)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to insert mail: %v", err)
|
|
}
|
|
ServerList := util.GetServerInfo(m.AppId, 0)
|
|
for _, server := range ServerList {
|
|
go func(serverInfo util.ServerConfig) {
|
|
ws, err := util.GetWebsocket(m.AppId, server.ServerId)
|
|
if err != nil {
|
|
log.Printf("failed to get websocket: %v", err)
|
|
}
|
|
defer ws.Close()
|
|
|
|
req := &msg.ReqReloadServerMail{}
|
|
_, err = util.SendAdminMsg(ws, req)
|
|
if err != nil {
|
|
log.Printf("failed to send admin message: %v", err)
|
|
}
|
|
log.Printf("sent reload mail message to server %d", server.ServerId)
|
|
}(server)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (m *Mail) DeleteMail() error {
|
|
AppCfg, err := util.GetAppConfig(m.AppId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, m.ServerId)
|
|
if Db == nil {
|
|
return fmt.Errorf("failed to get mysql db")
|
|
}
|
|
defer Db.Close()
|
|
_, err = Db.Exec("DELETE FROM system_mail_info WHERE `mail_id` = ?", m.MailId)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to delete mail: %v", err)
|
|
}
|
|
return nil
|
|
}
|