admin_backend/model/mail.go
2026-01-19 18:53:24 +08:00

117 lines
3.8 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"`
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)
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` 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)
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`) 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)
if err != nil {
return fmt.Errorf("failed to insert mail: %v", err)
}
ServerList := util.GetServerInfo(m.AppId, 0)
for _, server := range ServerList {
go func() {
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)
}
}()
}
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)
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
}