Initial commit: web_hghl_server

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 16:28:14 +08:00
co-authored by Claude Opus 4.7
commit 65fca60622
653 changed files with 135901 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
package srv_cfg
import (
"context"
"fmt"
"strings"
"videoweb/pub/common/srvdef"
"videoweb/pub/models/cfg"
"go.mongodb.org/mongo-driver/bson"
)
// GetSystemConfig 得到系统配置
func GetSystemConfig(ctx context.Context) (*cfg.SysCfg, *srvdef.SrvErr) {
filter := bson.M{
cfg.FN.SysCfg.Id: 1, //固定id
}
sysCfg, serr := cfg.FindOneSysCfg(ctx, filter)
if serr != nil {
return nil, serr
}
return sysCfg, nil
}
// emptyWatermark 水印字段为空时也写入空字符串,避免 omitempty 跳过导致旧值残留
func emptyWatermark(v *string) *string {
empty := ""
if v == nil || strings.TrimSpace(*v) == "" {
return &empty
}
s := strings.TrimSpace(*v)
return &s
}
func applyEmptyWatermarkFields(info *SysCfgUpdate) {
if info == nil {
return
}
info.WatermarkImage = emptyWatermark(info.WatermarkImage)
info.WatermarkMedia = emptyWatermark(info.WatermarkMedia)
info.WatermarkMediaTop = emptyWatermark(info.WatermarkMediaTop)
info.WatermarkMediaTopRight = emptyWatermark(info.WatermarkMediaTopRight)
info.WatermarkMediaBottomLeft = emptyWatermark(info.WatermarkMediaBottomLeft)
}
// UpdateSystemConfig 更新系统配置
func UpdateSystemConfig(ctx context.Context, info *SysCfgUpdate) *srvdef.SrvErr {
applyEmptyWatermarkFields(info)
filter := bson.M{
cfg.FN.SysCfg.Id: 1, //固定id
}
fmt.Println("filter", filter)
updateDoc := bson.M{"$set": info}
serr := cfg.UpdateOneSysCfg(ctx, filter, updateDoc)
if serr != nil {
return serr
}
return nil
}
// SetAppKey 单独更新媒资库 appKey,并刷新内存缓存。
func SetAppKey(ctx context.Context, appKey string) *srvdef.SrvErr {
appKey = strings.TrimSpace(appKey)
filter := bson.M{
cfg.FN.SysCfg.Id: 1,
}
updateDoc := bson.M{"$set": bson.M{
cfg.FN.SysCfg.AppKey: appKey,
}}
if serr := cfg.UpdateOneSysCfg(ctx, filter, updateDoc); serr != nil {
return serr
}
cfg.CacheAppKey(appKey)
return nil
}
+114
View File
@@ -0,0 +1,114 @@
package srv_cfg
import (
"go.mongodb.org/mongo-driver/bson/primitive"
)
type CDNNode struct {
Url *string `json:"url" bson:"url,omitempty"`
Ratio *int `json:"ratio" bson:"ratio,omitempty"`
}
type SysCfgUpdate struct {
UnencryptedCdn *string `json:"unencryptedCdn" bson:"unencryptedCdn,omitempty"` // 不加密资源使用的cdn
SitemapDefaultImages *[]string `json:"sitemapDefaultImages" bson:"sitemapDefaultImages,omitempty"` // Sitemap里面默认封面图
PdfAddr *string `json:"pdfAddr" bson:"pdfAddr"` // 回家的路PDF
ImgAppCdn *string `json:"imgAppCdn" bson:"imgAppCdn"` // 图片CDN(app使用)
ImgAppUsCdn *string `json:"imgAppUsCdn" bson:"imgAppUsCdn"` // 图片CDN(海外app使用)
ImgWebCdn *string `json:"imgWebCdn" bson:"imgWebCdn"` // 图片CDN(web使用)
MediaWebCdn *string `json:"mediaWebCdn" bson:"mediaWebCdn"` // 视频CDN(web使用)
MediaAppCdn *string `json:"mediaAppCdn" bson:"mediaAppCdn"` // 视频CDN(app使用)
MediaAppUsCdn *string `json:"mediaAppUsCdn" bson:"mediaAppUsCdn"` // 视频CDN(海外app使用)
WatermarkImage *string `json:"watermarkImage" bson:"watermarkImage"` // 图片水印文件
WatermarkMedia *string `json:"watermarkMedia" bson:"watermarkMedia"` // 视频水印文件(底部右边)
WatermarkMediaTop *string `json:"watermarkMediaTop" bson:"watermarkMediaTop"` // 视频水印文件(顶部左边)
WatermarkMediaTopRight *string `json:"watermarkMediaTopRight" bson:"watermarkMediaTopRight"` // 视频水印文件(顶部右边)
WatermarkMediaBottomLeft *string `json:"watermarkMediaBottomLeft" bson:"watermarkMediaBottomLeft"` // 视频水印文件(底部左边)
Mp4Addr *string `json:"mp4Addr" bson:"mp4Addr"` // mp4地址(web使用)
NewUrlAddr *string `json:"newUrlAddr" bson:"newUrlAddr"` //最新地址
NewUrlAddr1 *string `json:"newUrlAddr1" bson:"newUrlAddr1"` //最新地址(备用地址1)
NewUrlAddr2 *string `json:"newUrlAddr2" bson:"newUrlAddr2"` //最新地址(备用地址2)
ForeverUrlAddr *string `json:"foreverUrlAddr" bson:"foreverUrlAddr"` //永久地址
GmailAddr *string `json:"gmailAddr" bson:"gmailAddr"` //邮箱地址
AppAddr *string `json:"appAddr" bson:"appAddr"` //APP下载地址(落地页)
DownloadVideoUrl *string `json:"downloadVideoUrl" bson:"downloadVideoUrl"` // 下载视频URL
WeiChart *string `json:"weiChart" bson:"weiChart"` //微信群
QQ *string `json:"qq" bson:"qq"` //qq群
TgGroup *string `json:"tgGroup" bson:"tgGroup"` //tg群
PotaoGroup *string `json:"potaoGroup" bson:"potaoGroup"` //土豆群
GitAddr *string `json:"gitAddr" bson:"gitAddr"` //git地址
TwitterAddr *string `json:"twitterAddr" bson:"twitterAddr"` //推特地址
Telegram *string `json:"telegram" bson:"telegram"` //商务tg
TelegramAdd *string `json:"telegramAdd" bson:"telegramAdd"` //加入我们tg
TranslationAddr *string `json:"translationAddr" bson:"translationAddr"` //应用导航
//SEO
WebTitle *string `json:"webTitle" bson:"webTitle"` // 网站SEO标题
WebKeyworld *[]string `json:"webKeyworld" bson:"webKeyworld"` // 网站SEO关键字
WebDescription *string `json:"webDescription" bson:"webDescription"` // 网站SEO描述
WebSiteName *string `json:"webSiteName" bson:"webSiteName"` // 网站SEO网站名称
WebAddr *string `json:"webAddr" bson:"webAddr"` // 网站SEO网站地址
DHNewUrlAddr1 *string `json:"dhNewUrlAddr1" bson:"dhNewUrlAddr1"` // 导航页-线路一
DHNewUrlAddr2 *string `json:"dhNewUrlAddr2" bson:"dhNewUrlAddr2"` // 导航页-线路2
DHNewUrlAddr3 *string `json:"dhNewUrlAddr3" bson:"dhNewUrlAddr3"` // 导航页-线路3
DHTitle *string `json:"dhTitle" bson:"dhTitle"` // 导航SEO标题
DHKeyworld *[]string `json:"dhKeyworld" bson:"dhKeyworld"` // 导航SEO关键字
DHDescription *string `json:"dhDescription" bson:"dhDescription"` // 导航SEO描述
DHSiteName *string `json:"dhSiteName" bson:"dhSiteName"` // 导航SEO网站名称
ChannelCode *string `json:"channelCode" bson:"channelCode"` // 渠道码
EnableH265 *bool `json:"enableH265" bson:"enableH265"` // 是否允许客户端使用 H265 地址播放
M3U8DayRateLimitMax *int64 `json:"m3u8DayRateLimitMax" bson:"m3u8DayRateLimitMax"` // 每 IP 每天最多不同正片数,<=0 使用默认 80
// Acc2UserCDN *string `json:"acc2UserCDN" bson:"acc2UserCDN"` // up主视频播放CDN
// InviteAddr *string `json:"inviteAddr" bson:"inviteAddr"` // 用户邀请地址
// TelegramContact *string `json:"telegramContact" bson:"telegramContact"` // Telegram联系方式
// PotatoContact *string `json:"potatoContact" bson:"potatoContact"` // Potato联系方式
// DriverGroup *string `json:"driverGroup" bson:"driverGroup"` // 开车群
// CoinPrice *int64 `json:"coinPrice" bson:"coinPrice"` // 金币单价,单位分
// OfficialEmail *string `json:"officialEmail" bson:"officialEmail"` // 官方邮箱
// HeaderM3U8 *string `json:"headerM3U8" bson:"headerM3U8"` // 片头m3u8
// AppCenter *string `json:"appCenter" bson:"appCenter"` // 应用中心
// PayGuidPageUrl *string `json:"payGuidPageUrl" bson:"payGuidPageUrl"` // 支付引导页面地址
// ApiLimit *cfg.ApiCallLimit `json:"apiLimit" bson:"apiLimit"` // 访问接口和频率参数限制(每10秒)
// H5ShareUrl *string `json:"h5ShareUrl" bson:"h5ShareUrl"` // H5分享域名
// OnlineNum *int64 `json:"onlineNum" bson:"onlineNum"` // 在线人数
// Mp4Url *string `json:"mp4Url" bson:"mp4Url"` // MP4域名
// HotScoreConf *cfg.HotScoreConf `json:"hotScoreConf" bson:"hotScoreConf"` // 视频热度值配置
// MinimumDiscount *int64 `json:"minimumDiscount" bson:"minimumDiscount"` // 用户最低折扣
// AndroidGuestKey *string `json:"androdiGuestkey" bson:"androdiGuestkey"` // android注册签名
// H5GuestKey *string `json:"h5GuestKey" bson:"h5GuestKey"` // h5注册签名
// CustomerServiceHost *string `json:"customerServiceHost" bson:"customerServiceHost"` // 客服Host
// AdsType *cfg.AdsTypeConfig `json:"adsType" bson:"adsType"` // 广告模式
// FloatingWindow *FloatingWindow `json:"floatingWindow" bson:"floatingWindow"` // 悬浮窗
// IsLoliBlur *bool `json:"isLoliBlur" bson:"isLoliBlur,omitempty"` // 是否开启站群蒙版
// ChargeGiftChannel *string `json:"chargeGiftChannel" bson:"chargeGiftChannel"` // 充值赠送金币的渠道
// ChargeGiftGoldNumber *int64 `json:"chargeGiftGoldNumber" bson:"chargeGiftGoldNumber"` // 充值赠送金币数量
// AdminTG *string `json:"adminTG" bson:"adminTG"` // 管理员tg
// Theme *cfg.Theme `json:"theme" bson:"theme"`
}
type SysCfgMapParam struct {
Key string `json:"key" bson:"key"` //Key
StringVal string `json:"stringVal" bson:"stringVal"` //字符串的值
IntVal int64 `json:"intVal" bson:"intVal"` //int64的值
Desc string `json:"desc" bson:"desc"` //配置描述
}
type UpdateSysCfgMapReq struct {
Id primitive.ObjectID `json:"id" bson:"_id"` //ID
Param *SysCfgMapParam `json:"param" bson:"param"`
}
type DeleteSysCfgMapReq struct {
Id primitive.ObjectID `json:"id" bson:"_id"` //ID
}
type GetSysCfgMapReq struct {
Key *string `json:"key" bson:"key"`
Desc *string `json:"desc" bson:"desc"`
}
type FloatingWindow struct {
Enable bool `json:"enable" bson:"enable"`
Image string `json:"image" bson:"image"` //浮窗图片
Url string `json:"url" bson:"url"` //浮窗URL
ImageClose string `json:"imageClose" bson:"imageClose"` //浮窗图片
}