model

package
v0.5.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 15, 2026 License: Apache-2.0 Imports: 36 Imported by: 0

Documentation

Index

Constants

View Source
const (
	LogTypeUnknown = iota
	LogTypeTopup
	LogTypeConsume
	LogTypeManage
	LogTypeSystem
)
View Source
const (
	TokensPriceType    = "tokens"
	TimesPriceType     = "times"
	DefaultPrice       = 30.0
	DollarRate         = 0.002
	RMBRate            = 0.014
	DefaultCacheRatios = 0.5
	DefaultAudioRatio  = 40

	DefaultCachedWriteRatio = 1.25
	DefaultCachedReadRatio  = 0.1
)
View Source
const (
	PrivateGroupStatusEnabled = 1

	PrivateGroupGrantRoleOwner  = "owner"
	PrivateGroupGrantRoleMember = "member"

	PrivateGroupGrantSourceCreate = "create"
	PrivateGroupGrantSourceInvite = "invite"
	PrivateGroupGrantSourceAdmin  = "admin"

	PrivateGroupInviteCodeStatusEnabled  = 1
	PrivateGroupInviteCodeStatusDisabled = 2
)
View Source
const (
	TaskPlatformSuno         = "suno"
	TaskPlatformKling        = "kling"
	TaskPlatformTokiameVideo = "tokiame_video"
)
View Source
const (
	TokilakeWorkerNodeStatusOnline  = 1
	TokilakeWorkerNodeStatusBusy    = 2
	TokilakeWorkerNodeStatusOffline = 3
)
View Source
const (
	BatchUpdateTypeUserQuota = iota
	BatchUpdateTypeTokenQuota
	BatchUpdateTypeUsedQuota
	BatchUpdateTypeChannelUsedQuota
	BatchUpdateTypeRequestCount
	BatchUpdateTypeCount // if you add a new type, you need to add a new map and a new lock
)
View Source
const ModelOwnedByReserveID = 1000

Variables

View Source
var (
	TokenCacheSeconds           = 0
	UserGroupCacheKey           = "user_group:%d"
	UserTokensKey               = "token:%s"
	UsernameCacheKey            = "user_name:%d"
	UserQuotaCacheKey           = "user_quota:%d"
	UserEnabledCacheKey         = "user_enabled:%d"
	UserRealtimeQuotaKey        = "user_realtime_quota:%d"
	UserRealtimeQuotaExpiration = 24 * time.Hour

	OldUserTokensCacheKey = "old_user_tokens_cache"
)
View Source
var (
	ErrTokenNotFound          = errors.New("令牌不存在")
	ErrTokenExpired           = errors.New("令牌已过期")
	ErrTokenQuotaExhausted    = errors.New("令牌额度已用尽")
	ErrTokenStatusUnavailable = errors.New("令牌状态不可用")
	ErrTokenInvalid           = errors.New("无效的令牌")
	ErrTokenQuotaGet          = errors.New("获取令牌额度失败")
)
View Source
var ChannelGroup = ChannelsChooser{}
View Source
var DB *gorm.DB
View Source
var GlobalUserGroupRatio = UserGroupRatio{}
View Source
var UnknownOwnedBy = "未知"

Functions

func AddLogToBatch

func AddLogToBatch(log *Log)

func BatchDelModelChannels

func BatchDelModelChannels(params *BatchChannelsParams) (int64, error)

func BatchDeleteChannel

func BatchDeleteChannel(ids []int) (int64, error)

func BatchInsert

func BatchInsert[T any](db *gorm.DB, data []T) error

func BatchInsertChannels

func BatchInsertChannels(channels []Channel) error

func BatchUpdateChannelsAzureApi

func BatchUpdateChannelsAzureApi(params *BatchChannelsParams) (int64, error)

func CacheDecreaseUserQuota

func CacheDecreaseUserQuota(id int, quota int) error

func CacheDecreaseUserRealtimeQuota

func CacheDecreaseUserRealtimeQuota(id int, quota int) (int64, error)

func CacheGetUserGroup

func CacheGetUserGroup(id int) (group string, err error)

func CacheGetUserQuota

func CacheGetUserQuota(id int) (quota int, err error)

func CacheGetUsername

func CacheGetUsername(id int) (username string, err error)

func CacheIncreaseUserRealtimeQuota

func CacheIncreaseUserRealtimeQuota(id int, quota int) (int64, error)

func CacheIsUserEnabled

func CacheIsUserEnabled(userId int) (bool, error)

func CacheUpdateUserQuota

func CacheUpdateUserQuota(id int) error

func CacheUpdateUserRealtimeQuota

func CacheUpdateUserRealtimeQuota(id int, quota int) (int64, error)

func ChangeChannelsTagStatus

func ChangeChannelsTagStatus(tag string, status int) error

func ChangeUserGroupEnable

func ChangeUserGroupEnable(id int, enable bool) error

func ChangeUserQuota

func ChangeUserQuota(id int, quota int, isRecharge bool) (err error)

func CheckAndUpgradeUserGroup

func CheckAndUpgradeUserGroup(userId int, rechargeAmount int) error

CheckAndUpgradeUserGroup checks if a user's cumulative recharge amount falls within any promotion group's range and upgrades the user to that group if a match is found. The cumulative recharge amount is calculated as Quota + UsedQuota + rechargeAmount.

func CloseDB

func CloseDB() error

func CloseUnfinishedOrder

func CloseUnfinishedOrder() error

查询并关闭未完成的订单

func CountActivePrivateGroupInviteCodes

func CountActivePrivateGroupInviteCodes(groupId int) (int64, error)

func CountActivePrivateGroupMembers

func CountActivePrivateGroupMembers(groupId int) (int64, error)

func CreateModelInfo

func CreateModelInfo(modelInfo *ModelInfo) error

func CreateModelOwnedBy

func CreateModelOwnedBy(modelOwnedBy *ModelOwnedBy) error

func CreatePrivateGroup

func CreatePrivateGroup(ownerUserId int, groupSlug string) (*PrivateGroup, *PrivateGroupGrant, error)

func DecreaseTokenQuota

func DecreaseTokenQuota(id int, quota int) (err error)

func DecreaseUserQuota

func DecreaseUserQuota(id int, quota int) (err error)

func DeleteAllPrices

func DeleteAllPrices(tx *gorm.DB) error

func DeleteAllPricesNotLock

func DeleteAllPricesNotLock(tx *gorm.DB) error

只删除未lock的价格

func DeleteChannelTag

func DeleteChannelTag(channelId int) error

func DeleteChannelsTag

func DeleteChannelsTag(tag string, delDisabled bool) error

func DeleteDisabledChannel

func DeleteDisabledChannel() (int64, error)

func DeleteModelInfo

func DeleteModelInfo(id int) error

func DeleteModelOwnedBy

func DeleteModelOwnedBy(id int) error

func DeleteOldLog

func DeleteOldLog(targetTimestamp int64) (int64, error)

func DeletePrices

func DeletePrices(tx *gorm.DB, models []string) error

func DeletePricesByModelNameAndNotLock

func DeletePricesByModelNameAndNotLock(tx *gorm.DB, models []string) error

只删除指定的未lock的数据

func DeletePrivateGroup

func DeletePrivateGroup(group *PrivateGroup) error

func DeleteRedemptionById

func DeleteRedemptionById(id int) (err error)

func DeleteTokenById

func DeleteTokenById(id int, userId int) (err error)

func DeleteUserById

func DeleteUserById(id int) (err error)

func GetAllActivePrivateGroupSlugs

func GetAllActivePrivateGroupSlugs() ([]string, error)

func GetDefaultExtraRatio

func GetDefaultExtraRatio() string

func GetExtraPriceIsPrompt

func GetExtraPriceIsPrompt(key string) bool

func GetFieldsByID

func GetFieldsByID(model interface{}, fieldNames []string, id int, result interface{}) error

func GetIncreaseTokens

func GetIncreaseTokens(tokens int, ratio float64) int

func GetMaxUserId

func GetMaxUserId() int

func GetRootUserEmail

func GetRootUserEmail() (email string)

func GetUserFields

func GetUserFields(id int, fields []string) (map[string]interface{}, error)

func GetUserGroup

func GetUserGroup(id int) (group string, err error)

func GetUserIdByAffCode

func GetUserIdByAffCode(affCode string) (int, error)

func GetUserPrivateGroupDescriptions

func GetUserPrivateGroupDescriptions(userId int) (map[string]string, error)

func GetUserQuota

func GetUserQuota(id int) (quota int, err error)

func GetUserUsedQuota

func GetUserUsedQuota(id int) (quota int, err error)

func GetUserWebAuthnCredentials

func GetUserWebAuthnCredentials(userId int) []webauthn.Credential

获取用户的WebAuthn凭据

func GetUsernameById

func GetUsernameById(id int) (username string)

func HandleOldTokenMaxId

func HandleOldTokenMaxId()

func HasPrivateGroupChannelReference

func HasPrivateGroupChannelReference(groupSlug string) (bool, error)

func HasPrivateGroupTokenReference

func HasPrivateGroupTokenReference(groupSlug string) (bool, error)

func HashPrivateGroupInviteCode

func HashPrivateGroupInviteCode(code string) string

func IncreaseTokenQuota

func IncreaseTokenQuota(id int, quota int) (err error)

func IncreaseUserQuota

func IncreaseUserQuota(id int, quota int) (err error)

func InitBatchUpdater

func InitBatchUpdater()

func InitDB

func InitDB() (err error)

func InitModelInfo

func InitModelInfo()

func InitOptionMap

func InitOptionMap()

func InsertPrices

func InsertPrices(tx *gorm.DB, prices []*Price) error

func InsertStatisticsMonth

func InsertStatisticsMonth() error

InsertStatisticsMonth 生成当前时间上个月的账单

func InsertStatisticsMonthForDate

