mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 16:00:24 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			118 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package models
 | 
						||
 | 
						||
import (
 | 
						||
	"encoding/json"
 | 
						||
	_ "github.com/go-sql-driver/mysql"
 | 
						||
	"github.com/iwind/TeaGo/Tea"
 | 
						||
	"github.com/iwind/TeaGo/dbs"
 | 
						||
)
 | 
						||
 | 
						||
const (
 | 
						||
	ClientBrowserStateEnabled  = 1 // 已启用
 | 
						||
	ClientBrowserStateDisabled = 0 // 已禁用
 | 
						||
)
 | 
						||
 | 
						||
var clientBrowserNameAndIdCacheMap = map[string]int64{}
 | 
						||
 | 
						||
type ClientBrowserDAO dbs.DAO
 | 
						||
 | 
						||
func NewClientBrowserDAO() *ClientBrowserDAO {
 | 
						||
	return dbs.NewDAO(&ClientBrowserDAO{
 | 
						||
		DAOObject: dbs.DAOObject{
 | 
						||
			DB:     Tea.Env,
 | 
						||
			Table:  "edgeClientBrowsers",
 | 
						||
			Model:  new(ClientBrowser),
 | 
						||
			PkName: "id",
 | 
						||
		},
 | 
						||
	}).(*ClientBrowserDAO)
 | 
						||
}
 | 
						||
 | 
						||
var SharedClientBrowserDAO *ClientBrowserDAO
 | 
						||
 | 
						||
func init() {
 | 
						||
	dbs.OnReady(func() {
 | 
						||
		SharedClientBrowserDAO = NewClientBrowserDAO()
 | 
						||
	})
 | 
						||
}
 | 
						||
 | 
						||
// 启用条目
 | 
						||
func (this *ClientBrowserDAO) EnableClientBrowser(tx *dbs.Tx, id uint32) error {
 | 
						||
	_, err := this.Query(tx).
 | 
						||
		Pk(id).
 | 
						||
		Set("state", ClientBrowserStateEnabled).
 | 
						||
		Update()
 | 
						||
	return err
 | 
						||
}
 | 
						||
 | 
						||
// 禁用条目
 | 
						||
func (this *ClientBrowserDAO) DisableClientBrowser(tx *dbs.Tx, id uint32) error {
 | 
						||
	_, err := this.Query(tx).
 | 
						||
		Pk(id).
 | 
						||
		Set("state", ClientBrowserStateDisabled).
 | 
						||
		Update()
 | 
						||
	return err
 | 
						||
}
 | 
						||
 | 
						||
// 查找启用中的条目
 | 
						||
func (this *ClientBrowserDAO) FindEnabledClientBrowser(tx *dbs.Tx, id int64) (*ClientBrowser, error) {
 | 
						||
	result, err := this.Query(tx).
 | 
						||
		Pk(id).
 | 
						||
		Attr("state", ClientBrowserStateEnabled).
 | 
						||
		Find()
 | 
						||
	if result == nil {
 | 
						||
		return nil, err
 | 
						||
	}
 | 
						||
	return result.(*ClientBrowser), err
 | 
						||
}
 | 
						||
 | 
						||
// 根据主键查找名称
 | 
						||
func (this *ClientBrowserDAO) FindClientBrowserName(tx *dbs.Tx, id uint32) (string, error) {
 | 
						||
	return this.Query(tx).
 | 
						||
		Pk(id).
 | 
						||
		Result("name").
 | 
						||
		FindStringCol("")
 | 
						||
}
 | 
						||
 | 
						||
// 根据浏览器名称查找浏览器ID
 | 
						||
func (this *ClientBrowserDAO) FindBrowserIdWithNameCacheable(tx *dbs.Tx, browserName string) (int64, error) {
 | 
						||
	SharedCacheLocker.RLock()
 | 
						||
	browserId, ok := clientBrowserNameAndIdCacheMap[browserName]
 | 
						||
	if ok {
 | 
						||
		SharedCacheLocker.RUnlock()
 | 
						||
		return browserId, nil
 | 
						||
	}
 | 
						||
	SharedCacheLocker.RUnlock()
 | 
						||
 | 
						||
	browserId, err := this.Query(tx).
 | 
						||
		Where("JSON_CONTAINS(codes, :browserName)").
 | 
						||
		Param("browserName", "\""+browserName+"\""). // 查询的需要是个JSON字符串,所以这里加双引号
 | 
						||
		ResultPk().
 | 
						||
		FindInt64Col(0)
 | 
						||
	if err != nil {
 | 
						||
		return 0, err
 | 
						||
	}
 | 
						||
 | 
						||
	if browserId > 0 {
 | 
						||
		// 只有找到的时候才放入缓存,以便于我们可以在不存在的时候创建一条新的记录
 | 
						||
		SharedCacheLocker.Lock()
 | 
						||
		clientBrowserNameAndIdCacheMap[browserName] = browserId
 | 
						||
		SharedCacheLocker.Unlock()
 | 
						||
	}
 | 
						||
 | 
						||
	return browserId, nil
 | 
						||
}
 | 
						||
 | 
						||
// 创建浏览器
 | 
						||
func (this *ClientBrowserDAO) CreateBrowser(tx *dbs.Tx, browserName string) (int64, error) {
 | 
						||
	op := NewClientBrowserOperator()
 | 
						||
	op.Name = browserName
 | 
						||
	codes := []string{browserName}
 | 
						||
	codesJSON, err := json.Marshal(codes)
 | 
						||
	if err != nil {
 | 
						||
		return 0, err
 | 
						||
	}
 | 
						||
	op.Codes = codesJSON
 | 
						||
	op.State = ClientBrowserStateEnabled
 | 
						||
	return this.SaveInt64(tx, op)
 | 
						||
}
 |