func InsertStatisticsMonthForDate(date time.Time) error

InsertStatisticsMonthForDate 生成指定月份的月度账单

func IsActivePrivateGroupSlug

func IsActivePrivateGroupSlug(groupSlug string) (bool, error)

func IsAdmin

func IsAdmin(userId int) bool

func IsEmailAlreadyTaken

func IsEmailAlreadyTaken(email string) bool

func IsFieldAlreadyTaken

func IsFieldAlreadyTaken(field string, value any) bool

func IsGitHubIdAlreadyTaken

func IsGitHubIdAlreadyTaken(githubId string) bool

func IsGitHubIdNewAlreadyTaken

func IsGitHubIdNewAlreadyTaken(githubIdNew int) bool

func IsGoogleIdAlreadyTaken

func IsGoogleIdAlreadyTaken(googleId string) bool

func IsLarkIdAlreadyTaken

func IsLarkIdAlreadyTaken(larkId string) bool

func IsReliable

func IsReliable(userId int) bool

func IsStatisticsMonthGenerated

func IsStatisticsMonthGenerated(date time.Time) bool

IsStatisticsMonthGenerated 传入日期,判断是否已生成账单数据

func IsTelegramCommandAlreadyTaken

func IsTelegramCommandAlreadyTaken(command string, id int) bool

func IsTelegramIdAlreadyTaken

func IsTelegramIdAlreadyTaken(telegramId int64) bool

func IsUserEnabled

func IsUserEnabled(userId int) (bool, error)

func IsUsernameAlreadyTaken

func IsUsernameAlreadyTaken(username string) bool

func IsWeChatIdAlreadyTaken

func IsWeChatIdAlreadyTaken(wechatId string) bool

func MarkOfflineTokilakeWorkerNodesBefore

func MarkOfflineTokilakeWorkerNodesBefore(cutoff int64) error

func MjBulkUpdate

func MjBulkUpdate(mjIds []string, params map[string]any) error

func MjBulkUpdateByTaskIds

func MjBulkUpdateByTaskIds(taskIDs []int, params map[string]any) error

func NewModelOwnedBys

func NewModelOwnedBys()

func NewPricing

func NewPricing()

NewPricing creates a new Pricing instance

func NormalizePrivateGroupInviteCode

func NormalizePrivateGroupInviteCode(code string) string

func PostConsumeTokenQuotaWithInfo

func PostConsumeTokenQuotaWithInfo(tokenId int, userId int, unlimitedQuota bool, quota int) (err error)

PostConsumeTokenQuotaWithInfo 消费 token 配额,直接使用传入的 userId 和 unlimitedQuota,避免数据库查询

func PreConsumeTokenQuota

func PreConsumeTokenQuota(tokenId int, quota int) (err error)

func PrivateGroupSlugExists

func PrivateGroupSlugExists(groupSlug string) (bool, error)

func RecordConsumeLog

func RecordConsumeLog(
	ctx context.Context,
	userId int,
	channelId int,
	promptTokens int,
	completionTokens int,
	modelName string,
	tokenName string,
	quota int,
	content string,
	requestTime int,
	isStream bool,
	metadata map[string]any,
	sourceIp string)

func RecordExists

func RecordExists(table interface{}, fieldName string, fieldValue interface{}, excludeID interface{}) bool

func RecordLog

func RecordLog(userId int, logType int, content string)

func RecordQuotaLog

func RecordQuotaLog(userId int, logType int, quota int, ip string, content string)

func Redeem

func Redeem(key string, userId int, ip string) (quota int, err error)

func RedeemPrivateGroupInviteCode

func RedeemPrivateGroupInviteCode(code string, userId int) (*PrivateGroup, *PrivateGroupGrant, *PrivateGroupInviteCode, bool, error)

func ResetUserPasswordByEmail

func ResetUserPasswordByEmail(email string, password string) error

func RevokePrivateGroupGrant

func RevokePrivateGroupGrant(groupId int, userId int) error

func SaveWebAuthnCredential

func SaveWebAuthnCredential(userId int, credential *webauthn.Credential, alias string) error

保存WebAuthn凭据

func SetupDB

func SetupDB()

func SumUsedQuota

func SumUsedQuota(startTimestamp int64, endTimestamp int64, modelName string, username string, tokenName string, channel int) (quota int)

func SyncOptions

func SyncOptions(frequency int)

func TaskBulkUpdate

func TaskBulkUpdate(TaskIds []string, params map[string]any) error

func TaskBulkUpdateByID

func TaskBulkUpdateByID(ids []int64, params map[string]any) error

func TaskBulkUpdateByTaskIds

func TaskBulkUpdateByTaskIds(taskIDs []int64, params map[string]any) error

func UpdateChannelStatusById

func UpdateChannelStatusById(id int, status int)

func UpdateChannelUsedQuota

func UpdateChannelUsedQuota(id int, quota int)

func UpdateChannelsTag

func UpdateChannelsTag(tag string, channel *Channel) error

func UpdateChannelsTagPriority

func UpdateChannelsTagPriority(tag string, value int) error

func UpdateFieldsByID

func UpdateFieldsByID(model interface{}, id int, fields map[string]interface{}) error

func UpdateModelInfo

func UpdateModelInfo(modelInfo *ModelInfo) error

func UpdateModelOwnedBy

func UpdateModelOwnedBy(modelOwnedBy *ModelOwnedBy) error

func UpdateOption

func UpdateOption(key string, value string) error

func UpdatePriceByPriceService

func UpdatePriceByPriceService() error

func UpdatePrices

func UpdatePrices(tx *gorm.DB, models []string, prices *Price) error

func UpdatePrivateGroupInviteCodeStatus

func UpdatePrivateGroupInviteCodeStatus(code *PrivateGroupInviteCode, status int) error

func UpdatePrivateGroupSlug

func UpdatePrivateGroupSlug(group *PrivateGroup, newSlug string) error

func UpdateStatistics

func UpdateStatistics(updateType StatisticsUpdateType) error

func UpdateUser

func UpdateUser(id int, fields map[string]interface{}) error

func UpdateUserUsedQuotaAndRequestCount

func UpdateUserUsedQuotaAndRequestCount(id int, quota int)

func UserGroupSymbolExists

func UserGroupSymbolExists(symbol string) (bool, error)

Types

type AdminSearchTokensParams

type AdminSearchTokensParams struct {
	GenericParams
	UserId  int `form:"user_id"`
	TokenId int `form:"token_id"`
}

AdminSearchTokensParams 管理员搜索令牌的参数

type BatchChannelsParams

type BatchChannelsParams struct {
	Value string `json:"value" form:"value" binding:"required"`
	Ids   []int  `json:"ids" form:"ids" binding:"required"`
}

type BatchPrices

type BatchPrices struct {
	Models []string `json:"models" binding:"required"`
	Price  Price    `json:"price" binding:"required"`
}

type Channel

type Channel struct {
	Id                 int     `json:"id"`
	Type               int     `json:"type" form:"type" gorm:"default:0"`
	Key                string  `json:"key" form:"key" gorm:"type:text"`
	Status             int     `json:"status" form:"status" gorm:"default:1"`
	Name               string  `json:"name" form:"name" gorm:"index"`
	Weight             *uint   `json:"weight" gorm:"default:1"`
	CreatedTime        int64   `json:"created_time" gorm:"bigint"`
	TestTime           int64   `json:"test_time" gorm:"bigint"`
	ResponseTime       int     `json:"response_time"` // in milliseconds
	BaseURL            *string `json:"base_url" gorm:"column:base_url;default:''"`
	Other              string  `json:"other" form:"other"`
	Balance            float64 `json:"balance"` // in USD
	BalanceUpdatedTime int64   `json:"balance_updated_time" gorm:"bigint"`
	Models             string  `json:"models" form:"models"`
	Group              string  `json:"group" form:"group" gorm:"type:varchar(32);default:'default'"`
	Tag                string  `json:"tag" form:"tag" gorm:"type:varchar(32);default:''"`
	UsedQuota          int64   `json:"used_quota" gorm:"bigint;default:0"`
	ModelMapping       *string `json:"model_mapping" gorm:"type:text"`
	ModelHeaders       *string `json:"model_headers" gorm:"type:varchar(1024);default:''"`
	CustomParameter    *string `json:"custom_parameter" gorm:"type:varchar(1024);default:''"`
	Priority           *int64  `json:"priority" gorm:"bigint;default:0"`
	Proxy              *string `json:"proxy" gorm:"type:varchar(255);default:''"`
	TestModel          string  `json:"test_model" form:"test_model" gorm:"type:varchar(50);default:''"`
	OnlyChat           bool    `json:"only_chat" form:"only_chat" gorm:"default:false"`
	PreCost            int     `json:"pre_cost" form:"pre_cost" gorm:"default:1"`
	CompatibleResponse bool    `json:"compatible_response" gorm:"default:false"`
	AllowExtraBody     bool    `json:"allow_extra_body" form:"allow_extra_body" gorm:"default:false"`

	DisabledStream *datatypes.JSONSlice[string] `json:"disabled_stream,omitempty" gorm:"type:json"`

	Plugin    *datatypes.JSONType[PluginType] `json:"plugin" form:"plugin" gorm:"type:json"`
	DeletedAt gorm.DeletedAt                  `json:"-" gorm:"index"`
}

func GetAllChannels

func GetAllChannels() ([]*Channel, error)

func GetChannelById

func GetChannelById(id int) (*Channel, error)

func GetChannelsByTag

func GetChannelsByTag(tag string) ([]*Channel, error)

func GetChannelsTagList

func GetChannelsTagList(tag string) ([]*Channel, error)

func (*Channel) AllowStream

func (c *Channel) AllowStream(modelName string) bool

func (*Channel) Delete

func (channel *Channel) Delete() error

func (*Channel) GetBaseURL

func (channel *Channel) GetBaseURL() string

func (*Channel) GetCustomParameter

func (channel *Channel) GetCustomParameter() string

func (*Channel) GetModelMapping

func (channel *Channel) GetModelMapping() string

func (*Channel) GetPriority

func (channel *Channel) GetPriority() int64

func (*Channel) Insert

func (channel *Channel) Insert() error

func (*Channel) SetProxy

func (c *Channel) SetProxy()

func (*Channel) StatusToStr

func (channel *Channel) StatusToStr() string

func (*Channel) Update

func (channel *Channel) Update(overwrite bool) error

func (*Channel) UpdateBalance

func (channel *Channel) UpdateBalance(balance float64)

func (*Channel) UpdateRaw

func (channel *Channel) UpdateRaw(overwrite bool) error

func (*Channel) UpdateResponseTime

func (channel *Channel) UpdateResponseTime(responseTime int64)

type ChannelChoice

type ChannelChoice struct {
	Channel       *Channel
	CooldownsTime int64
	Disable       bool
}

type ChannelStatistics

type ChannelStatistics struct {
	TotalChannels int `json:"total_channels"`
	Status        int `json:"status"`
}

func GetStatisticsChannel

func GetStatisticsChannel() (statistics []*ChannelStatistics, err error)

type ChannelTag

type ChannelTag struct {
	ID  int    `json:"id"`
	Tag string `json:"tag"`
}

func GetChannelsTagAllList

func GetChannelsTagAllList() ([]*ChannelTag, error)

type ChannelTagCollection

type ChannelTagCollection struct {
	Channel
	KeyMap map[string]int
}

func GetChannelsTag

func GetChannelsTag(tag string) (*ChannelTagCollection, error)

type ChannelsChooser

type ChannelsChooser struct {
	sync.RWMutex
	Channels  map[int]*ChannelChoice
	Rule      map[string]map[string][][]int // group -> model -> priority -> channelIds
	Match     []string
	Cooldowns sync.Map

	ModelGroup map[string]map[string]bool
}

func (*ChannelsChooser) ChangeStatus

func (cc *ChannelsChooser) ChangeStatus(channelId int, status bool)

func (*ChannelsChooser) CleanupExpiredCooldowns

func (cc *ChannelsChooser) CleanupExpiredCooldowns()

func (*ChannelsChooser) Disable

func (cc *ChannelsChooser) Disable(channelId int)

func (*ChannelsChooser) Enable

func (cc *ChannelsChooser) Enable(channelId int)

func (*ChannelsChooser) GetChannel

func (cc *ChannelsChooser) GetChannel(channelId int) *Channel

func (*ChannelsChooser) GetGroupModels

func (cc *ChannelsChooser) GetGroupModels(group string) ([]string, error)

func (*ChannelsChooser) GetModelsGroups

func (cc *ChannelsChooser) GetModelsGroups() map[string]map[string]bool

func (*ChannelsChooser) IsInCooldown

func (cc *ChannelsChooser) IsInCooldown(channelId int, modelName string) bool

func (*ChannelsChooser) Load

func (cc *ChannelsChooser) Load()

func (*ChannelsChooser) Next

func (cc *ChannelsChooser) Next(group, modelName string, filters ...ChannelsFilterFunc) (*Channel, error)

func (*ChannelsChooser) SetCooldowns

func (cc *ChannelsChooser) SetCooldowns(channelId int, modelName string) bool

type ChannelsFilterFunc

type ChannelsFilterFunc func(channelId int, choice *ChannelChoice) bool

func FilterChannelId

func FilterChannelId(skipChannelIds []int) ChannelsFilterFunc

func FilterChannelTypes

func FilterChannelTypes(channelTypes []int) ChannelsFilterFunc

func FilterDisabledStream

func FilterDisabledStream(modelName string) ChannelsFilterFunc

func FilterOnlyChat

func FilterOnlyChat() ChannelsFilterFunc

type CurrencyType

type CurrencyType string
const (
	CurrencyTypeUSD CurrencyType = "USD"
	CurrencyTypeCNY CurrencyType = "CNY"
)

type DataResult

type DataResult[T modelable] struct {
	Data       *[]*T `json:"data"`
	Page       int   `json:"page"`
	Size       int   `json:"size"`
	TotalCount int64 `json:"total_count"`
}

func GetAllMJTasks

func GetAllMJTasks(params *MJTaskQueryParams) (*DataResult[Midjourney], error)

func GetAllTasks

func GetAllTasks(params *TaskQueryParams) (*DataResult[Task], error)

func GetAllUserMJTask

func GetAllUserMJTask(userId int, params *MJTaskQueryParams) (*DataResult[Midjourney], error)

func GetAllUserTasks

func GetAllUserTasks(userId int, params *TaskQueryParams) (*DataResult[Task], error)

func GetChannelsList

func GetChannelsList(params *SearchChannelsParams) (*DataResult[Channel], error)

func GetLogsList

func GetLogsList(params *LogsListParams) (*DataResult[Log], error)

func GetOrderList

func GetOrderList(params *SearchOrderParams) (*DataResult[Order], error)

func GetPanymentList

func GetPanymentList(params *SearchPaymentParams) (*DataResult[Payment], error)

func GetRedemptionsList

func GetRedemptionsList(params *GenericParams) (*DataResult[Redemption], error)

func GetTelegramMenusList

func GetTelegramMenusList(params *GenericParams) (*DataResult[TelegramMenu], error)

func GetTokensListByAdmin

func GetTokensListByAdmin(params *AdminSearchTokensParams) (*DataResult[TokenWithOwner], error)

GetTokensListByAdmin 管理员查询令牌列表(可按用户ID或令牌ID查询)

func GetUserGroupsList

func GetUserGroupsList(params *SearchUserGroupParams) (*DataResult[UserGroup], error)

func GetUserInvoices

GetUserInvoices 查询用户所有账单数据

func GetUserLogsList

func GetUserLogsList(userId int, params *LogsListParams) (*DataResult[Log], error)

func GetUserTokensList

func GetUserTokensList(userId int, params *GenericParams) (*DataResult[Token], error)

func GetUsersList

func GetUsersList(params *GenericParams) (*DataResult[User], error)

func PaginateAndOrder

func PaginateAndOrder[T modelable](db *gorm.DB, params *PaginationParams, result *[]*T, allowedOrderFields map[string]bool) (*DataResult[T], error)

type GenericParams

type GenericParams struct {
	PaginationParams
	Keyword string `form:"keyword"`
}

type HeartbeatSetting

type HeartbeatSetting struct {
	Enabled        bool `json:"enabled"`
	TimeoutSeconds int  `json:"timeout_seconds"`
}

type LimitModelSetting

type LimitModelSetting struct {
	Enabled bool     `json:"enabled"`
	Models  []string `json:"models"`
}

type LimitsConfig

type LimitsConfig struct {
	LimitModelSetting LimitModelSetting `json:"limit_model_setting,omitempty"`
	LimitsIPSetting   LimitsIPSetting   `json:"limits_ip_setting,omitempty"`
}

type LimitsIPSetting

type LimitsIPSetting struct {
	Enabled   bool     `json:"enabled"`
	Whitelist []string `json:"whitelist"`
}

type Log

type Log struct {
	Id               int                                `json:"id"`
	UserId           int                                `json:"user_id" gorm:"index"`
	CreatedAt        int64                              `json:"created_at" gorm:"bigint;index:idx_created_at_type"`
	Type             int                                `json:"type" gorm:"index:idx_created_at_type"`
	Content          string                             `json:"content"`
	Username         string                             `json:"username" gorm:"index:index_username_model_name,priority:2;default:''"`
	TokenName        string                             `json:"token_name" gorm:"index;default:''"`
	ModelName        string                             `json:"model_name" gorm:"index;index:index_username_model_name,priority:1;default:''"`
	Quota            int                                `json:"quota" gorm:"default:0"`
	PromptTokens     int                                `json:"prompt_tokens" gorm:"default:0"`
	CompletionTokens int                                `json:"completion_tokens" gorm:"default:0"`
	ChannelId        int                                `json:"channel_id" gorm:"index"`
	RequestTime      int                                `json:"request_time" gorm:"default:0"`
	IsStream         bool                               `json:"is_stream" gorm:"default:false"`
	SourceIp         string                             `json:"source_ip" gorm:"default:''"`
	Metadata         datatypes.JSONType[map[string]any] `json:"metadata" gorm:"type:json"`

	Channel *Channel `json:"channel" gorm:"foreignKey:Id;references:ChannelId"`
}

func SearchAllLogs

func SearchAllLogs(keyword string) (logs []*Log, err error)

func SearchUserLogs

func SearchUserLogs(userId int, keyword string) (logs []*Log, err error)

type LogStatistic

type LogStatistic struct {
	Date             string `gorm:"column:date"`
	RequestCount     int64  `gorm:"column:request_count"`
	Quota            int64  `gorm:"column:quota"`
	PromptTokens     int64  `gorm:"column:prompt_tokens"`
	CompletionTokens int64  `gorm:"column:completion_tokens"`
	RequestTime      int64  `gorm:"column:request_time"`
}

type LogStatisticGroupChannel

type LogStatisticGroupChannel struct {
	LogStatistic
	Channel string `gorm:"column:channel"`
}

func GetChannelExpensesStatisticsByPeriod

func GetChannelExpensesStatisticsByPeriod(startTime, endTime, groupType string, userID int) (LogStatistics []*LogStatisticGroupChannel, err error)

type LogStatisticGroupModel

type LogStatisticGroupModel struct {
	LogStatistic
	ModelName string `gorm:"column:model_name"`
}

func GetUserModelStatisticsByPeriod

func GetUserModelStatisticsByPeriod(userId int, startTime, endTime string) (LogStatistic []*LogStatisticGroupModel, err error)

type LogsListParams

type LogsListParams struct {
	PaginationParams
	LogType        int    `form:"log_type"`
	StartTimestamp int64  `form:"start_timestamp"`
	EndTimestamp   int64  `form:"end_timestamp"`
	ModelName      string `form:"model_name"`
	Username       string `form:"username"`
	TokenName      string `form:"token_name"`
	ChannelId      int    `form:"channel_id"`
	SourceIp       string `form:"source_ip"`
}

type MJTaskQueryParams

type MJTaskQueryParams struct {
	ChannelID      int    `form:"channel_id"`
	TokenID        int    `form:"token_id"`
	MjID           string `form:"mj_id"`
	StartTimestamp int    `form:"start_timestamp"`
	EndTimestamp   int    `form:"end_timestamp"`
	PaginationParams
}

TaskQueryParams 用于包含所有搜索条件的结构体,可以根据需求添加更多字段

type Midjourney

type Midjourney struct {
	Id          int    `json:"id"`
	Code        int    `json:"code"`
	UserId      int    `json:"user_id" gorm:"index"`
	Action      string `json:"action" gorm:"type:varchar(40);index"`
	MjId        string `json:"mj_id" gorm:"index"`
	Prompt      string `json:"prompt"`
	PromptEn    string `json:"prompt_en"`
	Description string `json:"description"`
	State       string `json:"state"`
	SubmitTime  int64  `json:"submit_time" gorm:"index"`
	StartTime   int64  `json:"start_time" gorm:"index"`
	FinishTime  int64  `json:"finish_time" gorm:"index"`
	ImageUrl    string `json:"image_url"`
	Status      string `json:"status" gorm:"type:varchar(20);index"`
	Progress    string `json:"progress" gorm:"type:varchar(30);index"`
	FailReason  string `json:"fail_reason"`
	ChannelId   int    `json:"channel_id"`
	Quota       int    `json:"quota"`
	Buttons     string `json:"buttons"`
	Properties  string `json:"properties"`
	Mode        string `json:"mode,omitempty"`
	TokenID     int    `json:"token_id" gorm:"default:0"`
}

func GetAllUnFinishTasks

func GetAllUnFinishTasks() []*Midjourney

func GetByMJId

func GetByMJId(userId int, mjId string) *Midjourney

func GetByMJIds

func GetByMJIds(userId int, mjIds []string) []*Midjourney

func GetByOnlyMJId

func GetByOnlyMJId(mjId string) *Midjourney

func (*Midjourney) Insert

func (midjourney *Midjourney) Insert() error

func (*Midjourney) Update

func (midjourney *Midjourney) Update() error

type ModelInfo

type ModelInfo struct {
	Id               int    `json:"id" gorm:"index"`
	Model            string `json:"model" gorm:"type:varchar(100);index"`
	Name             string `json:"name" gorm:"type:varchar(100)"`
	Description      string `json:"description" gorm:"type:text"`
	ContextLength    int    `json:"context_length"`
	MaxTokens        int    `json:"max_tokens"`
	InputModalities  string `json:"input_modalities" gorm:"type:text"`
	OutputModalities string `json:"output_modalities" gorm:"type:text"`
	Tags             string `json:"tags" gorm:"type:text"`
	SupportUrl       string `json:"support_url" gorm:"type:text"`
	CreatedAt        int64  `json:"created_at" gorm:"autoCreateTime"`
	UpdatedAt        int64  `json:"updated_at" gorm:"autoUpdateTime"`
}

func GetAllModelInfo

func GetAllModelInfo() ([]*ModelInfo, error)

func GetModelInfo

func GetModelInfo(id int) (*ModelInfo, error)

func GetModelInfoByModel

func GetModelInfoByModel(model string) (*ModelInfo, error)

func (*ModelInfo) TableName

func (m *ModelInfo) TableName() string

func (*ModelInfo) ToResponse

func (m *ModelInfo) ToResponse() *ModelInfoResponse

type ModelInfoResponse

type ModelInfoResponse struct {
	Model            string   `json:"model"`
	Name             string   `json:"name"`
	Description      string   `json:"description"`
	ContextLength    int      `json:"context_length"`
	MaxTokens        int      `json:"max_tokens"`
	InputModalities  []string `json:"input_modalities"`
	OutputModalities []string `json:"output_modalities"`
	Tags             []string `json:"tags"`
	SupportUrl       []string `json:"support_url"`
	CreatedAt        int64    `json:"created_at"`
	UpdatedAt        int64    `json:"updated_at"`
}

type ModelOwnedBy

type ModelOwnedBy struct {
	Id   int    `json:"id" gorm:"index"`
	Name string `json:"name" gorm:"type:varchar(100)"`
	Icon string `json:"icon" gorm:"type:text"`
}

func GetAllModelOwnedBy

func GetAllModelOwnedBy() ([]*ModelOwnedBy, error)

func GetDefaultModelOwnedBy

func GetDefaultModelOwnedBy() []*ModelOwnedBy

func GetModelOwnedBy

func GetModelOwnedBy(id int) (*ModelOwnedBy, error)

func (*ModelOwnedBy) TableName

func (m *ModelOwnedBy) TableName() string

type ModelOwnedBys

type ModelOwnedBys struct {
	sync.RWMutex
	ModelOwnedBy map[int]*ModelOwnedBy
}
var ModelOwnedBysInstance *ModelOwnedBys

func (*ModelOwnedBys) Get

func (m *ModelOwnedBys) Get(id int) *ModelOwnedBy

func (*ModelOwnedBys) GetAll

func (m *ModelOwnedBys) GetAll() map[int]*ModelOwnedBy

func (*ModelOwnedBys) GetIcon

func (m *ModelOwnedBys) GetIcon(id int) string

func (*ModelOwnedBys) GetName

func (m *ModelOwnedBys) GetName(id int) string

func (*ModelOwnedBys) Load

func (m *ModelOwnedBys) Load() error

func (*ModelOwnedBys) SyncModelOwnedBy

func (m *ModelOwnedBys) SyncModelOwnedBy(modelOwnedBies []*ModelOwnedBy)

type ModelType

type ModelType struct {
	Ratio []float64
	Type  int
}

type ModelUsageByUser

type ModelUsageByUser struct {
	Username     string `gorm:"column:username" json:"username"`
	ModelName    string `gorm:"column:model_name" json:"model_name"`
	RequestCount int64  `gorm:"column:request_count" json:"request_count"`
}

ModelUsageByUser 按用户和模型分组的使用统计

func GetModelUsageByUser

func GetModelUsageByUser(usernames []string, startTime, endTime string) ([]*ModelUsageByUser, error)

GetModelUsageByUser 获取每个用户使用不同模型的调用次数

type MultiUserStatistic

type MultiUserStatistic struct {
	Username         string `gorm:"column:username" json:"username"`
	ModelName        string `gorm:"column:model_name" json:"model_name"`
	RequestCount     int64  `gorm:"column:request_count" json:"request_count"`
	Quota            int64  `gorm:"column:quota" json:"quota"`
	PromptTokens     int64  `gorm:"column:prompt_tokens" json:"prompt_tokens"`
	CompletionTokens int64  `gorm:"column:completion_tokens" json:"completion_tokens"`
	RequestTime      int64  `gorm:"column:request_time" json:"request_time"`
}

func GetMultiUserStatisticsByPeriod

func GetMultiUserStatisticsByPeriod(usernames []string, startTime, endTime string) ([]*MultiUserStatistic, error)

GetMultiUserStatisticsByPeriod 获取多个用户在指定时间段内的统计数据

type Option

type Option struct {
	Key   string `json:"key" gorm:"primaryKey"`
	Value string `json:"value"`
}

func AllOption

func AllOption() ([]*Option, error)

func GetOption

func GetOption(key string) (option Option, err error)

type Order

type Order struct {
	ID            int            `json:"id"`
	UserId        int            `json:"user_id"`
	GatewayId     int            `json:"gateway_id"`
	TradeNo       string         `json:"trade_no" gorm:"type:varchar(50);uniqueIndex"`
	GatewayNo     string         `json:"gateway_no" gorm:"type:varchar(100)"`
	Amount        int            `json:"amount" gorm:"default:0"`
	OrderAmount   float64        `json:"order_amount" gorm:"type:decimal(10,2);default:0"`
	OrderCurrency CurrencyType   `json:"order_currency" gorm:"type:varchar(16)"`
	Quota         int            `json:"quota" gorm:"type:int;default:0"`
	Fee           float64        `json:"fee" gorm:"type:decimal(10,2);default:0"`
	Discount      float64        `json:"discount" gorm:"type:decimal(10,2);default:0"`
	Status        OrderStatus    `json:"status" gorm:"type:varchar(32)"`
	CreatedAt     int            `json:"created_at"`
	UpdatedAt     int            `json:"-"`
	DeletedAt     gorm.DeletedAt `json:"-" gorm:"index"`
}

func GetOrderByTradeNo

func GetOrderByTradeNo(tradeNo string) (*Order, error)

func GetUserOrder

func GetUserOrder(userId int, tradeNo string) (*Order, error)

func (*Order) Insert

func (o *Order) Insert() error

func (*Order) Update

func (o *Order) Update() error

type OrderStatistics

type OrderStatistics struct {
	Quota         int64   `json:"quota"`
	Money         float64 `json:"money"`
	OrderCurrency string  `json:"order_currency"`
}

func GetStatisticsOrder

func GetStatisticsOrder() (orderStatistics []*OrderStatistics, err error)

type OrderStatisticsGroup

type OrderStatisticsGroup struct {
	Date        string  `json:"date"`
	OrderAmount float64 `json:"order_amount"`
}

func GetStatisticsOrderByPeriod

func GetStatisticsOrderByPeriod(startTimestamp, endTimestamp int64) (orderStatistics []*OrderStatisticsGroup, err error)

type OrderStatus

type OrderStatus string
const (
	OrderStatusPending OrderStatus = "pending"
	OrderStatusSuccess OrderStatus = "success"
	OrderStatusFailed  OrderStatus = "failed"
	OrderStatusClosed  OrderStatus = "closed"
)

type PaginationParams

type PaginationParams struct {
	Page  int    `form:"page"`
	Size  int    `form:"size"`
	Order string `form:"order"`
}

type Payment

type Payment struct {
	ID           int            `json:"id"`
	Type         string         `json:"type" form:"type" gorm:"type:varchar(16)"`
	UUID         string         `json:"uuid" form:"uuid" gorm:"type:char(32);uniqueIndex"`
	Name         string         `json:"name" form:"name" gorm:"type:varchar(255); not null"`
	Icon         string         `json:"icon" form:"icon" gorm:"type:varchar(300)"`
	NotifyDomain string         `json:"notify_domain" form:"notify_domain" gorm:"type:varchar(300)"`
	FixedFee     float64        `json:"fixed_fee" form:"fixed_fee" gorm:"type:decimal(10,2); default:0.00"`
	PercentFee   float64        `json:"percent_fee" form:"percent_fee" gorm:"type:decimal(10,2); default:0.00"`
	Currency     CurrencyType   `json:"currency" form:"currency" gorm:"type:varchar(5)"`
	Config       string         `json:"config" form:"config" gorm:"type:text"`
	Sort         int            `json:"sort" form:"sort" gorm:"default:1"`
	Enable       *bool          `json:"enable" form:"enable" gorm:"default:true"`
	CreatedAt    int64          `json:"created_at" gorm:"bigint"`
	UpdatedAt    int64          `json:"-" gorm:"bigint"`
	DeletedAt    gorm.DeletedAt `json:"-" gorm:"index"`
}

func GetPaymentByID

func GetPaymentByID(id int) (*Payment, error)

func GetPaymentByUUID

func GetPaymentByUUID(uuid string) (*Payment, error)

func GetUserPaymentList

func GetUserPaymentList() ([]*Payment, error)

func (*Payment) Delete

func (p *Payment) Delete() error

func (*Payment) Insert

func (p *Payment) Insert() error

func (*Payment) Update

func (p *Payment) Update(overwrite bool) error

type PluginType

type PluginType map[string]map[string]interface{}

type Price

type Price struct {
	Model       string  `json:"model" gorm:"type:varchar(100)" binding:"required"`
	Type        string  `json:"type"  gorm:"default:'tokens'" binding:"required"`
	ChannelType int     `json:"channel_type" gorm:"default:0" binding:"gte=0"`
	Input       float64 `json:"input" gorm:"default:0" binding:"gte=0"`
	Output      float64 `json:"output" gorm:"default:0" binding:"gte=0"`
	Locked      bool    `json:"locked" gorm:"default:false"` // 如果模型为locked 则覆盖模式不会更新locked的模型价格

	ExtraRatios *datatypes.JSONType[map[string]float64] `json:"extra_ratios,omitempty" gorm:"type:json"`
	ModelInfo   *ModelInfoResponse                      `json:"model_info,omitempty" gorm:"-"`
}

func GetAllPrices

func GetAllPrices() ([]*Price, error)

func GetDefaultPrice

func GetDefaultPrice() []*Price

1 === $0.002 / 1K tokens 1 === ¥0.014 / 1k tokens

func GetOldPricesList

func GetOldPricesList() []*Price

func GetPriceByPriceService

func GetPriceByPriceService() ([]*Price, error)

GetPriceByPriceService 只插入系统没有的数据

func GetPricesList

func GetPricesList(pricingType string) []*Price

func (*Price) Delete

func (price *Price) Delete() error

func (*Price) FetchInputCurrencyPrice

func (price *Price) FetchInputCurrencyPrice(rate float64) string

func (*Price) FetchOutputCurrencyPrice

func (price *Price) FetchOutputCurrencyPrice(rate float64) string

func (*Price) GetExtraRatio

func (price *Price) GetExtraRatio(key string) float64

func (*Price) GetInput

func (price *Price) GetInput() float64

func (*Price) GetOutput

func (price *Price) GetOutput() float64

func (*Price) Insert

func (price *Price) Insert() error

func (*Price) Update

func (price *Price) Update(modelName string) error

type PriceUpdateMode

type PriceUpdateMode string
const (
	PriceUpdateModeSystem    PriceUpdateMode = "system"
	PriceUpdateModeAdd       PriceUpdateMode = "add"
	PriceUpdateModeOverwrite PriceUpdateMode = "overwrite"
	PriceUpdateModeUpdate    PriceUpdateMode = "update"
)

type Pricing

type Pricing struct {
	sync.RWMutex
	Prices map[string]*Price `json:"models"`
	Match  []string          `json:"-"`
}

Pricing is a struct that contains the pricing data

var PricingInstance *Pricing

PricingInstance is the Pricing instance

func (*Pricing) AddPrice

func (p *Pricing) AddPrice(price *Price) error

AddPrice adds a new price to the Pricing instance

func (*Pricing) BatchDeletePrices

func (p *Pricing) BatchDeletePrices(models []string) error

BatchDeletePrices deletes the prices of multiple models

func (*Pricing) BatchSetPrices

func (p *Pricing) BatchSetPrices(batchPrices *BatchPrices, originalModels []string) error

func (*Pricing) DeletePrice

func (p *Pricing) DeletePrice(modelName string) error

DeletePrice deletes a price from the Pricing instance

func (*Pricing) GetAllPrices

func (p *Pricing) GetAllPrices() map[string]*Price

func (*Pricing) GetAllPricesList

func (p *Pricing) GetAllPricesList() []*Price

func (*Pricing) GetPrice

func (p *Pricing) GetPrice(modelName string) *Price

GetPrice returns the price of a model

func (*Pricing) Init

func (p *Pricing) Init() error

initializes the Pricing instance

func (*Pricing) SyncPriceOnlyUpdate

func (p *Pricing) SyncPriceOnlyUpdate(pricing []*Price) error

SyncPriceOnlyUpdate 只更新系统现有的数据 不含lock的数据

func (*Pricing) SyncPriceWithOverwrite

func (p *Pricing) SyncPriceWithOverwrite(pricing []*Price) error

SyncPriceWithOverwrite 删除系统所有数据并插入所有查询到的新数据 不含lock的数据

func (*Pricing) SyncPriceWithoutOverwrite

func (p *Pricing) SyncPriceWithoutOverwrite(pricing []*Price) error

SyncPriceWithoutOverwrite 只插入系统没有的数据

func (*Pricing) SyncPricing

func (p *Pricing) SyncPricing(pricing []*Price, mode string) error

SyncPricing syncs the pricing data

func (*Pricing) UpdatePrice

func (p *Pricing) UpdatePrice(modelName string, price *Price) error

UpdatePrice updates the price of a model

type PrivateGroup

type PrivateGroup struct {
	Id          int            `json:"id"`
	OwnerUserId int            `json:"owner_user_id" gorm:"index"`
	GroupSlug   string         `json:"group_slug" gorm:"type:varchar(64);uniqueIndex"`
	Status      int            `json:"status" gorm:"default:1;index"`
	CreatedAt   int64          `json:"created_at" gorm:"bigint"`
	UpdatedAt   int64          `json:"updated_at" gorm:"bigint"`
	DeletedAt   gorm.DeletedAt `json:"-" gorm:"index"`
}

func GetPrivateGroupById

func GetPrivateGroupById(id int) (*PrivateGroup, error)

func GetPrivateGroupByIdAndOwner

func GetPrivateGroupByIdAndOwner(id int, ownerUserId int) (*PrivateGroup, error)

func (*PrivateGroup) BeforeCreate

func (g *PrivateGroup) BeforeCreate(tx *gorm.DB) error

func (*PrivateGroup) BeforeUpdate

func (g *PrivateGroup) BeforeUpdate(tx *gorm.DB) error

type PrivateGroupGrant

type PrivateGroupGrant struct {
	Id        int    `json:"id"`
	GroupId   int    `json:"group_id" gorm:"index;uniqueIndex:idx_private_group_user,priority:1"`
	UserId    int    `json:"user_id" gorm:"index;uniqueIndex:idx_private_group_user,priority:2"`
	Role      string `json:"role" gorm:"type:varchar(16);default:'member'"`
	Source    string `json:"source" gorm:"type:varchar(16);default:'invite'"`
	SourceRef string `json:"source_ref" gorm:"type:varchar(128);default:''"`
	GrantedBy int    `json:"granted_by" gorm:"index"`
	ExpiresAt int64  `json:"expires_at" gorm:"bigint;default:0"`
	RevokedAt int64  `json:"revoked_at" gorm:"bigint;default:0;index"`
	CreatedAt int64  `json:"created_at" gorm:"bigint"`
	UpdatedAt int64  `json:"updated_at" gorm:"bigint"`
}

func GetPrivateGroupGrant

func GetPrivateGroupGrant(groupId int, userId int) (*PrivateGroupGrant, error)

func GrantPrivateGroupAccess

func GrantPrivateGroupAccess(groupId int, userId int, role string, source string, sourceRef string, grantedBy int, expiresAt int64) (*PrivateGroupGrant, error)

func (*PrivateGroupGrant) BeforeCreate

func (g *PrivateGroupGrant) BeforeCreate(tx *gorm.DB) error

func (*PrivateGroupGrant) BeforeUpdate

func (g *PrivateGroupGrant) BeforeUpdate(tx *gorm.DB) error

type PrivateGroupInviteCode

type PrivateGroupInviteCode struct {
	Id        int    `json:"id"`
	GroupId   int    `json:"group_id" gorm:"index"`
	CodeHash  string `json:"-" gorm:"type:varchar(64);uniqueIndex"`
	CreatedBy int    `json:"created_by" gorm:"index"`
	Status    int    `json:"status" gorm:"default:1;index"`
	MaxUses   int    `json:"max_uses" gorm:"default:1"`
	UsedCount int    `json:"used_count" gorm:"default:0"`
	ExpiresAt int64  `json:"expires_at" gorm:"bigint;default:0"`
	CreatedAt int64  `json:"created_at" gorm:"bigint"`
	UpdatedAt int64  `json:"updated_at" gorm:"bigint"`
}

func CreatePrivateGroupInviteCode

func CreatePrivateGroupInviteCode(groupId int, createdBy int, codeHash string, maxUses int, expiresAt int64) (*PrivateGroupInviteCode, error)

func GetPrivateGroupInviteCodeById

func GetPrivateGroupInviteCodeById(id int) (*PrivateGroupInviteCode, error)

func GetPrivateGroupInviteCodes

func GetPrivateGroupInviteCodes(groupId int) ([]*PrivateGroupInviteCode, error)

func (*PrivateGroupInviteCode) BeforeCreate

func (c *PrivateGroupInviteCode) BeforeCreate(tx *gorm.DB) error

func (*PrivateGroupInviteCode) BeforeUpdate

func (c *PrivateGroupInviteCode) BeforeUpdate(tx *gorm.DB) error

type PrivateGroupMember

type PrivateGroupMember struct {
	GroupId     int    `json:"group_id"`
	UserId      int    `json:"user_id"`
	Username    string `json:"username"`
	DisplayName string `json:"display_name"`
	Role        string `json:"role"`
	Source      string `json:"source"`
	ExpiresAt   int64  `json:"expires_at"`
	RevokedAt   int64  `json:"revoked_at"`
	CreatedAt   int64  `json:"created_at"`
}

func GetPrivateGroupMembers

func GetPrivateGroupMembers(groupId int) ([]*PrivateGroupMember, error)

type PrivateGroupSummary

type PrivateGroupSummary struct {
	Id              int    `json:"id"`
	GroupSlug       string `json:"group_slug"`
	Status          int    `json:"status"`
	CreatedAt       int64  `json:"created_at"`
	UpdatedAt       int64  `json:"updated_at"`
	MemberCount     int64  `json:"member_count"`
	InviteCodeCount int64  `json:"invite_code_count"`
}

func GetAllPrivateGroups

func GetAllPrivateGroups() ([]*PrivateGroupSummary, error)

func GetOwnedPrivateGroups

func GetOwnedPrivateGroups(ownerUserId int) ([]*PrivateGroupSummary, error)

type Redemption

type Redemption struct {
	Id           int    `json:"id"`
	UserId       int    `json:"user_id"`
	Key          string `json:"key" gorm:"type:char(32);uniqueIndex"`
	Status       int    `json:"status" gorm:"default:1"`
	Name         string `json:"name" gorm:"index"`
	Quota        int    `json:"quota" gorm:"default:100"`
	CreatedTime  int64  `json:"created_time" gorm:"bigint"`
	RedeemedTime int64  `json:"redeemed_time" gorm:"bigint"`
	Count        int    `json:"count" gorm:"-:all"` // only for api request
}

func GetRedemptionById

func GetRedemptionById(id int) (*Redemption, error)

func (*Redemption) Delete

func (redemption *Redemption) Delete() error

func (*Redemption) Insert

func (redemption *Redemption) Insert() error

func (*Redemption) SelectUpdate

func (redemption *Redemption) SelectUpdate() error

func (*Redemption) Update

func (redemption *Redemption) Update() error

Update Make sure your token's fields is completed, because this will update non-zero values

type RedemptionStatistics

type RedemptionStatistics struct {
	Count  int64 `json:"count"`
	Quota  int64 `json:"quota"`
	Status int   `json:"status"`
}

func GetStatisticsRedemption

func GetStatisticsRedemption() (redemptionStatistics []*RedemptionStatistics, err error)

type RedemptionStatisticsGroup

type RedemptionStatisticsGroup struct {
	Date      string `json:"date"`
	Quota     int64  `json:"quota"`
	UserCount int64  `json:"user_count"`
}

func GetStatisticsRedemptionByPeriod

func GetStatisticsRedemptionByPeriod(startTimestamp, endTimestamp int64) (redemptionStatistics []*RedemptionStatisticsGroup, err error)

type SearchChannelsParams

type SearchChannelsParams struct {
	Channel
	PaginationParams
	FilterTag int `json:"filter_tag" form:"filter_tag"`
}

type SearchChannelsTagParams

type SearchChannelsTagParams struct {
	Tag string `json:"tag" form:"tag"`
	PaginationParams
}

type SearchOrderParams

type SearchOrderParams struct {
	UserId         int    `form:"user_id"`
	GatewayId      int    `form:"gateway_id"`
	TradeNo        string `form:"trade_no"`
	GatewayNo      string `form:"gateway_no"`
	Status         string `form:"status"`
	StartTimestamp int64  `form:"start_timestamp"`
	EndTimestamp   int64  `form:"end_timestamp"`
	PaginationParams
}

type SearchPaymentParams

type SearchPaymentParams struct {
	Payment
	PaginationParams
}

type SearchUserGroupParams

type SearchUserGroupParams struct {
	UserGroup
	PaginationParams
}

type Statistics

type Statistics struct {
	Date             time.Time `gorm:"primary_key;type:date" json:"date"`
	UserId           int       `json:"user_id" gorm:"primary_key"`
	ChannelId        int       `json:"channel_id" gorm:"primary_key"`
	ModelName        string    `json:"model_name" gorm:"primary_key;type:varchar(255)"`
	RequestCount     int       `json:"request_count"`
	Quota            int       `json:"quota"`
	PromptTokens     int       `json:"prompt_tokens"`
	CompletionTokens int       `json:"completion_tokens"`
	RequestTime      int       `json:"request_time"`
}

type StatisticsMonth

type StatisticsMonth struct {
	Date             time.Time `gorm:"primary_key;type:datetime" json:"date"`
	UserId           int       `json:"user_id" gorm:"primary_key"`
	ModelName        string    `json:"model_name" gorm:"primary_key;type:varchar(255)"`
	RequestCount     int       `json:"request_count"`
	Quota            int       `json:"quota"`
	PromptTokens     int       `json:"prompt_tokens"`
	CompletionTokens int       `json:"completion_tokens"`
	RequestTime      int       `json:"request_time"`
}

type StatisticsMonthDetailSearchParams

type StatisticsMonthDetailSearchParams struct {
	UserId int    `json:"user_id"`
	Date   string `json:"date"`
}

type StatisticsMonthGeneratedHistory

type StatisticsMonthGeneratedHistory struct {
	ID        int64     `gorm:"primary_key;AUTO_INCREMENT" json:"id"`
	Date      time.Time `gorm:"primary_key;type:date" json:"date"`
	Count     int       `json:"count"`
	CreatedAt int64     `json:"created_time" gorm:"bigint"`
}

type StatisticsMonthModel

type StatisticsMonthModel struct {
	Date             string `gorm:"column:date" json:"date"`                           //账单时间
	ModelName        string `json:"model_name" gorm:"column:model_name"`               //模型名称
	RequestCount     int    `gorm:"column:request_count" json:"request_count"`         //请求总数
	Quota            int    `gorm:"column:quota" json:"quota"`                         //消费金额
	PromptTokens     int    `gorm:"column:prompt_tokens" json:"prompt_tokens"`         //输入TOKEN
	CompletionTokens int    `gorm:"column:completion_tokens" json:"completion_tokens"` //输出TOKEN
	RequestTime      int    `gorm:"column:request_time" json:"request_time"`           //请求时长
}

func GetUserInvoiceDetail

func GetUserInvoiceDetail(params *StatisticsMonthDetailSearchParams) ([]*StatisticsMonthModel, error)

GetUserInvoiceDetail 查询指定月份账单详情

type StatisticsMonthNoModel

type StatisticsMonthNoModel struct {
	Date             string `gorm:"column:date" json:"date"`                           //账单时间
	RequestCount     int    `gorm:"column:request_count" json:"request_count"`         //请求总数
	Quota            int    `gorm:"column:quota" json:"quota"`                         //消费金额
	PromptTokens     int    `gorm:"column:prompt_tokens" json:"prompt_tokens"`         //输入TOKEN
	CompletionTokens int    `gorm:"column:completion_tokens" json:"completion_tokens"` //输出TOKEN
	RequestTime      int    `gorm:"column:request_time" json:"request_time"`           //请求时长
}

StatisticsMonthNoModel 表示按月份统计的模型数据结构,用于存储请求数量、配额和令牌等信息。

type StatisticsMonthSearchParams

type StatisticsMonthSearchParams struct {
	UserId int       `json:"-"`
	Date   time.Time `json:"date"`
	PaginationParams
}

type StatisticsUpdateType

type StatisticsUpdateType int
const (
	StatisticsUpdateTypeToDay     StatisticsUpdateType = 1
	StatisticsUpdateTypeYesterday StatisticsUpdateType = 2
	StatisticsUpdateTypeALL       StatisticsUpdateType = 3
)

type StatisticsUser

type StatisticsUser struct {
	TotalQuota       int64 `json:"total_quota"`
	TotalUsedQuota   int64 `json:"total_used_quota"`
	TotalUser        int64 `json:"total_user"`
	TotalInviterUser int64 `json:"total_inviter_user"`
}

func GetStatisticsUser

func GetStatisticsUser() (statisticsUser *StatisticsUser, err error)

type Task

type Task struct {
	ID         int64          `json:"id" gorm:"primary_key;AUTO_INCREMENT"`
	CreatedAt  int64          `json:"created_at" gorm:"index"`
	UpdatedAt  int64          `json:"updated_at"`
	TaskID     string         `json:"task_id" gorm:"type:varchar(50);index"`  // 第三方id,不一定有/ song id\ Task id
	Platform   string         `json:"platform" gorm:"type:varchar(30);index"` // 平台
	UserId     int            `json:"user_id" gorm:"index"`
	ChannelId  int            `json:"channel_id" gorm:"index"`
	Quota      int            `json:"quota"`
	Action     string         `json:"action" gorm:"type:varchar(40);index"` // 任务类型, song, lyrics, description-mode
	Status     TaskStatus     `json:"status" gorm:"type:varchar(20);index"` // 任务状态
	FailReason string         `json:"fail_reason"`
	SubmitTime int64          `json:"submit_time" gorm:"index"`
	StartTime  int64          `json:"start_time" gorm:"index"`
	FinishTime int64          `json:"finish_time" gorm:"index"`
	Progress   int            `json:"progress"`
	Properties datatypes.JSON `json:"properties" gorm:"type:json"`
	Data       datatypes.JSON `json:"data" gorm:"type:json"`
	NotifyHook string         `json:"notify_hook"`
	TokenID    int            `json:"token_id" gorm:"default:0"`
}

func GetAllUnFinishSyncTasks

func GetAllUnFinishSyncTasks(limit int) []*Task

func GetTaskActionByTaskIds

func GetTaskActionByTaskIds(platform string, taskIds []string) (task []*Task, err error)

func GetTaskByTaskId

func GetTaskByTaskId(platform string, userId int, taskId string) (task *Task, err error)

func GetTaskByTaskIds

func GetTaskByTaskIds(platform string, userId int, taskIds []string) (task []*Task, err error)

func ListUserTasksByPlatform

func ListUserTasksByPlatform(userId int, platform string, status *TaskStatus, limit int) ([]*Task, error)

func (*Task) Insert

func (Task *Task) Insert() error

func (*Task) Update

func (Task *Task) Update() error

type TaskQueryParams

type TaskQueryParams struct {
	PaginationParams
	Platform       string `form:"platform"`
	ChannelID      string `form:"channel_id"`
	TaskID         string `form:"task_id"`
	UserID         string `form:"user_id"`
	Action         string `form:"action"`
	Status         string `form:"status"`
	StartTimestamp int64  `form:"start_timestamp"`
	EndTimestamp   int64  `form:"end_timestamp"`
	UserIDs        []int  `form:"user_ids"`
	TokenID        int    `form:"token_id"`
}

type TaskStatus

type TaskStatus string
const (
	TaskStatusNotStart   TaskStatus = "NOT_START"
	TaskStatusSubmitted  TaskStatus = "SUBMITTED"
	TaskStatusQueued     TaskStatus = "QUEUED"
	TaskStatusInProgress TaskStatus = "IN_PROGRESS"
	TaskStatusFailure    TaskStatus = "FAILURE"
	TaskStatusSuccess    TaskStatus = "SUCCESS"
	TaskStatusUnknown    TaskStatus = "UNKNOWN"
)

type TelegramMenu

type TelegramMenu struct {
	Id           int    `json:"id"`
	Command      string `json:"command" gorm:"type:varchar(32);uniqueIndex"`
	Description  string `json:"description" gorm:"type:varchar(255);default:''"`
	ParseMode    string `json:"parse_mode" gorm:"type:varchar(255);default:'MarkdownV2'"`
	ReplyMessage string `json:"reply_message"`
}

func GetTelegramMenuByCommand

func GetTelegramMenuByCommand(command string) (*TelegramMenu, error)

根据command查询菜单

func GetTelegramMenuById

func GetTelegramMenuById(id int) (*TelegramMenu, error)

func GetTelegramMenus

func GetTelegramMenus() ([]*TelegramMenu, error)

查询菜单列表 只查询command和description

func (*TelegramMenu) Delete

func (menu *TelegramMenu) Delete() error

func (*TelegramMenu) Insert

func (menu *TelegramMenu) Insert() error

func (*TelegramMenu) Update

func (menu *TelegramMenu) Update() error

type Token

type Token struct {
	Id             int            `json:"id"`
	UserId         int            `json:"user_id"`
	Key            string         `json:"key" gorm:"type:varchar(59);uniqueIndex"`
	Status         int            `json:"status" gorm:"default:1"`
	Name           string         `json:"name" gorm:"index" `
	CreatedTime    int64          `json:"created_time" gorm:"bigint"`
	AccessedTime   int64          `json:"accessed_time" gorm:"bigint"`
	ExpiredTime    int64          `json:"expired_time" gorm:"bigint;default:-1"` // -1 means never expired
	RemainQuota    int            `json:"remain_quota" gorm:"default:0"`
	UnlimitedQuota bool           `json:"unlimited_quota" gorm:"default:false"`
	UsedQuota      int            `json:"used_quota" gorm:"default:0"` // used quota
	Group          string         `json:"group" gorm:"default:''"`
	BackupGroup    string         `json:"backup_group" gorm:"default:''"`
	DeletedAt      gorm.DeletedAt `json:"-" gorm:"index"`

	Setting database.JSONType[TokenSetting] `json:"setting" form:"setting" gorm:"type:json"`
}

func CacheGetTokenByKey

func CacheGetTokenByKey(key string) (*Token, error)

func GetTokenById

func GetTokenById(id int) (*Token, error)

func GetTokenByIds

func GetTokenByIds(id int, userId int) (*Token, error)

func GetTokenByKey

func GetTokenByKey(key string) (*Token, error)

func GetTokenByName

func GetTokenByName(name string, userId int) (*Token, error)

func GetTokenModel

func GetTokenModel(key string) (token *Token, err error)

func ValidateUserToken

func ValidateUserToken(key string) (token *Token, err error)

func (*Token) AfterCreate

func (token *Token) AfterCreate(tx *gorm.DB) (err error)

添加 AfterCreate 钩子方法

func (*Token) Delete

func (token *Token) Delete() error

func (*Token) Insert

func (token *Token) Insert() error

func (*Token) SelectUpdate

func (token *Token) SelectUpdate() error

func (*Token) Update

func (token *Token) Update() error

Update Make sure your token's fields is completed, because this will update non-zero values

func (*Token) UpdateByAdmin

func (token *Token) UpdateByAdmin() error

UpdateByAdmin 管理员更新token,支持更新user_id字段

type TokenSetting

type TokenSetting struct {
	Heartbeat  HeartbeatSetting `json:"heartbeat,omitempty"`
	Limits     LimitsConfig     `json:"limits,omitempty"`
	BillingTag *string          `json:"billing_tag,omitempty"` // 费用标签,用于按分组统计费用,仅可信内部员工和管理员可见
}

type TokenWithOwner

type TokenWithOwner struct {
	Token
	OwnerName string `json:"owner_name"` // 用户名称(优先显示 display_name,其次 username)
}

TokenWithOwner 包含令牌信息和所属用户信息

type TokilakeWorkerNode

type TokilakeWorkerNode struct {
	Id            int    `json:"id"`
	ProviderId    int    `json:"provider_id" gorm:"index"`
	Namespace     string `json:"namespace" gorm:"type:varchar(255);uniqueIndex"`
	NodeName      string `json:"node_name" gorm:"type:varchar(255)"`
	Status        int    `json:"status" gorm:"default:3;index"`
	Models        string `json:"models" gorm:"type:text"`
	HardwareInfo  string `json:"hardware_info" gorm:"type:text"`
	LastHeartbeat int64  `json:"last_heartbeat" gorm:"bigint;index"`
	ChannelId     int    `json:"channel_id" gorm:"uniqueIndex"`
	CreatedAt     int64  `json:"created_at" gorm:"bigint"`
	UpdatedAt     int64  `json:"updated_at" gorm:"bigint"`
}

func GetOnlineTokilakeWorkerNodes

func GetOnlineTokilakeWorkerNodes() ([]*TokilakeWorkerNode, error)

func GetTokilakeWorkerNodeByChannelId

func GetTokilakeWorkerNodeByChannelId(channelId int) (*TokilakeWorkerNode, error)

func GetTokilakeWorkerNodeByNamespace

func GetTokilakeWorkerNodeByNamespace(namespace string) (*TokilakeWorkerNode, error)

func (*TokilakeWorkerNode) GetHardwareInfo

func (node *TokilakeWorkerNode) GetHardwareInfo() map[string]any

func (*TokilakeWorkerNode) GetModels

func (node *TokilakeWorkerNode) GetModels() []string

func (*TokilakeWorkerNode) Insert

func (node *TokilakeWorkerNode) Insert() error

func (*TokilakeWorkerNode) SetHardwareInfo

func (node *TokilakeWorkerNode) SetHardwareInfo(info map[string]any)

func (*TokilakeWorkerNode) SetModels

func (node *TokilakeWorkerNode) SetModels(models []string)

func (*TokilakeWorkerNode) String

func (node *TokilakeWorkerNode) String() string

func (*TokilakeWorkerNode) TouchHeartbeat

func (node *TokilakeWorkerNode) TouchHeartbeat(status int) error

func (*TokilakeWorkerNode) Update

func (node *TokilakeWorkerNode) Update() error

type User

type User struct {
	Id               int            `json:"id"`
	Username         string         `json:"username" gorm:"unique;index" validate:"max=12"`
	Password         string         `json:"password" gorm:"not null;" validate:"min=8,max=20"`
	DisplayName      string         `json:"display_name" gorm:"index" validate:"max=20"`
	Role             int            `json:"role" gorm:"type:int;default:1"`   // admin, common
	Status           int            `json:"status" gorm:"type:int;default:1"` // enabled, disabled
	Email            string         `json:"email" gorm:"index" validate:"max=50"`
	AvatarUrl        string         `json:"avatar_url" gorm:"type:varchar(500);column:avatar_url;default:''"`
	OidcId           string         `json:"oidc_id" gorm:"column:oidc_id;index"`
	GoogleId         string         `json:"google_id" gorm:"column:google_id;index"`
	GitHubId         string         `json:"github_id" gorm:"column:github_id;index"`
	GitHubIdNew      int            `json:"github_id_new" gorm:"column:github_id_new;index"`
	WeChatId         string         `json:"wechat_id" gorm:"column:wechat_id;index"`
	TelegramId       int64          `json:"telegram_id" gorm:"bigint,column:telegram_id;default:0;"`
	LarkId           string         `json:"lark_id" gorm:"column:lark_id;index"`
	VerificationCode string         `json:"verification_code" gorm:"-:all"`                                    // this field is only for Email verification, don't save it to database!
	AccessToken      string         `json:"access_token" gorm:"type:char(32);column:access_token;uniqueIndex"` // this token is for system management
	Quota            int            `json:"quota" gorm:"type:int;default:0"`
	UsedQuota        int            `json:"used_quota" gorm:"type:int;default:0;column:used_quota"` // used quota
	RequestCount     int            `json:"request_count" gorm:"type:int;default:0;"`               // request number
	Group            string         `json:"group" gorm:"type:varchar(32);default:'default'"`
	AffCode          string         `json:"aff_code" gorm:"type:varchar(32);column:aff_code;uniqueIndex"`
	AffCount         int            `json:"aff_count" gorm:"type:int;default:0;column:aff_count"`
	AffQuota         int            `json:"aff_quota" gorm:"type:int;default:0;column:aff_quota"`
	AffHistoryQuota  int            `json:"aff_history_quota" gorm:"type:int;default:0;column:aff_history"`
	InviterId        int            `json:"inviter_id" gorm:"type:int;column:inviter_id;index"`
	LastLoginTime    int64          `json:"last_login_time" gorm:"bigint;default:0"`
	LastLoginIp      string         `json:"last_login_ip" gorm:"type:varchar(128);default:''"`
	CreatedTime      int64          `json:"created_time" gorm:"bigint"`
	DeletedAt        gorm.DeletedAt `json:"-" gorm:"index"`
}

User if you add sensitive fields, don't forget to clean them in setupLogin function. Otherwise, the sensitive information will be saved on local storage in plain text!

func FindUserByField

func FindUserByField(field string, value any) (*User, error)

func GetUserById

func GetUserById(id int, selectAll bool) (*User, error)

func GetUserByTelegramId

func GetUserByTelegramId(telegramId int64) (*User, error)

func GetUserByWebAuthnCredentialId

func GetUserByWebAuthnCredentialId(credentialId []byte) (*User, error)

GetUserByWebAuthnCredentialId 通过WebAuthn凭据ID获取用户

func ValidateAccessToken

func ValidateAccessToken(token string) (user *User)

func (*User) Delete

func (user *User) Delete() error

func (*User) FillUserByEmail

func (user *User) FillUserByEmail() error

func (*User) FillUserByGitHubId

func (user *User) FillUserByGitHubId() error

func (*User) FillUserByGitHubIdNew

func (user *User) FillUserByGitHubIdNew() error

func (*User) FillUserByGoogleId

func (user *User) FillUserByGoogleId() error

func (*User) FillUserById

func (user *User) FillUserById() error

func (*User) FillUserByLarkId

func (user *User) FillUserByLarkId() error

func (*User) FillUserByOidcId

func (user *User) FillUserByOidcId() error

func (*User) FillUserByUsername

func (user *User) FillUserByUsername() error

func (*User) FillUserByWeChatId

func (user *User) FillUserByWeChatId() error

func (*User) Insert

func (user *User) Insert(inviterId int) error

func (*User) Update

func (user *User) Update(updatePassword bool) error

func (*User) ValidateAndFill

func (user *User) ValidateAndFill() (err error)

ValidateAndFill check password & user status

func (*User) WebAuthnCredentials

func (user *User) WebAuthnCredentials() []webauthn.Credential

func (*User) WebAuthnDisplayName

func (user *User) WebAuthnDisplayName() string

func (*User) WebAuthnID

func (user *User) WebAuthnID() []byte

WebAuthn 相关方法,实现 webauthn.User 接口

func (*User) WebAuthnIcon

func (user *User) WebAuthnIcon() string

func (*User) WebAuthnName

func (user *User) WebAuthnName() string

type UserGroup

type UserGroup struct {
	Id        int     `json:"id"`
	Symbol    string  `json:"symbol" gorm:"type:varchar(50);uniqueIndex"`
	Name      string  `json:"name" gorm:"type:varchar(50)"`
	Ratio     float64 `json:"ratio" gorm:"type:decimal(10,2); default:1"`      // 倍率
	APIRate   int     `json:"api_rate" gorm:"default:600"`                     // 每分组允许的请求数
	Public    bool    `json:"public" form:"public" gorm:"default:false"`       // 是否为公开分组,如果是,则可以被用户在令牌中选择
	Promotion bool    `json:"promotion" form:"promotion" gorm:"default:false"` // 是否是自动升级用户组, 如果是则用户充值金额满足条件自动升级
	Min       int     `json:"min" form:"min" gorm:"default:0"`                 // 晋级条件最小值
	Max       int     `json:"max" form:"max" gorm:"default:0"`                 // 晋级条件最大值
	Enable    *bool   `json:"enable" form:"enable" gorm:"default:true"`        // 是否启用
}

func GetUserGroupsAll

func GetUserGroupsAll(isPublic bool) ([]*UserGroup, error)

func GetUserGroupsById

func GetUserGroupsById(id int) (*UserGroup, error)

func (*UserGroup) Create

func (c *UserGroup) Create() error

func (*UserGroup) Delete

func (c *UserGroup) Delete() error

func (*UserGroup) Update

func (c *UserGroup) Update() error

type UserGroupRatio

type UserGroupRatio struct {
	sync.RWMutex
	UserGroup   map[string]*UserGroup
	APILimiter  map[string]limit.RateLimiter
	PublicGroup []string
}

func (*UserGroupRatio) GetAPILimiter

func (cgrm *UserGroupRatio) GetAPILimiter(symbol string) limit.RateLimiter

func (*UserGroupRatio) GetAPIRate

func (cgrm *UserGroupRatio) GetAPIRate(symbol string) int

func (*UserGroupRatio) GetAll

func (cgrm *UserGroupRatio) GetAll() map[string]*UserGroup

func (*UserGroupRatio) GetBySymbol

func (cgrm *UserGroupRatio) GetBySymbol(symbol string) *UserGroup

func (*UserGroupRatio) GetByTokenUserGroup

func (cgrm *UserGroupRatio) GetByTokenUserGroup(tokenGroup, userGroup string) *UserGroup

func (*UserGroupRatio) GetPublicGroupList

func (cgrm *UserGroupRatio) GetPublicGroupList() []string

func (*UserGroupRatio) Load

func (cgrm *UserGroupRatio) Load()

type UserGroupedStatistic

type UserGroupedStatistic struct {
	Username         string `gorm:"column:username" json:"username"`
	RequestCount     int64  `gorm:"column:request_count" json:"request_count"`
	Quota            int64  `gorm:"column:quota" json:"quota"`
	PromptTokens     int64  `gorm:"column:prompt_tokens" json:"prompt_tokens"`
	CompletionTokens int64  `gorm:"column:completion_tokens" json:"completion_tokens"`
	RequestTime      int64  `gorm:"column:request_time" json:"request_time"`
}

UserGroupedStatistic 按用户分组的统计数据(不按模型分组)

func GetUserGroupedStatisticsByPeriod

func GetUserGroupedStatisticsByPeriod(usernames []string, startTime, endTime string) ([]*UserGroupedStatistic, error)

GetUserGroupedStatisticsByPeriod 获取按用户分组的统计数据(不按模型分组)

type UserPrivateGroupGrant

type UserPrivateGroupGrant struct {
	GroupId   int      `json:"group_id"`
	GroupSlug string   `json:"group_slug"`
	Role      string   `json:"role"`
	Source    string   `json:"source"`
	ExpiresAt int64    `json:"expires_at"`
	RevokedAt int64    `json:"revoked_at"`
	GrantedBy int      `json:"granted_by"`
	CreatedAt int64    `json:"created_at"`
	Models    []string `json:"models" gorm:"-"`
}

func GetUserPrivateGroupGrantDetails

func GetUserPrivateGroupGrantDetails(userId int) ([]*UserPrivateGroupGrant, error)

type UserStatisticsByPeriod

type UserStatisticsByPeriod struct {
	Date             string `json:"date"`
	UserCount        int64  `json:"user_count"`
	InviterUserCount int64  `json:"inviter_user_count"`
}

func GetUserStatisticsByPeriod

func GetUserStatisticsByPeriod(startTimestamp, endTimestamp int64) (statistics []*UserStatisticsByPeriod, err error)

type UserUpdates

type UserUpdates func(*User)

type WebAuthnCredential

type WebAuthnCredential struct {
	Id              int    `json:"id" gorm:"primaryKey"`
	UserId          int    `json:"user_id" gorm:"index"`
	CredentialId    []byte `json:"credential_id" gorm:"unique;size:255"`
	PublicKey       []byte `json:"public_key"`
	AttestationType string `json:"attestation_type"`
	Alias           string `json:"alias" gorm:"type:varchar(255);default:''"`
	// Persist essential authenticator state and flags used during login validation
	BackupEligible bool                   `json:"backup_eligible" gorm:"column:backup_eligible;default:false"`
	BackupState    bool                   `json:"backup_state" gorm:"column:backup_state;default:false"`
	Authenticator  webauthn.Authenticator `json:"authenticator" gorm:"embedded"`
	CreatedTime    int64                  `json:"created_time"`
}

WebAuthnCredential 表示WebAuthn凭据

func (WebAuthnCredential) TableName

func (WebAuthnCredential) TableName() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL