Compare commits
122 Commits
9112645bf9
...
898a65314c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
898a65314c | ||
|
|
2064c1a19f | ||
|
|
cbf696bc82 | ||
|
|
c1b52615be | ||
|
|
3af9940b85 | ||
|
|
22b1277572 | ||
|
|
aff98d5ae1 | ||
|
|
4e1bb2b445 | ||
|
|
dac6e52091 | ||
|
|
8987e0ba67 | ||
|
|
9d1751ec57 | ||
|
|
5d1c12e60e | ||
|
|
5b63a9b02d | ||
|
|
641e61073f | ||
|
|
095f457c57 | ||
|
|
1e57e88e43 | ||
|
|
b95ffce244 | ||
|
|
8f28a834f8 | ||
|
|
7424c73b05 | ||
|
|
1afd81b019 | ||
|
|
732d6495ea | ||
|
|
6d20ab8082 | ||
|
|
aa8ee33b0a | ||
|
|
5f630fbb19 | ||
|
|
bdbd2916f5 | ||
|
|
6dc89765fd | ||
|
|
f3233db01f | ||
|
|
6e12578bc5 | ||
|
|
a25faecadd | ||
|
|
5862e2d8d9 | ||
|
|
66d6454535 | ||
|
|
165553cfb0 | ||
|
|
b5467d610a | ||
|
|
57ff97960d | ||
|
|
5b5db88550 | ||
|
|
f03de00cb9 | ||
|
|
76aae5aa74 | ||
|
|
27ee141c1e | ||
|
|
e65574dea9 | ||
|
|
1ce9dc03f9 | ||
|
|
15ce914a62 | ||
|
|
959af1c8f6 | ||
|
|
c4d496da18 | ||
|
|
9156585a23 | ||
|
|
2d2f677a64 | ||
|
|
f3ea878ba2 | ||
|
|
d80469ea35 | ||
|
|
5fc30ea964 | ||
|
|
f68909a68b | ||
|
|
002066e700 | ||
|
|
d162604f32 | ||
|
|
a4e329c18b | ||
|
|
ca204ddd2f | ||
|
|
ff08f9d798 | ||
|
|
ac11473833 | ||
|
|
2a4103298e | ||
|
|
09fd83ab9b | ||
|
|
6699d33760 | ||
|
|
f7c8377abf | ||
|
|
0dcc0e0504 | ||
|
|
5f41899705 | ||
|
|
8b446ffef8 | ||
|
|
5e060b2222 | ||
|
|
6f04c25e3d | ||
|
|
375cce29c6 | ||
|
|
67518a59ac | ||
|
|
a3ea8ecac5 | ||
|
|
497872693f | ||
|
|
748a84d871 | ||
|
|
d5dac84e12 | ||
|
|
75e1b40fb4 | ||
|
|
5eedf782f4 | ||
|
|
1949425ab9 | ||
|
|
0a80ec80e3 | ||
|
|
a22a5b9e72 | ||
|
|
3fe4fd4c35 | ||
|
|
827a4498e0 | ||
|
|
8dbbd94299 | ||
|
|
6b0cf4663d | ||
|
|
dc5d42addc | ||
|
|
ef967d8f8a | ||
|
|
27ffc7f373 | ||
|
|
9e5a6351fc | ||
|
|
bcf4aedcde | ||
|
|
11cf23da7d | ||
|
|
eea6f38881 | ||
|
|
2489ea3699 | ||
|
|
0b85a8da88 | ||
|
|
327da8e260 | ||
|
|
00778dca31 | ||
|
|
79aff2df31 | ||
|
|
f35e967516 | ||
|
|
1f81b77911 | ||
|
|
6cd7c60549 | ||
|
|
25a5035503 | ||
|
|
9dae6c7aee | ||
|
|
ff4ef1b574 | ||
|
|
84b03efa0b | ||
|
|
3cdd5754df | ||
|
|
800802b8aa | ||
|
|
9ba42aa556 | ||
|
|
59290e39f9 | ||
|
|
4a3652ec09 | ||
|
|
375aefa209 | ||
|
|
88decb6e0c | ||
|
|
365ef1fdf7 | ||
|
|
654cfb6480 | ||
|
|
c46744f366 | ||
|
|
c2f9ad7a21 | ||
|
|
e1193212b5 | ||
|
|
a7415d4d2e | ||
|
|
6925ac25c4 | ||
|
|
a296425994 | ||
|
|
0c48f08f5c | ||
|
|
b363bff1d8 | ||
|
|
ef6ec8a15a | ||
|
|
8cf83c984e | ||
|
|
ba98243cc2 | ||
|
|
0d01bd908e | ||
|
|
7da5124067 | ||
|
|
a1425b457d | ||
|
|
20a4e41872 |
25
.github/workflows/backend-ci.yml
vendored
25
.github/workflows/backend-ci.yml
vendored
@ -67,3 +67,28 @@ jobs:
|
|||||||
version: v2.9
|
version: v2.9
|
||||||
args: --timeout=30m
|
args: --timeout=30m
|
||||||
working-directory: backend
|
working-directory: backend
|
||||||
|
|
||||||
|
# Cross-platform smoke for the windsurf package: verify the code compiles
|
||||||
|
# on macOS and Windows and run only the platform-detection/discovery/datadir
|
||||||
|
# unit tests (which do not require launching a real LS binary).
|
||||||
|
windsurf-platform:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [macos-latest, windows-latest]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- uses: actions/setup-go@v6
|
||||||
|
with:
|
||||||
|
go-version-file: backend/go.mod
|
||||||
|
check-latest: false
|
||||||
|
cache: true
|
||||||
|
cache-dependency-path: backend/go.sum
|
||||||
|
- name: Build windsurf package
|
||||||
|
working-directory: backend
|
||||||
|
run: go build ./internal/pkg/windsurf/...
|
||||||
|
- name: Platform-only unit tests
|
||||||
|
working-directory: backend
|
||||||
|
run: go test -race -count=1 -run 'Platform|Discovery|DataDir|Metadata|NewLSPool|LSPool|ScanLSOutput' ./internal/pkg/windsurf/...
|
||||||
|
|
||||||
|
|||||||
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
@ -246,10 +246,10 @@ jobs:
|
|||||||
if [ -n "$DOCKERHUB_USERNAME" ]; then
|
if [ -n "$DOCKERHUB_USERNAME" ]; then
|
||||||
DOCKER_IMAGE="${DOCKERHUB_USERNAME}/sub2api"
|
DOCKER_IMAGE="${DOCKERHUB_USERNAME}/sub2api"
|
||||||
MESSAGE+="# Docker Hub"$'\n'
|
MESSAGE+="# Docker Hub"$'\n'
|
||||||
MESSAGE+="docker pull ${DOCKER_IMAGE}:${TAG_NAME}"$'\n'
|
MESSAGE+="docker pull ${DOCKER_IMAGE}:${VERSION}"$'\n'
|
||||||
MESSAGE+="# GitHub Container Registry"$'\n'
|
MESSAGE+="# GitHub Container Registry"$'\n'
|
||||||
fi
|
fi
|
||||||
MESSAGE+="docker pull ${GHCR_IMAGE}:${TAG_NAME}"$'\n'
|
MESSAGE+="docker pull ${GHCR_IMAGE}:${VERSION}"$'\n'
|
||||||
MESSAGE+="\`\`\`"$'\n'$'\n'
|
MESSAGE+="\`\`\`"$'\n'$'\n'
|
||||||
MESSAGE+="🔗 *相关链接:*"$'\n'
|
MESSAGE+="🔗 *相关链接:*"$'\n'
|
||||||
MESSAGE+="• [GitHub Release](https://github.com/${REPO}/releases/tag/${TAG_NAME})"$'\n'
|
MESSAGE+="• [GitHub Release](https://github.com/${REPO}/releases/tag/${TAG_NAME})"$'\n'
|
||||||
|
|||||||
42
backend/cmd/dump_ls_models/main.go
Normal file
42
backend/cmd/dump_ls_models/main.go
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// dump_ls_models prints the full GetCascadeModelConfigs response from the LS
|
||||||
|
// for the given account JWT. Used to reconcile sub2api's static catalog with
|
||||||
|
// the authoritative runtime list.
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/pkg/windsurf"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
jwt := flag.String("jwt", os.Getenv("WINDSURF_JWT"), "session token")
|
||||||
|
apiURL := flag.String("api", "https://server.self-serve.windsurf.com", "api_server_url")
|
||||||
|
flag.Parse()
|
||||||
|
if *jwt == "" {
|
||||||
|
fmt.Fprintln(os.Stderr, "need -jwt or WINDSURF_JWT")
|
||||||
|
os.Exit(2)
|
||||||
|
}
|
||||||
|
u, _ := url.Parse(*apiURL)
|
||||||
|
c, err := windsurf.NewClient(u.String(), "")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "client:", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
models, err := c.ListModels(ctx, *jwt)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "ListModels:", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
fmt.Printf("# %d models returned by GetCascadeModelConfigs\n", len(models))
|
||||||
|
out, _ := json.MarshalIndent(models, "", " ")
|
||||||
|
fmt.Println(string(out))
|
||||||
|
}
|
||||||
21
backend/cmd/dump_preamble/main.go
Normal file
21
backend/cmd/dump_preamble/main.go
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/pkg/windsurf"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
tc := "auto"
|
||||||
|
if len(os.Args) > 1 {
|
||||||
|
tc = os.Args[1]
|
||||||
|
}
|
||||||
|
tools := []windsurf.OpenAITool{
|
||||||
|
{Type: "function", Function: windsurf.OpenAIFunction{Name: "read_file", Description: "Read a file", Parameters: json.RawMessage(`{"type":"object"}`)}},
|
||||||
|
{Type: "function", Function: windsurf.OpenAIFunction{Name: "find_file", Description: "Find files", Parameters: json.RawMessage(`{"type":"object"}`)}},
|
||||||
|
}
|
||||||
|
fmt.Println(windsurf.BuildToolPreambleForProto(tools, tc))
|
||||||
|
}
|
||||||
@ -33,7 +33,7 @@ func main() {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
userRepo := repository.NewUserRepository(client, sqlDB)
|
userRepo := repository.NewUserRepository(client, sqlDB)
|
||||||
authService := service.NewAuthService(client, userRepo, nil, nil, cfg, nil, nil, nil, nil, nil, nil)
|
authService := service.NewAuthService(client, userRepo, nil, nil, cfg, nil, nil, nil, nil, nil, nil, nil)
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
0.1.115
|
0.1.118
|
||||||
|
|||||||
@ -98,6 +98,8 @@ func provideCleanup(
|
|||||||
backupSvc *service.BackupService,
|
backupSvc *service.BackupService,
|
||||||
paymentOrderExpiry *service.PaymentOrderExpiryService,
|
paymentOrderExpiry *service.PaymentOrderExpiryService,
|
||||||
windsurfRefresh *service.WindsurfRefreshService,
|
windsurfRefresh *service.WindsurfRefreshService,
|
||||||
|
channelMonitorRunner *service.ChannelMonitorRunner,
|
||||||
|
windsurfLS *service.WindsurfLSService,
|
||||||
) func() {
|
) func() {
|
||||||
return func() {
|
return func() {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
@ -246,6 +248,18 @@ func provideCleanup(
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}},
|
}},
|
||||||
|
{"ChannelMonitorRunner", func() error {
|
||||||
|
if channelMonitorRunner != nil {
|
||||||
|
channelMonitorRunner.Stop()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}},
|
||||||
|
{"WindsurfLSService", func() error {
|
||||||
|
if windsurfLS != nil {
|
||||||
|
windsurfLS.Stop()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}},
|
||||||
}
|
}
|
||||||
|
|
||||||
infraSteps := []cleanupStep{
|
infraSteps := []cleanupStep{
|
||||||
|
|||||||
@ -8,6 +8,11 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/Wei-Shaw/sub2api/ent"
|
"github.com/Wei-Shaw/sub2api/ent"
|
||||||
"github.com/Wei-Shaw/sub2api/internal/config"
|
"github.com/Wei-Shaw/sub2api/internal/config"
|
||||||
"github.com/Wei-Shaw/sub2api/internal/handler"
|
"github.com/Wei-Shaw/sub2api/internal/handler"
|
||||||
@ -18,14 +23,9 @@ import (
|
|||||||
"github.com/Wei-Shaw/sub2api/internal/server/middleware"
|
"github.com/Wei-Shaw/sub2api/internal/server/middleware"
|
||||||
"github.com/Wei-Shaw/sub2api/internal/service"
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||||
"github.com/redis/go-redis/v9"
|
"github.com/redis/go-redis/v9"
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
|
||||||
_ "embed"
|
_ "embed"
|
||||||
|
|
||||||
_ "github.com/Wei-Shaw/sub2api/ent/runtime"
|
_ "github.com/Wei-Shaw/sub2api/ent/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -61,14 +61,17 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
|||||||
billingCache := repository.NewBillingCache(redisClient)
|
billingCache := repository.NewBillingCache(redisClient)
|
||||||
userSubscriptionRepository := repository.NewUserSubscriptionRepository(client)
|
userSubscriptionRepository := repository.NewUserSubscriptionRepository(client)
|
||||||
apiKeyRepository := repository.NewAPIKeyRepository(client, db)
|
apiKeyRepository := repository.NewAPIKeyRepository(client, db)
|
||||||
billingCacheService := service.NewBillingCacheService(billingCache, userRepository, userSubscriptionRepository, apiKeyRepository, configConfig)
|
userRPMCache := repository.NewUserRPMCache(redisClient)
|
||||||
userGroupRateRepository := repository.NewUserGroupRateRepository(db)
|
userGroupRateRepository := repository.NewUserGroupRateRepository(db)
|
||||||
|
billingCacheService := service.ProvideBillingCacheService(billingCache, userRepository, userSubscriptionRepository, apiKeyRepository, userRPMCache, userGroupRateRepository, configConfig)
|
||||||
apiKeyCache := repository.NewAPIKeyCache(redisClient)
|
apiKeyCache := repository.NewAPIKeyCache(redisClient)
|
||||||
apiKeyService := service.NewAPIKeyService(apiKeyRepository, userRepository, groupRepository, userSubscriptionRepository, userGroupRateRepository, apiKeyCache, configConfig)
|
apiKeyService := service.NewAPIKeyService(apiKeyRepository, userRepository, groupRepository, userSubscriptionRepository, userGroupRateRepository, apiKeyCache, configConfig)
|
||||||
apiKeyAuthCacheInvalidator := service.ProvideAPIKeyAuthCacheInvalidator(apiKeyService)
|
apiKeyAuthCacheInvalidator := service.ProvideAPIKeyAuthCacheInvalidator(apiKeyService)
|
||||||
promoService := service.NewPromoService(promoCodeRepository, userRepository, billingCacheService, client, apiKeyAuthCacheInvalidator)
|
promoService := service.NewPromoService(promoCodeRepository, userRepository, billingCacheService, client, apiKeyAuthCacheInvalidator)
|
||||||
subscriptionService := service.NewSubscriptionService(groupRepository, userSubscriptionRepository, billingCacheService, client, configConfig)
|
subscriptionService := service.NewSubscriptionService(groupRepository, userSubscriptionRepository, billingCacheService, client, configConfig)
|
||||||
authService := service.NewAuthService(client, userRepository, redeemCodeRepository, refreshTokenCache, configConfig, settingService, emailService, turnstileService, emailQueueService, promoService, subscriptionService)
|
affiliateRepository := repository.NewAffiliateRepository(client, db)
|
||||||
|
affiliateService := service.NewAffiliateService(affiliateRepository, settingService, apiKeyAuthCacheInvalidator, billingCacheService)
|
||||||
|
authService := service.NewAuthService(client, userRepository, redeemCodeRepository, refreshTokenCache, configConfig, settingService, emailService, turnstileService, emailQueueService, promoService, subscriptionService, affiliateService)
|
||||||
userService := service.NewUserService(userRepository, settingRepository, apiKeyAuthCacheInvalidator, billingCache)
|
userService := service.NewUserService(userRepository, settingRepository, apiKeyAuthCacheInvalidator, billingCache)
|
||||||
redeemCache := repository.NewRedeemCache(redisClient)
|
redeemCache := repository.NewRedeemCache(redisClient)
|
||||||
redeemService := service.NewRedeemService(redeemCodeRepository, userRepository, subscriptionService, redeemCache, billingCacheService, client, apiKeyAuthCacheInvalidator)
|
redeemService := service.NewRedeemService(redeemCodeRepository, userRepository, subscriptionService, redeemCache, billingCacheService, client, apiKeyAuthCacheInvalidator)
|
||||||
@ -79,7 +82,7 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
|||||||
totpCache := repository.NewTotpCache(redisClient)
|
totpCache := repository.NewTotpCache(redisClient)
|
||||||
totpService := service.NewTotpService(userRepository, secretEncryptor, totpCache, settingService, emailService, emailQueueService)
|
totpService := service.NewTotpService(userRepository, secretEncryptor, totpCache, settingService, emailService, emailQueueService)
|
||||||
authHandler := handler.NewAuthHandler(configConfig, authService, userService, settingService, promoService, redeemService, totpService)
|
authHandler := handler.NewAuthHandler(configConfig, authService, userService, settingService, promoService, redeemService, totpService)
|
||||||
userHandler := handler.NewUserHandler(userService, authService, emailService, emailCache)
|
userHandler := handler.NewUserHandler(userService, authService, emailService, emailCache, affiliateService)
|
||||||
apiKeyHandler := handler.NewAPIKeyHandler(apiKeyService)
|
apiKeyHandler := handler.NewAPIKeyHandler(apiKeyService)
|
||||||
usageLogRepository := repository.NewUsageLogRepository(client, db)
|
usageLogRepository := repository.NewUsageLogRepository(client, db)
|
||||||
usageService := service.NewUsageService(usageLogRepository, userRepository, client, apiKeyAuthCacheInvalidator)
|
usageService := service.NewUsageService(usageLogRepository, userRepository, client, apiKeyAuthCacheInvalidator)
|
||||||
@ -90,6 +93,9 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
|||||||
announcementReadRepository := repository.NewAnnouncementReadRepository(client)
|
announcementReadRepository := repository.NewAnnouncementReadRepository(client)
|
||||||
announcementService := service.NewAnnouncementService(announcementRepository, announcementReadRepository, userRepository, userSubscriptionRepository)
|
announcementService := service.NewAnnouncementService(announcementRepository, announcementReadRepository, userRepository, userSubscriptionRepository)
|
||||||
announcementHandler := handler.NewAnnouncementHandler(announcementService)
|
announcementHandler := handler.NewAnnouncementHandler(announcementService)
|
||||||
|
channelMonitorRepository := repository.NewChannelMonitorRepository(client, db)
|
||||||
|
channelMonitorService := service.ProvideChannelMonitorService(channelMonitorRepository, secretEncryptor)
|
||||||
|
channelMonitorUserHandler := handler.NewChannelMonitorUserHandler(channelMonitorService, settingService)
|
||||||
dashboardAggregationRepository := repository.NewDashboardAggregationRepository(db)
|
dashboardAggregationRepository := repository.NewDashboardAggregationRepository(db)
|
||||||
dashboardStatsCache := repository.NewDashboardCache(redisClient, configConfig)
|
dashboardStatsCache := repository.NewDashboardCache(redisClient, configConfig)
|
||||||
dashboardService := service.NewDashboardService(usageLogRepository, dashboardAggregationRepository, dashboardStatsCache, configConfig)
|
dashboardService := service.NewDashboardService(usageLogRepository, dashboardAggregationRepository, dashboardStatsCache, configConfig)
|
||||||
@ -104,7 +110,7 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
|||||||
proxyExitInfoProber := repository.NewProxyExitInfoProber(configConfig)
|
proxyExitInfoProber := repository.NewProxyExitInfoProber(configConfig)
|
||||||
proxyLatencyCache := repository.NewProxyLatencyCache(redisClient)
|
proxyLatencyCache := repository.NewProxyLatencyCache(redisClient)
|
||||||
privacyClientFactory := providePrivacyClientFactory()
|
privacyClientFactory := providePrivacyClientFactory()
|
||||||
adminService := service.NewAdminService(userRepository, groupRepository, accountRepository, proxyRepository, apiKeyRepository, redeemCodeRepository, userGroupRateRepository, billingCacheService, proxyExitInfoProber, proxyLatencyCache, apiKeyAuthCacheInvalidator, client, settingService, subscriptionService, userSubscriptionRepository, privacyClientFactory)
|
adminService := service.NewAdminService(userRepository, groupRepository, accountRepository, proxyRepository, apiKeyRepository, redeemCodeRepository, userGroupRateRepository, userRPMCache, billingCacheService, proxyExitInfoProber, proxyLatencyCache, apiKeyAuthCacheInvalidator, client, settingService, subscriptionService, userSubscriptionRepository, privacyClientFactory)
|
||||||
concurrencyCache := repository.ProvideConcurrencyCache(redisClient, configConfig)
|
concurrencyCache := repository.ProvideConcurrencyCache(redisClient, configConfig)
|
||||||
concurrencyService := service.ProvideConcurrencyService(concurrencyCache, accountRepository, configConfig)
|
concurrencyService := service.ProvideConcurrencyService(concurrencyCache, accountRepository, configConfig)
|
||||||
adminUserHandler := admin.NewUserHandler(adminService, concurrencyService)
|
adminUserHandler := admin.NewUserHandler(adminService, concurrencyService)
|
||||||
@ -124,9 +130,10 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
|||||||
geminiQuotaService := service.NewGeminiQuotaService(configConfig, settingRepository)
|
geminiQuotaService := service.NewGeminiQuotaService(configConfig, settingRepository)
|
||||||
tempUnschedCache := repository.NewTempUnschedCache(redisClient)
|
tempUnschedCache := repository.NewTempUnschedCache(redisClient)
|
||||||
timeoutCounterCache := repository.NewTimeoutCounterCache(redisClient)
|
timeoutCounterCache := repository.NewTimeoutCounterCache(redisClient)
|
||||||
|
openAI403CounterCache := repository.NewOpenAI403CounterCache(redisClient)
|
||||||
geminiTokenCache := repository.NewGeminiTokenCache(redisClient)
|
geminiTokenCache := repository.NewGeminiTokenCache(redisClient)
|
||||||
compositeTokenCacheInvalidator := service.NewCompositeTokenCacheInvalidator(geminiTokenCache)
|
compositeTokenCacheInvalidator := service.NewCompositeTokenCacheInvalidator(geminiTokenCache)
|
||||||
rateLimitService := service.ProvideRateLimitService(accountRepository, usageLogRepository, configConfig, geminiQuotaService, tempUnschedCache, timeoutCounterCache, settingService, compositeTokenCacheInvalidator)
|
rateLimitService := service.ProvideRateLimitService(accountRepository, usageLogRepository, configConfig, geminiQuotaService, tempUnschedCache, timeoutCounterCache, openAI403CounterCache, settingService, compositeTokenCacheInvalidator)
|
||||||
httpUpstream := repository.NewHTTPUpstream(configConfig)
|
httpUpstream := repository.NewHTTPUpstream(configConfig)
|
||||||
claudeUsageFetcher := repository.NewClaudeUsageFetcher(httpUpstream)
|
claudeUsageFetcher := repository.NewClaudeUsageFetcher(httpUpstream)
|
||||||
antigravityQuotaFetcher := service.NewAntigravityQuotaFetcher(proxyRepository)
|
antigravityQuotaFetcher := service.NewAntigravityQuotaFetcher(proxyRepository)
|
||||||
@ -136,7 +143,7 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
|||||||
tlsFingerprintProfileCache := repository.NewTLSFingerprintProfileCache(redisClient)
|
tlsFingerprintProfileCache := repository.NewTLSFingerprintProfileCache(redisClient)
|
||||||
tlsFingerprintProfileService := service.NewTLSFingerprintProfileService(tlsFingerprintProfileRepository, tlsFingerprintProfileCache)
|
tlsFingerprintProfileService := service.NewTLSFingerprintProfileService(tlsFingerprintProfileRepository, tlsFingerprintProfileCache)
|
||||||
accountUsageService := service.NewAccountUsageService(accountRepository, usageLogRepository, claudeUsageFetcher, geminiQuotaService, antigravityQuotaFetcher, usageCache, identityCache, tlsFingerprintProfileService)
|
accountUsageService := service.NewAccountUsageService(accountRepository, usageLogRepository, claudeUsageFetcher, geminiQuotaService, antigravityQuotaFetcher, usageCache, identityCache, tlsFingerprintProfileService)
|
||||||
oAuthRefreshAPI := service.NewOAuthRefreshAPI(accountRepository, geminiTokenCache)
|
oAuthRefreshAPI := service.ProvideOAuthRefreshAPI(accountRepository, geminiTokenCache)
|
||||||
geminiTokenProvider := service.ProvideGeminiTokenProvider(accountRepository, geminiTokenCache, geminiOAuthService, oAuthRefreshAPI)
|
geminiTokenProvider := service.ProvideGeminiTokenProvider(accountRepository, geminiTokenCache, geminiOAuthService, oAuthRefreshAPI)
|
||||||
gatewayCache := repository.NewGatewayCache(redisClient)
|
gatewayCache := repository.NewGatewayCache(redisClient)
|
||||||
schedulerOutboxRepository := repository.NewSchedulerOutboxRepository(db)
|
schedulerOutboxRepository := repository.NewSchedulerOutboxRepository(db)
|
||||||
@ -178,7 +185,7 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
|||||||
claudeTokenProvider := service.ProvideClaudeTokenProvider(accountRepository, geminiTokenCache, oAuthService, oAuthRefreshAPI)
|
claudeTokenProvider := service.ProvideClaudeTokenProvider(accountRepository, geminiTokenCache, oAuthService, oAuthRefreshAPI)
|
||||||
digestSessionStore := service.NewDigestSessionStore()
|
digestSessionStore := service.NewDigestSessionStore()
|
||||||
channelRepository := repository.NewChannelRepository(db)
|
channelRepository := repository.NewChannelRepository(db)
|
||||||
channelService := service.NewChannelService(channelRepository, apiKeyAuthCacheInvalidator)
|
channelService := service.NewChannelService(channelRepository, groupRepository, apiKeyAuthCacheInvalidator, pricingService)
|
||||||
modelPricingResolver := service.NewModelPricingResolver(channelService, billingService)
|
modelPricingResolver := service.NewModelPricingResolver(channelService, billingService)
|
||||||
balanceNotifyService := service.ProvideBalanceNotifyService(emailService, settingRepository, accountRepository)
|
balanceNotifyService := service.ProvideBalanceNotifyService(emailService, settingRepository, accountRepository)
|
||||||
gatewayService := service.NewGatewayService(accountRepository, groupRepository, usageLogRepository, usageBillingRepository, userRepository, userSubscriptionRepository, userGroupRateRepository, gatewayCache, configConfig, schedulerSnapshotService, concurrencyService, billingService, rateLimitService, billingCacheService, identityService, httpUpstream, deferredService, claudeTokenProvider, sessionLimitCache, rpmCache, digestSessionStore, settingService, tlsFingerprintProfileService, channelService, modelPricingResolver, balanceNotifyService)
|
gatewayService := service.NewGatewayService(accountRepository, groupRepository, usageLogRepository, usageBillingRepository, userRepository, userSubscriptionRepository, userGroupRateRepository, gatewayCache, configConfig, schedulerSnapshotService, concurrencyService, billingService, rateLimitService, billingCacheService, identityService, httpUpstream, deferredService, claudeTokenProvider, sessionLimitCache, rpmCache, digestSessionStore, settingService, tlsFingerprintProfileService, channelService, modelPricingResolver, balanceNotifyService)
|
||||||
@ -187,6 +194,15 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
|||||||
geminiMessagesCompatService := service.NewGeminiMessagesCompatService(accountRepository, groupRepository, gatewayCache, schedulerSnapshotService, geminiTokenProvider, rateLimitService, httpUpstream, antigravityGatewayService, configConfig)
|
geminiMessagesCompatService := service.NewGeminiMessagesCompatService(accountRepository, groupRepository, gatewayCache, schedulerSnapshotService, geminiTokenProvider, rateLimitService, httpUpstream, antigravityGatewayService, configConfig)
|
||||||
opsSystemLogSink := service.ProvideOpsSystemLogSink(opsRepository)
|
opsSystemLogSink := service.ProvideOpsSystemLogSink(opsRepository)
|
||||||
opsService := service.NewOpsService(opsRepository, settingRepository, configConfig, accountRepository, userRepository, concurrencyService, gatewayService, openAIGatewayService, geminiMessagesCompatService, antigravityGatewayService, opsSystemLogSink)
|
opsService := service.NewOpsService(opsRepository, settingRepository, configConfig, accountRepository, userRepository, concurrencyService, gatewayService, openAIGatewayService, geminiMessagesCompatService, antigravityGatewayService, opsSystemLogSink)
|
||||||
|
encryptionKey, err := payment.ProvideEncryptionKey(configConfig)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
paymentConfigService := service.ProvidePaymentConfigService(client, settingRepository, encryptionKey)
|
||||||
|
registry := payment.ProvideRegistry()
|
||||||
|
defaultLoadBalancer := payment.ProvideDefaultLoadBalancer(client, encryptionKey)
|
||||||
|
paymentService := service.NewPaymentService(client, registry, defaultLoadBalancer, redeemService, subscriptionService, paymentConfigService, userRepository, groupRepository, affiliateService)
|
||||||
|
settingHandler := admin.NewSettingHandler(settingService, emailService, turnstileService, opsService, paymentConfigService, paymentService)
|
||||||
opsHandler := admin.NewOpsHandler(opsService)
|
opsHandler := admin.NewOpsHandler(opsService)
|
||||||
updateCache := repository.NewUpdateCache(redisClient)
|
updateCache := repository.NewUpdateCache(redisClient)
|
||||||
gitHubReleaseClient := repository.ProvideGitHubReleaseClient(configConfig)
|
gitHubReleaseClient := repository.ProvideGitHubReleaseClient(configConfig)
|
||||||
@ -214,22 +230,17 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
|||||||
scheduledTestService := service.ProvideScheduledTestService(scheduledTestPlanRepository, scheduledTestResultRepository)
|
scheduledTestService := service.ProvideScheduledTestService(scheduledTestPlanRepository, scheduledTestResultRepository)
|
||||||
scheduledTestHandler := admin.NewScheduledTestHandler(scheduledTestService)
|
scheduledTestHandler := admin.NewScheduledTestHandler(scheduledTestService)
|
||||||
channelHandler := admin.NewChannelHandler(channelService, billingService)
|
channelHandler := admin.NewChannelHandler(channelService, billingService)
|
||||||
registry := payment.ProvideRegistry()
|
channelMonitorHandler := admin.NewChannelMonitorHandler(channelMonitorService)
|
||||||
encryptionKey, err := payment.ProvideEncryptionKey(configConfig)
|
channelMonitorRequestTemplateRepository := repository.NewChannelMonitorRequestTemplateRepository(client, db)
|
||||||
if err != nil {
|
channelMonitorRequestTemplateService := service.NewChannelMonitorRequestTemplateService(channelMonitorRequestTemplateRepository)
|
||||||
return nil, err
|
channelMonitorRequestTemplateHandler := admin.NewChannelMonitorRequestTemplateHandler(channelMonitorRequestTemplateService)
|
||||||
}
|
|
||||||
defaultLoadBalancer := payment.ProvideDefaultLoadBalancer(client, encryptionKey)
|
|
||||||
paymentConfigService := service.ProvidePaymentConfigService(client, settingRepository, encryptionKey)
|
|
||||||
paymentService := service.NewPaymentService(client, registry, defaultLoadBalancer, redeemService, subscriptionService, paymentConfigService, userRepository, groupRepository)
|
|
||||||
settingHandler := admin.NewSettingHandler(settingService, emailService, turnstileService, opsService, paymentConfigService, paymentService)
|
|
||||||
paymentOrderExpiryService := service.ProvidePaymentOrderExpiryService(paymentService)
|
|
||||||
paymentHandler := admin.NewPaymentHandler(paymentService, paymentConfigService)
|
paymentHandler := admin.NewPaymentHandler(paymentService, paymentConfigService)
|
||||||
windsurfAuthService := service.ProvideWindsurfAuthService(configConfig, accountRepository, proxyRepository, adminService)
|
windsurfAuthService := service.ProvideWindsurfAuthService(configConfig, accountRepository, proxyRepository, adminService)
|
||||||
windsurfRefreshService := service.ProvideWindsurfRefreshService(configConfig, accountRepository, proxyRepository)
|
windsurfRefreshService := service.ProvideWindsurfRefreshService(configConfig, accountRepository, proxyRepository)
|
||||||
windsurfProbeService := service.ProvideWindsurfProbeService(configConfig, accountRepository, proxyRepository)
|
windsurfProbeService := service.ProvideWindsurfProbeService(configConfig, accountRepository, proxyRepository)
|
||||||
windsurfHandler := handler.ProvideWindsurfHandler(windsurfAuthService, windsurfLSService, windsurfProbeService)
|
windsurfHandler := handler.ProvideWindsurfHandler(windsurfAuthService, windsurfLSService, windsurfProbeService)
|
||||||
adminHandlers := handler.ProvideAdminHandlers(dashboardHandler, adminUserHandler, groupHandler, accountHandler, adminAnnouncementHandler, dataManagementHandler, backupHandler, oAuthHandler, openAIOAuthHandler, geminiOAuthHandler, antigravityOAuthHandler, proxyHandler, adminRedeemHandler, promoHandler, settingHandler, opsHandler, systemHandler, adminSubscriptionHandler, adminUsageHandler, userAttributeHandler, errorPassthroughHandler, tlsFingerprintProfileHandler, adminAPIKeyHandler, scheduledTestHandler, channelHandler, paymentHandler, windsurfHandler)
|
affiliateHandler := admin.NewAffiliateHandler(affiliateService, adminService)
|
||||||
|
adminHandlers := handler.ProvideAdminHandlers(dashboardHandler, adminUserHandler, groupHandler, accountHandler, adminAnnouncementHandler, dataManagementHandler, backupHandler, oAuthHandler, openAIOAuthHandler, geminiOAuthHandler, antigravityOAuthHandler, proxyHandler, adminRedeemHandler, promoHandler, settingHandler, opsHandler, systemHandler, adminSubscriptionHandler, adminUsageHandler, userAttributeHandler, errorPassthroughHandler, tlsFingerprintProfileHandler, adminAPIKeyHandler, scheduledTestHandler, channelHandler, channelMonitorHandler, channelMonitorRequestTemplateHandler, paymentHandler, windsurfHandler, affiliateHandler)
|
||||||
usageRecordWorkerPool := service.NewUsageRecordWorkerPool(configConfig)
|
usageRecordWorkerPool := service.NewUsageRecordWorkerPool(configConfig)
|
||||||
userMsgQueueCache := repository.NewUserMsgQueueCache(redisClient)
|
userMsgQueueCache := repository.NewUserMsgQueueCache(redisClient)
|
||||||
userMessageQueueService := service.ProvideUserMessageQueueService(userMsgQueueCache, rpmCache, configConfig)
|
userMessageQueueService := service.ProvideUserMessageQueueService(userMsgQueueCache, rpmCache, configConfig)
|
||||||
@ -239,26 +250,27 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) {
|
|||||||
totpHandler := handler.NewTotpHandler(totpService)
|
totpHandler := handler.NewTotpHandler(totpService)
|
||||||
handlerPaymentHandler := handler.NewPaymentHandler(paymentService, paymentConfigService, channelService)
|
handlerPaymentHandler := handler.NewPaymentHandler(paymentService, paymentConfigService, channelService)
|
||||||
paymentWebhookHandler := handler.NewPaymentWebhookHandler(paymentService, registry)
|
paymentWebhookHandler := handler.NewPaymentWebhookHandler(paymentService, registry)
|
||||||
|
availableChannelHandler := handler.NewAvailableChannelHandler(channelService, apiKeyService, settingService)
|
||||||
idempotencyCoordinator := service.ProvideIdempotencyCoordinator(idempotencyRepository, configConfig)
|
idempotencyCoordinator := service.ProvideIdempotencyCoordinator(idempotencyRepository, configConfig)
|
||||||
idempotencyCleanupService := service.ProvideIdempotencyCleanupService(idempotencyRepository, configConfig)
|
idempotencyCleanupService := service.ProvideIdempotencyCleanupService(idempotencyRepository, configConfig)
|
||||||
handlers := handler.ProvideHandlers(authHandler, userHandler, apiKeyHandler, usageHandler, redeemHandler, subscriptionHandler, announcementHandler, adminHandlers, gatewayHandler, openAIGatewayHandler, handlerSettingHandler, totpHandler, handlerPaymentHandler, paymentWebhookHandler, idempotencyCoordinator, idempotencyCleanupService)
|
handlers := handler.ProvideHandlers(authHandler, userHandler, apiKeyHandler, usageHandler, redeemHandler, subscriptionHandler, announcementHandler, channelMonitorUserHandler, adminHandlers, gatewayHandler, openAIGatewayHandler, handlerSettingHandler, totpHandler, handlerPaymentHandler, paymentWebhookHandler, availableChannelHandler, idempotencyCoordinator, idempotencyCleanupService)
|
||||||
jwtAuthMiddleware := middleware.NewJWTAuthMiddleware(authService, userService)
|
jwtAuthMiddleware := middleware.NewJWTAuthMiddleware(authService, userService)
|
||||||
adminAuthMiddleware := middleware.NewAdminAuthMiddleware(authService, userService, settingService)
|
adminAuthMiddleware := middleware.NewAdminAuthMiddleware(authService, userService, settingService)
|
||||||
apiKeyAuthMiddleware := middleware.NewAPIKeyAuthMiddleware(apiKeyService, subscriptionService, configConfig)
|
apiKeyAuthMiddleware := middleware.NewAPIKeyAuthMiddleware(apiKeyService, subscriptionService, configConfig)
|
||||||
langServerService := service.ProvideLanguageServerService(httpUpstream, antigravityGatewayService, accountRepository)
|
engine := server.ProvideRouter(configConfig, handlers, jwtAuthMiddleware, adminAuthMiddleware, apiKeyAuthMiddleware, apiKeyService, subscriptionService, opsService, settingService, redisClient)
|
||||||
lsrpcHandler := service.NewLSRPCHandler(antigravityGatewayService, accountRepository, nil)
|
|
||||||
engine := server.ProvideRouter(configConfig, handlers, jwtAuthMiddleware, adminAuthMiddleware, apiKeyAuthMiddleware, apiKeyService, subscriptionService, opsService, settingService, redisClient, langServerService, lsrpcHandler)
|
|
||||||
httpServer := server.ProvideHTTPServer(configConfig, engine)
|
httpServer := server.ProvideHTTPServer(configConfig, engine)
|
||||||
opsMetricsCollector := service.ProvideOpsMetricsCollector(opsRepository, settingRepository, accountRepository, concurrencyService, db, redisClient, configConfig)
|
opsMetricsCollector := service.ProvideOpsMetricsCollector(opsRepository, settingRepository, accountRepository, concurrencyService, db, redisClient, configConfig)
|
||||||
opsAggregationService := service.ProvideOpsAggregationService(opsRepository, settingRepository, db, redisClient, configConfig)
|
opsAggregationService := service.ProvideOpsAggregationService(opsRepository, settingRepository, db, redisClient, configConfig)
|
||||||
opsAlertEvaluatorService := service.ProvideOpsAlertEvaluatorService(opsService, opsRepository, emailService, redisClient, configConfig)
|
opsAlertEvaluatorService := service.ProvideOpsAlertEvaluatorService(opsService, opsRepository, emailService, redisClient, configConfig)
|
||||||
opsCleanupService := service.ProvideOpsCleanupService(opsRepository, db, redisClient, configConfig)
|
opsCleanupService := service.ProvideOpsCleanupService(opsRepository, db, redisClient, configConfig, channelMonitorService)
|
||||||
opsScheduledReportService := service.ProvideOpsScheduledReportService(opsService, userService, emailService, redisClient, configConfig)
|
opsScheduledReportService := service.ProvideOpsScheduledReportService(opsService, userService, emailService, redisClient, configConfig)
|
||||||
tokenRefreshService := service.ProvideTokenRefreshService(accountRepository, oAuthService, openAIOAuthService, geminiOAuthService, antigravityOAuthService, compositeTokenCacheInvalidator, schedulerCache, configConfig, tempUnschedCache, privacyClientFactory, proxyRepository, oAuthRefreshAPI)
|
tokenRefreshService := service.ProvideTokenRefreshService(accountRepository, oAuthService, openAIOAuthService, geminiOAuthService, antigravityOAuthService, compositeTokenCacheInvalidator, schedulerCache, configConfig, tempUnschedCache, privacyClientFactory, proxyRepository, oAuthRefreshAPI)
|
||||||
accountExpiryService := service.ProvideAccountExpiryService(accountRepository)
|
accountExpiryService := service.ProvideAccountExpiryService(accountRepository)
|
||||||
subscriptionExpiryService := service.ProvideSubscriptionExpiryService(userSubscriptionRepository)
|
subscriptionExpiryService := service.ProvideSubscriptionExpiryService(userSubscriptionRepository)
|
||||||
scheduledTestRunnerService := service.ProvideScheduledTestRunnerService(scheduledTestPlanRepository, scheduledTestService, accountTestService, rateLimitService, configConfig)
|
scheduledTestRunnerService := service.ProvideScheduledTestRunnerService(scheduledTestPlanRepository, scheduledTestService, accountTestService, rateLimitService, configConfig)
|
||||||
v := provideCleanup(client, redisClient, opsMetricsCollector, opsAggregationService, opsAlertEvaluatorService, opsCleanupService, opsScheduledReportService, opsSystemLogSink, schedulerSnapshotService, tokenRefreshService, accountExpiryService, subscriptionExpiryService, usageCleanupService, idempotencyCleanupService, pricingService, emailQueueService, billingCacheService, usageRecordWorkerPool, subscriptionService, oAuthService, openAIOAuthService, geminiOAuthService, antigravityOAuthService, openAIGatewayService, scheduledTestRunnerService, backupService, paymentOrderExpiryService, windsurfRefreshService)
|
paymentOrderExpiryService := service.ProvidePaymentOrderExpiryService(paymentService)
|
||||||
|
channelMonitorRunner := service.ProvideChannelMonitorRunner(channelMonitorService, settingService)
|
||||||
|
v := provideCleanup(client, redisClient, opsMetricsCollector, opsAggregationService, opsAlertEvaluatorService, opsCleanupService, opsScheduledReportService, opsSystemLogSink, schedulerSnapshotService, tokenRefreshService, accountExpiryService, subscriptionExpiryService, usageCleanupService, idempotencyCleanupService, pricingService, emailQueueService, billingCacheService, usageRecordWorkerPool, subscriptionService, oAuthService, openAIOAuthService, geminiOAuthService, antigravityOAuthService, openAIGatewayService, scheduledTestRunnerService, backupService, paymentOrderExpiryService, windsurfRefreshService, channelMonitorRunner, windsurfLSService)
|
||||||
application := &Application{
|
application := &Application{
|
||||||
Server: httpServer,
|
Server: httpServer,
|
||||||
Cleanup: v,
|
Cleanup: v,
|
||||||
@ -313,6 +325,8 @@ func provideCleanup(
|
|||||||
backupSvc *service.BackupService,
|
backupSvc *service.BackupService,
|
||||||
paymentOrderExpiry *service.PaymentOrderExpiryService,
|
paymentOrderExpiry *service.PaymentOrderExpiryService,
|
||||||
windsurfRefresh *service.WindsurfRefreshService,
|
windsurfRefresh *service.WindsurfRefreshService,
|
||||||
|
channelMonitorRunner *service.ChannelMonitorRunner,
|
||||||
|
windsurfLS *service.WindsurfLSService,
|
||||||
) func() {
|
) func() {
|
||||||
return func() {
|
return func() {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
@ -460,6 +474,12 @@ func provideCleanup(
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}},
|
}},
|
||||||
|
{"ChannelMonitorRunner", func() error {
|
||||||
|
if channelMonitorRunner != nil {
|
||||||
|
channelMonitorRunner.Stop()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}},
|
||||||
}
|
}
|
||||||
|
|
||||||
infraSteps := []cleanupStep{
|
infraSteps := []cleanupStep{
|
||||||
|
|||||||
@ -43,7 +43,7 @@ func TestProvideCleanup_WithMinimalDependencies_NoPanic(t *testing.T) {
|
|||||||
subscriptionExpirySvc := service.NewSubscriptionExpiryService(nil, time.Second)
|
subscriptionExpirySvc := service.NewSubscriptionExpiryService(nil, time.Second)
|
||||||
pricingSvc := service.NewPricingService(cfg, nil)
|
pricingSvc := service.NewPricingService(cfg, nil)
|
||||||
emailQueueSvc := service.NewEmailQueueService(nil, 1)
|
emailQueueSvc := service.NewEmailQueueService(nil, 1)
|
||||||
billingCacheSvc := service.NewBillingCacheService(nil, nil, nil, nil, cfg)
|
billingCacheSvc := service.NewBillingCacheService(nil, nil, nil, nil, nil, nil, cfg)
|
||||||
idempotencyCleanupSvc := service.NewIdempotencyCleanupService(nil, cfg)
|
idempotencyCleanupSvc := service.NewIdempotencyCleanupService(nil, cfg)
|
||||||
schedulerSnapshotSvc := service.NewSchedulerSnapshotService(nil, nil, nil, nil, cfg)
|
schedulerSnapshotSvc := service.NewSchedulerSnapshotService(nil, nil, nil, nil, cfg)
|
||||||
opsSystemLogSinkSvc := service.NewOpsSystemLogSink(nil)
|
opsSystemLogSinkSvc := service.NewOpsSystemLogSink(nil)
|
||||||
@ -77,6 +77,8 @@ func TestProvideCleanup_WithMinimalDependencies_NoPanic(t *testing.T) {
|
|||||||
nil, // backupSvc
|
nil, // backupSvc
|
||||||
nil, // paymentOrderExpiry
|
nil, // paymentOrderExpiry
|
||||||
nil, // windsurfRefresh
|
nil, // windsurfRefresh
|
||||||
|
nil, // channelMonitorRunner
|
||||||
|
nil, // windsurfLS
|
||||||
)
|
)
|
||||||
|
|
||||||
require.NotPanics(t, func() {
|
require.NotPanics(t, func() {
|
||||||
|
|||||||
@ -1,114 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/Wei-Shaw/sub2api/internal/pkg/antigravity"
|
|
||||||
)
|
|
||||||
|
|
||||||
func repeatStr(s string, count int) string {
|
|
||||||
return strings.Repeat(s, count)
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
accessToken := flag.String("token", "", "OAuth access token")
|
|
||||||
projectID := flag.String("project", "", "Project ID")
|
|
||||||
proxyURL := flag.String("proxy", "", "Proxy URL (optional)")
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
if *accessToken == "" || *projectID == "" {
|
|
||||||
log.Fatal("missing required flags: -token and -project")
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
client, err := antigravity.NewClient(*proxyURL)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("failed to create client: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(repeatStr("=", 80))
|
|
||||||
fmt.Println("Antigravity Privacy Setup Diagnostic Test")
|
|
||||||
fmt.Println(repeatStr("=", 80))
|
|
||||||
|
|
||||||
// Step 1: Verify token is valid by fetching user info
|
|
||||||
fmt.Println("\n[Step 1] Verifying access token...")
|
|
||||||
userInfo, err := client.GetUserInfo(ctx, *accessToken)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("failed to get user info: %v", err)
|
|
||||||
}
|
|
||||||
fmt.Printf("✓ Email: %s\n", userInfo.Email)
|
|
||||||
|
|
||||||
// Step 2: Call SetUserSettings
|
|
||||||
fmt.Println("\n[Step 2] Calling SetUserSettings (clear privacy settings)...")
|
|
||||||
setResp, err := client.SetUserSettings(ctx, *accessToken)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("SetUserSettings failed: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if setResp.IsSuccess() {
|
|
||||||
fmt.Println("✓ SetUserSettings succeeded")
|
|
||||||
fmt.Printf(" Response: %+v\n", setResp)
|
|
||||||
} else {
|
|
||||||
fmt.Println("✗ SetUserSettings returned non-empty userSettings")
|
|
||||||
fmt.Printf(" Response: %+v\n", setResp)
|
|
||||||
fmt.Println("\n ERROR: This indicates privacy settings were NOT cleared!")
|
|
||||||
fmt.Println(" Possible causes:")
|
|
||||||
fmt.Println(" 1. Account restrictions on privacy settings")
|
|
||||||
fmt.Println(" 2. Account still has telemetryEnabled=true")
|
|
||||||
fmt.Println(" 3. API response indicates settings persist")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 3: Verify by calling FetchUserInfo
|
|
||||||
fmt.Println("\n[Step 3] Calling FetchUserInfo to verify privacy status...")
|
|
||||||
userInfoResp, err := client.FetchUserInfo(ctx, *accessToken, *projectID)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("FetchUserInfo failed: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if userInfoResp.IsPrivate() {
|
|
||||||
fmt.Println("✓ Privacy is properly set (userSettings is empty)")
|
|
||||||
fmt.Printf(" Response: %+v\n", userInfoResp)
|
|
||||||
} else {
|
|
||||||
fmt.Println("✗ Privacy is NOT properly set (userSettings contains telemetryEnabled)")
|
|
||||||
fmt.Printf(" Response: %+v\n", userInfoResp)
|
|
||||||
fmt.Println("\n ERROR: This explains the 503 errors in gateway!")
|
|
||||||
fmt.Println(" Reason: Antigravity API rejects requests from accounts with")
|
|
||||||
fmt.Println(" telemetryEnabled=true to protect user privacy")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Summary
|
|
||||||
fmt.Println("\n" + repeatStr("=", 80))
|
|
||||||
fmt.Println("DIAGNOSIS SUMMARY")
|
|
||||||
fmt.Println(repeatStr("=", 80))
|
|
||||||
|
|
||||||
if setResp.IsSuccess() && userInfoResp.IsPrivate() {
|
|
||||||
fmt.Println("✓ Privacy setup is SUCCESSFUL")
|
|
||||||
fmt.Println(" This account should NOT experience 503 errors due to privacy")
|
|
||||||
fmt.Println(" The 503 errors might be due to:")
|
|
||||||
fmt.Println(" 1. Temporary API outages")
|
|
||||||
fmt.Println(" 2. Rate limiting on new accounts")
|
|
||||||
fmt.Println(" 3. Other infrastructure issues")
|
|
||||||
} else if !setResp.IsSuccess() && !userInfoResp.IsPrivate() {
|
|
||||||
fmt.Println("✗ Privacy setup FAILED")
|
|
||||||
fmt.Println(" The account cannot clear privacy settings on Antigravity")
|
|
||||||
fmt.Println(" This causes the 503 Service Unavailable errors")
|
|
||||||
fmt.Println("\nSOLUTION:")
|
|
||||||
fmt.Println(" 1. Check if this is a restricted account type")
|
|
||||||
fmt.Println(" 2. Try re-authorizing the account")
|
|
||||||
fmt.Println(" 3. Check Antigravity API rate limiting")
|
|
||||||
fmt.Println(" 4. Inspect firewall/proxy settings")
|
|
||||||
} else {
|
|
||||||
fmt.Println("⚠ INCONSISTENT STATE:")
|
|
||||||
fmt.Println(" SetUserSettings and FetchUserInfo returned different results")
|
|
||||||
fmt.Println(" This might indicate a transient API issue or data sync delay")
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("\n" + repeatStr("=", 80))
|
|
||||||
}
|
|
||||||
@ -1,316 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/Wei-Shaw/sub2api/internal/pkg/antigravity"
|
|
||||||
)
|
|
||||||
|
|
||||||
// TestScenario 定义一个测试场景
|
|
||||||
type TestScenario struct {
|
|
||||||
name string
|
|
||||||
description string
|
|
||||||
testFunc func(ctx context.Context, token, projectID string) (bool, string)
|
|
||||||
}
|
|
||||||
|
|
||||||
var scenarios []TestScenario
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
scenarios = []TestScenario{
|
|
||||||
{
|
|
||||||
name: "single_request",
|
|
||||||
description: "单次请求 - 检查是否立即成功",
|
|
||||||
testFunc: testSingleRequest,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "sequential_requests",
|
|
||||||
description: "顺序发送 10 个请求 - 找到稳定点",
|
|
||||||
testFunc: testSequentialRequests,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "concurrent_requests",
|
|
||||||
description: "并发发送 5 个请求 - 检查并发初始化行为",
|
|
||||||
testFunc: testConcurrentRequests,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "warmup_then_request",
|
|
||||||
description: "预热(模型列表请求) + 业务请求 - 验证预热效果",
|
|
||||||
testFunc: testWarmupThenRequest,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "delayed_request",
|
|
||||||
description: "延迟 5 秒后请求 - 检查账号初始化时间",
|
|
||||||
testFunc: testDelayedRequest,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// testSingleRequest 单次请求
|
|
||||||
func testSingleRequest(ctx context.Context, token, projectID string) (bool, string) {
|
|
||||||
client, err := antigravity.NewClient("")
|
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Sprintf("创建客户端失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
start := time.Now()
|
|
||||||
resp, _, err := client.FetchAvailableModels(ctx, token, projectID)
|
|
||||||
elapsed := time.Since(start)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Sprintf("请求失败 (%v): %v", elapsed, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if resp == nil {
|
|
||||||
return false, fmt.Sprintf("响应为空 (%v)", elapsed)
|
|
||||||
}
|
|
||||||
|
|
||||||
return true, fmt.Sprintf("✓ 单次请求成功 - 耗时 %v", elapsed)
|
|
||||||
}
|
|
||||||
|
|
||||||
// testSequentialRequests 顺序发送多个请求
|
|
||||||
func testSequentialRequests(ctx context.Context, token, projectID string) (bool, string) {
|
|
||||||
client, err := antigravity.NewClient("")
|
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Sprintf("创建客户端失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var firstFailIdx = -1
|
|
||||||
var firstSuccessIdx = -1
|
|
||||||
var timings []time.Duration
|
|
||||||
|
|
||||||
for i := 0; i < 10; i++ {
|
|
||||||
start := time.Now()
|
|
||||||
resp, _, err := client.FetchAvailableModels(ctx, token, projectID)
|
|
||||||
elapsed := time.Since(start)
|
|
||||||
timings = append(timings, elapsed)
|
|
||||||
|
|
||||||
success := err == nil && resp != nil
|
|
||||||
fmt.Printf(" [%d] 耗时: %6v, 状态: %v\n", i+1, elapsed, map[bool]string{true: "✓", false: "✗"}[success])
|
|
||||||
|
|
||||||
if !success && firstFailIdx == -1 {
|
|
||||||
firstFailIdx = i
|
|
||||||
}
|
|
||||||
if success && firstSuccessIdx == -1 {
|
|
||||||
firstSuccessIdx = i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var report string
|
|
||||||
if firstSuccessIdx == -1 {
|
|
||||||
report = "✗ 全部失败"
|
|
||||||
} else if firstSuccessIdx == 0 {
|
|
||||||
report = fmt.Sprintf("✓ 首次即成功 (耗时 %v)", timings[0])
|
|
||||||
} else {
|
|
||||||
report = fmt.Sprintf("⚠ 第 %d 次才成功 (失败 %d 次), 首次耗时 %v",
|
|
||||||
firstSuccessIdx+1, firstSuccessIdx, timings[firstSuccessIdx])
|
|
||||||
}
|
|
||||||
|
|
||||||
return firstSuccessIdx >= 0, report
|
|
||||||
}
|
|
||||||
|
|
||||||
// testConcurrentRequests 并发请求
|
|
||||||
func testConcurrentRequests(ctx context.Context, token, projectID string) (bool, string) {
|
|
||||||
client, err := antigravity.NewClient("")
|
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Sprintf("创建客户端失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
|
||||||
results := make([]bool, 5)
|
|
||||||
timings := make([]time.Duration, 5)
|
|
||||||
mu := sync.Mutex{}
|
|
||||||
|
|
||||||
for i := 0; i < 5; i++ {
|
|
||||||
wg.Add(1)
|
|
||||||
go func(idx int) {
|
|
||||||
defer wg.Done()
|
|
||||||
start := time.Now()
|
|
||||||
resp, _, err := client.FetchAvailableModels(ctx, token, projectID)
|
|
||||||
elapsed := time.Since(start)
|
|
||||||
|
|
||||||
mu.Lock()
|
|
||||||
results[idx] = err == nil && resp != nil
|
|
||||||
timings[idx] = elapsed
|
|
||||||
mu.Unlock()
|
|
||||||
|
|
||||||
fmt.Printf(" [%d] 耗时: %6v, 状态: %v\n", idx+1, elapsed, map[bool]string{true: "✓", false: "✗"}[results[idx]])
|
|
||||||
}(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
wg.Wait()
|
|
||||||
|
|
||||||
successCount := 0
|
|
||||||
for _, ok := range results {
|
|
||||||
if ok {
|
|
||||||
successCount++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return successCount > 0, fmt.Sprintf("%d/5 并发请求成功", successCount)
|
|
||||||
}
|
|
||||||
|
|
||||||
// testWarmupThenRequest 预热测试
|
|
||||||
func testWarmupThenRequest(ctx context.Context, token, projectID string) (bool, string) {
|
|
||||||
client, err := antigravity.NewClient("")
|
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Sprintf("创建客户端失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 第 1 步:预热 - 调用 LoadCodeAssist(获取项目信息)
|
|
||||||
fmt.Println(" [Warmup] 调用 LoadCodeAssist 预热...")
|
|
||||||
warmupStart := time.Now()
|
|
||||||
_, _, warmupErr := client.LoadCodeAssist(ctx, token)
|
|
||||||
warmupElapsed := time.Since(warmupStart)
|
|
||||||
fmt.Printf(" [Warmup] 耗时 %v, 状态: %v\n", warmupElapsed, map[bool]string{true: "✓", false: "✗"}[warmupErr == nil])
|
|
||||||
|
|
||||||
// 第 2 步:实际请求
|
|
||||||
fmt.Println(" [Request] 发送业务请求...")
|
|
||||||
reqStart := time.Now()
|
|
||||||
resp, _, err := client.FetchAvailableModels(ctx, token, projectID)
|
|
||||||
reqElapsed := time.Since(reqStart)
|
|
||||||
success := err == nil && resp != nil
|
|
||||||
fmt.Printf(" [Request] 耗时 %v, 状态: %v\n", reqElapsed, map[bool]string{true: "✓", false: "✗"}[success])
|
|
||||||
|
|
||||||
return success, fmt.Sprintf("预热 %v + 请求 %v = 总耗时 %v",
|
|
||||||
warmupElapsed, reqElapsed, warmupElapsed+reqElapsed)
|
|
||||||
}
|
|
||||||
|
|
||||||
// testDelayedRequest 延迟请求
|
|
||||||
func testDelayedRequest(ctx context.Context, token, projectID string) (bool, string) {
|
|
||||||
client, err := antigravity.NewClient("")
|
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Sprintf("创建客户端失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(" 等待 5 秒...")
|
|
||||||
time.Sleep(5 * time.Second)
|
|
||||||
|
|
||||||
start := time.Now()
|
|
||||||
resp, _, err := client.FetchAvailableModels(ctx, token, projectID)
|
|
||||||
elapsed := time.Since(start)
|
|
||||||
|
|
||||||
success := err == nil && resp != nil
|
|
||||||
return success, fmt.Sprintf("延迟 5s 后请求 - 耗时 %v, 状态: %v", elapsed, map[bool]string{true: "✓", false: "✗"}[success])
|
|
||||||
}
|
|
||||||
|
|
||||||
// testOAuthTokenRefresh OAuth Token 刷新测试
|
|
||||||
func testOAuthTokenRefresh(ctx context.Context, refreshToken string) (bool, string) {
|
|
||||||
client, err := antigravity.NewClient("")
|
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Sprintf("创建客户端失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
start := time.Now()
|
|
||||||
tokenInfo, err := client.RefreshToken(ctx, refreshToken, false)
|
|
||||||
elapsed := time.Since(start)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Sprintf("Token 刷新失败 (%v): %v", elapsed, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return true, fmt.Sprintf("✓ Token 刷新成功 - 耗时 %v, 新 Token 有效期: %d 秒",
|
|
||||||
elapsed, tokenInfo.ExpiresIn)
|
|
||||||
}
|
|
||||||
|
|
||||||
// testAccountInitializationWarmup 账号初始化预热
|
|
||||||
func testAccountInitializationWarmup(ctx context.Context, token, projectID string) (bool, string) {
|
|
||||||
client, err := antigravity.NewClient("")
|
|
||||||
if err != nil {
|
|
||||||
return false, fmt.Sprintf("创建客户端失败: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(" 执行完整的账号初始化流程...")
|
|
||||||
|
|
||||||
// 1. GetUserInfo
|
|
||||||
fmt.Println(" 1. GetUserInfo...")
|
|
||||||
start := time.Now()
|
|
||||||
_, err1 := client.GetUserInfo(ctx, token)
|
|
||||||
fmt.Printf(" 耗时: %v\n", time.Since(start))
|
|
||||||
|
|
||||||
// 2. LoadCodeAssist
|
|
||||||
fmt.Println(" 2. LoadCodeAssist...")
|
|
||||||
start = time.Now()
|
|
||||||
_, _, err2 := client.LoadCodeAssist(ctx, token)
|
|
||||||
fmt.Printf(" 耗时: %v\n", time.Since(start))
|
|
||||||
|
|
||||||
// 3. FetchAvailableModels
|
|
||||||
fmt.Println(" 3. FetchAvailableModels...")
|
|
||||||
start = time.Now()
|
|
||||||
_, _, err3 := client.FetchAvailableModels(ctx, token, projectID)
|
|
||||||
elapsed := time.Since(start)
|
|
||||||
fmt.Printf(" 耗时: %v\n", elapsed)
|
|
||||||
|
|
||||||
success := err1 == nil && err2 == nil && err3 == nil
|
|
||||||
return success, fmt.Sprintf("账号初始化预热 - 状态: %v", map[bool]string{true: "✓", false: "✗"}[success])
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
accessToken := flag.String("token", "", "OAuth access token")
|
|
||||||
projectID := flag.String("project", "", "Project ID")
|
|
||||||
refreshToken := flag.String("refresh", "", "Refresh token (optional)")
|
|
||||||
testName := flag.String("test", "all", "测试名称 (all, single_request, sequential_requests, etc.)")
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
if *accessToken == "" || *projectID == "" {
|
|
||||||
log.Fatal("缺少必需参数: -token 和 -project")
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
fmt.Println("\n" + repeatStr("=", 80))
|
|
||||||
fmt.Println("Antigravity 账号初始化诊断测试套件")
|
|
||||||
fmt.Println(repeatStr("=", 80) + "\n")
|
|
||||||
|
|
||||||
// Token 刷新测试
|
|
||||||
if *refreshToken != "" {
|
|
||||||
fmt.Println("[Token 刷新测试]")
|
|
||||||
_, report := testOAuthTokenRefresh(ctx, *refreshToken)
|
|
||||||
fmt.Printf("%s\n\n", report)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 账号初始化预热测试
|
|
||||||
fmt.Println("[账号初始化预热]")
|
|
||||||
_, report := testAccountInitializationWarmup(ctx, *accessToken, *projectID)
|
|
||||||
fmt.Printf("%s\n\n", report)
|
|
||||||
|
|
||||||
// 运行指定的测试
|
|
||||||
if *testName == "all" {
|
|
||||||
for _, scenario := range scenarios {
|
|
||||||
fmt.Printf("[%s]\n%s\n", scenario.name, scenario.description)
|
|
||||||
_, report := scenario.testFunc(ctx, *accessToken, *projectID)
|
|
||||||
fmt.Printf("结果: %s\n\n", report)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
found := false
|
|
||||||
for _, scenario := range scenarios {
|
|
||||||
if scenario.name == *testName {
|
|
||||||
found = true
|
|
||||||
fmt.Printf("[%s]\n%s\n", scenario.name, scenario.description)
|
|
||||||
_, report := scenario.testFunc(ctx, *accessToken, *projectID)
|
|
||||||
fmt.Printf("结果: %s\n\n", report)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !found {
|
|
||||||
log.Fatalf("未找到测试: %s", *testName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(repeatStr("=", 80))
|
|
||||||
fmt.Println("诊断完成")
|
|
||||||
fmt.Println(repeatStr("=", 80))
|
|
||||||
}
|
|
||||||
|
|
||||||
func repeatStr(s string, count int) string {
|
|
||||||
result := ""
|
|
||||||
for i := 0; i < count; i++ {
|
|
||||||
result += s
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
@ -279,7 +279,7 @@ func main() {
|
|||||||
// SendUserCascadeMessage
|
// SendUserCascadeMessage
|
||||||
{
|
{
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), f.timeout)
|
ctx, cancel := context.WithTimeout(context.Background(), f.timeout)
|
||||||
newCID, err := lsClient.SendUserCascadeMessage(ctx, f.jwt, cascadeID, f.prompt, pickedModel, "")
|
newCID, err := lsClient.SendUserCascadeMessage(ctx, f.jwt, cascadeID, f.prompt, pickedModel, "", 0, nil, true)
|
||||||
if err == nil && newCID != "" {
|
if err == nil && newCID != "" {
|
||||||
cascadeID = newCID
|
cascadeID = newCID
|
||||||
}
|
}
|
||||||
|
|||||||
255
backend/cmd/test_windsurf_tools/main.go
Normal file
255
backend/cmd/test_windsurf_tools/main.go
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
// test_windsurf_tools validates Cascade tool-calling end-to-end.
|
||||||
|
//
|
||||||
|
// Same flow as test_windsurf_minimal but injects an OpenAI-format tools[]
|
||||||
|
// preamble into SendUserCascadeMessage and parses <tool_call> blocks back
|
||||||
|
// out of the trajectory text.
|
||||||
|
//
|
||||||
|
// Usage:
|
||||||
|
//
|
||||||
|
// WINDSURF_JWT='devin-session-token$...' \
|
||||||
|
// WINDSURF_CSRF_TOKEN='ad2d9f01-...' \
|
||||||
|
// WINDSURF_USER_ID='devin-user$...' \
|
||||||
|
// WINDSURF_TEAM_ID='devin-team$account-...' \
|
||||||
|
// WINDSURF_LS_PORT=42099 \
|
||||||
|
// go run ./cmd/test_windsurf_tools -verbose
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/pkg/windsurf"
|
||||||
|
)
|
||||||
|
|
||||||
|
type cliFlags struct {
|
||||||
|
jwt string
|
||||||
|
model string
|
||||||
|
prompt string
|
||||||
|
verbose bool
|
||||||
|
timeout time.Duration
|
||||||
|
userID string
|
||||||
|
teamID string
|
||||||
|
csrfToken string
|
||||||
|
lsPort int
|
||||||
|
toolChoice string
|
||||||
|
roundtrip bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseFlags() cliFlags {
|
||||||
|
var f cliFlags
|
||||||
|
flag.StringVar(&f.jwt, "jwt", os.Getenv("WINDSURF_JWT"), "session token")
|
||||||
|
flag.StringVar(&f.model, "model", os.Getenv("WINDSURF_MODEL"), "model UID (optional, auto-picks cheapest)")
|
||||||
|
flag.StringVar(&f.prompt, "prompt", "Find every Go file in backend/internal/pkg/windsurf whose name contains 'tool', then read the first 40 lines of tool_emulation.go. Use the tools.", "user prompt")
|
||||||
|
flag.BoolVar(&f.verbose, "verbose", false, "verbose")
|
||||||
|
flag.DurationVar(&f.timeout, "timeout", 90*time.Second, "per-step timeout")
|
||||||
|
flag.StringVar(&f.userID, "user-id", os.Getenv("WINDSURF_USER_ID"), "user id")
|
||||||
|
flag.StringVar(&f.teamID, "team-id", os.Getenv("WINDSURF_TEAM_ID"), "team id")
|
||||||
|
flag.StringVar(&f.csrfToken, "csrf", os.Getenv("WINDSURF_CSRF_TOKEN"), "LS CSRF token")
|
||||||
|
flag.IntVar(&f.lsPort, "ls-port", envInt("WINDSURF_LS_PORT", 42099), "LS port")
|
||||||
|
flag.StringVar(&f.toolChoice, "tool-choice", "auto", "auto | required | none | <tool_name>")
|
||||||
|
flag.BoolVar(&f.roundtrip, "roundtrip", false, "after first turn, inject fake tool_result and test Turn 2")
|
||||||
|
flag.Parse()
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
|
||||||
|
func envInt(k string, dflt int) int {
|
||||||
|
v := os.Getenv(k)
|
||||||
|
if v == "" {
|
||||||
|
return dflt
|
||||||
|
}
|
||||||
|
var n int
|
||||||
|
fmt.Sscanf(v, "%d", &n)
|
||||||
|
if n == 0 {
|
||||||
|
return dflt
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
f := parseFlags()
|
||||||
|
if f.jwt == "" || f.csrfToken == "" || f.userID == "" || f.teamID == "" {
|
||||||
|
fmt.Fprintln(os.Stderr, "missing WINDSURF_JWT / CSRF / USER_ID / TEAM_ID")
|
||||||
|
os.Exit(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build tools[] — realistic coding tools: read_file, find_file, grep, list_dir
|
||||||
|
tools := []windsurf.OpenAITool{
|
||||||
|
{Type: "function", Function: windsurf.OpenAIFunction{
|
||||||
|
Name: "read_file",
|
||||||
|
Description: "Read the contents of a file. Use when you need to see what's inside a specific file.",
|
||||||
|
Parameters: json.RawMessage(`{"type":"object","properties":{
|
||||||
|
"path":{"type":"string","description":"Absolute or repo-relative file path"},
|
||||||
|
"start_line":{"type":"integer","description":"Optional 1-indexed start line","minimum":1},
|
||||||
|
"end_line":{"type":"integer","description":"Optional 1-indexed inclusive end line","minimum":1}
|
||||||
|
},"required":["path"]}`),
|
||||||
|
}},
|
||||||
|
{Type: "function", Function: windsurf.OpenAIFunction{
|
||||||
|
Name: "find_file",
|
||||||
|
Description: "Find files by glob pattern. Use when looking for files whose path matches a pattern.",
|
||||||
|
Parameters: json.RawMessage(`{"type":"object","properties":{
|
||||||
|
"pattern":{"type":"string","description":"Glob pattern, e.g. **/*.go or src/**/test_*.py"},
|
||||||
|
"max_results":{"type":"integer","default":50}
|
||||||
|
},"required":["pattern"]}`),
|
||||||
|
}},
|
||||||
|
{Type: "function", Function: windsurf.OpenAIFunction{
|
||||||
|
Name: "grep",
|
||||||
|
Description: "Search file contents by regex. Use when looking for code that matches a text pattern.",
|
||||||
|
Parameters: json.RawMessage(`{"type":"object","properties":{
|
||||||
|
"regex":{"type":"string","description":"POSIX/PCRE regex"},
|
||||||
|
"path_glob":{"type":"string","description":"Optional path glob filter, e.g. **/*.ts"},
|
||||||
|
"case_insensitive":{"type":"boolean","default":false}
|
||||||
|
},"required":["regex"]}`),
|
||||||
|
}},
|
||||||
|
{Type: "function", Function: windsurf.OpenAIFunction{
|
||||||
|
Name: "list_dir",
|
||||||
|
Description: "List files and sub-directories at a path. Use for shallow directory exploration.",
|
||||||
|
Parameters: json.RawMessage(`{"type":"object","properties":{
|
||||||
|
"path":{"type":"string","description":"Directory path"}
|
||||||
|
},"required":["path"]}`),
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
// Resolve tool_choice: "auto" | "required" | "none" | tool_name → object
|
||||||
|
var toolChoice interface{} = f.toolChoice
|
||||||
|
if f.toolChoice != "auto" && f.toolChoice != "required" && f.toolChoice != "none" {
|
||||||
|
toolChoice = map[string]any{"type": "function", "function": map[string]any{"name": f.toolChoice}}
|
||||||
|
}
|
||||||
|
preamble := windsurf.BuildToolPreambleForProto(tools, toolChoice)
|
||||||
|
if preamble == "" {
|
||||||
|
fmt.Fprintln(os.Stderr, "empty preamble")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
if f.verbose {
|
||||||
|
fmt.Printf("── Preamble (%d bytes) head 200 chars ──\n%s…\n\n",
|
||||||
|
len(preamble), truncate(preamble, 200))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LS client — note: user_id/team_id are not used by LS client directly,
|
||||||
|
// only by the remote account status APIs. Warmup sends a JWT only.
|
||||||
|
lsClient := windsurf.NewLocalLSClient(f.lsPort, f.csrfToken)
|
||||||
|
_ = f.userID
|
||||||
|
_ = f.teamID
|
||||||
|
|
||||||
|
// Pick model: use given or default to Claude 4.5 Haiku (cheapest Claude)
|
||||||
|
pickedModel := f.model
|
||||||
|
if pickedModel == "" {
|
||||||
|
pickedModel = "MODEL_PRIVATE_11" // claude-4.5-haiku
|
||||||
|
}
|
||||||
|
|
||||||
|
// Warmup
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), f.timeout)
|
||||||
|
defer cancel()
|
||||||
|
if err := lsClient.WarmupCascade(ctx, f.jwt); err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "WarmupCascade:", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
fmt.Println("✅ WarmupCascade")
|
||||||
|
|
||||||
|
// StartCascade
|
||||||
|
cascadeID, err := lsClient.StartCascade(ctx, f.jwt)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "StartCascade:", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
fmt.Printf("✅ StartCascade cascade_id=%s\n", cascadeID)
|
||||||
|
|
||||||
|
// Call StreamCascadeChat (full flow incl. trajectory polling)
|
||||||
|
res, err := lsClient.StreamCascadeChat(ctx, f.jwt, pickedModel, f.prompt, preamble, cascadeID, 0, nil)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "StreamCascadeChat:", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
fmt.Printf("✅ StreamCascadeChat text_len=%d thinking_len=%d native_tool_calls=%d\n",
|
||||||
|
len(res.Text), len(res.Thinking), len(res.ToolCalls))
|
||||||
|
|
||||||
|
fmt.Println("\n── Raw Text ──")
|
||||||
|
fmt.Println(res.Text)
|
||||||
|
if res.Thinking != "" && f.verbose {
|
||||||
|
fmt.Println("\n── Thinking ──")
|
||||||
|
fmt.Println(res.Thinking)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse tool calls from text
|
||||||
|
parsed := windsurf.ParseToolCallsFromText(res.Text)
|
||||||
|
fmt.Printf("\n── Parsed tool_calls: %d ──\n", len(parsed.ToolCalls))
|
||||||
|
for i, tc := range parsed.ToolCalls {
|
||||||
|
fmt.Printf("[%d] id=%s name=%s args=%s\n", i, tc.ID, tc.Name, tc.ArgumentsJSON)
|
||||||
|
}
|
||||||
|
fmt.Printf("\n── Text after stripping tool_call: ──\n%s\n", parsed.Text)
|
||||||
|
|
||||||
|
if len(parsed.ToolCalls) == 0 && len(res.ToolCalls) == 0 {
|
||||||
|
fmt.Fprintln(os.Stderr, "\n❌ NO TOOL CALLS produced")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
fmt.Println("\n✅ tool-calling E2E works")
|
||||||
|
|
||||||
|
// ───── Turn 2: inject fake tool_result and see if model continues ─────
|
||||||
|
if f.roundtrip && len(parsed.ToolCalls) > 0 {
|
||||||
|
tc := parsed.ToolCalls[0]
|
||||||
|
// Snapshot step count after Turn 1
|
||||||
|
ctxSnap, cancelSnap := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
|
stepsT1, _ := lsClient.GetTrajectorySteps(ctxSnap, cascadeID, 0)
|
||||||
|
cancelSnap()
|
||||||
|
fmt.Printf("\n── After Turn 1: trajectory has %d steps ──\n", len(stepsT1))
|
||||||
|
for i, s := range stepsT1 {
|
||||||
|
txt := s.ResponseText
|
||||||
|
if len(txt) > 80 {
|
||||||
|
txt = txt[:80] + "..."
|
||||||
|
}
|
||||||
|
fmt.Printf(" step[%d] type=%d text=%q\n", i, s.Type, txt)
|
||||||
|
}
|
||||||
|
|
||||||
|
fakeResult := `["cmd/server/main.go","cmd/test_windsurf_tools/main.go","internal/pkg/windsurf/tool_emulation.go"]`
|
||||||
|
turn2 := fmt.Sprintf(
|
||||||
|
`<tool_result tool_call_id="%s">%s</tool_result>`+"\n\nBased on the tool result above, tell me which files look test-related.",
|
||||||
|
tc.ID, fakeResult)
|
||||||
|
ctx2, cancel2 := context.WithTimeout(context.Background(), f.timeout)
|
||||||
|
defer cancel2()
|
||||||
|
res2, err := lsClient.StreamCascadeChat(ctx2, f.jwt, pickedModel, turn2, preamble, cascadeID, 0, nil)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, "\n❌ Turn2 StreamCascadeChat:", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
fmt.Printf("\n── Turn 2 response (text_len=%d thinking_len=%d) ──\n%s\n",
|
||||||
|
len(res2.Text), len(res2.Thinking), res2.Text)
|
||||||
|
parsed2 := windsurf.ParseToolCallsFromText(res2.Text)
|
||||||
|
fmt.Printf("\n── Turn 2 parsed tool_calls: %d ──\n", len(parsed2.ToolCalls))
|
||||||
|
for i, tc := range parsed2.ToolCalls {
|
||||||
|
fmt.Printf("[%d] id=%s name=%s args=%s\n", i, tc.ID, tc.Name, tc.ArgumentsJSON)
|
||||||
|
}
|
||||||
|
if len(parsed2.Text) > 20 && !containsIgnore(res2.Text, "i don't have access") {
|
||||||
|
fmt.Println("\n✅ round-trip works: model consumed tool_result and produced text")
|
||||||
|
} else {
|
||||||
|
fmt.Println("\n⚠️ round-trip suspicious: short or refusal text")
|
||||||
|
}
|
||||||
|
// Snapshot after Turn 2
|
||||||
|
ctxSnap2, cancelSnap2 := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
|
stepsT2, _ := lsClient.GetTrajectorySteps(ctxSnap2, cascadeID, 0)
|
||||||
|
cancelSnap2()
|
||||||
|
fmt.Printf("\n── After Turn 2: trajectory has %d steps (was %d after Turn 1) ──\n", len(stepsT2), len(stepsT1))
|
||||||
|
for i, s := range stepsT2 {
|
||||||
|
txt := s.ResponseText
|
||||||
|
if len(txt) > 80 {
|
||||||
|
txt = txt[:80] + "..."
|
||||||
|
}
|
||||||
|
fmt.Printf(" step[%d] type=%d text=%q\n", i, s.Type, txt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func containsIgnore(haystack, needle string) bool {
|
||||||
|
return strings.Contains(strings.ToLower(haystack), strings.ToLower(needle))
|
||||||
|
}
|
||||||
|
|
||||||
|
func truncate(s string, n int) string {
|
||||||
|
if len(s) <= n {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
return s[:n] + "..."
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = strings.HasPrefix
|
||||||
359
backend/ent/channelmonitor.go
Normal file
359
backend/ent/channelmonitor.go
Normal file
@ -0,0 +1,359 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitor is the model entity for the ChannelMonitor schema.
|
||||||
|
type ChannelMonitor struct {
|
||||||
|
config `json:"-"`
|
||||||
|
// ID of the ent.
|
||||||
|
ID int64 `json:"id,omitempty"`
|
||||||
|
// CreatedAt holds the value of the "created_at" field.
|
||||||
|
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||||
|
// UpdatedAt holds the value of the "updated_at" field.
|
||||||
|
UpdatedAt time.Time `json:"updated_at,omitempty"`
|
||||||
|
// Name holds the value of the "name" field.
|
||||||
|
Name string `json:"name,omitempty"`
|
||||||
|
// Provider holds the value of the "provider" field.
|
||||||
|
Provider channelmonitor.Provider `json:"provider,omitempty"`
|
||||||
|
// Provider base origin, e.g. https://api.openai.com
|
||||||
|
Endpoint string `json:"endpoint,omitempty"`
|
||||||
|
// AES-256-GCM encrypted API key
|
||||||
|
APIKeyEncrypted string `json:"-"`
|
||||||
|
// PrimaryModel holds the value of the "primary_model" field.
|
||||||
|
PrimaryModel string `json:"primary_model,omitempty"`
|
||||||
|
// Additional model names to test alongside primary_model
|
||||||
|
ExtraModels []string `json:"extra_models,omitempty"`
|
||||||
|
// GroupName holds the value of the "group_name" field.
|
||||||
|
GroupName string `json:"group_name,omitempty"`
|
||||||
|
// Enabled holds the value of the "enabled" field.
|
||||||
|
Enabled bool `json:"enabled,omitempty"`
|
||||||
|
// IntervalSeconds holds the value of the "interval_seconds" field.
|
||||||
|
IntervalSeconds int `json:"interval_seconds,omitempty"`
|
||||||
|
// LastCheckedAt holds the value of the "last_checked_at" field.
|
||||||
|
LastCheckedAt *time.Time `json:"last_checked_at,omitempty"`
|
||||||
|
// CreatedBy holds the value of the "created_by" field.
|
||||||
|
CreatedBy int64 `json:"created_by,omitempty"`
|
||||||
|
// TemplateID holds the value of the "template_id" field.
|
||||||
|
TemplateID *int64 `json:"template_id,omitempty"`
|
||||||
|
// ExtraHeaders holds the value of the "extra_headers" field.
|
||||||
|
ExtraHeaders map[string]string `json:"extra_headers,omitempty"`
|
||||||
|
// BodyOverrideMode holds the value of the "body_override_mode" field.
|
||||||
|
BodyOverrideMode string `json:"body_override_mode,omitempty"`
|
||||||
|
// BodyOverride holds the value of the "body_override" field.
|
||||||
|
BodyOverride map[string]interface{} `json:"body_override,omitempty"`
|
||||||
|
// Edges holds the relations/edges for other nodes in the graph.
|
||||||
|
// The values are being populated by the ChannelMonitorQuery when eager-loading is set.
|
||||||
|
Edges ChannelMonitorEdges `json:"edges"`
|
||||||
|
selectValues sql.SelectValues
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorEdges holds the relations/edges for other nodes in the graph.
|
||||||
|
type ChannelMonitorEdges struct {
|
||||||
|
// History holds the value of the history edge.
|
||||||
|
History []*ChannelMonitorHistory `json:"history,omitempty"`
|
||||||
|
// DailyRollups holds the value of the daily_rollups edge.
|
||||||
|
DailyRollups []*ChannelMonitorDailyRollup `json:"daily_rollups,omitempty"`
|
||||||
|
// RequestTemplate holds the value of the request_template edge.
|
||||||
|
RequestTemplate *ChannelMonitorRequestTemplate `json:"request_template,omitempty"`
|
||||||
|
// loadedTypes holds the information for reporting if a
|
||||||
|
// type was loaded (or requested) in eager-loading or not.
|
||||||
|
loadedTypes [3]bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// HistoryOrErr returns the History value or an error if the edge
|
||||||
|
// was not loaded in eager-loading.
|
||||||
|
func (e ChannelMonitorEdges) HistoryOrErr() ([]*ChannelMonitorHistory, error) {
|
||||||
|
if e.loadedTypes[0] {
|
||||||
|
return e.History, nil
|
||||||
|
}
|
||||||
|
return nil, &NotLoadedError{edge: "history"}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DailyRollupsOrErr returns the DailyRollups value or an error if the edge
|
||||||
|
// was not loaded in eager-loading.
|
||||||
|
func (e ChannelMonitorEdges) DailyRollupsOrErr() ([]*ChannelMonitorDailyRollup, error) {
|
||||||
|
if e.loadedTypes[1] {
|
||||||
|
return e.DailyRollups, nil
|
||||||
|
}
|
||||||
|
return nil, &NotLoadedError{edge: "daily_rollups"}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RequestTemplateOrErr returns the RequestTemplate value or an error if the edge
|
||||||
|
// was not loaded in eager-loading, or loaded but was not found.
|
||||||
|
func (e ChannelMonitorEdges) RequestTemplateOrErr() (*ChannelMonitorRequestTemplate, error) {
|
||||||
|
if e.RequestTemplate != nil {
|
||||||
|
return e.RequestTemplate, nil
|
||||||
|
} else if e.loadedTypes[2] {
|
||||||
|
return nil, &NotFoundError{label: channelmonitorrequesttemplate.Label}
|
||||||
|
}
|
||||||
|
return nil, &NotLoadedError{edge: "request_template"}
|
||||||
|
}
|
||||||
|
|
||||||
|
// scanValues returns the types for scanning values from sql.Rows.
|
||||||
|
func (*ChannelMonitor) scanValues(columns []string) ([]any, error) {
|
||||||
|
values := make([]any, len(columns))
|
||||||
|
for i := range columns {
|
||||||
|
switch columns[i] {
|
||||||
|
case channelmonitor.FieldExtraModels, channelmonitor.FieldExtraHeaders, channelmonitor.FieldBodyOverride:
|
||||||
|
values[i] = new([]byte)
|
||||||
|
case channelmonitor.FieldEnabled:
|
||||||
|
values[i] = new(sql.NullBool)
|
||||||
|
case channelmonitor.FieldID, channelmonitor.FieldIntervalSeconds, channelmonitor.FieldCreatedBy, channelmonitor.FieldTemplateID:
|
||||||
|
values[i] = new(sql.NullInt64)
|
||||||
|
case channelmonitor.FieldName, channelmonitor.FieldProvider, channelmonitor.FieldEndpoint, channelmonitor.FieldAPIKeyEncrypted, channelmonitor.FieldPrimaryModel, channelmonitor.FieldGroupName, channelmonitor.FieldBodyOverrideMode:
|
||||||
|
values[i] = new(sql.NullString)
|
||||||
|
case channelmonitor.FieldCreatedAt, channelmonitor.FieldUpdatedAt, channelmonitor.FieldLastCheckedAt:
|
||||||
|
values[i] = new(sql.NullTime)
|
||||||
|
default:
|
||||||
|
values[i] = new(sql.UnknownType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignValues assigns the values that were returned from sql.Rows (after scanning)
|
||||||
|
// to the ChannelMonitor fields.
|
||||||
|
func (_m *ChannelMonitor) assignValues(columns []string, values []any) error {
|
||||||
|
if m, n := len(values), len(columns); m < n {
|
||||||
|
return fmt.Errorf("mismatch number of scan values: %d != %d", m, n)
|
||||||
|
}
|
||||||
|
for i := range columns {
|
||||||
|
switch columns[i] {
|
||||||
|
case channelmonitor.FieldID:
|
||||||
|
value, ok := values[i].(*sql.NullInt64)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field id", value)
|
||||||
|
}
|
||||||
|
_m.ID = int64(value.Int64)
|
||||||
|
case channelmonitor.FieldCreatedAt:
|
||||||
|
if value, ok := values[i].(*sql.NullTime); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field created_at", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.CreatedAt = value.Time
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldUpdatedAt:
|
||||||
|
if value, ok := values[i].(*sql.NullTime); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field updated_at", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.UpdatedAt = value.Time
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldName:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field name", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Name = value.String
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldProvider:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field provider", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Provider = channelmonitor.Provider(value.String)
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldEndpoint:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field endpoint", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Endpoint = value.String
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldAPIKeyEncrypted:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field api_key_encrypted", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.APIKeyEncrypted = value.String
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldPrimaryModel:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field primary_model", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.PrimaryModel = value.String
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldExtraModels:
|
||||||
|
if value, ok := values[i].(*[]byte); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field extra_models", values[i])
|
||||||
|
} else if value != nil && len(*value) > 0 {
|
||||||
|
if err := json.Unmarshal(*value, &_m.ExtraModels); err != nil {
|
||||||
|
return fmt.Errorf("unmarshal field extra_models: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldGroupName:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field group_name", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.GroupName = value.String
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldEnabled:
|
||||||
|
if value, ok := values[i].(*sql.NullBool); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field enabled", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Enabled = value.Bool
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldIntervalSeconds:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field interval_seconds", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.IntervalSeconds = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldLastCheckedAt:
|
||||||
|
if value, ok := values[i].(*sql.NullTime); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field last_checked_at", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.LastCheckedAt = new(time.Time)
|
||||||
|
*_m.LastCheckedAt = value.Time
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldCreatedBy:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field created_by", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.CreatedBy = value.Int64
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldTemplateID:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field template_id", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.TemplateID = new(int64)
|
||||||
|
*_m.TemplateID = value.Int64
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldExtraHeaders:
|
||||||
|
if value, ok := values[i].(*[]byte); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field extra_headers", values[i])
|
||||||
|
} else if value != nil && len(*value) > 0 {
|
||||||
|
if err := json.Unmarshal(*value, &_m.ExtraHeaders); err != nil {
|
||||||
|
return fmt.Errorf("unmarshal field extra_headers: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldBodyOverrideMode:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field body_override_mode", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.BodyOverrideMode = value.String
|
||||||
|
}
|
||||||
|
case channelmonitor.FieldBodyOverride:
|
||||||
|
if value, ok := values[i].(*[]byte); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field body_override", values[i])
|
||||||
|
} else if value != nil && len(*value) > 0 {
|
||||||
|
if err := json.Unmarshal(*value, &_m.BodyOverride); err != nil {
|
||||||
|
return fmt.Errorf("unmarshal field body_override: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
_m.selectValues.Set(columns[i], values[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value returns the ent.Value that was dynamically selected and assigned to the ChannelMonitor.
|
||||||
|
// This includes values selected through modifiers, order, etc.
|
||||||
|
func (_m *ChannelMonitor) Value(name string) (ent.Value, error) {
|
||||||
|
return _m.selectValues.Get(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryHistory queries the "history" edge of the ChannelMonitor entity.
|
||||||
|
func (_m *ChannelMonitor) QueryHistory() *ChannelMonitorHistoryQuery {
|
||||||
|
return NewChannelMonitorClient(_m.config).QueryHistory(_m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryDailyRollups queries the "daily_rollups" edge of the ChannelMonitor entity.
|
||||||
|
func (_m *ChannelMonitor) QueryDailyRollups() *ChannelMonitorDailyRollupQuery {
|
||||||
|
return NewChannelMonitorClient(_m.config).QueryDailyRollups(_m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryRequestTemplate queries the "request_template" edge of the ChannelMonitor entity.
|
||||||
|
func (_m *ChannelMonitor) QueryRequestTemplate() *ChannelMonitorRequestTemplateQuery {
|
||||||
|
return NewChannelMonitorClient(_m.config).QueryRequestTemplate(_m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update returns a builder for updating this ChannelMonitor.
|
||||||
|
// Note that you need to call ChannelMonitor.Unwrap() before calling this method if this ChannelMonitor
|
||||||
|
// was returned from a transaction, and the transaction was committed or rolled back.
|
||||||
|
func (_m *ChannelMonitor) Update() *ChannelMonitorUpdateOne {
|
||||||
|
return NewChannelMonitorClient(_m.config).UpdateOne(_m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unwrap unwraps the ChannelMonitor entity that was returned from a transaction after it was closed,
|
||||||
|
// so that all future queries will be executed through the driver which created the transaction.
|
||||||
|
func (_m *ChannelMonitor) Unwrap() *ChannelMonitor {
|
||||||
|
_tx, ok := _m.config.driver.(*txDriver)
|
||||||
|
if !ok {
|
||||||
|
panic("ent: ChannelMonitor is not a transactional entity")
|
||||||
|
}
|
||||||
|
_m.config.driver = _tx.drv
|
||||||
|
return _m
|
||||||
|
}
|
||||||
|
|
||||||
|
// String implements the fmt.Stringer.
|
||||||
|
func (_m *ChannelMonitor) String() string {
|
||||||
|
var builder strings.Builder
|
||||||
|
builder.WriteString("ChannelMonitor(")
|
||||||
|
builder.WriteString(fmt.Sprintf("id=%v, ", _m.ID))
|
||||||
|
builder.WriteString("created_at=")
|
||||||
|
builder.WriteString(_m.CreatedAt.Format(time.ANSIC))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("updated_at=")
|
||||||
|
builder.WriteString(_m.UpdatedAt.Format(time.ANSIC))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("name=")
|
||||||
|
builder.WriteString(_m.Name)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("provider=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.Provider))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("endpoint=")
|
||||||
|
builder.WriteString(_m.Endpoint)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("api_key_encrypted=<sensitive>")
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("primary_model=")
|
||||||
|
builder.WriteString(_m.PrimaryModel)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("extra_models=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.ExtraModels))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("group_name=")
|
||||||
|
builder.WriteString(_m.GroupName)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("enabled=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.Enabled))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("interval_seconds=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.IntervalSeconds))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
if v := _m.LastCheckedAt; v != nil {
|
||||||
|
builder.WriteString("last_checked_at=")
|
||||||
|
builder.WriteString(v.Format(time.ANSIC))
|
||||||
|
}
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("created_by=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.CreatedBy))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
if v := _m.TemplateID; v != nil {
|
||||||
|
builder.WriteString("template_id=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", *v))
|
||||||
|
}
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("extra_headers=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.ExtraHeaders))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("body_override_mode=")
|
||||||
|
builder.WriteString(_m.BodyOverrideMode)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("body_override=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.BodyOverride))
|
||||||
|
builder.WriteByte(')')
|
||||||
|
return builder.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitors is a parsable slice of ChannelMonitor.
|
||||||
|
type ChannelMonitors []*ChannelMonitor
|
||||||
304
backend/ent/channelmonitor/channelmonitor.go
Normal file
304
backend/ent/channelmonitor/channelmonitor.go
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package channelmonitor
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Label holds the string label denoting the channelmonitor type in the database.
|
||||||
|
Label = "channel_monitor"
|
||||||
|
// FieldID holds the string denoting the id field in the database.
|
||||||
|
FieldID = "id"
|
||||||
|
// FieldCreatedAt holds the string denoting the created_at field in the database.
|
||||||
|
FieldCreatedAt = "created_at"
|
||||||
|
// FieldUpdatedAt holds the string denoting the updated_at field in the database.
|
||||||
|
FieldUpdatedAt = "updated_at"
|
||||||
|
// FieldName holds the string denoting the name field in the database.
|
||||||
|
FieldName = "name"
|
||||||
|
// FieldProvider holds the string denoting the provider field in the database.
|
||||||
|
FieldProvider = "provider"
|
||||||
|
// FieldEndpoint holds the string denoting the endpoint field in the database.
|
||||||
|
FieldEndpoint = "endpoint"
|
||||||
|
// FieldAPIKeyEncrypted holds the string denoting the api_key_encrypted field in the database.
|
||||||
|
FieldAPIKeyEncrypted = "api_key_encrypted"
|
||||||
|
// FieldPrimaryModel holds the string denoting the primary_model field in the database.
|
||||||
|
FieldPrimaryModel = "primary_model"
|
||||||
|
// FieldExtraModels holds the string denoting the extra_models field in the database.
|
||||||
|
FieldExtraModels = "extra_models"
|
||||||
|
// FieldGroupName holds the string denoting the group_name field in the database.
|
||||||
|
FieldGroupName = "group_name"
|
||||||
|
// FieldEnabled holds the string denoting the enabled field in the database.
|
||||||
|
FieldEnabled = "enabled"
|
||||||
|
// FieldIntervalSeconds holds the string denoting the interval_seconds field in the database.
|
||||||
|
FieldIntervalSeconds = "interval_seconds"
|
||||||
|
// FieldLastCheckedAt holds the string denoting the last_checked_at field in the database.
|
||||||
|
FieldLastCheckedAt = "last_checked_at"
|
||||||
|
// FieldCreatedBy holds the string denoting the created_by field in the database.
|
||||||
|
FieldCreatedBy = "created_by"
|
||||||
|
// FieldTemplateID holds the string denoting the template_id field in the database.
|
||||||
|
FieldTemplateID = "template_id"
|
||||||
|
// FieldExtraHeaders holds the string denoting the extra_headers field in the database.
|
||||||
|
FieldExtraHeaders = "extra_headers"
|
||||||
|
// FieldBodyOverrideMode holds the string denoting the body_override_mode field in the database.
|
||||||
|
FieldBodyOverrideMode = "body_override_mode"
|
||||||
|
// FieldBodyOverride holds the string denoting the body_override field in the database.
|
||||||
|
FieldBodyOverride = "body_override"
|
||||||
|
// EdgeHistory holds the string denoting the history edge name in mutations.
|
||||||
|
EdgeHistory = "history"
|
||||||
|
// EdgeDailyRollups holds the string denoting the daily_rollups edge name in mutations.
|
||||||
|
EdgeDailyRollups = "daily_rollups"
|
||||||
|
// EdgeRequestTemplate holds the string denoting the request_template edge name in mutations.
|
||||||
|
EdgeRequestTemplate = "request_template"
|
||||||
|
// Table holds the table name of the channelmonitor in the database.
|
||||||
|
Table = "channel_monitors"
|
||||||
|
// HistoryTable is the table that holds the history relation/edge.
|
||||||
|
HistoryTable = "channel_monitor_histories"
|
||||||
|
// HistoryInverseTable is the table name for the ChannelMonitorHistory entity.
|
||||||
|
// It exists in this package in order to avoid circular dependency with the "channelmonitorhistory" package.
|
||||||
|
HistoryInverseTable = "channel_monitor_histories"
|
||||||
|
// HistoryColumn is the table column denoting the history relation/edge.
|
||||||
|
HistoryColumn = "monitor_id"
|
||||||
|
// DailyRollupsTable is the table that holds the daily_rollups relation/edge.
|
||||||
|
DailyRollupsTable = "channel_monitor_daily_rollups"
|
||||||
|
// DailyRollupsInverseTable is the table name for the ChannelMonitorDailyRollup entity.
|
||||||
|
// It exists in this package in order to avoid circular dependency with the "channelmonitordailyrollup" package.
|
||||||
|
DailyRollupsInverseTable = "channel_monitor_daily_rollups"
|
||||||
|
// DailyRollupsColumn is the table column denoting the daily_rollups relation/edge.
|
||||||
|
DailyRollupsColumn = "monitor_id"
|
||||||
|
// RequestTemplateTable is the table that holds the request_template relation/edge.
|
||||||
|
RequestTemplateTable = "channel_monitors"
|
||||||
|
// RequestTemplateInverseTable is the table name for the ChannelMonitorRequestTemplate entity.
|
||||||
|
// It exists in this package in order to avoid circular dependency with the "channelmonitorrequesttemplate" package.
|
||||||
|
RequestTemplateInverseTable = "channel_monitor_request_templates"
|
||||||
|
// RequestTemplateColumn is the table column denoting the request_template relation/edge.
|
||||||
|
RequestTemplateColumn = "template_id"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Columns holds all SQL columns for channelmonitor fields.
|
||||||
|
var Columns = []string{
|
||||||
|
FieldID,
|
||||||
|
FieldCreatedAt,
|
||||||
|
FieldUpdatedAt,
|
||||||
|
FieldName,
|
||||||
|
FieldProvider,
|
||||||
|
FieldEndpoint,
|
||||||
|
FieldAPIKeyEncrypted,
|
||||||
|
FieldPrimaryModel,
|
||||||
|
FieldExtraModels,
|
||||||
|
FieldGroupName,
|
||||||
|
FieldEnabled,
|
||||||
|
FieldIntervalSeconds,
|
||||||
|
FieldLastCheckedAt,
|
||||||
|
FieldCreatedBy,
|
||||||
|
FieldTemplateID,
|
||||||
|
FieldExtraHeaders,
|
||||||
|
FieldBodyOverrideMode,
|
||||||
|
FieldBodyOverride,
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidColumn reports if the column name is valid (part of the table columns).
|
||||||
|
func ValidColumn(column string) bool {
|
||||||
|
for i := range Columns {
|
||||||
|
if column == Columns[i] {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// DefaultCreatedAt holds the default value on creation for the "created_at" field.
|
||||||
|
DefaultCreatedAt func() time.Time
|
||||||
|
// DefaultUpdatedAt holds the default value on creation for the "updated_at" field.
|
||||||
|
DefaultUpdatedAt func() time.Time
|
||||||
|
// UpdateDefaultUpdatedAt holds the default value on update for the "updated_at" field.
|
||||||
|
UpdateDefaultUpdatedAt func() time.Time
|
||||||
|
// NameValidator is a validator for the "name" field. It is called by the builders before save.
|
||||||
|
NameValidator func(string) error
|
||||||
|
// EndpointValidator is a validator for the "endpoint" field. It is called by the builders before save.
|
||||||
|
EndpointValidator func(string) error
|
||||||
|
// APIKeyEncryptedValidator is a validator for the "api_key_encrypted" field. It is called by the builders before save.
|
||||||
|
APIKeyEncryptedValidator func(string) error
|
||||||
|
// PrimaryModelValidator is a validator for the "primary_model" field. It is called by the builders before save.
|
||||||
|
PrimaryModelValidator func(string) error
|
||||||
|
// DefaultExtraModels holds the default value on creation for the "extra_models" field.
|
||||||
|
DefaultExtraModels []string
|
||||||
|
// DefaultGroupName holds the default value on creation for the "group_name" field.
|
||||||
|
DefaultGroupName string
|
||||||
|
// GroupNameValidator is a validator for the "group_name" field. It is called by the builders before save.
|
||||||
|
GroupNameValidator func(string) error
|
||||||
|
// DefaultEnabled holds the default value on creation for the "enabled" field.
|
||||||
|
DefaultEnabled bool
|
||||||
|
// IntervalSecondsValidator is a validator for the "interval_seconds" field. It is called by the builders before save.
|
||||||
|
IntervalSecondsValidator func(int) error
|
||||||
|
// DefaultExtraHeaders holds the default value on creation for the "extra_headers" field.
|
||||||
|
DefaultExtraHeaders map[string]string
|
||||||
|
// DefaultBodyOverrideMode holds the default value on creation for the "body_override_mode" field.
|
||||||
|
DefaultBodyOverrideMode string
|
||||||
|
// BodyOverrideModeValidator is a validator for the "body_override_mode" field. It is called by the builders before save.
|
||||||
|
BodyOverrideModeValidator func(string) error
|
||||||
|
)
|
||||||
|
|
||||||
|
// Provider defines the type for the "provider" enum field.
|
||||||
|
type Provider string
|
||||||
|
|
||||||
|
// Provider values.
|
||||||
|
const (
|
||||||
|
ProviderOpenai Provider = "openai"
|
||||||
|
ProviderAnthropic Provider = "anthropic"
|
||||||
|
ProviderGemini Provider = "gemini"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (pr Provider) String() string {
|
||||||
|
return string(pr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProviderValidator is a validator for the "provider" field enum values. It is called by the builders before save.
|
||||||
|
func ProviderValidator(pr Provider) error {
|
||||||
|
switch pr {
|
||||||
|
case ProviderOpenai, ProviderAnthropic, ProviderGemini:
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("channelmonitor: invalid enum value for provider field: %q", pr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OrderOption defines the ordering options for the ChannelMonitor queries.
|
||||||
|
type OrderOption func(*sql.Selector)
|
||||||
|
|
||||||
|
// ByID orders the results by the id field.
|
||||||
|
func ByID(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldID, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByCreatedAt orders the results by the created_at field.
|
||||||
|
func ByCreatedAt(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldCreatedAt, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByUpdatedAt orders the results by the updated_at field.
|
||||||
|
func ByUpdatedAt(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldUpdatedAt, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByName orders the results by the name field.
|
||||||
|
func ByName(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldName, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByProvider orders the results by the provider field.
|
||||||
|
func ByProvider(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldProvider, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByEndpoint orders the results by the endpoint field.
|
||||||
|
func ByEndpoint(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldEndpoint, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByAPIKeyEncrypted orders the results by the api_key_encrypted field.
|
||||||
|
func ByAPIKeyEncrypted(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldAPIKeyEncrypted, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByPrimaryModel orders the results by the primary_model field.
|
||||||
|
func ByPrimaryModel(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldPrimaryModel, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByGroupName orders the results by the group_name field.
|
||||||
|
func ByGroupName(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldGroupName, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByEnabled orders the results by the enabled field.
|
||||||
|
func ByEnabled(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldEnabled, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByIntervalSeconds orders the results by the interval_seconds field.
|
||||||
|
func ByIntervalSeconds(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldIntervalSeconds, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByLastCheckedAt orders the results by the last_checked_at field.
|
||||||
|
func ByLastCheckedAt(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldLastCheckedAt, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByCreatedBy orders the results by the created_by field.
|
||||||
|
func ByCreatedBy(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldCreatedBy, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByTemplateID orders the results by the template_id field.
|
||||||
|
func ByTemplateID(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldTemplateID, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByBodyOverrideMode orders the results by the body_override_mode field.
|
||||||
|
func ByBodyOverrideMode(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldBodyOverrideMode, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByHistoryCount orders the results by history count.
|
||||||
|
func ByHistoryCount(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return func(s *sql.Selector) {
|
||||||
|
sqlgraph.OrderByNeighborsCount(s, newHistoryStep(), opts...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByHistory orders the results by history terms.
|
||||||
|
func ByHistory(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption {
|
||||||
|
return func(s *sql.Selector) {
|
||||||
|
sqlgraph.OrderByNeighborTerms(s, newHistoryStep(), append([]sql.OrderTerm{term}, terms...)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByDailyRollupsCount orders the results by daily_rollups count.
|
||||||
|
func ByDailyRollupsCount(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return func(s *sql.Selector) {
|
||||||
|
sqlgraph.OrderByNeighborsCount(s, newDailyRollupsStep(), opts...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByDailyRollups orders the results by daily_rollups terms.
|
||||||
|
func ByDailyRollups(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption {
|
||||||
|
return func(s *sql.Selector) {
|
||||||
|
sqlgraph.OrderByNeighborTerms(s, newDailyRollupsStep(), append([]sql.OrderTerm{term}, terms...)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByRequestTemplateField orders the results by request_template field.
|
||||||
|
func ByRequestTemplateField(field string, opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return func(s *sql.Selector) {
|
||||||
|
sqlgraph.OrderByNeighborTerms(s, newRequestTemplateStep(), sql.OrderByField(field, opts...))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func newHistoryStep() *sqlgraph.Step {
|
||||||
|
return sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.To(HistoryInverseTable, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, false, HistoryTable, HistoryColumn),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
func newDailyRollupsStep() *sqlgraph.Step {
|
||||||
|
return sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.To(DailyRollupsInverseTable, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, false, DailyRollupsTable, DailyRollupsColumn),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
func newRequestTemplateStep() *sqlgraph.Step {
|
||||||
|
return sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.To(RequestTemplateInverseTable, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, false, RequestTemplateTable, RequestTemplateColumn),
|
||||||
|
)
|
||||||
|
}
|
||||||
885
backend/ent/channelmonitor/where.go
Normal file
885
backend/ent/channelmonitor/where.go
Normal file
@ -0,0 +1,885 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package channelmonitor
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ID filters vertices based on their ID field.
|
||||||
|
func ID(id int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDEQ applies the EQ predicate on the ID field.
|
||||||
|
func IDEQ(id int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDNEQ applies the NEQ predicate on the ID field.
|
||||||
|
func IDNEQ(id int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDIn applies the In predicate on the ID field.
|
||||||
|
func IDIn(ids ...int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldID, ids...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDNotIn applies the NotIn predicate on the ID field.
|
||||||
|
func IDNotIn(ids ...int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldID, ids...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDGT applies the GT predicate on the ID field.
|
||||||
|
func IDGT(id int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDGTE applies the GTE predicate on the ID field.
|
||||||
|
func IDGTE(id int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDLT applies the LT predicate on the ID field.
|
||||||
|
func IDLT(id int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDLTE applies the LTE predicate on the ID field.
|
||||||
|
func IDLTE(id int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAt applies equality check predicate on the "created_at" field. It's identical to CreatedAtEQ.
|
||||||
|
func CreatedAt(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAt applies equality check predicate on the "updated_at" field. It's identical to UpdatedAtEQ.
|
||||||
|
func UpdatedAt(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Name applies equality check predicate on the "name" field. It's identical to NameEQ.
|
||||||
|
func Name(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Endpoint applies equality check predicate on the "endpoint" field. It's identical to EndpointEQ.
|
||||||
|
func Endpoint(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncrypted applies equality check predicate on the "api_key_encrypted" field. It's identical to APIKeyEncryptedEQ.
|
||||||
|
func APIKeyEncrypted(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModel applies equality check predicate on the "primary_model" field. It's identical to PrimaryModelEQ.
|
||||||
|
func PrimaryModel(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupName applies equality check predicate on the "group_name" field. It's identical to GroupNameEQ.
|
||||||
|
func GroupName(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enabled applies equality check predicate on the "enabled" field. It's identical to EnabledEQ.
|
||||||
|
func Enabled(v bool) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldEnabled, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntervalSeconds applies equality check predicate on the "interval_seconds" field. It's identical to IntervalSecondsEQ.
|
||||||
|
func IntervalSeconds(v int) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldIntervalSeconds, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAt applies equality check predicate on the "last_checked_at" field. It's identical to LastCheckedAtEQ.
|
||||||
|
func LastCheckedAt(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldLastCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedBy applies equality check predicate on the "created_by" field. It's identical to CreatedByEQ.
|
||||||
|
func CreatedBy(v int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldCreatedBy, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TemplateID applies equality check predicate on the "template_id" field. It's identical to TemplateIDEQ.
|
||||||
|
func TemplateID(v int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldTemplateID, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideMode applies equality check predicate on the "body_override_mode" field. It's identical to BodyOverrideModeEQ.
|
||||||
|
func BodyOverrideMode(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtEQ applies the EQ predicate on the "created_at" field.
|
||||||
|
func CreatedAtEQ(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtNEQ applies the NEQ predicate on the "created_at" field.
|
||||||
|
func CreatedAtNEQ(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtIn applies the In predicate on the "created_at" field.
|
||||||
|
func CreatedAtIn(vs ...time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldCreatedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtNotIn applies the NotIn predicate on the "created_at" field.
|
||||||
|
func CreatedAtNotIn(vs ...time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldCreatedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtGT applies the GT predicate on the "created_at" field.
|
||||||
|
func CreatedAtGT(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtGTE applies the GTE predicate on the "created_at" field.
|
||||||
|
func CreatedAtGTE(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtLT applies the LT predicate on the "created_at" field.
|
||||||
|
func CreatedAtLT(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtLTE applies the LTE predicate on the "created_at" field.
|
||||||
|
func CreatedAtLTE(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtEQ applies the EQ predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtEQ(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtNEQ applies the NEQ predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtNEQ(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtIn applies the In predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtIn(vs ...time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldUpdatedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtNotIn applies the NotIn predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtNotIn(vs ...time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldUpdatedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtGT applies the GT predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtGT(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtGTE applies the GTE predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtGTE(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtLT applies the LT predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtLT(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtLTE applies the LTE predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtLTE(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameEQ applies the EQ predicate on the "name" field.
|
||||||
|
func NameEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameNEQ applies the NEQ predicate on the "name" field.
|
||||||
|
func NameNEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameIn applies the In predicate on the "name" field.
|
||||||
|
func NameIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldName, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameNotIn applies the NotIn predicate on the "name" field.
|
||||||
|
func NameNotIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldName, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameGT applies the GT predicate on the "name" field.
|
||||||
|
func NameGT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameGTE applies the GTE predicate on the "name" field.
|
||||||
|
func NameGTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameLT applies the LT predicate on the "name" field.
|
||||||
|
func NameLT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameLTE applies the LTE predicate on the "name" field.
|
||||||
|
func NameLTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameContains applies the Contains predicate on the "name" field.
|
||||||
|
func NameContains(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContains(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameHasPrefix applies the HasPrefix predicate on the "name" field.
|
||||||
|
func NameHasPrefix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasPrefix(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameHasSuffix applies the HasSuffix predicate on the "name" field.
|
||||||
|
func NameHasSuffix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasSuffix(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameEqualFold applies the EqualFold predicate on the "name" field.
|
||||||
|
func NameEqualFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEqualFold(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameContainsFold applies the ContainsFold predicate on the "name" field.
|
||||||
|
func NameContainsFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContainsFold(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProviderEQ applies the EQ predicate on the "provider" field.
|
||||||
|
func ProviderEQ(v Provider) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldProvider, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProviderNEQ applies the NEQ predicate on the "provider" field.
|
||||||
|
func ProviderNEQ(v Provider) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldProvider, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProviderIn applies the In predicate on the "provider" field.
|
||||||
|
func ProviderIn(vs ...Provider) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldProvider, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProviderNotIn applies the NotIn predicate on the "provider" field.
|
||||||
|
func ProviderNotIn(vs ...Provider) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldProvider, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointEQ applies the EQ predicate on the "endpoint" field.
|
||||||
|
func EndpointEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointNEQ applies the NEQ predicate on the "endpoint" field.
|
||||||
|
func EndpointNEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointIn applies the In predicate on the "endpoint" field.
|
||||||
|
func EndpointIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldEndpoint, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointNotIn applies the NotIn predicate on the "endpoint" field.
|
||||||
|
func EndpointNotIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldEndpoint, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointGT applies the GT predicate on the "endpoint" field.
|
||||||
|
func EndpointGT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointGTE applies the GTE predicate on the "endpoint" field.
|
||||||
|
func EndpointGTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointLT applies the LT predicate on the "endpoint" field.
|
||||||
|
func EndpointLT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointLTE applies the LTE predicate on the "endpoint" field.
|
||||||
|
func EndpointLTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointContains applies the Contains predicate on the "endpoint" field.
|
||||||
|
func EndpointContains(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContains(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointHasPrefix applies the HasPrefix predicate on the "endpoint" field.
|
||||||
|
func EndpointHasPrefix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasPrefix(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointHasSuffix applies the HasSuffix predicate on the "endpoint" field.
|
||||||
|
func EndpointHasSuffix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasSuffix(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointEqualFold applies the EqualFold predicate on the "endpoint" field.
|
||||||
|
func EndpointEqualFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEqualFold(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndpointContainsFold applies the ContainsFold predicate on the "endpoint" field.
|
||||||
|
func EndpointContainsFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContainsFold(FieldEndpoint, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedEQ applies the EQ predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedNEQ applies the NEQ predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedNEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedIn applies the In predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldAPIKeyEncrypted, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedNotIn applies the NotIn predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedNotIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldAPIKeyEncrypted, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedGT applies the GT predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedGT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedGTE applies the GTE predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedGTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedLT applies the LT predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedLT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedLTE applies the LTE predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedLTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedContains applies the Contains predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedContains(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContains(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedHasPrefix applies the HasPrefix predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedHasPrefix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasPrefix(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedHasSuffix applies the HasSuffix predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedHasSuffix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasSuffix(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedEqualFold applies the EqualFold predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedEqualFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEqualFold(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// APIKeyEncryptedContainsFold applies the ContainsFold predicate on the "api_key_encrypted" field.
|
||||||
|
func APIKeyEncryptedContainsFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContainsFold(FieldAPIKeyEncrypted, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelEQ applies the EQ predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelNEQ applies the NEQ predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelNEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelIn applies the In predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldPrimaryModel, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelNotIn applies the NotIn predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelNotIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldPrimaryModel, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelGT applies the GT predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelGT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelGTE applies the GTE predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelGTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelLT applies the LT predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelLT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelLTE applies the LTE predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelLTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelContains applies the Contains predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelContains(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContains(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelHasPrefix applies the HasPrefix predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelHasPrefix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasPrefix(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelHasSuffix applies the HasSuffix predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelHasSuffix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasSuffix(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelEqualFold applies the EqualFold predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelEqualFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEqualFold(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryModelContainsFold applies the ContainsFold predicate on the "primary_model" field.
|
||||||
|
func PrimaryModelContainsFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContainsFold(FieldPrimaryModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameEQ applies the EQ predicate on the "group_name" field.
|
||||||
|
func GroupNameEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameNEQ applies the NEQ predicate on the "group_name" field.
|
||||||
|
func GroupNameNEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameIn applies the In predicate on the "group_name" field.
|
||||||
|
func GroupNameIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldGroupName, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameNotIn applies the NotIn predicate on the "group_name" field.
|
||||||
|
func GroupNameNotIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldGroupName, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameGT applies the GT predicate on the "group_name" field.
|
||||||
|
func GroupNameGT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameGTE applies the GTE predicate on the "group_name" field.
|
||||||
|
func GroupNameGTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameLT applies the LT predicate on the "group_name" field.
|
||||||
|
func GroupNameLT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameLTE applies the LTE predicate on the "group_name" field.
|
||||||
|
func GroupNameLTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameContains applies the Contains predicate on the "group_name" field.
|
||||||
|
func GroupNameContains(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContains(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameHasPrefix applies the HasPrefix predicate on the "group_name" field.
|
||||||
|
func GroupNameHasPrefix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasPrefix(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameHasSuffix applies the HasSuffix predicate on the "group_name" field.
|
||||||
|
func GroupNameHasSuffix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasSuffix(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameIsNil applies the IsNil predicate on the "group_name" field.
|
||||||
|
func GroupNameIsNil() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIsNull(FieldGroupName))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameNotNil applies the NotNil predicate on the "group_name" field.
|
||||||
|
func GroupNameNotNil() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotNull(FieldGroupName))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameEqualFold applies the EqualFold predicate on the "group_name" field.
|
||||||
|
func GroupNameEqualFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEqualFold(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupNameContainsFold applies the ContainsFold predicate on the "group_name" field.
|
||||||
|
func GroupNameContainsFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContainsFold(FieldGroupName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EnabledEQ applies the EQ predicate on the "enabled" field.
|
||||||
|
func EnabledEQ(v bool) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldEnabled, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// EnabledNEQ applies the NEQ predicate on the "enabled" field.
|
||||||
|
func EnabledNEQ(v bool) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldEnabled, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntervalSecondsEQ applies the EQ predicate on the "interval_seconds" field.
|
||||||
|
func IntervalSecondsEQ(v int) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldIntervalSeconds, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntervalSecondsNEQ applies the NEQ predicate on the "interval_seconds" field.
|
||||||
|
func IntervalSecondsNEQ(v int) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldIntervalSeconds, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntervalSecondsIn applies the In predicate on the "interval_seconds" field.
|
||||||
|
func IntervalSecondsIn(vs ...int) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldIntervalSeconds, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntervalSecondsNotIn applies the NotIn predicate on the "interval_seconds" field.
|
||||||
|
func IntervalSecondsNotIn(vs ...int) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldIntervalSeconds, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntervalSecondsGT applies the GT predicate on the "interval_seconds" field.
|
||||||
|
func IntervalSecondsGT(v int) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldIntervalSeconds, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntervalSecondsGTE applies the GTE predicate on the "interval_seconds" field.
|
||||||
|
func IntervalSecondsGTE(v int) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldIntervalSeconds, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntervalSecondsLT applies the LT predicate on the "interval_seconds" field.
|
||||||
|
func IntervalSecondsLT(v int) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldIntervalSeconds, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntervalSecondsLTE applies the LTE predicate on the "interval_seconds" field.
|
||||||
|
func IntervalSecondsLTE(v int) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldIntervalSeconds, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAtEQ applies the EQ predicate on the "last_checked_at" field.
|
||||||
|
func LastCheckedAtEQ(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldLastCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAtNEQ applies the NEQ predicate on the "last_checked_at" field.
|
||||||
|
func LastCheckedAtNEQ(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldLastCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAtIn applies the In predicate on the "last_checked_at" field.
|
||||||
|
func LastCheckedAtIn(vs ...time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldLastCheckedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAtNotIn applies the NotIn predicate on the "last_checked_at" field.
|
||||||
|
func LastCheckedAtNotIn(vs ...time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldLastCheckedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAtGT applies the GT predicate on the "last_checked_at" field.
|
||||||
|
func LastCheckedAtGT(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldLastCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAtGTE applies the GTE predicate on the "last_checked_at" field.
|
||||||
|
func LastCheckedAtGTE(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldLastCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAtLT applies the LT predicate on the "last_checked_at" field.
|
||||||
|
func LastCheckedAtLT(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldLastCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAtLTE applies the LTE predicate on the "last_checked_at" field.
|
||||||
|
func LastCheckedAtLTE(v time.Time) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldLastCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAtIsNil applies the IsNil predicate on the "last_checked_at" field.
|
||||||
|
func LastCheckedAtIsNil() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIsNull(FieldLastCheckedAt))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LastCheckedAtNotNil applies the NotNil predicate on the "last_checked_at" field.
|
||||||
|
func LastCheckedAtNotNil() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotNull(FieldLastCheckedAt))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedByEQ applies the EQ predicate on the "created_by" field.
|
||||||
|
func CreatedByEQ(v int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldCreatedBy, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedByNEQ applies the NEQ predicate on the "created_by" field.
|
||||||
|
func CreatedByNEQ(v int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldCreatedBy, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedByIn applies the In predicate on the "created_by" field.
|
||||||
|
func CreatedByIn(vs ...int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldCreatedBy, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedByNotIn applies the NotIn predicate on the "created_by" field.
|
||||||
|
func CreatedByNotIn(vs ...int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldCreatedBy, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedByGT applies the GT predicate on the "created_by" field.
|
||||||
|
func CreatedByGT(v int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldCreatedBy, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedByGTE applies the GTE predicate on the "created_by" field.
|
||||||
|
func CreatedByGTE(v int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldCreatedBy, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedByLT applies the LT predicate on the "created_by" field.
|
||||||
|
func CreatedByLT(v int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldCreatedBy, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedByLTE applies the LTE predicate on the "created_by" field.
|
||||||
|
func CreatedByLTE(v int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldCreatedBy, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TemplateIDEQ applies the EQ predicate on the "template_id" field.
|
||||||
|
func TemplateIDEQ(v int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldTemplateID, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TemplateIDNEQ applies the NEQ predicate on the "template_id" field.
|
||||||
|
func TemplateIDNEQ(v int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldTemplateID, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TemplateIDIn applies the In predicate on the "template_id" field.
|
||||||
|
func TemplateIDIn(vs ...int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldTemplateID, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TemplateIDNotIn applies the NotIn predicate on the "template_id" field.
|
||||||
|
func TemplateIDNotIn(vs ...int64) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldTemplateID, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TemplateIDIsNil applies the IsNil predicate on the "template_id" field.
|
||||||
|
func TemplateIDIsNil() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIsNull(FieldTemplateID))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TemplateIDNotNil applies the NotNil predicate on the "template_id" field.
|
||||||
|
func TemplateIDNotNil() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotNull(FieldTemplateID))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeEQ applies the EQ predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEQ(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeNEQ applies the NEQ predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeNEQ(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNEQ(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeIn applies the In predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIn(FieldBodyOverrideMode, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeNotIn applies the NotIn predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeNotIn(vs ...string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotIn(FieldBodyOverrideMode, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeGT applies the GT predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeGT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGT(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeGTE applies the GTE predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeGTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldGTE(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeLT applies the LT predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeLT(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLT(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeLTE applies the LTE predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeLTE(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldLTE(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeContains applies the Contains predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeContains(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContains(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeHasPrefix applies the HasPrefix predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeHasPrefix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasPrefix(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeHasSuffix applies the HasSuffix predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeHasSuffix(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldHasSuffix(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeEqualFold applies the EqualFold predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeEqualFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldEqualFold(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeContainsFold applies the ContainsFold predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeContainsFold(v string) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldContainsFold(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideIsNil applies the IsNil predicate on the "body_override" field.
|
||||||
|
func BodyOverrideIsNil() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldIsNull(FieldBodyOverride))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideNotNil applies the NotNil predicate on the "body_override" field.
|
||||||
|
func BodyOverrideNotNil() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.FieldNotNull(FieldBodyOverride))
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasHistory applies the HasEdge predicate on the "history" edge.
|
||||||
|
func HasHistory() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(func(s *sql.Selector) {
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, false, HistoryTable, HistoryColumn),
|
||||||
|
)
|
||||||
|
sqlgraph.HasNeighbors(s, step)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasHistoryWith applies the HasEdge predicate on the "history" edge with a given conditions (other predicates).
|
||||||
|
func HasHistoryWith(preds ...predicate.ChannelMonitorHistory) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(func(s *sql.Selector) {
|
||||||
|
step := newHistoryStep()
|
||||||
|
sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) {
|
||||||
|
for _, p := range preds {
|
||||||
|
p(s)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasDailyRollups applies the HasEdge predicate on the "daily_rollups" edge.
|
||||||
|
func HasDailyRollups() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(func(s *sql.Selector) {
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, false, DailyRollupsTable, DailyRollupsColumn),
|
||||||
|
)
|
||||||
|
sqlgraph.HasNeighbors(s, step)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasDailyRollupsWith applies the HasEdge predicate on the "daily_rollups" edge with a given conditions (other predicates).
|
||||||
|
func HasDailyRollupsWith(preds ...predicate.ChannelMonitorDailyRollup) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(func(s *sql.Selector) {
|
||||||
|
step := newDailyRollupsStep()
|
||||||
|
sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) {
|
||||||
|
for _, p := range preds {
|
||||||
|
p(s)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasRequestTemplate applies the HasEdge predicate on the "request_template" edge.
|
||||||
|
func HasRequestTemplate() predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(func(s *sql.Selector) {
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, false, RequestTemplateTable, RequestTemplateColumn),
|
||||||
|
)
|
||||||
|
sqlgraph.HasNeighbors(s, step)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasRequestTemplateWith applies the HasEdge predicate on the "request_template" edge with a given conditions (other predicates).
|
||||||
|
func HasRequestTemplateWith(preds ...predicate.ChannelMonitorRequestTemplate) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(func(s *sql.Selector) {
|
||||||
|
step := newRequestTemplateStep()
|
||||||
|
sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) {
|
||||||
|
for _, p := range preds {
|
||||||
|
p(s)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// And groups predicates with the AND operator between them.
|
||||||
|
func And(predicates ...predicate.ChannelMonitor) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.AndPredicates(predicates...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Or groups predicates with the OR operator between them.
|
||||||
|
func Or(predicates ...predicate.ChannelMonitor) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.OrPredicates(predicates...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not applies the not operator on the given predicate.
|
||||||
|
func Not(p predicate.ChannelMonitor) predicate.ChannelMonitor {
|
||||||
|
return predicate.ChannelMonitor(sql.NotPredicates(p))
|
||||||
|
}
|
||||||
1610
backend/ent/channelmonitor_create.go
Normal file
1610
backend/ent/channelmonitor_create.go
Normal file
File diff suppressed because it is too large
Load Diff
88
backend/ent/channelmonitor_delete.go
Normal file
88
backend/ent/channelmonitor_delete.go
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorDelete is the builder for deleting a ChannelMonitor entity.
|
||||||
|
type ChannelMonitorDelete struct {
|
||||||
|
config
|
||||||
|
hooks []Hook
|
||||||
|
mutation *ChannelMonitorMutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorDelete builder.
|
||||||
|
func (_d *ChannelMonitorDelete) Where(ps ...predicate.ChannelMonitor) *ChannelMonitorDelete {
|
||||||
|
_d.mutation.Where(ps...)
|
||||||
|
return _d
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the deletion query and returns how many vertices were deleted.
|
||||||
|
func (_d *ChannelMonitorDelete) Exec(ctx context.Context) (int, error) {
|
||||||
|
return withHooks(ctx, _d.sqlExec, _d.mutation, _d.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_d *ChannelMonitorDelete) ExecX(ctx context.Context) int {
|
||||||
|
n, err := _d.Exec(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_d *ChannelMonitorDelete) sqlExec(ctx context.Context) (int, error) {
|
||||||
|
_spec := sqlgraph.NewDeleteSpec(channelmonitor.Table, sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64))
|
||||||
|
if ps := _d.mutation.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
affected, err := sqlgraph.DeleteNodes(ctx, _d.driver, _spec)
|
||||||
|
if err != nil && sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
_d.mutation.done = true
|
||||||
|
return affected, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorDeleteOne is the builder for deleting a single ChannelMonitor entity.
|
||||||
|
type ChannelMonitorDeleteOne struct {
|
||||||
|
_d *ChannelMonitorDelete
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorDelete builder.
|
||||||
|
func (_d *ChannelMonitorDeleteOne) Where(ps ...predicate.ChannelMonitor) *ChannelMonitorDeleteOne {
|
||||||
|
_d._d.mutation.Where(ps...)
|
||||||
|
return _d
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the deletion query.
|
||||||
|
func (_d *ChannelMonitorDeleteOne) Exec(ctx context.Context) error {
|
||||||
|
n, err := _d._d.Exec(ctx)
|
||||||
|
switch {
|
||||||
|
case err != nil:
|
||||||
|
return err
|
||||||
|
case n == 0:
|
||||||
|
return &NotFoundError{channelmonitor.Label}
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_d *ChannelMonitorDeleteOne) ExecX(ctx context.Context) {
|
||||||
|
if err := _d.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
797
backend/ent/channelmonitor_query.go
Normal file
797
backend/ent/channelmonitor_query.go
Normal file
@ -0,0 +1,797 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"database/sql/driver"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect"
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitordailyrollup"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorhistory"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorQuery is the builder for querying ChannelMonitor entities.
|
||||||
|
type ChannelMonitorQuery struct {
|
||||||
|
config
|
||||||
|
ctx *QueryContext
|
||||||
|
order []channelmonitor.OrderOption
|
||||||
|
inters []Interceptor
|
||||||
|
predicates []predicate.ChannelMonitor
|
||||||
|
withHistory *ChannelMonitorHistoryQuery
|
||||||
|
withDailyRollups *ChannelMonitorDailyRollupQuery
|
||||||
|
withRequestTemplate *ChannelMonitorRequestTemplateQuery
|
||||||
|
modifiers []func(*sql.Selector)
|
||||||
|
// intermediate query (i.e. traversal path).
|
||||||
|
sql *sql.Selector
|
||||||
|
path func(context.Context) (*sql.Selector, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where adds a new predicate for the ChannelMonitorQuery builder.
|
||||||
|
func (_q *ChannelMonitorQuery) Where(ps ...predicate.ChannelMonitor) *ChannelMonitorQuery {
|
||||||
|
_q.predicates = append(_q.predicates, ps...)
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Limit the number of records to be returned by this query.
|
||||||
|
func (_q *ChannelMonitorQuery) Limit(limit int) *ChannelMonitorQuery {
|
||||||
|
_q.ctx.Limit = &limit
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Offset to start from.
|
||||||
|
func (_q *ChannelMonitorQuery) Offset(offset int) *ChannelMonitorQuery {
|
||||||
|
_q.ctx.Offset = &offset
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unique configures the query builder to filter duplicate records on query.
|
||||||
|
// By default, unique is set to true, and can be disabled using this method.
|
||||||
|
func (_q *ChannelMonitorQuery) Unique(unique bool) *ChannelMonitorQuery {
|
||||||
|
_q.ctx.Unique = &unique
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Order specifies how the records should be ordered.
|
||||||
|
func (_q *ChannelMonitorQuery) Order(o ...channelmonitor.OrderOption) *ChannelMonitorQuery {
|
||||||
|
_q.order = append(_q.order, o...)
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryHistory chains the current query on the "history" edge.
|
||||||
|
func (_q *ChannelMonitorQuery) QueryHistory() *ChannelMonitorHistoryQuery {
|
||||||
|
query := (&ChannelMonitorHistoryClient{config: _q.config}).Query()
|
||||||
|
query.path = func(ctx context.Context) (fromU *sql.Selector, err error) {
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
selector := _q.sqlQuery(ctx)
|
||||||
|
if err := selector.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitor.Table, channelmonitor.FieldID, selector),
|
||||||
|
sqlgraph.To(channelmonitorhistory.Table, channelmonitorhistory.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, false, channelmonitor.HistoryTable, channelmonitor.HistoryColumn),
|
||||||
|
)
|
||||||
|
fromU = sqlgraph.SetNeighbors(_q.driver.Dialect(), step)
|
||||||
|
return fromU, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryDailyRollups chains the current query on the "daily_rollups" edge.
|
||||||
|
func (_q *ChannelMonitorQuery) QueryDailyRollups() *ChannelMonitorDailyRollupQuery {
|
||||||
|
query := (&ChannelMonitorDailyRollupClient{config: _q.config}).Query()
|
||||||
|
query.path = func(ctx context.Context) (fromU *sql.Selector, err error) {
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
selector := _q.sqlQuery(ctx)
|
||||||
|
if err := selector.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitor.Table, channelmonitor.FieldID, selector),
|
||||||
|
sqlgraph.To(channelmonitordailyrollup.Table, channelmonitordailyrollup.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, false, channelmonitor.DailyRollupsTable, channelmonitor.DailyRollupsColumn),
|
||||||
|
)
|
||||||
|
fromU = sqlgraph.SetNeighbors(_q.driver.Dialect(), step)
|
||||||
|
return fromU, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryRequestTemplate chains the current query on the "request_template" edge.
|
||||||
|
func (_q *ChannelMonitorQuery) QueryRequestTemplate() *ChannelMonitorRequestTemplateQuery {
|
||||||
|
query := (&ChannelMonitorRequestTemplateClient{config: _q.config}).Query()
|
||||||
|
query.path = func(ctx context.Context) (fromU *sql.Selector, err error) {
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
selector := _q.sqlQuery(ctx)
|
||||||
|
if err := selector.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitor.Table, channelmonitor.FieldID, selector),
|
||||||
|
sqlgraph.To(channelmonitorrequesttemplate.Table, channelmonitorrequesttemplate.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, false, channelmonitor.RequestTemplateTable, channelmonitor.RequestTemplateColumn),
|
||||||
|
)
|
||||||
|
fromU = sqlgraph.SetNeighbors(_q.driver.Dialect(), step)
|
||||||
|
return fromU, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// First returns the first ChannelMonitor entity from the query.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitor was found.
|
||||||
|
func (_q *ChannelMonitorQuery) First(ctx context.Context) (*ChannelMonitor, error) {
|
||||||
|
nodes, err := _q.Limit(1).All(setContextOp(ctx, _q.ctx, ent.OpQueryFirst))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(nodes) == 0 {
|
||||||
|
return nil, &NotFoundError{channelmonitor.Label}
|
||||||
|
}
|
||||||
|
return nodes[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstX is like First, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorQuery) FirstX(ctx context.Context) *ChannelMonitor {
|
||||||
|
node, err := _q.First(ctx)
|
||||||
|
if err != nil && !IsNotFound(err) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstID returns the first ChannelMonitor ID from the query.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitor ID was found.
|
||||||
|
func (_q *ChannelMonitorQuery) FirstID(ctx context.Context) (id int64, err error) {
|
||||||
|
var ids []int64
|
||||||
|
if ids, err = _q.Limit(1).IDs(setContextOp(ctx, _q.ctx, ent.OpQueryFirstID)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(ids) == 0 {
|
||||||
|
err = &NotFoundError{channelmonitor.Label}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return ids[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstIDX is like FirstID, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorQuery) FirstIDX(ctx context.Context) int64 {
|
||||||
|
id, err := _q.FirstID(ctx)
|
||||||
|
if err != nil && !IsNotFound(err) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only returns a single ChannelMonitor entity found by the query, ensuring it only returns one.
|
||||||
|
// Returns a *NotSingularError when more than one ChannelMonitor entity is found.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitor entities are found.
|
||||||
|
func (_q *ChannelMonitorQuery) Only(ctx context.Context) (*ChannelMonitor, error) {
|
||||||
|
nodes, err := _q.Limit(2).All(setContextOp(ctx, _q.ctx, ent.OpQueryOnly))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
switch len(nodes) {
|
||||||
|
case 1:
|
||||||
|
return nodes[0], nil
|
||||||
|
case 0:
|
||||||
|
return nil, &NotFoundError{channelmonitor.Label}
|
||||||
|
default:
|
||||||
|
return nil, &NotSingularError{channelmonitor.Label}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyX is like Only, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorQuery) OnlyX(ctx context.Context) *ChannelMonitor {
|
||||||
|
node, err := _q.Only(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyID is like Only, but returns the only ChannelMonitor ID in the query.
|
||||||
|
// Returns a *NotSingularError when more than one ChannelMonitor ID is found.
|
||||||
|
// Returns a *NotFoundError when no entities are found.
|
||||||
|
func (_q *ChannelMonitorQuery) OnlyID(ctx context.Context) (id int64, err error) {
|
||||||
|
var ids []int64
|
||||||
|
if ids, err = _q.Limit(2).IDs(setContextOp(ctx, _q.ctx, ent.OpQueryOnlyID)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch len(ids) {
|
||||||
|
case 1:
|
||||||
|
id = ids[0]
|
||||||
|
case 0:
|
||||||
|
err = &NotFoundError{channelmonitor.Label}
|
||||||
|
default:
|
||||||
|
err = &NotSingularError{channelmonitor.Label}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyIDX is like OnlyID, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorQuery) OnlyIDX(ctx context.Context) int64 {
|
||||||
|
id, err := _q.OnlyID(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// All executes the query and returns a list of ChannelMonitors.
|
||||||
|
func (_q *ChannelMonitorQuery) All(ctx context.Context) ([]*ChannelMonitor, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryAll)
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
qr := querierAll[[]*ChannelMonitor, *ChannelMonitorQuery]()
|
||||||
|
return withInterceptors[[]*ChannelMonitor](ctx, _q, qr, _q.inters)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AllX is like All, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorQuery) AllX(ctx context.Context) []*ChannelMonitor {
|
||||||
|
nodes, err := _q.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return nodes
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDs executes the query and returns a list of ChannelMonitor IDs.
|
||||||
|
func (_q *ChannelMonitorQuery) IDs(ctx context.Context) (ids []int64, err error) {
|
||||||
|
if _q.ctx.Unique == nil && _q.path != nil {
|
||||||
|
_q.Unique(true)
|
||||||
|
}
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryIDs)
|
||||||
|
if err = _q.Select(channelmonitor.FieldID).Scan(ctx, &ids); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ids, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDsX is like IDs, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorQuery) IDsX(ctx context.Context) []int64 {
|
||||||
|
ids, err := _q.IDs(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return ids
|
||||||
|
}
|
||||||
|
|
||||||
|
// Count returns the count of the given query.
|
||||||
|
func (_q *ChannelMonitorQuery) Count(ctx context.Context) (int, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryCount)
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return withInterceptors[int](ctx, _q, querierCount[*ChannelMonitorQuery](), _q.inters)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountX is like Count, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorQuery) CountX(ctx context.Context) int {
|
||||||
|
count, err := _q.Count(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exist returns true if the query has elements in the graph.
|
||||||
|
func (_q *ChannelMonitorQuery) Exist(ctx context.Context) (bool, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryExist)
|
||||||
|
switch _, err := _q.FirstID(ctx); {
|
||||||
|
case IsNotFound(err):
|
||||||
|
return false, nil
|
||||||
|
case err != nil:
|
||||||
|
return false, fmt.Errorf("ent: check existence: %w", err)
|
||||||
|
default:
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExistX is like Exist, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorQuery) ExistX(ctx context.Context) bool {
|
||||||
|
exist, err := _q.Exist(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return exist
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clone returns a duplicate of the ChannelMonitorQuery builder, including all associated steps. It can be
|
||||||
|
// used to prepare common query builders and use them differently after the clone is made.
|
||||||
|
func (_q *ChannelMonitorQuery) Clone() *ChannelMonitorQuery {
|
||||||
|
if _q == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &ChannelMonitorQuery{
|
||||||
|
config: _q.config,
|
||||||
|
ctx: _q.ctx.Clone(),
|
||||||
|
order: append([]channelmonitor.OrderOption{}, _q.order...),
|
||||||
|
inters: append([]Interceptor{}, _q.inters...),
|
||||||
|
predicates: append([]predicate.ChannelMonitor{}, _q.predicates...),
|
||||||
|
withHistory: _q.withHistory.Clone(),
|
||||||
|
withDailyRollups: _q.withDailyRollups.Clone(),
|
||||||
|
withRequestTemplate: _q.withRequestTemplate.Clone(),
|
||||||
|
// clone intermediate query.
|
||||||
|
sql: _q.sql.Clone(),
|
||||||
|
path: _q.path,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithHistory tells the query-builder to eager-load the nodes that are connected to
|
||||||
|
// the "history" edge. The optional arguments are used to configure the query builder of the edge.
|
||||||
|
func (_q *ChannelMonitorQuery) WithHistory(opts ...func(*ChannelMonitorHistoryQuery)) *ChannelMonitorQuery {
|
||||||
|
query := (&ChannelMonitorHistoryClient{config: _q.config}).Query()
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(query)
|
||||||
|
}
|
||||||
|
_q.withHistory = query
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithDailyRollups tells the query-builder to eager-load the nodes that are connected to
|
||||||
|
// the "daily_rollups" edge. The optional arguments are used to configure the query builder of the edge.
|
||||||
|
func (_q *ChannelMonitorQuery) WithDailyRollups(opts ...func(*ChannelMonitorDailyRollupQuery)) *ChannelMonitorQuery {
|
||||||
|
query := (&ChannelMonitorDailyRollupClient{config: _q.config}).Query()
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(query)
|
||||||
|
}
|
||||||
|
_q.withDailyRollups = query
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithRequestTemplate tells the query-builder to eager-load the nodes that are connected to
|
||||||
|
// the "request_template" edge. The optional arguments are used to configure the query builder of the edge.
|
||||||
|
func (_q *ChannelMonitorQuery) WithRequestTemplate(opts ...func(*ChannelMonitorRequestTemplateQuery)) *ChannelMonitorQuery {
|
||||||
|
query := (&ChannelMonitorRequestTemplateClient{config: _q.config}).Query()
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(query)
|
||||||
|
}
|
||||||
|
_q.withRequestTemplate = query
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupBy is used to group vertices by one or more fields/columns.
|
||||||
|
// It is often used with aggregate functions, like: count, max, mean, min, sum.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var v []struct {
|
||||||
|
// CreatedAt time.Time `json:"created_at,omitempty"`
|
||||||
|
// Count int `json:"count,omitempty"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// client.ChannelMonitor.Query().
|
||||||
|
// GroupBy(channelmonitor.FieldCreatedAt).
|
||||||
|
// Aggregate(ent.Count()).
|
||||||
|
// Scan(ctx, &v)
|
||||||
|
func (_q *ChannelMonitorQuery) GroupBy(field string, fields ...string) *ChannelMonitorGroupBy {
|
||||||
|
_q.ctx.Fields = append([]string{field}, fields...)
|
||||||
|
grbuild := &ChannelMonitorGroupBy{build: _q}
|
||||||
|
grbuild.flds = &_q.ctx.Fields
|
||||||
|
grbuild.label = channelmonitor.Label
|
||||||
|
grbuild.scan = grbuild.Scan
|
||||||
|
return grbuild
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select allows the selection one or more fields/columns for the given query,
|
||||||
|
// instead of selecting all fields in the entity.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var v []struct {
|
||||||
|
// CreatedAt time.Time `json:"created_at,omitempty"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// client.ChannelMonitor.Query().
|
||||||
|
// Select(channelmonitor.FieldCreatedAt).
|
||||||
|
// Scan(ctx, &v)
|
||||||
|
func (_q *ChannelMonitorQuery) Select(fields ...string) *ChannelMonitorSelect {
|
||||||
|
_q.ctx.Fields = append(_q.ctx.Fields, fields...)
|
||||||
|
sbuild := &ChannelMonitorSelect{ChannelMonitorQuery: _q}
|
||||||
|
sbuild.label = channelmonitor.Label
|
||||||
|
sbuild.flds, sbuild.scan = &_q.ctx.Fields, sbuild.Scan
|
||||||
|
return sbuild
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate returns a ChannelMonitorSelect configured with the given aggregations.
|
||||||
|
func (_q *ChannelMonitorQuery) Aggregate(fns ...AggregateFunc) *ChannelMonitorSelect {
|
||||||
|
return _q.Select().Aggregate(fns...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorQuery) prepareQuery(ctx context.Context) error {
|
||||||
|
for _, inter := range _q.inters {
|
||||||
|
if inter == nil {
|
||||||
|
return fmt.Errorf("ent: uninitialized interceptor (forgotten import ent/runtime?)")
|
||||||
|
}
|
||||||
|
if trv, ok := inter.(Traverser); ok {
|
||||||
|
if err := trv.Traverse(ctx, _q); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, f := range _q.ctx.Fields {
|
||||||
|
if !channelmonitor.ValidColumn(f) {
|
||||||
|
return &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _q.path != nil {
|
||||||
|
prev, err := _q.path(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_q.sql = prev
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*ChannelMonitor, error) {
|
||||||
|
var (
|
||||||
|
nodes = []*ChannelMonitor{}
|
||||||
|
_spec = _q.querySpec()
|
||||||
|
loadedTypes = [3]bool{
|
||||||
|
_q.withHistory != nil,
|
||||||
|
_q.withDailyRollups != nil,
|
||||||
|
_q.withRequestTemplate != nil,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
_spec.ScanValues = func(columns []string) ([]any, error) {
|
||||||
|
return (*ChannelMonitor).scanValues(nil, columns)
|
||||||
|
}
|
||||||
|
_spec.Assign = func(columns []string, values []any) error {
|
||||||
|
node := &ChannelMonitor{config: _q.config}
|
||||||
|
nodes = append(nodes, node)
|
||||||
|
node.Edges.loadedTypes = loadedTypes
|
||||||
|
return node.assignValues(columns, values)
|
||||||
|
}
|
||||||
|
if len(_q.modifiers) > 0 {
|
||||||
|
_spec.Modifiers = _q.modifiers
|
||||||
|
}
|
||||||
|
for i := range hooks {
|
||||||
|
hooks[i](ctx, _spec)
|
||||||
|
}
|
||||||
|
if err := sqlgraph.QueryNodes(ctx, _q.driver, _spec); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(nodes) == 0 {
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
|
if query := _q.withHistory; query != nil {
|
||||||
|
if err := _q.loadHistory(ctx, query, nodes,
|
||||||
|
func(n *ChannelMonitor) { n.Edges.History = []*ChannelMonitorHistory{} },
|
||||||
|
func(n *ChannelMonitor, e *ChannelMonitorHistory) { n.Edges.History = append(n.Edges.History, e) }); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if query := _q.withDailyRollups; query != nil {
|
||||||
|
if err := _q.loadDailyRollups(ctx, query, nodes,
|
||||||
|
func(n *ChannelMonitor) { n.Edges.DailyRollups = []*ChannelMonitorDailyRollup{} },
|
||||||
|
func(n *ChannelMonitor, e *ChannelMonitorDailyRollup) {
|
||||||
|
n.Edges.DailyRollups = append(n.Edges.DailyRollups, e)
|
||||||
|
}); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if query := _q.withRequestTemplate; query != nil {
|
||||||
|
if err := _q.loadRequestTemplate(ctx, query, nodes, nil,
|
||||||
|
func(n *ChannelMonitor, e *ChannelMonitorRequestTemplate) { n.Edges.RequestTemplate = e }); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorQuery) loadHistory(ctx context.Context, query *ChannelMonitorHistoryQuery, nodes []*ChannelMonitor, init func(*ChannelMonitor), assign func(*ChannelMonitor, *ChannelMonitorHistory)) error {
|
||||||
|
fks := make([]driver.Value, 0, len(nodes))
|
||||||
|
nodeids := make(map[int64]*ChannelMonitor)
|
||||||
|
for i := range nodes {
|
||||||
|
fks = append(fks, nodes[i].ID)
|
||||||
|
nodeids[nodes[i].ID] = nodes[i]
|
||||||
|
if init != nil {
|
||||||
|
init(nodes[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(query.ctx.Fields) > 0 {
|
||||||
|
query.ctx.AppendFieldOnce(channelmonitorhistory.FieldMonitorID)
|
||||||
|
}
|
||||||
|
query.Where(predicate.ChannelMonitorHistory(func(s *sql.Selector) {
|
||||||
|
s.Where(sql.InValues(s.C(channelmonitor.HistoryColumn), fks...))
|
||||||
|
}))
|
||||||
|
neighbors, err := query.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, n := range neighbors {
|
||||||
|
fk := n.MonitorID
|
||||||
|
node, ok := nodeids[fk]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf(`unexpected referenced foreign-key "monitor_id" returned %v for node %v`, fk, n.ID)
|
||||||
|
}
|
||||||
|
assign(node, n)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (_q *ChannelMonitorQuery) loadDailyRollups(ctx context.Context, query *ChannelMonitorDailyRollupQuery, nodes []*ChannelMonitor, init func(*ChannelMonitor), assign func(*ChannelMonitor, *ChannelMonitorDailyRollup)) error {
|
||||||
|
fks := make([]driver.Value, 0, len(nodes))
|
||||||
|
nodeids := make(map[int64]*ChannelMonitor)
|
||||||
|
for i := range nodes {
|
||||||
|
fks = append(fks, nodes[i].ID)
|
||||||
|
nodeids[nodes[i].ID] = nodes[i]
|
||||||
|
if init != nil {
|
||||||
|
init(nodes[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(query.ctx.Fields) > 0 {
|
||||||
|
query.ctx.AppendFieldOnce(channelmonitordailyrollup.FieldMonitorID)
|
||||||
|
}
|
||||||
|
query.Where(predicate.ChannelMonitorDailyRollup(func(s *sql.Selector) {
|
||||||
|
s.Where(sql.InValues(s.C(channelmonitor.DailyRollupsColumn), fks...))
|
||||||
|
}))
|
||||||
|
neighbors, err := query.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, n := range neighbors {
|
||||||
|
fk := n.MonitorID
|
||||||
|
node, ok := nodeids[fk]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf(`unexpected referenced foreign-key "monitor_id" returned %v for node %v`, fk, n.ID)
|
||||||
|
}
|
||||||
|
assign(node, n)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (_q *ChannelMonitorQuery) loadRequestTemplate(ctx context.Context, query *ChannelMonitorRequestTemplateQuery, nodes []*ChannelMonitor, init func(*ChannelMonitor), assign func(*ChannelMonitor, *ChannelMonitorRequestTemplate)) error {
|
||||||
|
ids := make([]int64, 0, len(nodes))
|
||||||
|
nodeids := make(map[int64][]*ChannelMonitor)
|
||||||
|
for i := range nodes {
|
||||||
|
if nodes[i].TemplateID == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fk := *nodes[i].TemplateID
|
||||||
|
if _, ok := nodeids[fk]; !ok {
|
||||||
|
ids = append(ids, fk)
|
||||||
|
}
|
||||||
|
nodeids[fk] = append(nodeids[fk], nodes[i])
|
||||||
|
}
|
||||||
|
if len(ids) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
query.Where(channelmonitorrequesttemplate.IDIn(ids...))
|
||||||
|
neighbors, err := query.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, n := range neighbors {
|
||||||
|
nodes, ok := nodeids[n.ID]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf(`unexpected foreign-key "template_id" returned %v`, n.ID)
|
||||||
|
}
|
||||||
|
for i := range nodes {
|
||||||
|
assign(nodes[i], n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorQuery) sqlCount(ctx context.Context) (int, error) {
|
||||||
|
_spec := _q.querySpec()
|
||||||
|
if len(_q.modifiers) > 0 {
|
||||||
|
_spec.Modifiers = _q.modifiers
|
||||||
|
}
|
||||||
|
_spec.Node.Columns = _q.ctx.Fields
|
||||||
|
if len(_q.ctx.Fields) > 0 {
|
||||||
|
_spec.Unique = _q.ctx.Unique != nil && *_q.ctx.Unique
|
||||||
|
}
|
||||||
|
return sqlgraph.CountNodes(ctx, _q.driver, _spec)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorQuery) querySpec() *sqlgraph.QuerySpec {
|
||||||
|
_spec := sqlgraph.NewQuerySpec(channelmonitor.Table, channelmonitor.Columns, sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64))
|
||||||
|
_spec.From = _q.sql
|
||||||
|
if unique := _q.ctx.Unique; unique != nil {
|
||||||
|
_spec.Unique = *unique
|
||||||
|
} else if _q.path != nil {
|
||||||
|
_spec.Unique = true
|
||||||
|
}
|
||||||
|
if fields := _q.ctx.Fields; len(fields) > 0 {
|
||||||
|
_spec.Node.Columns = make([]string, 0, len(fields))
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, channelmonitor.FieldID)
|
||||||
|
for i := range fields {
|
||||||
|
if fields[i] != channelmonitor.FieldID {
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, fields[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _q.withRequestTemplate != nil {
|
||||||
|
_spec.Node.AddColumnOnce(channelmonitor.FieldTemplateID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ps := _q.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if limit := _q.ctx.Limit; limit != nil {
|
||||||
|
_spec.Limit = *limit
|
||||||
|
}
|
||||||
|
if offset := _q.ctx.Offset; offset != nil {
|
||||||
|
_spec.Offset = *offset
|
||||||
|
}
|
||||||
|
if ps := _q.order; len(ps) > 0 {
|
||||||
|
_spec.Order = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _spec
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorQuery) sqlQuery(ctx context.Context) *sql.Selector {
|
||||||
|
builder := sql.Dialect(_q.driver.Dialect())
|
||||||
|
t1 := builder.Table(channelmonitor.Table)
|
||||||
|
columns := _q.ctx.Fields
|
||||||
|
if len(columns) == 0 {
|
||||||
|
columns = channelmonitor.Columns
|
||||||
|
}
|
||||||
|
selector := builder.Select(t1.Columns(columns...)...).From(t1)
|
||||||
|
if _q.sql != nil {
|
||||||
|
selector = _q.sql
|
||||||
|
selector.Select(selector.Columns(columns...)...)
|
||||||
|
}
|
||||||
|
if _q.ctx.Unique != nil && *_q.ctx.Unique {
|
||||||
|
selector.Distinct()
|
||||||
|
}
|
||||||
|
for _, m := range _q.modifiers {
|
||||||
|
m(selector)
|
||||||
|
}
|
||||||
|
for _, p := range _q.predicates {
|
||||||
|
p(selector)
|
||||||
|
}
|
||||||
|
for _, p := range _q.order {
|
||||||
|
p(selector)
|
||||||
|
}
|
||||||
|
if offset := _q.ctx.Offset; offset != nil {
|
||||||
|
// limit is mandatory for offset clause. We start
|
||||||
|
// with default value, and override it below if needed.
|
||||||
|
selector.Offset(*offset).Limit(math.MaxInt32)
|
||||||
|
}
|
||||||
|
if limit := _q.ctx.Limit; limit != nil {
|
||||||
|
selector.Limit(*limit)
|
||||||
|
}
|
||||||
|
return selector
|
||||||
|
}
|
||||||
|
|
||||||
|
// ForUpdate locks the selected rows against concurrent updates, and prevent them from being
|
||||||
|
// updated, deleted or "selected ... for update" by other sessions, until the transaction is
|
||||||
|
// either committed or rolled-back.
|
||||||
|
func (_q *ChannelMonitorQuery) ForUpdate(opts ...sql.LockOption) *ChannelMonitorQuery {
|
||||||
|
if _q.driver.Dialect() == dialect.Postgres {
|
||||||
|
_q.Unique(false)
|
||||||
|
}
|
||||||
|
_q.modifiers = append(_q.modifiers, func(s *sql.Selector) {
|
||||||
|
s.ForUpdate(opts...)
|
||||||
|
})
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// ForShare behaves similarly to ForUpdate, except that it acquires a shared mode lock
|
||||||
|
// on any rows that are read. Other sessions can read the rows, but cannot modify them
|
||||||
|
// until your transaction commits.
|
||||||
|
func (_q *ChannelMonitorQuery) ForShare(opts ...sql.LockOption) *ChannelMonitorQuery {
|
||||||
|
if _q.driver.Dialect() == dialect.Postgres {
|
||||||
|
_q.Unique(false)
|
||||||
|
}
|
||||||
|
_q.modifiers = append(_q.modifiers, func(s *sql.Selector) {
|
||||||
|
s.ForShare(opts...)
|
||||||
|
})
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorGroupBy is the group-by builder for ChannelMonitor entities.
|
||||||
|
type ChannelMonitorGroupBy struct {
|
||||||
|
selector
|
||||||
|
build *ChannelMonitorQuery
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate adds the given aggregation functions to the group-by query.
|
||||||
|
func (_g *ChannelMonitorGroupBy) Aggregate(fns ...AggregateFunc) *ChannelMonitorGroupBy {
|
||||||
|
_g.fns = append(_g.fns, fns...)
|
||||||
|
return _g
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan applies the selector query and scans the result into the given value.
|
||||||
|
func (_g *ChannelMonitorGroupBy) Scan(ctx context.Context, v any) error {
|
||||||
|
ctx = setContextOp(ctx, _g.build.ctx, ent.OpQueryGroupBy)
|
||||||
|
if err := _g.build.prepareQuery(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return scanWithInterceptors[*ChannelMonitorQuery, *ChannelMonitorGroupBy](ctx, _g.build, _g, _g.build.inters, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_g *ChannelMonitorGroupBy) sqlScan(ctx context.Context, root *ChannelMonitorQuery, v any) error {
|
||||||
|
selector := root.sqlQuery(ctx).Select()
|
||||||
|
aggregation := make([]string, 0, len(_g.fns))
|
||||||
|
for _, fn := range _g.fns {
|
||||||
|
aggregation = append(aggregation, fn(selector))
|
||||||
|
}
|
||||||
|
if len(selector.SelectedColumns()) == 0 {
|
||||||
|
columns := make([]string, 0, len(*_g.flds)+len(_g.fns))
|
||||||
|
for _, f := range *_g.flds {
|
||||||
|
columns = append(columns, selector.C(f))
|
||||||
|
}
|
||||||
|
columns = append(columns, aggregation...)
|
||||||
|
selector.Select(columns...)
|
||||||
|
}
|
||||||
|
selector.GroupBy(selector.Columns(*_g.flds...)...)
|
||||||
|
if err := selector.Err(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
rows := &sql.Rows{}
|
||||||
|
query, args := selector.Query()
|
||||||
|
if err := _g.build.driver.Query(ctx, query, args, rows); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return sql.ScanSlice(rows, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorSelect is the builder for selecting fields of ChannelMonitor entities.
|
||||||
|
type ChannelMonitorSelect struct {
|
||||||
|
*ChannelMonitorQuery
|
||||||
|
selector
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate adds the given aggregation functions to the selector query.
|
||||||
|
func (_s *ChannelMonitorSelect) Aggregate(fns ...AggregateFunc) *ChannelMonitorSelect {
|
||||||
|
_s.fns = append(_s.fns, fns...)
|
||||||
|
return _s
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan applies the selector query and scans the result into the given value.
|
||||||
|
func (_s *ChannelMonitorSelect) Scan(ctx context.Context, v any) error {
|
||||||
|
ctx = setContextOp(ctx, _s.ctx, ent.OpQuerySelect)
|
||||||
|
if err := _s.prepareQuery(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return scanWithInterceptors[*ChannelMonitorQuery, *ChannelMonitorSelect](ctx, _s.ChannelMonitorQuery, _s, _s.inters, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_s *ChannelMonitorSelect) sqlScan(ctx context.Context, root *ChannelMonitorQuery, v any) error {
|
||||||
|
selector := root.sqlQuery(ctx)
|
||||||
|
aggregation := make([]string, 0, len(_s.fns))
|
||||||
|
for _, fn := range _s.fns {
|
||||||
|
aggregation = append(aggregation, fn(selector))
|
||||||
|
}
|
||||||
|
switch n := len(*_s.selector.flds); {
|
||||||
|
case n == 0 && len(aggregation) > 0:
|
||||||
|
selector.Select(aggregation...)
|
||||||
|
case n != 0 && len(aggregation) > 0:
|
||||||
|
selector.AppendSelect(aggregation...)
|
||||||
|
}
|
||||||
|
rows := &sql.Rows{}
|
||||||
|
query, args := selector.Query()
|
||||||
|
if err := _s.driver.Query(ctx, query, args, rows); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return sql.ScanSlice(rows, v)
|
||||||
|
}
|
||||||
1328
backend/ent/channelmonitor_update.go
Normal file
1328
backend/ent/channelmonitor_update.go
Normal file
File diff suppressed because it is too large
Load Diff
278
backend/ent/channelmonitordailyrollup.go
Normal file
278
backend/ent/channelmonitordailyrollup.go
Normal file
@ -0,0 +1,278 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitordailyrollup"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollup is the model entity for the ChannelMonitorDailyRollup schema.
|
||||||
|
type ChannelMonitorDailyRollup struct {
|
||||||
|
config `json:"-"`
|
||||||
|
// ID of the ent.
|
||||||
|
ID int64 `json:"id,omitempty"`
|
||||||
|
// MonitorID holds the value of the "monitor_id" field.
|
||||||
|
MonitorID int64 `json:"monitor_id,omitempty"`
|
||||||
|
// Model holds the value of the "model" field.
|
||||||
|
Model string `json:"model,omitempty"`
|
||||||
|
// BucketDate holds the value of the "bucket_date" field.
|
||||||
|
BucketDate time.Time `json:"bucket_date,omitempty"`
|
||||||
|
// TotalChecks holds the value of the "total_checks" field.
|
||||||
|
TotalChecks int `json:"total_checks,omitempty"`
|
||||||
|
// OkCount holds the value of the "ok_count" field.
|
||||||
|
OkCount int `json:"ok_count,omitempty"`
|
||||||
|
// OperationalCount holds the value of the "operational_count" field.
|
||||||
|
OperationalCount int `json:"operational_count,omitempty"`
|
||||||
|
// DegradedCount holds the value of the "degraded_count" field.
|
||||||
|
DegradedCount int `json:"degraded_count,omitempty"`
|
||||||
|
// FailedCount holds the value of the "failed_count" field.
|
||||||
|
FailedCount int `json:"failed_count,omitempty"`
|
||||||
|
// ErrorCount holds the value of the "error_count" field.
|
||||||
|
ErrorCount int `json:"error_count,omitempty"`
|
||||||
|
// SumLatencyMs holds the value of the "sum_latency_ms" field.
|
||||||
|
SumLatencyMs int64 `json:"sum_latency_ms,omitempty"`
|
||||||
|
// CountLatency holds the value of the "count_latency" field.
|
||||||
|
CountLatency int `json:"count_latency,omitempty"`
|
||||||
|
// SumPingLatencyMs holds the value of the "sum_ping_latency_ms" field.
|
||||||
|
SumPingLatencyMs int64 `json:"sum_ping_latency_ms,omitempty"`
|
||||||
|
// CountPingLatency holds the value of the "count_ping_latency" field.
|
||||||
|
CountPingLatency int `json:"count_ping_latency,omitempty"`
|
||||||
|
// ComputedAt holds the value of the "computed_at" field.
|
||||||
|
ComputedAt time.Time `json:"computed_at,omitempty"`
|
||||||
|
// Edges holds the relations/edges for other nodes in the graph.
|
||||||
|
// The values are being populated by the ChannelMonitorDailyRollupQuery when eager-loading is set.
|
||||||
|
Edges ChannelMonitorDailyRollupEdges `json:"edges"`
|
||||||
|
selectValues sql.SelectValues
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollupEdges holds the relations/edges for other nodes in the graph.
|
||||||
|
type ChannelMonitorDailyRollupEdges struct {
|
||||||
|
// Monitor holds the value of the monitor edge.
|
||||||
|
Monitor *ChannelMonitor `json:"monitor,omitempty"`
|
||||||
|
// loadedTypes holds the information for reporting if a
|
||||||
|
// type was loaded (or requested) in eager-loading or not.
|
||||||
|
loadedTypes [1]bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorOrErr returns the Monitor value or an error if the edge
|
||||||
|
// was not loaded in eager-loading, or loaded but was not found.
|
||||||
|
func (e ChannelMonitorDailyRollupEdges) MonitorOrErr() (*ChannelMonitor, error) {
|
||||||
|
if e.Monitor != nil {
|
||||||
|
return e.Monitor, nil
|
||||||
|
} else if e.loadedTypes[0] {
|
||||||
|
return nil, &NotFoundError{label: channelmonitor.Label}
|
||||||
|
}
|
||||||
|
return nil, &NotLoadedError{edge: "monitor"}
|
||||||
|
}
|
||||||
|
|
||||||
|
// scanValues returns the types for scanning values from sql.Rows.
|
||||||
|
func (*ChannelMonitorDailyRollup) scanValues(columns []string) ([]any, error) {
|
||||||
|
values := make([]any, len(columns))
|
||||||
|
for i := range columns {
|
||||||
|
switch columns[i] {
|
||||||
|
case channelmonitordailyrollup.FieldID, channelmonitordailyrollup.FieldMonitorID, channelmonitordailyrollup.FieldTotalChecks, channelmonitordailyrollup.FieldOkCount, channelmonitordailyrollup.FieldOperationalCount, channelmonitordailyrollup.FieldDegradedCount, channelmonitordailyrollup.FieldFailedCount, channelmonitordailyrollup.FieldErrorCount, channelmonitordailyrollup.FieldSumLatencyMs, channelmonitordailyrollup.FieldCountLatency, channelmonitordailyrollup.FieldSumPingLatencyMs, channelmonitordailyrollup.FieldCountPingLatency:
|
||||||
|
values[i] = new(sql.NullInt64)
|
||||||
|
case channelmonitordailyrollup.FieldModel:
|
||||||
|
values[i] = new(sql.NullString)
|
||||||
|
case channelmonitordailyrollup.FieldBucketDate, channelmonitordailyrollup.FieldComputedAt:
|
||||||
|
values[i] = new(sql.NullTime)
|
||||||
|
default:
|
||||||
|
values[i] = new(sql.UnknownType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignValues assigns the values that were returned from sql.Rows (after scanning)
|
||||||
|
// to the ChannelMonitorDailyRollup fields.
|
||||||
|
func (_m *ChannelMonitorDailyRollup) assignValues(columns []string, values []any) error {
|
||||||
|
if m, n := len(values), len(columns); m < n {
|
||||||
|
return fmt.Errorf("mismatch number of scan values: %d != %d", m, n)
|
||||||
|
}
|
||||||
|
for i := range columns {
|
||||||
|
switch columns[i] {
|
||||||
|
case channelmonitordailyrollup.FieldID:
|
||||||
|
value, ok := values[i].(*sql.NullInt64)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field id", value)
|
||||||
|
}
|
||||||
|
_m.ID = int64(value.Int64)
|
||||||
|
case channelmonitordailyrollup.FieldMonitorID:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field monitor_id", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.MonitorID = value.Int64
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldModel:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field model", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Model = value.String
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldBucketDate:
|
||||||
|
if value, ok := values[i].(*sql.NullTime); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field bucket_date", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.BucketDate = value.Time
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldTotalChecks:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field total_checks", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.TotalChecks = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldOkCount:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field ok_count", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.OkCount = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldOperationalCount:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field operational_count", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.OperationalCount = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldDegradedCount:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field degraded_count", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.DegradedCount = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldFailedCount:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field failed_count", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.FailedCount = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldErrorCount:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field error_count", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.ErrorCount = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldSumLatencyMs:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field sum_latency_ms", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.SumLatencyMs = value.Int64
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldCountLatency:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field count_latency", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.CountLatency = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldSumPingLatencyMs:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field sum_ping_latency_ms", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.SumPingLatencyMs = value.Int64
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldCountPingLatency:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field count_ping_latency", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.CountPingLatency = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitordailyrollup.FieldComputedAt:
|
||||||
|
if value, ok := values[i].(*sql.NullTime); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field computed_at", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.ComputedAt = value.Time
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
_m.selectValues.Set(columns[i], values[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value returns the ent.Value that was dynamically selected and assigned to the ChannelMonitorDailyRollup.
|
||||||
|
// This includes values selected through modifiers, order, etc.
|
||||||
|
func (_m *ChannelMonitorDailyRollup) Value(name string) (ent.Value, error) {
|
||||||
|
return _m.selectValues.Get(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMonitor queries the "monitor" edge of the ChannelMonitorDailyRollup entity.
|
||||||
|
func (_m *ChannelMonitorDailyRollup) QueryMonitor() *ChannelMonitorQuery {
|
||||||
|
return NewChannelMonitorDailyRollupClient(_m.config).QueryMonitor(_m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update returns a builder for updating this ChannelMonitorDailyRollup.
|
||||||
|
// Note that you need to call ChannelMonitorDailyRollup.Unwrap() before calling this method if this ChannelMonitorDailyRollup
|
||||||
|
// was returned from a transaction, and the transaction was committed or rolled back.
|
||||||
|
func (_m *ChannelMonitorDailyRollup) Update() *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
return NewChannelMonitorDailyRollupClient(_m.config).UpdateOne(_m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unwrap unwraps the ChannelMonitorDailyRollup entity that was returned from a transaction after it was closed,
|
||||||
|
// so that all future queries will be executed through the driver which created the transaction.
|
||||||
|
func (_m *ChannelMonitorDailyRollup) Unwrap() *ChannelMonitorDailyRollup {
|
||||||
|
_tx, ok := _m.config.driver.(*txDriver)
|
||||||
|
if !ok {
|
||||||
|
panic("ent: ChannelMonitorDailyRollup is not a transactional entity")
|
||||||
|
}
|
||||||
|
_m.config.driver = _tx.drv
|
||||||
|
return _m
|
||||||
|
}
|
||||||
|
|
||||||
|
// String implements the fmt.Stringer.
|
||||||
|
func (_m *ChannelMonitorDailyRollup) String() string {
|
||||||
|
var builder strings.Builder
|
||||||
|
builder.WriteString("ChannelMonitorDailyRollup(")
|
||||||
|
builder.WriteString(fmt.Sprintf("id=%v, ", _m.ID))
|
||||||
|
builder.WriteString("monitor_id=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.MonitorID))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("model=")
|
||||||
|
builder.WriteString(_m.Model)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("bucket_date=")
|
||||||
|
builder.WriteString(_m.BucketDate.Format(time.ANSIC))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("total_checks=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.TotalChecks))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("ok_count=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.OkCount))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("operational_count=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.OperationalCount))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("degraded_count=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.DegradedCount))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("failed_count=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.FailedCount))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("error_count=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.ErrorCount))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("sum_latency_ms=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.SumLatencyMs))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("count_latency=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.CountLatency))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("sum_ping_latency_ms=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.SumPingLatencyMs))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("count_ping_latency=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.CountPingLatency))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("computed_at=")
|
||||||
|
builder.WriteString(_m.ComputedAt.Format(time.ANSIC))
|
||||||
|
builder.WriteByte(')')
|
||||||
|
return builder.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollups is a parsable slice of ChannelMonitorDailyRollup.
|
||||||
|
type ChannelMonitorDailyRollups []*ChannelMonitorDailyRollup
|
||||||
@ -0,0 +1,206 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package channelmonitordailyrollup
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Label holds the string label denoting the channelmonitordailyrollup type in the database.
|
||||||
|
Label = "channel_monitor_daily_rollup"
|
||||||
|
// FieldID holds the string denoting the id field in the database.
|
||||||
|
FieldID = "id"
|
||||||
|
// FieldMonitorID holds the string denoting the monitor_id field in the database.
|
||||||
|
FieldMonitorID = "monitor_id"
|
||||||
|
// FieldModel holds the string denoting the model field in the database.
|
||||||
|
FieldModel = "model"
|
||||||
|
// FieldBucketDate holds the string denoting the bucket_date field in the database.
|
||||||
|
FieldBucketDate = "bucket_date"
|
||||||
|
// FieldTotalChecks holds the string denoting the total_checks field in the database.
|
||||||
|
FieldTotalChecks = "total_checks"
|
||||||
|
// FieldOkCount holds the string denoting the ok_count field in the database.
|
||||||
|
FieldOkCount = "ok_count"
|
||||||
|
// FieldOperationalCount holds the string denoting the operational_count field in the database.
|
||||||
|
FieldOperationalCount = "operational_count"
|
||||||
|
// FieldDegradedCount holds the string denoting the degraded_count field in the database.
|
||||||
|
FieldDegradedCount = "degraded_count"
|
||||||
|
// FieldFailedCount holds the string denoting the failed_count field in the database.
|
||||||
|
FieldFailedCount = "failed_count"
|
||||||
|
// FieldErrorCount holds the string denoting the error_count field in the database.
|
||||||
|
FieldErrorCount = "error_count"
|
||||||
|
// FieldSumLatencyMs holds the string denoting the sum_latency_ms field in the database.
|
||||||
|
FieldSumLatencyMs = "sum_latency_ms"
|
||||||
|
// FieldCountLatency holds the string denoting the count_latency field in the database.
|
||||||
|
FieldCountLatency = "count_latency"
|
||||||
|
// FieldSumPingLatencyMs holds the string denoting the sum_ping_latency_ms field in the database.
|
||||||
|
FieldSumPingLatencyMs = "sum_ping_latency_ms"
|
||||||
|
// FieldCountPingLatency holds the string denoting the count_ping_latency field in the database.
|
||||||
|
FieldCountPingLatency = "count_ping_latency"
|
||||||
|
// FieldComputedAt holds the string denoting the computed_at field in the database.
|
||||||
|
FieldComputedAt = "computed_at"
|
||||||
|
// EdgeMonitor holds the string denoting the monitor edge name in mutations.
|
||||||
|
EdgeMonitor = "monitor"
|
||||||
|
// Table holds the table name of the channelmonitordailyrollup in the database.
|
||||||
|
Table = "channel_monitor_daily_rollups"
|
||||||
|
// MonitorTable is the table that holds the monitor relation/edge.
|
||||||
|
MonitorTable = "channel_monitor_daily_rollups"
|
||||||
|
// MonitorInverseTable is the table name for the ChannelMonitor entity.
|
||||||
|
// It exists in this package in order to avoid circular dependency with the "channelmonitor" package.
|
||||||
|
MonitorInverseTable = "channel_monitors"
|
||||||
|
// MonitorColumn is the table column denoting the monitor relation/edge.
|
||||||
|
MonitorColumn = "monitor_id"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Columns holds all SQL columns for channelmonitordailyrollup fields.
|
||||||
|
var Columns = []string{
|
||||||
|
FieldID,
|
||||||
|
FieldMonitorID,
|
||||||
|
FieldModel,
|
||||||
|
FieldBucketDate,
|
||||||
|
FieldTotalChecks,
|
||||||
|
FieldOkCount,
|
||||||
|
FieldOperationalCount,
|
||||||
|
FieldDegradedCount,
|
||||||
|
FieldFailedCount,
|
||||||
|
FieldErrorCount,
|
||||||
|
FieldSumLatencyMs,
|
||||||
|
FieldCountLatency,
|
||||||
|
FieldSumPingLatencyMs,
|
||||||
|
FieldCountPingLatency,
|
||||||
|
FieldComputedAt,
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidColumn reports if the column name is valid (part of the table columns).
|
||||||
|
func ValidColumn(column string) bool {
|
||||||
|
for i := range Columns {
|
||||||
|
if column == Columns[i] {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// ModelValidator is a validator for the "model" field. It is called by the builders before save.
|
||||||
|
ModelValidator func(string) error
|
||||||
|
// DefaultTotalChecks holds the default value on creation for the "total_checks" field.
|
||||||
|
DefaultTotalChecks int
|
||||||
|
// DefaultOkCount holds the default value on creation for the "ok_count" field.
|
||||||
|
DefaultOkCount int
|
||||||
|
// DefaultOperationalCount holds the default value on creation for the "operational_count" field.
|
||||||
|
DefaultOperationalCount int
|
||||||
|
// DefaultDegradedCount holds the default value on creation for the "degraded_count" field.
|
||||||
|
DefaultDegradedCount int
|
||||||
|
// DefaultFailedCount holds the default value on creation for the "failed_count" field.
|
||||||
|
DefaultFailedCount int
|
||||||
|
// DefaultErrorCount holds the default value on creation for the "error_count" field.
|
||||||
|
DefaultErrorCount int
|
||||||
|
// DefaultSumLatencyMs holds the default value on creation for the "sum_latency_ms" field.
|
||||||
|
DefaultSumLatencyMs int64
|
||||||
|
// DefaultCountLatency holds the default value on creation for the "count_latency" field.
|
||||||
|
DefaultCountLatency int
|
||||||
|
// DefaultSumPingLatencyMs holds the default value on creation for the "sum_ping_latency_ms" field.
|
||||||
|
DefaultSumPingLatencyMs int64
|
||||||
|
// DefaultCountPingLatency holds the default value on creation for the "count_ping_latency" field.
|
||||||
|
DefaultCountPingLatency int
|
||||||
|
// DefaultComputedAt holds the default value on creation for the "computed_at" field.
|
||||||
|
DefaultComputedAt func() time.Time
|
||||||
|
// UpdateDefaultComputedAt holds the default value on update for the "computed_at" field.
|
||||||
|
UpdateDefaultComputedAt func() time.Time
|
||||||
|
)
|
||||||
|
|
||||||
|
// OrderOption defines the ordering options for the ChannelMonitorDailyRollup queries.
|
||||||
|
type OrderOption func(*sql.Selector)
|
||||||
|
|
||||||
|
// ByID orders the results by the id field.
|
||||||
|
func ByID(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldID, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByMonitorID orders the results by the monitor_id field.
|
||||||
|
func ByMonitorID(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldMonitorID, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByModel orders the results by the model field.
|
||||||
|
func ByModel(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldModel, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByBucketDate orders the results by the bucket_date field.
|
||||||
|
func ByBucketDate(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldBucketDate, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByTotalChecks orders the results by the total_checks field.
|
||||||
|
func ByTotalChecks(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldTotalChecks, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByOkCount orders the results by the ok_count field.
|
||||||
|
func ByOkCount(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldOkCount, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByOperationalCount orders the results by the operational_count field.
|
||||||
|
func ByOperationalCount(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldOperationalCount, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByDegradedCount orders the results by the degraded_count field.
|
||||||
|
func ByDegradedCount(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldDegradedCount, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByFailedCount orders the results by the failed_count field.
|
||||||
|
func ByFailedCount(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldFailedCount, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByErrorCount orders the results by the error_count field.
|
||||||
|
func ByErrorCount(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldErrorCount, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// BySumLatencyMs orders the results by the sum_latency_ms field.
|
||||||
|
func BySumLatencyMs(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldSumLatencyMs, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByCountLatency orders the results by the count_latency field.
|
||||||
|
func ByCountLatency(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldCountLatency, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// BySumPingLatencyMs orders the results by the sum_ping_latency_ms field.
|
||||||
|
func BySumPingLatencyMs(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldSumPingLatencyMs, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByCountPingLatency orders the results by the count_ping_latency field.
|
||||||
|
func ByCountPingLatency(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldCountPingLatency, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByComputedAt orders the results by the computed_at field.
|
||||||
|
func ByComputedAt(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldComputedAt, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByMonitorField orders the results by monitor field.
|
||||||
|
func ByMonitorField(field string, opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return func(s *sql.Selector) {
|
||||||
|
sqlgraph.OrderByNeighborTerms(s, newMonitorStep(), sql.OrderByField(field, opts...))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func newMonitorStep() *sqlgraph.Step {
|
||||||
|
return sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.To(MonitorInverseTable, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, true, MonitorTable, MonitorColumn),
|
||||||
|
)
|
||||||
|
}
|
||||||
729
backend/ent/channelmonitordailyrollup/where.go
Normal file
729
backend/ent/channelmonitordailyrollup/where.go
Normal file
@ -0,0 +1,729 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package channelmonitordailyrollup
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ID filters vertices based on their ID field.
|
||||||
|
func ID(id int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDEQ applies the EQ predicate on the ID field.
|
||||||
|
func IDEQ(id int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDNEQ applies the NEQ predicate on the ID field.
|
||||||
|
func IDNEQ(id int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDIn applies the In predicate on the ID field.
|
||||||
|
func IDIn(ids ...int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldID, ids...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDNotIn applies the NotIn predicate on the ID field.
|
||||||
|
func IDNotIn(ids ...int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldID, ids...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDGT applies the GT predicate on the ID field.
|
||||||
|
func IDGT(id int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDGTE applies the GTE predicate on the ID field.
|
||||||
|
func IDGTE(id int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDLT applies the LT predicate on the ID field.
|
||||||
|
func IDLT(id int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDLTE applies the LTE predicate on the ID field.
|
||||||
|
func IDLTE(id int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorID applies equality check predicate on the "monitor_id" field. It's identical to MonitorIDEQ.
|
||||||
|
func MonitorID(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldMonitorID, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Model applies equality check predicate on the "model" field. It's identical to ModelEQ.
|
||||||
|
func Model(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BucketDate applies equality check predicate on the "bucket_date" field. It's identical to BucketDateEQ.
|
||||||
|
func BucketDate(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldBucketDate, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TotalChecks applies equality check predicate on the "total_checks" field. It's identical to TotalChecksEQ.
|
||||||
|
func TotalChecks(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldTotalChecks, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OkCount applies equality check predicate on the "ok_count" field. It's identical to OkCountEQ.
|
||||||
|
func OkCount(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldOkCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationalCount applies equality check predicate on the "operational_count" field. It's identical to OperationalCountEQ.
|
||||||
|
func OperationalCount(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldOperationalCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DegradedCount applies equality check predicate on the "degraded_count" field. It's identical to DegradedCountEQ.
|
||||||
|
func DegradedCount(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldDegradedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FailedCount applies equality check predicate on the "failed_count" field. It's identical to FailedCountEQ.
|
||||||
|
func FailedCount(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldFailedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorCount applies equality check predicate on the "error_count" field. It's identical to ErrorCountEQ.
|
||||||
|
func ErrorCount(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldErrorCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumLatencyMs applies equality check predicate on the "sum_latency_ms" field. It's identical to SumLatencyMsEQ.
|
||||||
|
func SumLatencyMs(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldSumLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountLatency applies equality check predicate on the "count_latency" field. It's identical to CountLatencyEQ.
|
||||||
|
func CountLatency(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldCountLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumPingLatencyMs applies equality check predicate on the "sum_ping_latency_ms" field. It's identical to SumPingLatencyMsEQ.
|
||||||
|
func SumPingLatencyMs(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldSumPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountPingLatency applies equality check predicate on the "count_ping_latency" field. It's identical to CountPingLatencyEQ.
|
||||||
|
func CountPingLatency(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldCountPingLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputedAt applies equality check predicate on the "computed_at" field. It's identical to ComputedAtEQ.
|
||||||
|
func ComputedAt(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldComputedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorIDEQ applies the EQ predicate on the "monitor_id" field.
|
||||||
|
func MonitorIDEQ(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldMonitorID, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorIDNEQ applies the NEQ predicate on the "monitor_id" field.
|
||||||
|
func MonitorIDNEQ(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldMonitorID, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorIDIn applies the In predicate on the "monitor_id" field.
|
||||||
|
func MonitorIDIn(vs ...int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldMonitorID, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorIDNotIn applies the NotIn predicate on the "monitor_id" field.
|
||||||
|
func MonitorIDNotIn(vs ...int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldMonitorID, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelEQ applies the EQ predicate on the "model" field.
|
||||||
|
func ModelEQ(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelNEQ applies the NEQ predicate on the "model" field.
|
||||||
|
func ModelNEQ(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelIn applies the In predicate on the "model" field.
|
||||||
|
func ModelIn(vs ...string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldModel, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelNotIn applies the NotIn predicate on the "model" field.
|
||||||
|
func ModelNotIn(vs ...string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldModel, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelGT applies the GT predicate on the "model" field.
|
||||||
|
func ModelGT(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelGTE applies the GTE predicate on the "model" field.
|
||||||
|
func ModelGTE(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelLT applies the LT predicate on the "model" field.
|
||||||
|
func ModelLT(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelLTE applies the LTE predicate on the "model" field.
|
||||||
|
func ModelLTE(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelContains applies the Contains predicate on the "model" field.
|
||||||
|
func ModelContains(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldContains(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelHasPrefix applies the HasPrefix predicate on the "model" field.
|
||||||
|
func ModelHasPrefix(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldHasPrefix(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelHasSuffix applies the HasSuffix predicate on the "model" field.
|
||||||
|
func ModelHasSuffix(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldHasSuffix(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelEqualFold applies the EqualFold predicate on the "model" field.
|
||||||
|
func ModelEqualFold(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEqualFold(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelContainsFold applies the ContainsFold predicate on the "model" field.
|
||||||
|
func ModelContainsFold(v string) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldContainsFold(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BucketDateEQ applies the EQ predicate on the "bucket_date" field.
|
||||||
|
func BucketDateEQ(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldBucketDate, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BucketDateNEQ applies the NEQ predicate on the "bucket_date" field.
|
||||||
|
func BucketDateNEQ(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldBucketDate, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BucketDateIn applies the In predicate on the "bucket_date" field.
|
||||||
|
func BucketDateIn(vs ...time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldBucketDate, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BucketDateNotIn applies the NotIn predicate on the "bucket_date" field.
|
||||||
|
func BucketDateNotIn(vs ...time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldBucketDate, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BucketDateGT applies the GT predicate on the "bucket_date" field.
|
||||||
|
func BucketDateGT(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldBucketDate, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BucketDateGTE applies the GTE predicate on the "bucket_date" field.
|
||||||
|
func BucketDateGTE(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldBucketDate, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BucketDateLT applies the LT predicate on the "bucket_date" field.
|
||||||
|
func BucketDateLT(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldBucketDate, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BucketDateLTE applies the LTE predicate on the "bucket_date" field.
|
||||||
|
func BucketDateLTE(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldBucketDate, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TotalChecksEQ applies the EQ predicate on the "total_checks" field.
|
||||||
|
func TotalChecksEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldTotalChecks, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TotalChecksNEQ applies the NEQ predicate on the "total_checks" field.
|
||||||
|
func TotalChecksNEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldTotalChecks, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TotalChecksIn applies the In predicate on the "total_checks" field.
|
||||||
|
func TotalChecksIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldTotalChecks, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TotalChecksNotIn applies the NotIn predicate on the "total_checks" field.
|
||||||
|
func TotalChecksNotIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldTotalChecks, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TotalChecksGT applies the GT predicate on the "total_checks" field.
|
||||||
|
func TotalChecksGT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldTotalChecks, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TotalChecksGTE applies the GTE predicate on the "total_checks" field.
|
||||||
|
func TotalChecksGTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldTotalChecks, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TotalChecksLT applies the LT predicate on the "total_checks" field.
|
||||||
|
func TotalChecksLT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldTotalChecks, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// TotalChecksLTE applies the LTE predicate on the "total_checks" field.
|
||||||
|
func TotalChecksLTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldTotalChecks, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OkCountEQ applies the EQ predicate on the "ok_count" field.
|
||||||
|
func OkCountEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldOkCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OkCountNEQ applies the NEQ predicate on the "ok_count" field.
|
||||||
|
func OkCountNEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldOkCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OkCountIn applies the In predicate on the "ok_count" field.
|
||||||
|
func OkCountIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldOkCount, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OkCountNotIn applies the NotIn predicate on the "ok_count" field.
|
||||||
|
func OkCountNotIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldOkCount, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OkCountGT applies the GT predicate on the "ok_count" field.
|
||||||
|
func OkCountGT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldOkCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OkCountGTE applies the GTE predicate on the "ok_count" field.
|
||||||
|
func OkCountGTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldOkCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OkCountLT applies the LT predicate on the "ok_count" field.
|
||||||
|
func OkCountLT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldOkCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OkCountLTE applies the LTE predicate on the "ok_count" field.
|
||||||
|
func OkCountLTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldOkCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationalCountEQ applies the EQ predicate on the "operational_count" field.
|
||||||
|
func OperationalCountEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldOperationalCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationalCountNEQ applies the NEQ predicate on the "operational_count" field.
|
||||||
|
func OperationalCountNEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldOperationalCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationalCountIn applies the In predicate on the "operational_count" field.
|
||||||
|
func OperationalCountIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldOperationalCount, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationalCountNotIn applies the NotIn predicate on the "operational_count" field.
|
||||||
|
func OperationalCountNotIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldOperationalCount, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationalCountGT applies the GT predicate on the "operational_count" field.
|
||||||
|
func OperationalCountGT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldOperationalCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationalCountGTE applies the GTE predicate on the "operational_count" field.
|
||||||
|
func OperationalCountGTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldOperationalCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationalCountLT applies the LT predicate on the "operational_count" field.
|
||||||
|
func OperationalCountLT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldOperationalCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperationalCountLTE applies the LTE predicate on the "operational_count" field.
|
||||||
|
func OperationalCountLTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldOperationalCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DegradedCountEQ applies the EQ predicate on the "degraded_count" field.
|
||||||
|
func DegradedCountEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldDegradedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DegradedCountNEQ applies the NEQ predicate on the "degraded_count" field.
|
||||||
|
func DegradedCountNEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldDegradedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DegradedCountIn applies the In predicate on the "degraded_count" field.
|
||||||
|
func DegradedCountIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldDegradedCount, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DegradedCountNotIn applies the NotIn predicate on the "degraded_count" field.
|
||||||
|
func DegradedCountNotIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldDegradedCount, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DegradedCountGT applies the GT predicate on the "degraded_count" field.
|
||||||
|
func DegradedCountGT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldDegradedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DegradedCountGTE applies the GTE predicate on the "degraded_count" field.
|
||||||
|
func DegradedCountGTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldDegradedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DegradedCountLT applies the LT predicate on the "degraded_count" field.
|
||||||
|
func DegradedCountLT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldDegradedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DegradedCountLTE applies the LTE predicate on the "degraded_count" field.
|
||||||
|
func DegradedCountLTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldDegradedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FailedCountEQ applies the EQ predicate on the "failed_count" field.
|
||||||
|
func FailedCountEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldFailedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FailedCountNEQ applies the NEQ predicate on the "failed_count" field.
|
||||||
|
func FailedCountNEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldFailedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FailedCountIn applies the In predicate on the "failed_count" field.
|
||||||
|
func FailedCountIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldFailedCount, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FailedCountNotIn applies the NotIn predicate on the "failed_count" field.
|
||||||
|
func FailedCountNotIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldFailedCount, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FailedCountGT applies the GT predicate on the "failed_count" field.
|
||||||
|
func FailedCountGT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldFailedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FailedCountGTE applies the GTE predicate on the "failed_count" field.
|
||||||
|
func FailedCountGTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldFailedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FailedCountLT applies the LT predicate on the "failed_count" field.
|
||||||
|
func FailedCountLT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldFailedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FailedCountLTE applies the LTE predicate on the "failed_count" field.
|
||||||
|
func FailedCountLTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldFailedCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorCountEQ applies the EQ predicate on the "error_count" field.
|
||||||
|
func ErrorCountEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldErrorCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorCountNEQ applies the NEQ predicate on the "error_count" field.
|
||||||
|
func ErrorCountNEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldErrorCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorCountIn applies the In predicate on the "error_count" field.
|
||||||
|
func ErrorCountIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldErrorCount, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorCountNotIn applies the NotIn predicate on the "error_count" field.
|
||||||
|
func ErrorCountNotIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldErrorCount, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorCountGT applies the GT predicate on the "error_count" field.
|
||||||
|
func ErrorCountGT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldErrorCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorCountGTE applies the GTE predicate on the "error_count" field.
|
||||||
|
func ErrorCountGTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldErrorCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorCountLT applies the LT predicate on the "error_count" field.
|
||||||
|
func ErrorCountLT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldErrorCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrorCountLTE applies the LTE predicate on the "error_count" field.
|
||||||
|
func ErrorCountLTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldErrorCount, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumLatencyMsEQ applies the EQ predicate on the "sum_latency_ms" field.
|
||||||
|
func SumLatencyMsEQ(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldSumLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumLatencyMsNEQ applies the NEQ predicate on the "sum_latency_ms" field.
|
||||||
|
func SumLatencyMsNEQ(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldSumLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumLatencyMsIn applies the In predicate on the "sum_latency_ms" field.
|
||||||
|
func SumLatencyMsIn(vs ...int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldSumLatencyMs, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumLatencyMsNotIn applies the NotIn predicate on the "sum_latency_ms" field.
|
||||||
|
func SumLatencyMsNotIn(vs ...int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldSumLatencyMs, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumLatencyMsGT applies the GT predicate on the "sum_latency_ms" field.
|
||||||
|
func SumLatencyMsGT(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldSumLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumLatencyMsGTE applies the GTE predicate on the "sum_latency_ms" field.
|
||||||
|
func SumLatencyMsGTE(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldSumLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumLatencyMsLT applies the LT predicate on the "sum_latency_ms" field.
|
||||||
|
func SumLatencyMsLT(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldSumLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumLatencyMsLTE applies the LTE predicate on the "sum_latency_ms" field.
|
||||||
|
func SumLatencyMsLTE(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldSumLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountLatencyEQ applies the EQ predicate on the "count_latency" field.
|
||||||
|
func CountLatencyEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldCountLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountLatencyNEQ applies the NEQ predicate on the "count_latency" field.
|
||||||
|
func CountLatencyNEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldCountLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountLatencyIn applies the In predicate on the "count_latency" field.
|
||||||
|
func CountLatencyIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldCountLatency, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountLatencyNotIn applies the NotIn predicate on the "count_latency" field.
|
||||||
|
func CountLatencyNotIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldCountLatency, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountLatencyGT applies the GT predicate on the "count_latency" field.
|
||||||
|
func CountLatencyGT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldCountLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountLatencyGTE applies the GTE predicate on the "count_latency" field.
|
||||||
|
func CountLatencyGTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldCountLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountLatencyLT applies the LT predicate on the "count_latency" field.
|
||||||
|
func CountLatencyLT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldCountLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountLatencyLTE applies the LTE predicate on the "count_latency" field.
|
||||||
|
func CountLatencyLTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldCountLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumPingLatencyMsEQ applies the EQ predicate on the "sum_ping_latency_ms" field.
|
||||||
|
func SumPingLatencyMsEQ(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldSumPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumPingLatencyMsNEQ applies the NEQ predicate on the "sum_ping_latency_ms" field.
|
||||||
|
func SumPingLatencyMsNEQ(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldSumPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumPingLatencyMsIn applies the In predicate on the "sum_ping_latency_ms" field.
|
||||||
|
func SumPingLatencyMsIn(vs ...int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldSumPingLatencyMs, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumPingLatencyMsNotIn applies the NotIn predicate on the "sum_ping_latency_ms" field.
|
||||||
|
func SumPingLatencyMsNotIn(vs ...int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldSumPingLatencyMs, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumPingLatencyMsGT applies the GT predicate on the "sum_ping_latency_ms" field.
|
||||||
|
func SumPingLatencyMsGT(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldSumPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumPingLatencyMsGTE applies the GTE predicate on the "sum_ping_latency_ms" field.
|
||||||
|
func SumPingLatencyMsGTE(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldSumPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumPingLatencyMsLT applies the LT predicate on the "sum_ping_latency_ms" field.
|
||||||
|
func SumPingLatencyMsLT(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldSumPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SumPingLatencyMsLTE applies the LTE predicate on the "sum_ping_latency_ms" field.
|
||||||
|
func SumPingLatencyMsLTE(v int64) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldSumPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountPingLatencyEQ applies the EQ predicate on the "count_ping_latency" field.
|
||||||
|
func CountPingLatencyEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldCountPingLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountPingLatencyNEQ applies the NEQ predicate on the "count_ping_latency" field.
|
||||||
|
func CountPingLatencyNEQ(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldCountPingLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountPingLatencyIn applies the In predicate on the "count_ping_latency" field.
|
||||||
|
func CountPingLatencyIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldCountPingLatency, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountPingLatencyNotIn applies the NotIn predicate on the "count_ping_latency" field.
|
||||||
|
func CountPingLatencyNotIn(vs ...int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldCountPingLatency, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountPingLatencyGT applies the GT predicate on the "count_ping_latency" field.
|
||||||
|
func CountPingLatencyGT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldCountPingLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountPingLatencyGTE applies the GTE predicate on the "count_ping_latency" field.
|
||||||
|
func CountPingLatencyGTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldCountPingLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountPingLatencyLT applies the LT predicate on the "count_ping_latency" field.
|
||||||
|
func CountPingLatencyLT(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldCountPingLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountPingLatencyLTE applies the LTE predicate on the "count_ping_latency" field.
|
||||||
|
func CountPingLatencyLTE(v int) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldCountPingLatency, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputedAtEQ applies the EQ predicate on the "computed_at" field.
|
||||||
|
func ComputedAtEQ(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldEQ(FieldComputedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputedAtNEQ applies the NEQ predicate on the "computed_at" field.
|
||||||
|
func ComputedAtNEQ(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNEQ(FieldComputedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputedAtIn applies the In predicate on the "computed_at" field.
|
||||||
|
func ComputedAtIn(vs ...time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldIn(FieldComputedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputedAtNotIn applies the NotIn predicate on the "computed_at" field.
|
||||||
|
func ComputedAtNotIn(vs ...time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldNotIn(FieldComputedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputedAtGT applies the GT predicate on the "computed_at" field.
|
||||||
|
func ComputedAtGT(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGT(FieldComputedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputedAtGTE applies the GTE predicate on the "computed_at" field.
|
||||||
|
func ComputedAtGTE(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldGTE(FieldComputedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputedAtLT applies the LT predicate on the "computed_at" field.
|
||||||
|
func ComputedAtLT(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLT(FieldComputedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputedAtLTE applies the LTE predicate on the "computed_at" field.
|
||||||
|
func ComputedAtLTE(v time.Time) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.FieldLTE(FieldComputedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasMonitor applies the HasEdge predicate on the "monitor" edge.
|
||||||
|
func HasMonitor() predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(func(s *sql.Selector) {
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, true, MonitorTable, MonitorColumn),
|
||||||
|
)
|
||||||
|
sqlgraph.HasNeighbors(s, step)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasMonitorWith applies the HasEdge predicate on the "monitor" edge with a given conditions (other predicates).
|
||||||
|
func HasMonitorWith(preds ...predicate.ChannelMonitor) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(func(s *sql.Selector) {
|
||||||
|
step := newMonitorStep()
|
||||||
|
sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) {
|
||||||
|
for _, p := range preds {
|
||||||
|
p(s)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// And groups predicates with the AND operator between them.
|
||||||
|
func And(predicates ...predicate.ChannelMonitorDailyRollup) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.AndPredicates(predicates...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Or groups predicates with the OR operator between them.
|
||||||
|
func Or(predicates ...predicate.ChannelMonitorDailyRollup) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.OrPredicates(predicates...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not applies the not operator on the given predicate.
|
||||||
|
func Not(p predicate.ChannelMonitorDailyRollup) predicate.ChannelMonitorDailyRollup {
|
||||||
|
return predicate.ChannelMonitorDailyRollup(sql.NotPredicates(p))
|
||||||
|
}
|
||||||
1509
backend/ent/channelmonitordailyrollup_create.go
Normal file
1509
backend/ent/channelmonitordailyrollup_create.go
Normal file
File diff suppressed because it is too large
Load Diff
88
backend/ent/channelmonitordailyrollup_delete.go
Normal file
88
backend/ent/channelmonitordailyrollup_delete.go
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitordailyrollup"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollupDelete is the builder for deleting a ChannelMonitorDailyRollup entity.
|
||||||
|
type ChannelMonitorDailyRollupDelete struct {
|
||||||
|
config
|
||||||
|
hooks []Hook
|
||||||
|
mutation *ChannelMonitorDailyRollupMutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorDailyRollupDelete builder.
|
||||||
|
func (_d *ChannelMonitorDailyRollupDelete) Where(ps ...predicate.ChannelMonitorDailyRollup) *ChannelMonitorDailyRollupDelete {
|
||||||
|
_d.mutation.Where(ps...)
|
||||||
|
return _d
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the deletion query and returns how many vertices were deleted.
|
||||||
|
func (_d *ChannelMonitorDailyRollupDelete) Exec(ctx context.Context) (int, error) {
|
||||||
|
return withHooks(ctx, _d.sqlExec, _d.mutation, _d.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_d *ChannelMonitorDailyRollupDelete) ExecX(ctx context.Context) int {
|
||||||
|
n, err := _d.Exec(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_d *ChannelMonitorDailyRollupDelete) sqlExec(ctx context.Context) (int, error) {
|
||||||
|
_spec := sqlgraph.NewDeleteSpec(channelmonitordailyrollup.Table, sqlgraph.NewFieldSpec(channelmonitordailyrollup.FieldID, field.TypeInt64))
|
||||||
|
if ps := _d.mutation.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
affected, err := sqlgraph.DeleteNodes(ctx, _d.driver, _spec)
|
||||||
|
if err != nil && sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
_d.mutation.done = true
|
||||||
|
return affected, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollupDeleteOne is the builder for deleting a single ChannelMonitorDailyRollup entity.
|
||||||
|
type ChannelMonitorDailyRollupDeleteOne struct {
|
||||||
|
_d *ChannelMonitorDailyRollupDelete
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorDailyRollupDelete builder.
|
||||||
|
func (_d *ChannelMonitorDailyRollupDeleteOne) Where(ps ...predicate.ChannelMonitorDailyRollup) *ChannelMonitorDailyRollupDeleteOne {
|
||||||
|
_d._d.mutation.Where(ps...)
|
||||||
|
return _d
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the deletion query.
|
||||||
|
func (_d *ChannelMonitorDailyRollupDeleteOne) Exec(ctx context.Context) error {
|
||||||
|
n, err := _d._d.Exec(ctx)
|
||||||
|
switch {
|
||||||
|
case err != nil:
|
||||||
|
return err
|
||||||
|
case n == 0:
|
||||||
|
return &NotFoundError{channelmonitordailyrollup.Label}
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_d *ChannelMonitorDailyRollupDeleteOne) ExecX(ctx context.Context) {
|
||||||
|
if err := _d.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
643
backend/ent/channelmonitordailyrollup_query.go
Normal file
643
backend/ent/channelmonitordailyrollup_query.go
Normal file
@ -0,0 +1,643 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect"
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitordailyrollup"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollupQuery is the builder for querying ChannelMonitorDailyRollup entities.
|
||||||
|
type ChannelMonitorDailyRollupQuery struct {
|
||||||
|
config
|
||||||
|
ctx *QueryContext
|
||||||
|
order []channelmonitordailyrollup.OrderOption
|
||||||
|
inters []Interceptor
|
||||||
|
predicates []predicate.ChannelMonitorDailyRollup
|
||||||
|
withMonitor *ChannelMonitorQuery
|
||||||
|
modifiers []func(*sql.Selector)
|
||||||
|
// intermediate query (i.e. traversal path).
|
||||||
|
sql *sql.Selector
|
||||||
|
path func(context.Context) (*sql.Selector, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where adds a new predicate for the ChannelMonitorDailyRollupQuery builder.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Where(ps ...predicate.ChannelMonitorDailyRollup) *ChannelMonitorDailyRollupQuery {
|
||||||
|
_q.predicates = append(_q.predicates, ps...)
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Limit the number of records to be returned by this query.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Limit(limit int) *ChannelMonitorDailyRollupQuery {
|
||||||
|
_q.ctx.Limit = &limit
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Offset to start from.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Offset(offset int) *ChannelMonitorDailyRollupQuery {
|
||||||
|
_q.ctx.Offset = &offset
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unique configures the query builder to filter duplicate records on query.
|
||||||
|
// By default, unique is set to true, and can be disabled using this method.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Unique(unique bool) *ChannelMonitorDailyRollupQuery {
|
||||||
|
_q.ctx.Unique = &unique
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Order specifies how the records should be ordered.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Order(o ...channelmonitordailyrollup.OrderOption) *ChannelMonitorDailyRollupQuery {
|
||||||
|
_q.order = append(_q.order, o...)
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMonitor chains the current query on the "monitor" edge.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) QueryMonitor() *ChannelMonitorQuery {
|
||||||
|
query := (&ChannelMonitorClient{config: _q.config}).Query()
|
||||||
|
query.path = func(ctx context.Context) (fromU *sql.Selector, err error) {
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
selector := _q.sqlQuery(ctx)
|
||||||
|
if err := selector.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitordailyrollup.Table, channelmonitordailyrollup.FieldID, selector),
|
||||||
|
sqlgraph.To(channelmonitor.Table, channelmonitor.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, true, channelmonitordailyrollup.MonitorTable, channelmonitordailyrollup.MonitorColumn),
|
||||||
|
)
|
||||||
|
fromU = sqlgraph.SetNeighbors(_q.driver.Dialect(), step)
|
||||||
|
return fromU, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// First returns the first ChannelMonitorDailyRollup entity from the query.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitorDailyRollup was found.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) First(ctx context.Context) (*ChannelMonitorDailyRollup, error) {
|
||||||
|
nodes, err := _q.Limit(1).All(setContextOp(ctx, _q.ctx, ent.OpQueryFirst))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(nodes) == 0 {
|
||||||
|
return nil, &NotFoundError{channelmonitordailyrollup.Label}
|
||||||
|
}
|
||||||
|
return nodes[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstX is like First, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) FirstX(ctx context.Context) *ChannelMonitorDailyRollup {
|
||||||
|
node, err := _q.First(ctx)
|
||||||
|
if err != nil && !IsNotFound(err) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstID returns the first ChannelMonitorDailyRollup ID from the query.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitorDailyRollup ID was found.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) FirstID(ctx context.Context) (id int64, err error) {
|
||||||
|
var ids []int64
|
||||||
|
if ids, err = _q.Limit(1).IDs(setContextOp(ctx, _q.ctx, ent.OpQueryFirstID)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(ids) == 0 {
|
||||||
|
err = &NotFoundError{channelmonitordailyrollup.Label}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return ids[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstIDX is like FirstID, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) FirstIDX(ctx context.Context) int64 {
|
||||||
|
id, err := _q.FirstID(ctx)
|
||||||
|
if err != nil && !IsNotFound(err) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only returns a single ChannelMonitorDailyRollup entity found by the query, ensuring it only returns one.
|
||||||
|
// Returns a *NotSingularError when more than one ChannelMonitorDailyRollup entity is found.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitorDailyRollup entities are found.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Only(ctx context.Context) (*ChannelMonitorDailyRollup, error) {
|
||||||
|
nodes, err := _q.Limit(2).All(setContextOp(ctx, _q.ctx, ent.OpQueryOnly))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
switch len(nodes) {
|
||||||
|
case 1:
|
||||||
|
return nodes[0], nil
|
||||||
|
case 0:
|
||||||
|
return nil, &NotFoundError{channelmonitordailyrollup.Label}
|
||||||
|
default:
|
||||||
|
return nil, &NotSingularError{channelmonitordailyrollup.Label}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyX is like Only, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) OnlyX(ctx context.Context) *ChannelMonitorDailyRollup {
|
||||||
|
node, err := _q.Only(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyID is like Only, but returns the only ChannelMonitorDailyRollup ID in the query.
|
||||||
|
// Returns a *NotSingularError when more than one ChannelMonitorDailyRollup ID is found.
|
||||||
|
// Returns a *NotFoundError when no entities are found.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) OnlyID(ctx context.Context) (id int64, err error) {
|
||||||
|
var ids []int64
|
||||||
|
if ids, err = _q.Limit(2).IDs(setContextOp(ctx, _q.ctx, ent.OpQueryOnlyID)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch len(ids) {
|
||||||
|
case 1:
|
||||||
|
id = ids[0]
|
||||||
|
case 0:
|
||||||
|
err = &NotFoundError{channelmonitordailyrollup.Label}
|
||||||
|
default:
|
||||||
|
err = &NotSingularError{channelmonitordailyrollup.Label}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyIDX is like OnlyID, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) OnlyIDX(ctx context.Context) int64 {
|
||||||
|
id, err := _q.OnlyID(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// All executes the query and returns a list of ChannelMonitorDailyRollups.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) All(ctx context.Context) ([]*ChannelMonitorDailyRollup, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryAll)
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
qr := querierAll[[]*ChannelMonitorDailyRollup, *ChannelMonitorDailyRollupQuery]()
|
||||||
|
return withInterceptors[[]*ChannelMonitorDailyRollup](ctx, _q, qr, _q.inters)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AllX is like All, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) AllX(ctx context.Context) []*ChannelMonitorDailyRollup {
|
||||||
|
nodes, err := _q.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return nodes
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDs executes the query and returns a list of ChannelMonitorDailyRollup IDs.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) IDs(ctx context.Context) (ids []int64, err error) {
|
||||||
|
if _q.ctx.Unique == nil && _q.path != nil {
|
||||||
|
_q.Unique(true)
|
||||||
|
}
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryIDs)
|
||||||
|
if err = _q.Select(channelmonitordailyrollup.FieldID).Scan(ctx, &ids); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ids, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDsX is like IDs, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) IDsX(ctx context.Context) []int64 {
|
||||||
|
ids, err := _q.IDs(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return ids
|
||||||
|
}
|
||||||
|
|
||||||
|
// Count returns the count of the given query.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Count(ctx context.Context) (int, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryCount)
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return withInterceptors[int](ctx, _q, querierCount[*ChannelMonitorDailyRollupQuery](), _q.inters)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountX is like Count, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) CountX(ctx context.Context) int {
|
||||||
|
count, err := _q.Count(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exist returns true if the query has elements in the graph.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Exist(ctx context.Context) (bool, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryExist)
|
||||||
|
switch _, err := _q.FirstID(ctx); {
|
||||||
|
case IsNotFound(err):
|
||||||
|
return false, nil
|
||||||
|
case err != nil:
|
||||||
|
return false, fmt.Errorf("ent: check existence: %w", err)
|
||||||
|
default:
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExistX is like Exist, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) ExistX(ctx context.Context) bool {
|
||||||
|
exist, err := _q.Exist(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return exist
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clone returns a duplicate of the ChannelMonitorDailyRollupQuery builder, including all associated steps. It can be
|
||||||
|
// used to prepare common query builders and use them differently after the clone is made.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Clone() *ChannelMonitorDailyRollupQuery {
|
||||||
|
if _q == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &ChannelMonitorDailyRollupQuery{
|
||||||
|
config: _q.config,
|
||||||
|
ctx: _q.ctx.Clone(),
|
||||||
|
order: append([]channelmonitordailyrollup.OrderOption{}, _q.order...),
|
||||||
|
inters: append([]Interceptor{}, _q.inters...),
|
||||||
|
predicates: append([]predicate.ChannelMonitorDailyRollup{}, _q.predicates...),
|
||||||
|
withMonitor: _q.withMonitor.Clone(),
|
||||||
|
// clone intermediate query.
|
||||||
|
sql: _q.sql.Clone(),
|
||||||
|
path: _q.path,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMonitor tells the query-builder to eager-load the nodes that are connected to
|
||||||
|
// the "monitor" edge. The optional arguments are used to configure the query builder of the edge.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) WithMonitor(opts ...func(*ChannelMonitorQuery)) *ChannelMonitorDailyRollupQuery {
|
||||||
|
query := (&ChannelMonitorClient{config: _q.config}).Query()
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(query)
|
||||||
|
}
|
||||||
|
_q.withMonitor = query
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupBy is used to group vertices by one or more fields/columns.
|
||||||
|
// It is often used with aggregate functions, like: count, max, mean, min, sum.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var v []struct {
|
||||||
|
// MonitorID int64 `json:"monitor_id,omitempty"`
|
||||||
|
// Count int `json:"count,omitempty"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorDailyRollup.Query().
|
||||||
|
// GroupBy(channelmonitordailyrollup.FieldMonitorID).
|
||||||
|
// Aggregate(ent.Count()).
|
||||||
|
// Scan(ctx, &v)
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) GroupBy(field string, fields ...string) *ChannelMonitorDailyRollupGroupBy {
|
||||||
|
_q.ctx.Fields = append([]string{field}, fields...)
|
||||||
|
grbuild := &ChannelMonitorDailyRollupGroupBy{build: _q}
|
||||||
|
grbuild.flds = &_q.ctx.Fields
|
||||||
|
grbuild.label = channelmonitordailyrollup.Label
|
||||||
|
grbuild.scan = grbuild.Scan
|
||||||
|
return grbuild
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select allows the selection one or more fields/columns for the given query,
|
||||||
|
// instead of selecting all fields in the entity.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var v []struct {
|
||||||
|
// MonitorID int64 `json:"monitor_id,omitempty"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorDailyRollup.Query().
|
||||||
|
// Select(channelmonitordailyrollup.FieldMonitorID).
|
||||||
|
// Scan(ctx, &v)
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Select(fields ...string) *ChannelMonitorDailyRollupSelect {
|
||||||
|
_q.ctx.Fields = append(_q.ctx.Fields, fields...)
|
||||||
|
sbuild := &ChannelMonitorDailyRollupSelect{ChannelMonitorDailyRollupQuery: _q}
|
||||||
|
sbuild.label = channelmonitordailyrollup.Label
|
||||||
|
sbuild.flds, sbuild.scan = &_q.ctx.Fields, sbuild.Scan
|
||||||
|
return sbuild
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate returns a ChannelMonitorDailyRollupSelect configured with the given aggregations.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) Aggregate(fns ...AggregateFunc) *ChannelMonitorDailyRollupSelect {
|
||||||
|
return _q.Select().Aggregate(fns...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) prepareQuery(ctx context.Context) error {
|
||||||
|
for _, inter := range _q.inters {
|
||||||
|
if inter == nil {
|
||||||
|
return fmt.Errorf("ent: uninitialized interceptor (forgotten import ent/runtime?)")
|
||||||
|
}
|
||||||
|
if trv, ok := inter.(Traverser); ok {
|
||||||
|
if err := trv.Traverse(ctx, _q); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, f := range _q.ctx.Fields {
|
||||||
|
if !channelmonitordailyrollup.ValidColumn(f) {
|
||||||
|
return &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _q.path != nil {
|
||||||
|
prev, err := _q.path(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_q.sql = prev
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*ChannelMonitorDailyRollup, error) {
|
||||||
|
var (
|
||||||
|
nodes = []*ChannelMonitorDailyRollup{}
|
||||||
|
_spec = _q.querySpec()
|
||||||
|
loadedTypes = [1]bool{
|
||||||
|
_q.withMonitor != nil,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
_spec.ScanValues = func(columns []string) ([]any, error) {
|
||||||
|
return (*ChannelMonitorDailyRollup).scanValues(nil, columns)
|
||||||
|
}
|
||||||
|
_spec.Assign = func(columns []string, values []any) error {
|
||||||
|
node := &ChannelMonitorDailyRollup{config: _q.config}
|
||||||
|
nodes = append(nodes, node)
|
||||||
|
node.Edges.loadedTypes = loadedTypes
|
||||||
|
return node.assignValues(columns, values)
|
||||||
|
}
|
||||||
|
if len(_q.modifiers) > 0 {
|
||||||
|
_spec.Modifiers = _q.modifiers
|
||||||
|
}
|
||||||
|
for i := range hooks {
|
||||||
|
hooks[i](ctx, _spec)
|
||||||
|
}
|
||||||
|
if err := sqlgraph.QueryNodes(ctx, _q.driver, _spec); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(nodes) == 0 {
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
|
if query := _q.withMonitor; query != nil {
|
||||||
|
if err := _q.loadMonitor(ctx, query, nodes, nil,
|
||||||
|
func(n *ChannelMonitorDailyRollup, e *ChannelMonitor) { n.Edges.Monitor = e }); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) loadMonitor(ctx context.Context, query *ChannelMonitorQuery, nodes []*ChannelMonitorDailyRollup, init func(*ChannelMonitorDailyRollup), assign func(*ChannelMonitorDailyRollup, *ChannelMonitor)) error {
|
||||||
|
ids := make([]int64, 0, len(nodes))
|
||||||
|
nodeids := make(map[int64][]*ChannelMonitorDailyRollup)
|
||||||
|
for i := range nodes {
|
||||||
|
fk := nodes[i].MonitorID
|
||||||
|
if _, ok := nodeids[fk]; !ok {
|
||||||
|
ids = append(ids, fk)
|
||||||
|
}
|
||||||
|
nodeids[fk] = append(nodeids[fk], nodes[i])
|
||||||
|
}
|
||||||
|
if len(ids) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
query.Where(channelmonitor.IDIn(ids...))
|
||||||
|
neighbors, err := query.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, n := range neighbors {
|
||||||
|
nodes, ok := nodeids[n.ID]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf(`unexpected foreign-key "monitor_id" returned %v`, n.ID)
|
||||||
|
}
|
||||||
|
for i := range nodes {
|
||||||
|
assign(nodes[i], n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) sqlCount(ctx context.Context) (int, error) {
|
||||||
|
_spec := _q.querySpec()
|
||||||
|
if len(_q.modifiers) > 0 {
|
||||||
|
_spec.Modifiers = _q.modifiers
|
||||||
|
}
|
||||||
|
_spec.Node.Columns = _q.ctx.Fields
|
||||||
|
if len(_q.ctx.Fields) > 0 {
|
||||||
|
_spec.Unique = _q.ctx.Unique != nil && *_q.ctx.Unique
|
||||||
|
}
|
||||||
|
return sqlgraph.CountNodes(ctx, _q.driver, _spec)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) querySpec() *sqlgraph.QuerySpec {
|
||||||
|
_spec := sqlgraph.NewQuerySpec(channelmonitordailyrollup.Table, channelmonitordailyrollup.Columns, sqlgraph.NewFieldSpec(channelmonitordailyrollup.FieldID, field.TypeInt64))
|
||||||
|
_spec.From = _q.sql
|
||||||
|
if unique := _q.ctx.Unique; unique != nil {
|
||||||
|
_spec.Unique = *unique
|
||||||
|
} else if _q.path != nil {
|
||||||
|
_spec.Unique = true
|
||||||
|
}
|
||||||
|
if fields := _q.ctx.Fields; len(fields) > 0 {
|
||||||
|
_spec.Node.Columns = make([]string, 0, len(fields))
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, channelmonitordailyrollup.FieldID)
|
||||||
|
for i := range fields {
|
||||||
|
if fields[i] != channelmonitordailyrollup.FieldID {
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, fields[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _q.withMonitor != nil {
|
||||||
|
_spec.Node.AddColumnOnce(channelmonitordailyrollup.FieldMonitorID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ps := _q.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if limit := _q.ctx.Limit; limit != nil {
|
||||||
|
_spec.Limit = *limit
|
||||||
|
}
|
||||||
|
if offset := _q.ctx.Offset; offset != nil {
|
||||||
|
_spec.Offset = *offset
|
||||||
|
}
|
||||||
|
if ps := _q.order; len(ps) > 0 {
|
||||||
|
_spec.Order = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _spec
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) sqlQuery(ctx context.Context) *sql.Selector {
|
||||||
|
builder := sql.Dialect(_q.driver.Dialect())
|
||||||
|
t1 := builder.Table(channelmonitordailyrollup.Table)
|
||||||
|
columns := _q.ctx.Fields
|
||||||
|
if len(columns) == 0 {
|
||||||
|
columns = channelmonitordailyrollup.Columns
|
||||||
|
}
|
||||||
|
selector := builder.Select(t1.Columns(columns...)...).From(t1)
|
||||||
|
if _q.sql != nil {
|
||||||
|
selector = _q.sql
|
||||||
|
selector.Select(selector.Columns(columns...)...)
|
||||||
|
}
|
||||||
|
if _q.ctx.Unique != nil && *_q.ctx.Unique {
|
||||||
|
selector.Distinct()
|
||||||
|
}
|
||||||
|
for _, m := range _q.modifiers {
|
||||||
|
m(selector)
|
||||||
|
}
|
||||||
|
for _, p := range _q.predicates {
|
||||||
|
p(selector)
|
||||||
|
}
|
||||||
|
for _, p := range _q.order {
|
||||||
|
p(selector)
|
||||||
|
}
|
||||||
|
if offset := _q.ctx.Offset; offset != nil {
|
||||||
|
// limit is mandatory for offset clause. We start
|
||||||
|
// with default value, and override it below if needed.
|
||||||
|
selector.Offset(*offset).Limit(math.MaxInt32)
|
||||||
|
}
|
||||||
|
if limit := _q.ctx.Limit; limit != nil {
|
||||||
|
selector.Limit(*limit)
|
||||||
|
}
|
||||||
|
return selector
|
||||||
|
}
|
||||||
|
|
||||||
|
// ForUpdate locks the selected rows against concurrent updates, and prevent them from being
|
||||||
|
// updated, deleted or "selected ... for update" by other sessions, until the transaction is
|
||||||
|
// either committed or rolled-back.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) ForUpdate(opts ...sql.LockOption) *ChannelMonitorDailyRollupQuery {
|
||||||
|
if _q.driver.Dialect() == dialect.Postgres {
|
||||||
|
_q.Unique(false)
|
||||||
|
}
|
||||||
|
_q.modifiers = append(_q.modifiers, func(s *sql.Selector) {
|
||||||
|
s.ForUpdate(opts...)
|
||||||
|
})
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// ForShare behaves similarly to ForUpdate, except that it acquires a shared mode lock
|
||||||
|
// on any rows that are read. Other sessions can read the rows, but cannot modify them
|
||||||
|
// until your transaction commits.
|
||||||
|
func (_q *ChannelMonitorDailyRollupQuery) ForShare(opts ...sql.LockOption) *ChannelMonitorDailyRollupQuery {
|
||||||
|
if _q.driver.Dialect() == dialect.Postgres {
|
||||||
|
_q.Unique(false)
|
||||||
|
}
|
||||||
|
_q.modifiers = append(_q.modifiers, func(s *sql.Selector) {
|
||||||
|
s.ForShare(opts...)
|
||||||
|
})
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollupGroupBy is the group-by builder for ChannelMonitorDailyRollup entities.
|
||||||
|
type ChannelMonitorDailyRollupGroupBy struct {
|
||||||
|
selector
|
||||||
|
build *ChannelMonitorDailyRollupQuery
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate adds the given aggregation functions to the group-by query.
|
||||||
|
func (_g *ChannelMonitorDailyRollupGroupBy) Aggregate(fns ...AggregateFunc) *ChannelMonitorDailyRollupGroupBy {
|
||||||
|
_g.fns = append(_g.fns, fns...)
|
||||||
|
return _g
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan applies the selector query and scans the result into the given value.
|
||||||
|
func (_g *ChannelMonitorDailyRollupGroupBy) Scan(ctx context.Context, v any) error {
|
||||||
|
ctx = setContextOp(ctx, _g.build.ctx, ent.OpQueryGroupBy)
|
||||||
|
if err := _g.build.prepareQuery(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return scanWithInterceptors[*ChannelMonitorDailyRollupQuery, *ChannelMonitorDailyRollupGroupBy](ctx, _g.build, _g, _g.build.inters, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_g *ChannelMonitorDailyRollupGroupBy) sqlScan(ctx context.Context, root *ChannelMonitorDailyRollupQuery, v any) error {
|
||||||
|
selector := root.sqlQuery(ctx).Select()
|
||||||
|
aggregation := make([]string, 0, len(_g.fns))
|
||||||
|
for _, fn := range _g.fns {
|
||||||
|
aggregation = append(aggregation, fn(selector))
|
||||||
|
}
|
||||||
|
if len(selector.SelectedColumns()) == 0 {
|
||||||
|
columns := make([]string, 0, len(*_g.flds)+len(_g.fns))
|
||||||
|
for _, f := range *_g.flds {
|
||||||
|
columns = append(columns, selector.C(f))
|
||||||
|
}
|
||||||
|
columns = append(columns, aggregation...)
|
||||||
|
selector.Select(columns...)
|
||||||
|
}
|
||||||
|
selector.GroupBy(selector.Columns(*_g.flds...)...)
|
||||||
|
if err := selector.Err(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
rows := &sql.Rows{}
|
||||||
|
query, args := selector.Query()
|
||||||
|
if err := _g.build.driver.Query(ctx, query, args, rows); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return sql.ScanSlice(rows, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollupSelect is the builder for selecting fields of ChannelMonitorDailyRollup entities.
|
||||||
|
type ChannelMonitorDailyRollupSelect struct {
|
||||||
|
*ChannelMonitorDailyRollupQuery
|
||||||
|
selector
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate adds the given aggregation functions to the selector query.
|
||||||
|
func (_s *ChannelMonitorDailyRollupSelect) Aggregate(fns ...AggregateFunc) *ChannelMonitorDailyRollupSelect {
|
||||||
|
_s.fns = append(_s.fns, fns...)
|
||||||
|
return _s
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan applies the selector query and scans the result into the given value.
|
||||||
|
func (_s *ChannelMonitorDailyRollupSelect) Scan(ctx context.Context, v any) error {
|
||||||
|
ctx = setContextOp(ctx, _s.ctx, ent.OpQuerySelect)
|
||||||
|
if err := _s.prepareQuery(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return scanWithInterceptors[*ChannelMonitorDailyRollupQuery, *ChannelMonitorDailyRollupSelect](ctx, _s.ChannelMonitorDailyRollupQuery, _s, _s.inters, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_s *ChannelMonitorDailyRollupSelect) sqlScan(ctx context.Context, root *ChannelMonitorDailyRollupQuery, v any) error {
|
||||||
|
selector := root.sqlQuery(ctx)
|
||||||
|
aggregation := make([]string, 0, len(_s.fns))
|
||||||
|
for _, fn := range _s.fns {
|
||||||
|
aggregation = append(aggregation, fn(selector))
|
||||||
|
}
|
||||||
|
switch n := len(*_s.selector.flds); {
|
||||||
|
case n == 0 && len(aggregation) > 0:
|
||||||
|
selector.Select(aggregation...)
|
||||||
|
case n != 0 && len(aggregation) > 0:
|
||||||
|
selector.AppendSelect(aggregation...)
|
||||||
|
}
|
||||||
|
rows := &sql.Rows{}
|
||||||
|
query, args := selector.Query()
|
||||||
|
if err := _s.driver.Query(ctx, query, args, rows); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return sql.ScanSlice(rows, v)
|
||||||
|
}
|
||||||
961
backend/ent/channelmonitordailyrollup_update.go
Normal file
961
backend/ent/channelmonitordailyrollup_update.go
Normal file
@ -0,0 +1,961 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitordailyrollup"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollupUpdate is the builder for updating ChannelMonitorDailyRollup entities.
|
||||||
|
type ChannelMonitorDailyRollupUpdate struct {
|
||||||
|
config
|
||||||
|
hooks []Hook
|
||||||
|
mutation *ChannelMonitorDailyRollupMutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorDailyRollupUpdate builder.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) Where(ps ...predicate.ChannelMonitorDailyRollup) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.Where(ps...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitorID sets the "monitor_id" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetMonitorID(v int64) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.SetMonitorID(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableMonitorID sets the "monitor_id" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableMonitorID(v *int64) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetMonitorID(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetModel sets the "model" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetModel(v string) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.SetModel(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableModel sets the "model" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableModel(v *string) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetModel(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBucketDate sets the "bucket_date" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetBucketDate(v time.Time) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.SetBucketDate(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableBucketDate sets the "bucket_date" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableBucketDate(v *time.Time) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetBucketDate(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetTotalChecks sets the "total_checks" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetTotalChecks(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ResetTotalChecks()
|
||||||
|
_u.mutation.SetTotalChecks(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableTotalChecks sets the "total_checks" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableTotalChecks(v *int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetTotalChecks(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddTotalChecks adds value to the "total_checks" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) AddTotalChecks(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.AddTotalChecks(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOkCount sets the "ok_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetOkCount(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ResetOkCount()
|
||||||
|
_u.mutation.SetOkCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableOkCount sets the "ok_count" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableOkCount(v *int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetOkCount(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddOkCount adds value to the "ok_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) AddOkCount(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.AddOkCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOperationalCount sets the "operational_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetOperationalCount(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ResetOperationalCount()
|
||||||
|
_u.mutation.SetOperationalCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableOperationalCount sets the "operational_count" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableOperationalCount(v *int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetOperationalCount(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddOperationalCount adds value to the "operational_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) AddOperationalCount(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.AddOperationalCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDegradedCount sets the "degraded_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetDegradedCount(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ResetDegradedCount()
|
||||||
|
_u.mutation.SetDegradedCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableDegradedCount sets the "degraded_count" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableDegradedCount(v *int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetDegradedCount(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddDegradedCount adds value to the "degraded_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) AddDegradedCount(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.AddDegradedCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFailedCount sets the "failed_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetFailedCount(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ResetFailedCount()
|
||||||
|
_u.mutation.SetFailedCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableFailedCount sets the "failed_count" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableFailedCount(v *int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetFailedCount(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddFailedCount adds value to the "failed_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) AddFailedCount(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.AddFailedCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetErrorCount sets the "error_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetErrorCount(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ResetErrorCount()
|
||||||
|
_u.mutation.SetErrorCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableErrorCount sets the "error_count" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableErrorCount(v *int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetErrorCount(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddErrorCount adds value to the "error_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) AddErrorCount(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.AddErrorCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSumLatencyMs sets the "sum_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetSumLatencyMs(v int64) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ResetSumLatencyMs()
|
||||||
|
_u.mutation.SetSumLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableSumLatencyMs sets the "sum_latency_ms" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableSumLatencyMs(v *int64) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetSumLatencyMs(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddSumLatencyMs adds value to the "sum_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) AddSumLatencyMs(v int64) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.AddSumLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCountLatency sets the "count_latency" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetCountLatency(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ResetCountLatency()
|
||||||
|
_u.mutation.SetCountLatency(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableCountLatency sets the "count_latency" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableCountLatency(v *int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetCountLatency(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddCountLatency adds value to the "count_latency" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) AddCountLatency(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.AddCountLatency(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSumPingLatencyMs sets the "sum_ping_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetSumPingLatencyMs(v int64) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ResetSumPingLatencyMs()
|
||||||
|
_u.mutation.SetSumPingLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableSumPingLatencyMs sets the "sum_ping_latency_ms" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableSumPingLatencyMs(v *int64) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetSumPingLatencyMs(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddSumPingLatencyMs adds value to the "sum_ping_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) AddSumPingLatencyMs(v int64) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.AddSumPingLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCountPingLatency sets the "count_ping_latency" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetCountPingLatency(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ResetCountPingLatency()
|
||||||
|
_u.mutation.SetCountPingLatency(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableCountPingLatency sets the "count_ping_latency" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetNillableCountPingLatency(v *int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetCountPingLatency(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddCountPingLatency adds value to the "count_ping_latency" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) AddCountPingLatency(v int) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.AddCountPingLatency(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetComputedAt sets the "computed_at" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetComputedAt(v time.Time) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.SetComputedAt(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitor sets the "monitor" edge to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SetMonitor(v *ChannelMonitor) *ChannelMonitorDailyRollupUpdate {
|
||||||
|
return _u.SetMonitorID(v.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutation returns the ChannelMonitorDailyRollupMutation object of the builder.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) Mutation() *ChannelMonitorDailyRollupMutation {
|
||||||
|
return _u.mutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMonitor clears the "monitor" edge to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) ClearMonitor() *ChannelMonitorDailyRollupUpdate {
|
||||||
|
_u.mutation.ClearMonitor()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save executes the query and returns the number of nodes affected by the update operation.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) Save(ctx context.Context) (int, error) {
|
||||||
|
_u.defaults()
|
||||||
|
return withHooks(ctx, _u.sqlSave, _u.mutation, _u.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveX is like Save, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) SaveX(ctx context.Context) int {
|
||||||
|
affected, err := _u.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return affected
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) Exec(ctx context.Context) error {
|
||||||
|
_, err := _u.Save(ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) ExecX(ctx context.Context) {
|
||||||
|
if err := _u.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// defaults sets the default values of the builder before save.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) defaults() {
|
||||||
|
if _, ok := _u.mutation.ComputedAt(); !ok {
|
||||||
|
v := channelmonitordailyrollup.UpdateDefaultComputedAt()
|
||||||
|
_u.mutation.SetComputedAt(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check runs all checks and user-defined validators on the builder.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) check() error {
|
||||||
|
if v, ok := _u.mutation.Model(); ok {
|
||||||
|
if err := channelmonitordailyrollup.ModelValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "model", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorDailyRollup.model": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _u.mutation.MonitorCleared() && len(_u.mutation.MonitorIDs()) > 0 {
|
||||||
|
return errors.New(`ent: clearing a required unique edge "ChannelMonitorDailyRollup.monitor"`)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdate) sqlSave(ctx context.Context) (_node int, err error) {
|
||||||
|
if err := _u.check(); err != nil {
|
||||||
|
return _node, err
|
||||||
|
}
|
||||||
|
_spec := sqlgraph.NewUpdateSpec(channelmonitordailyrollup.Table, channelmonitordailyrollup.Columns, sqlgraph.NewFieldSpec(channelmonitordailyrollup.FieldID, field.TypeInt64))
|
||||||
|
if ps := _u.mutation.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Model(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldModel, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.BucketDate(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldBucketDate, field.TypeTime, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.TotalChecks(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldTotalChecks, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedTotalChecks(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldTotalChecks, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.OkCount(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldOkCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedOkCount(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldOkCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.OperationalCount(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldOperationalCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedOperationalCount(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldOperationalCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.DegradedCount(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldDegradedCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedDegradedCount(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldDegradedCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.FailedCount(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldFailedCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedFailedCount(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldFailedCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.ErrorCount(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldErrorCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedErrorCount(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldErrorCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.SumLatencyMs(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldSumLatencyMs, field.TypeInt64, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedSumLatencyMs(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldSumLatencyMs, field.TypeInt64, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.CountLatency(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldCountLatency, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedCountLatency(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldCountLatency, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.SumPingLatencyMs(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldSumPingLatencyMs, field.TypeInt64, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedSumPingLatencyMs(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldSumPingLatencyMs, field.TypeInt64, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.CountPingLatency(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldCountPingLatency, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedCountPingLatency(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldCountPingLatency, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.ComputedAt(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldComputedAt, field.TypeTime, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.MonitorCleared() {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.M2O,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitordailyrollup.MonitorTable,
|
||||||
|
Columns: []string{channelmonitordailyrollup.MonitorColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||||
|
}
|
||||||
|
if nodes := _u.mutation.MonitorIDs(); len(nodes) > 0 {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.M2O,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitordailyrollup.MonitorTable,
|
||||||
|
Columns: []string{channelmonitordailyrollup.MonitorColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, k := range nodes {
|
||||||
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||||
|
}
|
||||||
|
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||||
|
}
|
||||||
|
if _node, err = sqlgraph.UpdateNodes(ctx, _u.driver, _spec); err != nil {
|
||||||
|
if _, ok := err.(*sqlgraph.NotFoundError); ok {
|
||||||
|
err = &NotFoundError{channelmonitordailyrollup.Label}
|
||||||
|
} else if sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
_u.mutation.done = true
|
||||||
|
return _node, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollupUpdateOne is the builder for updating a single ChannelMonitorDailyRollup entity.
|
||||||
|
type ChannelMonitorDailyRollupUpdateOne struct {
|
||||||
|
config
|
||||||
|
fields []string
|
||||||
|
hooks []Hook
|
||||||
|
mutation *ChannelMonitorDailyRollupMutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitorID sets the "monitor_id" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetMonitorID(v int64) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.SetMonitorID(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableMonitorID sets the "monitor_id" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableMonitorID(v *int64) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetMonitorID(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetModel sets the "model" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetModel(v string) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.SetModel(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableModel sets the "model" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableModel(v *string) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetModel(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBucketDate sets the "bucket_date" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetBucketDate(v time.Time) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.SetBucketDate(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableBucketDate sets the "bucket_date" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableBucketDate(v *time.Time) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetBucketDate(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetTotalChecks sets the "total_checks" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetTotalChecks(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ResetTotalChecks()
|
||||||
|
_u.mutation.SetTotalChecks(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableTotalChecks sets the "total_checks" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableTotalChecks(v *int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetTotalChecks(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddTotalChecks adds value to the "total_checks" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) AddTotalChecks(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.AddTotalChecks(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOkCount sets the "ok_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetOkCount(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ResetOkCount()
|
||||||
|
_u.mutation.SetOkCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableOkCount sets the "ok_count" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableOkCount(v *int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetOkCount(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddOkCount adds value to the "ok_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) AddOkCount(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.AddOkCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOperationalCount sets the "operational_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetOperationalCount(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ResetOperationalCount()
|
||||||
|
_u.mutation.SetOperationalCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableOperationalCount sets the "operational_count" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableOperationalCount(v *int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetOperationalCount(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddOperationalCount adds value to the "operational_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) AddOperationalCount(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.AddOperationalCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDegradedCount sets the "degraded_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetDegradedCount(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ResetDegradedCount()
|
||||||
|
_u.mutation.SetDegradedCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableDegradedCount sets the "degraded_count" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableDegradedCount(v *int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetDegradedCount(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddDegradedCount adds value to the "degraded_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) AddDegradedCount(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.AddDegradedCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFailedCount sets the "failed_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetFailedCount(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ResetFailedCount()
|
||||||
|
_u.mutation.SetFailedCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableFailedCount sets the "failed_count" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableFailedCount(v *int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetFailedCount(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddFailedCount adds value to the "failed_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) AddFailedCount(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.AddFailedCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetErrorCount sets the "error_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetErrorCount(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ResetErrorCount()
|
||||||
|
_u.mutation.SetErrorCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableErrorCount sets the "error_count" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableErrorCount(v *int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetErrorCount(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddErrorCount adds value to the "error_count" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) AddErrorCount(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.AddErrorCount(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSumLatencyMs sets the "sum_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetSumLatencyMs(v int64) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ResetSumLatencyMs()
|
||||||
|
_u.mutation.SetSumLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableSumLatencyMs sets the "sum_latency_ms" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableSumLatencyMs(v *int64) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetSumLatencyMs(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddSumLatencyMs adds value to the "sum_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) AddSumLatencyMs(v int64) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.AddSumLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCountLatency sets the "count_latency" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetCountLatency(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ResetCountLatency()
|
||||||
|
_u.mutation.SetCountLatency(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableCountLatency sets the "count_latency" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableCountLatency(v *int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetCountLatency(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddCountLatency adds value to the "count_latency" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) AddCountLatency(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.AddCountLatency(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSumPingLatencyMs sets the "sum_ping_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetSumPingLatencyMs(v int64) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ResetSumPingLatencyMs()
|
||||||
|
_u.mutation.SetSumPingLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableSumPingLatencyMs sets the "sum_ping_latency_ms" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableSumPingLatencyMs(v *int64) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetSumPingLatencyMs(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddSumPingLatencyMs adds value to the "sum_ping_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) AddSumPingLatencyMs(v int64) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.AddSumPingLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCountPingLatency sets the "count_ping_latency" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetCountPingLatency(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ResetCountPingLatency()
|
||||||
|
_u.mutation.SetCountPingLatency(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableCountPingLatency sets the "count_ping_latency" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetNillableCountPingLatency(v *int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetCountPingLatency(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddCountPingLatency adds value to the "count_ping_latency" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) AddCountPingLatency(v int) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.AddCountPingLatency(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetComputedAt sets the "computed_at" field.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetComputedAt(v time.Time) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.SetComputedAt(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitor sets the "monitor" edge to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SetMonitor(v *ChannelMonitor) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
return _u.SetMonitorID(v.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutation returns the ChannelMonitorDailyRollupMutation object of the builder.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) Mutation() *ChannelMonitorDailyRollupMutation {
|
||||||
|
return _u.mutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMonitor clears the "monitor" edge to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) ClearMonitor() *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.ClearMonitor()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorDailyRollupUpdate builder.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) Where(ps ...predicate.ChannelMonitorDailyRollup) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.mutation.Where(ps...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select allows selecting one or more fields (columns) of the returned entity.
|
||||||
|
// The default is selecting all fields defined in the entity schema.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) Select(field string, fields ...string) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
_u.fields = append([]string{field}, fields...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save executes the query and returns the updated ChannelMonitorDailyRollup entity.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) Save(ctx context.Context) (*ChannelMonitorDailyRollup, error) {
|
||||||
|
_u.defaults()
|
||||||
|
return withHooks(ctx, _u.sqlSave, _u.mutation, _u.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveX is like Save, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) SaveX(ctx context.Context) *ChannelMonitorDailyRollup {
|
||||||
|
node, err := _u.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query on the entity.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) Exec(ctx context.Context) error {
|
||||||
|
_, err := _u.Save(ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) ExecX(ctx context.Context) {
|
||||||
|
if err := _u.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// defaults sets the default values of the builder before save.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) defaults() {
|
||||||
|
if _, ok := _u.mutation.ComputedAt(); !ok {
|
||||||
|
v := channelmonitordailyrollup.UpdateDefaultComputedAt()
|
||||||
|
_u.mutation.SetComputedAt(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check runs all checks and user-defined validators on the builder.
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) check() error {
|
||||||
|
if v, ok := _u.mutation.Model(); ok {
|
||||||
|
if err := channelmonitordailyrollup.ModelValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "model", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorDailyRollup.model": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _u.mutation.MonitorCleared() && len(_u.mutation.MonitorIDs()) > 0 {
|
||||||
|
return errors.New(`ent: clearing a required unique edge "ChannelMonitorDailyRollup.monitor"`)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_u *ChannelMonitorDailyRollupUpdateOne) sqlSave(ctx context.Context) (_node *ChannelMonitorDailyRollup, err error) {
|
||||||
|
if err := _u.check(); err != nil {
|
||||||
|
return _node, err
|
||||||
|
}
|
||||||
|
_spec := sqlgraph.NewUpdateSpec(channelmonitordailyrollup.Table, channelmonitordailyrollup.Columns, sqlgraph.NewFieldSpec(channelmonitordailyrollup.FieldID, field.TypeInt64))
|
||||||
|
id, ok := _u.mutation.ID()
|
||||||
|
if !ok {
|
||||||
|
return nil, &ValidationError{Name: "id", err: errors.New(`ent: missing "ChannelMonitorDailyRollup.id" for update`)}
|
||||||
|
}
|
||||||
|
_spec.Node.ID.Value = id
|
||||||
|
if fields := _u.fields; len(fields) > 0 {
|
||||||
|
_spec.Node.Columns = make([]string, 0, len(fields))
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, channelmonitordailyrollup.FieldID)
|
||||||
|
for _, f := range fields {
|
||||||
|
if !channelmonitordailyrollup.ValidColumn(f) {
|
||||||
|
return nil, &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)}
|
||||||
|
}
|
||||||
|
if f != channelmonitordailyrollup.FieldID {
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ps := _u.mutation.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Model(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldModel, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.BucketDate(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldBucketDate, field.TypeTime, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.TotalChecks(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldTotalChecks, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedTotalChecks(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldTotalChecks, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.OkCount(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldOkCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedOkCount(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldOkCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.OperationalCount(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldOperationalCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedOperationalCount(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldOperationalCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.DegradedCount(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldDegradedCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedDegradedCount(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldDegradedCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.FailedCount(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldFailedCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedFailedCount(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldFailedCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.ErrorCount(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldErrorCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedErrorCount(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldErrorCount, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.SumLatencyMs(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldSumLatencyMs, field.TypeInt64, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedSumLatencyMs(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldSumLatencyMs, field.TypeInt64, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.CountLatency(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldCountLatency, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedCountLatency(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldCountLatency, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.SumPingLatencyMs(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldSumPingLatencyMs, field.TypeInt64, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedSumPingLatencyMs(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldSumPingLatencyMs, field.TypeInt64, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.CountPingLatency(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldCountPingLatency, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedCountPingLatency(); ok {
|
||||||
|
_spec.AddField(channelmonitordailyrollup.FieldCountPingLatency, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.ComputedAt(); ok {
|
||||||
|
_spec.SetField(channelmonitordailyrollup.FieldComputedAt, field.TypeTime, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.MonitorCleared() {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.M2O,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitordailyrollup.MonitorTable,
|
||||||
|
Columns: []string{channelmonitordailyrollup.MonitorColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||||
|
}
|
||||||
|
if nodes := _u.mutation.MonitorIDs(); len(nodes) > 0 {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.M2O,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitordailyrollup.MonitorTable,
|
||||||
|
Columns: []string{channelmonitordailyrollup.MonitorColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, k := range nodes {
|
||||||
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||||
|
}
|
||||||
|
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||||
|
}
|
||||||
|
_node = &ChannelMonitorDailyRollup{config: _u.config}
|
||||||
|
_spec.Assign = _node.assignValues
|
||||||
|
_spec.ScanValues = _node.scanValues
|
||||||
|
if err = sqlgraph.UpdateNode(ctx, _u.driver, _spec); err != nil {
|
||||||
|
if _, ok := err.(*sqlgraph.NotFoundError); ok {
|
||||||
|
err = &NotFoundError{channelmonitordailyrollup.Label}
|
||||||
|
} else if sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
_u.mutation.done = true
|
||||||
|
return _node, nil
|
||||||
|
}
|
||||||
207
backend/ent/channelmonitorhistory.go
Normal file
207
backend/ent/channelmonitorhistory.go
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorhistory"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorHistory is the model entity for the ChannelMonitorHistory schema.
|
||||||
|
type ChannelMonitorHistory struct {
|
||||||
|
config `json:"-"`
|
||||||
|
// ID of the ent.
|
||||||
|
ID int64 `json:"id,omitempty"`
|
||||||
|
// MonitorID holds the value of the "monitor_id" field.
|
||||||
|
MonitorID int64 `json:"monitor_id,omitempty"`
|
||||||
|
// Model holds the value of the "model" field.
|
||||||
|
Model string `json:"model,omitempty"`
|
||||||
|
// Status holds the value of the "status" field.
|
||||||
|
Status channelmonitorhistory.Status `json:"status,omitempty"`
|
||||||
|
// LatencyMs holds the value of the "latency_ms" field.
|
||||||
|
LatencyMs *int `json:"latency_ms,omitempty"`
|
||||||
|
// PingLatencyMs holds the value of the "ping_latency_ms" field.
|
||||||
|
PingLatencyMs *int `json:"ping_latency_ms,omitempty"`
|
||||||
|
// Message holds the value of the "message" field.
|
||||||
|
Message string `json:"message,omitempty"`
|
||||||
|
// CheckedAt holds the value of the "checked_at" field.
|
||||||
|
CheckedAt time.Time `json:"checked_at,omitempty"`
|
||||||
|
// Edges holds the relations/edges for other nodes in the graph.
|
||||||
|
// The values are being populated by the ChannelMonitorHistoryQuery when eager-loading is set.
|
||||||
|
Edges ChannelMonitorHistoryEdges `json:"edges"`
|
||||||
|
selectValues sql.SelectValues
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryEdges holds the relations/edges for other nodes in the graph.
|
||||||
|
type ChannelMonitorHistoryEdges struct {
|
||||||
|
// Monitor holds the value of the monitor edge.
|
||||||
|
Monitor *ChannelMonitor `json:"monitor,omitempty"`
|
||||||
|
// loadedTypes holds the information for reporting if a
|
||||||
|
// type was loaded (or requested) in eager-loading or not.
|
||||||
|
loadedTypes [1]bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorOrErr returns the Monitor value or an error if the edge
|
||||||
|
// was not loaded in eager-loading, or loaded but was not found.
|
||||||
|
func (e ChannelMonitorHistoryEdges) MonitorOrErr() (*ChannelMonitor, error) {
|
||||||
|
if e.Monitor != nil {
|
||||||
|
return e.Monitor, nil
|
||||||
|
} else if e.loadedTypes[0] {
|
||||||
|
return nil, &NotFoundError{label: channelmonitor.Label}
|
||||||
|
}
|
||||||
|
return nil, &NotLoadedError{edge: "monitor"}
|
||||||
|
}
|
||||||
|
|
||||||
|
// scanValues returns the types for scanning values from sql.Rows.
|
||||||
|
func (*ChannelMonitorHistory) scanValues(columns []string) ([]any, error) {
|
||||||
|
values := make([]any, len(columns))
|
||||||
|
for i := range columns {
|
||||||
|
switch columns[i] {
|
||||||
|
case channelmonitorhistory.FieldID, channelmonitorhistory.FieldMonitorID, channelmonitorhistory.FieldLatencyMs, channelmonitorhistory.FieldPingLatencyMs:
|
||||||
|
values[i] = new(sql.NullInt64)
|
||||||
|
case channelmonitorhistory.FieldModel, channelmonitorhistory.FieldStatus, channelmonitorhistory.FieldMessage:
|
||||||
|
values[i] = new(sql.NullString)
|
||||||
|
case channelmonitorhistory.FieldCheckedAt:
|
||||||
|
values[i] = new(sql.NullTime)
|
||||||
|
default:
|
||||||
|
values[i] = new(sql.UnknownType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignValues assigns the values that were returned from sql.Rows (after scanning)
|
||||||
|
// to the ChannelMonitorHistory fields.
|
||||||
|
func (_m *ChannelMonitorHistory) assignValues(columns []string, values []any) error {
|
||||||
|
if m, n := len(values), len(columns); m < n {
|
||||||
|
return fmt.Errorf("mismatch number of scan values: %d != %d", m, n)
|
||||||
|
}
|
||||||
|
for i := range columns {
|
||||||
|
switch columns[i] {
|
||||||
|
case channelmonitorhistory.FieldID:
|
||||||
|
value, ok := values[i].(*sql.NullInt64)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field id", value)
|
||||||
|
}
|
||||||
|
_m.ID = int64(value.Int64)
|
||||||
|
case channelmonitorhistory.FieldMonitorID:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field monitor_id", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.MonitorID = value.Int64
|
||||||
|
}
|
||||||
|
case channelmonitorhistory.FieldModel:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field model", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Model = value.String
|
||||||
|
}
|
||||||
|
case channelmonitorhistory.FieldStatus:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field status", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Status = channelmonitorhistory.Status(value.String)
|
||||||
|
}
|
||||||
|
case channelmonitorhistory.FieldLatencyMs:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field latency_ms", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.LatencyMs = new(int)
|
||||||
|
*_m.LatencyMs = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitorhistory.FieldPingLatencyMs:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field ping_latency_ms", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.PingLatencyMs = new(int)
|
||||||
|
*_m.PingLatencyMs = int(value.Int64)
|
||||||
|
}
|
||||||
|
case channelmonitorhistory.FieldMessage:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field message", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Message = value.String
|
||||||
|
}
|
||||||
|
case channelmonitorhistory.FieldCheckedAt:
|
||||||
|
if value, ok := values[i].(*sql.NullTime); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field checked_at", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.CheckedAt = value.Time
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
_m.selectValues.Set(columns[i], values[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value returns the ent.Value that was dynamically selected and assigned to the ChannelMonitorHistory.
|
||||||
|
// This includes values selected through modifiers, order, etc.
|
||||||
|
func (_m *ChannelMonitorHistory) Value(name string) (ent.Value, error) {
|
||||||
|
return _m.selectValues.Get(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMonitor queries the "monitor" edge of the ChannelMonitorHistory entity.
|
||||||
|
func (_m *ChannelMonitorHistory) QueryMonitor() *ChannelMonitorQuery {
|
||||||
|
return NewChannelMonitorHistoryClient(_m.config).QueryMonitor(_m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update returns a builder for updating this ChannelMonitorHistory.
|
||||||
|
// Note that you need to call ChannelMonitorHistory.Unwrap() before calling this method if this ChannelMonitorHistory
|
||||||
|
// was returned from a transaction, and the transaction was committed or rolled back.
|
||||||
|
func (_m *ChannelMonitorHistory) Update() *ChannelMonitorHistoryUpdateOne {
|
||||||
|
return NewChannelMonitorHistoryClient(_m.config).UpdateOne(_m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unwrap unwraps the ChannelMonitorHistory entity that was returned from a transaction after it was closed,
|
||||||
|
// so that all future queries will be executed through the driver which created the transaction.
|
||||||
|
func (_m *ChannelMonitorHistory) Unwrap() *ChannelMonitorHistory {
|
||||||
|
_tx, ok := _m.config.driver.(*txDriver)
|
||||||
|
if !ok {
|
||||||
|
panic("ent: ChannelMonitorHistory is not a transactional entity")
|
||||||
|
}
|
||||||
|
_m.config.driver = _tx.drv
|
||||||
|
return _m
|
||||||
|
}
|
||||||
|
|
||||||
|
// String implements the fmt.Stringer.
|
||||||
|
func (_m *ChannelMonitorHistory) String() string {
|
||||||
|
var builder strings.Builder
|
||||||
|
builder.WriteString("ChannelMonitorHistory(")
|
||||||
|
builder.WriteString(fmt.Sprintf("id=%v, ", _m.ID))
|
||||||
|
builder.WriteString("monitor_id=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.MonitorID))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("model=")
|
||||||
|
builder.WriteString(_m.Model)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("status=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.Status))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
if v := _m.LatencyMs; v != nil {
|
||||||
|
builder.WriteString("latency_ms=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", *v))
|
||||||
|
}
|
||||||
|
builder.WriteString(", ")
|
||||||
|
if v := _m.PingLatencyMs; v != nil {
|
||||||
|
builder.WriteString("ping_latency_ms=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", *v))
|
||||||
|
}
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("message=")
|
||||||
|
builder.WriteString(_m.Message)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("checked_at=")
|
||||||
|
builder.WriteString(_m.CheckedAt.Format(time.ANSIC))
|
||||||
|
builder.WriteByte(')')
|
||||||
|
return builder.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorHistories is a parsable slice of ChannelMonitorHistory.
|
||||||
|
type ChannelMonitorHistories []*ChannelMonitorHistory
|
||||||
158
backend/ent/channelmonitorhistory/channelmonitorhistory.go
Normal file
158
backend/ent/channelmonitorhistory/channelmonitorhistory.go
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package channelmonitorhistory
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Label holds the string label denoting the channelmonitorhistory type in the database.
|
||||||
|
Label = "channel_monitor_history"
|
||||||
|
// FieldID holds the string denoting the id field in the database.
|
||||||
|
FieldID = "id"
|
||||||
|
// FieldMonitorID holds the string denoting the monitor_id field in the database.
|
||||||
|
FieldMonitorID = "monitor_id"
|
||||||
|
// FieldModel holds the string denoting the model field in the database.
|
||||||
|
FieldModel = "model"
|
||||||
|
// FieldStatus holds the string denoting the status field in the database.
|
||||||
|
FieldStatus = "status"
|
||||||
|
// FieldLatencyMs holds the string denoting the latency_ms field in the database.
|
||||||
|
FieldLatencyMs = "latency_ms"
|
||||||
|
// FieldPingLatencyMs holds the string denoting the ping_latency_ms field in the database.
|
||||||
|
FieldPingLatencyMs = "ping_latency_ms"
|
||||||
|
// FieldMessage holds the string denoting the message field in the database.
|
||||||
|
FieldMessage = "message"
|
||||||
|
// FieldCheckedAt holds the string denoting the checked_at field in the database.
|
||||||
|
FieldCheckedAt = "checked_at"
|
||||||
|
// EdgeMonitor holds the string denoting the monitor edge name in mutations.
|
||||||
|
EdgeMonitor = "monitor"
|
||||||
|
// Table holds the table name of the channelmonitorhistory in the database.
|
||||||
|
Table = "channel_monitor_histories"
|
||||||
|
// MonitorTable is the table that holds the monitor relation/edge.
|
||||||
|
MonitorTable = "channel_monitor_histories"
|
||||||
|
// MonitorInverseTable is the table name for the ChannelMonitor entity.
|
||||||
|
// It exists in this package in order to avoid circular dependency with the "channelmonitor" package.
|
||||||
|
MonitorInverseTable = "channel_monitors"
|
||||||
|
// MonitorColumn is the table column denoting the monitor relation/edge.
|
||||||
|
MonitorColumn = "monitor_id"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Columns holds all SQL columns for channelmonitorhistory fields.
|
||||||
|
var Columns = []string{
|
||||||
|
FieldID,
|
||||||
|
FieldMonitorID,
|
||||||
|
FieldModel,
|
||||||
|
FieldStatus,
|
||||||
|
FieldLatencyMs,
|
||||||
|
FieldPingLatencyMs,
|
||||||
|
FieldMessage,
|
||||||
|
FieldCheckedAt,
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidColumn reports if the column name is valid (part of the table columns).
|
||||||
|
func ValidColumn(column string) bool {
|
||||||
|
for i := range Columns {
|
||||||
|
if column == Columns[i] {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// ModelValidator is a validator for the "model" field. It is called by the builders before save.
|
||||||
|
ModelValidator func(string) error
|
||||||
|
// DefaultMessage holds the default value on creation for the "message" field.
|
||||||
|
DefaultMessage string
|
||||||
|
// MessageValidator is a validator for the "message" field. It is called by the builders before save.
|
||||||
|
MessageValidator func(string) error
|
||||||
|
// DefaultCheckedAt holds the default value on creation for the "checked_at" field.
|
||||||
|
DefaultCheckedAt func() time.Time
|
||||||
|
)
|
||||||
|
|
||||||
|
// Status defines the type for the "status" enum field.
|
||||||
|
type Status string
|
||||||
|
|
||||||
|
// Status values.
|
||||||
|
const (
|
||||||
|
StatusOperational Status = "operational"
|
||||||
|
StatusDegraded Status = "degraded"
|
||||||
|
StatusFailed Status = "failed"
|
||||||
|
StatusError Status = "error"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s Status) String() string {
|
||||||
|
return string(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StatusValidator is a validator for the "status" field enum values. It is called by the builders before save.
|
||||||
|
func StatusValidator(s Status) error {
|
||||||
|
switch s {
|
||||||
|
case StatusOperational, StatusDegraded, StatusFailed, StatusError:
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("channelmonitorhistory: invalid enum value for status field: %q", s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OrderOption defines the ordering options for the ChannelMonitorHistory queries.
|
||||||
|
type OrderOption func(*sql.Selector)
|
||||||
|
|
||||||
|
// ByID orders the results by the id field.
|
||||||
|
func ByID(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldID, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByMonitorID orders the results by the monitor_id field.
|
||||||
|
func ByMonitorID(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldMonitorID, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByModel orders the results by the model field.
|
||||||
|
func ByModel(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldModel, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByStatus orders the results by the status field.
|
||||||
|
func ByStatus(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldStatus, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByLatencyMs orders the results by the latency_ms field.
|
||||||
|
func ByLatencyMs(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldLatencyMs, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByPingLatencyMs orders the results by the ping_latency_ms field.
|
||||||
|
func ByPingLatencyMs(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldPingLatencyMs, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByMessage orders the results by the message field.
|
||||||
|
func ByMessage(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldMessage, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByCheckedAt orders the results by the checked_at field.
|
||||||
|
func ByCheckedAt(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldCheckedAt, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByMonitorField orders the results by monitor field.
|
||||||
|
func ByMonitorField(field string, opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return func(s *sql.Selector) {
|
||||||
|
sqlgraph.OrderByNeighborTerms(s, newMonitorStep(), sql.OrderByField(field, opts...))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func newMonitorStep() *sqlgraph.Step {
|
||||||
|
return sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.To(MonitorInverseTable, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, true, MonitorTable, MonitorColumn),
|
||||||
|
)
|
||||||
|
}
|
||||||
444
backend/ent/channelmonitorhistory/where.go
Normal file
444
backend/ent/channelmonitorhistory/where.go
Normal file
@ -0,0 +1,444 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package channelmonitorhistory
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ID filters vertices based on their ID field.
|
||||||
|
func ID(id int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDEQ applies the EQ predicate on the ID field.
|
||||||
|
func IDEQ(id int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDNEQ applies the NEQ predicate on the ID field.
|
||||||
|
func IDNEQ(id int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDIn applies the In predicate on the ID field.
|
||||||
|
func IDIn(ids ...int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIn(FieldID, ids...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDNotIn applies the NotIn predicate on the ID field.
|
||||||
|
func IDNotIn(ids ...int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotIn(FieldID, ids...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDGT applies the GT predicate on the ID field.
|
||||||
|
func IDGT(id int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGT(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDGTE applies the GTE predicate on the ID field.
|
||||||
|
func IDGTE(id int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGTE(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDLT applies the LT predicate on the ID field.
|
||||||
|
func IDLT(id int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLT(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDLTE applies the LTE predicate on the ID field.
|
||||||
|
func IDLTE(id int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLTE(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorID applies equality check predicate on the "monitor_id" field. It's identical to MonitorIDEQ.
|
||||||
|
func MonitorID(v int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldMonitorID, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Model applies equality check predicate on the "model" field. It's identical to ModelEQ.
|
||||||
|
func Model(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMs applies equality check predicate on the "latency_ms" field. It's identical to LatencyMsEQ.
|
||||||
|
func LatencyMs(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMs applies equality check predicate on the "ping_latency_ms" field. It's identical to PingLatencyMsEQ.
|
||||||
|
func PingLatencyMs(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Message applies equality check predicate on the "message" field. It's identical to MessageEQ.
|
||||||
|
func Message(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckedAt applies equality check predicate on the "checked_at" field. It's identical to CheckedAtEQ.
|
||||||
|
func CheckedAt(v time.Time) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorIDEQ applies the EQ predicate on the "monitor_id" field.
|
||||||
|
func MonitorIDEQ(v int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldMonitorID, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorIDNEQ applies the NEQ predicate on the "monitor_id" field.
|
||||||
|
func MonitorIDNEQ(v int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNEQ(FieldMonitorID, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorIDIn applies the In predicate on the "monitor_id" field.
|
||||||
|
func MonitorIDIn(vs ...int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIn(FieldMonitorID, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorIDNotIn applies the NotIn predicate on the "monitor_id" field.
|
||||||
|
func MonitorIDNotIn(vs ...int64) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotIn(FieldMonitorID, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelEQ applies the EQ predicate on the "model" field.
|
||||||
|
func ModelEQ(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelNEQ applies the NEQ predicate on the "model" field.
|
||||||
|
func ModelNEQ(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNEQ(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelIn applies the In predicate on the "model" field.
|
||||||
|
func ModelIn(vs ...string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIn(FieldModel, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelNotIn applies the NotIn predicate on the "model" field.
|
||||||
|
func ModelNotIn(vs ...string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotIn(FieldModel, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelGT applies the GT predicate on the "model" field.
|
||||||
|
func ModelGT(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGT(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelGTE applies the GTE predicate on the "model" field.
|
||||||
|
func ModelGTE(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGTE(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelLT applies the LT predicate on the "model" field.
|
||||||
|
func ModelLT(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLT(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelLTE applies the LTE predicate on the "model" field.
|
||||||
|
func ModelLTE(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLTE(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelContains applies the Contains predicate on the "model" field.
|
||||||
|
func ModelContains(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldContains(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelHasPrefix applies the HasPrefix predicate on the "model" field.
|
||||||
|
func ModelHasPrefix(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldHasPrefix(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelHasSuffix applies the HasSuffix predicate on the "model" field.
|
||||||
|
func ModelHasSuffix(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldHasSuffix(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelEqualFold applies the EqualFold predicate on the "model" field.
|
||||||
|
func ModelEqualFold(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEqualFold(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModelContainsFold applies the ContainsFold predicate on the "model" field.
|
||||||
|
func ModelContainsFold(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldContainsFold(FieldModel, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// StatusEQ applies the EQ predicate on the "status" field.
|
||||||
|
func StatusEQ(v Status) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldStatus, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// StatusNEQ applies the NEQ predicate on the "status" field.
|
||||||
|
func StatusNEQ(v Status) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNEQ(FieldStatus, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// StatusIn applies the In predicate on the "status" field.
|
||||||
|
func StatusIn(vs ...Status) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIn(FieldStatus, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// StatusNotIn applies the NotIn predicate on the "status" field.
|
||||||
|
func StatusNotIn(vs ...Status) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotIn(FieldStatus, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMsEQ applies the EQ predicate on the "latency_ms" field.
|
||||||
|
func LatencyMsEQ(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMsNEQ applies the NEQ predicate on the "latency_ms" field.
|
||||||
|
func LatencyMsNEQ(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNEQ(FieldLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMsIn applies the In predicate on the "latency_ms" field.
|
||||||
|
func LatencyMsIn(vs ...int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIn(FieldLatencyMs, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMsNotIn applies the NotIn predicate on the "latency_ms" field.
|
||||||
|
func LatencyMsNotIn(vs ...int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotIn(FieldLatencyMs, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMsGT applies the GT predicate on the "latency_ms" field.
|
||||||
|
func LatencyMsGT(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGT(FieldLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMsGTE applies the GTE predicate on the "latency_ms" field.
|
||||||
|
func LatencyMsGTE(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGTE(FieldLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMsLT applies the LT predicate on the "latency_ms" field.
|
||||||
|
func LatencyMsLT(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLT(FieldLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMsLTE applies the LTE predicate on the "latency_ms" field.
|
||||||
|
func LatencyMsLTE(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLTE(FieldLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMsIsNil applies the IsNil predicate on the "latency_ms" field.
|
||||||
|
func LatencyMsIsNil() predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIsNull(FieldLatencyMs))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LatencyMsNotNil applies the NotNil predicate on the "latency_ms" field.
|
||||||
|
func LatencyMsNotNil() predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotNull(FieldLatencyMs))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMsEQ applies the EQ predicate on the "ping_latency_ms" field.
|
||||||
|
func PingLatencyMsEQ(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMsNEQ applies the NEQ predicate on the "ping_latency_ms" field.
|
||||||
|
func PingLatencyMsNEQ(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNEQ(FieldPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMsIn applies the In predicate on the "ping_latency_ms" field.
|
||||||
|
func PingLatencyMsIn(vs ...int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIn(FieldPingLatencyMs, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMsNotIn applies the NotIn predicate on the "ping_latency_ms" field.
|
||||||
|
func PingLatencyMsNotIn(vs ...int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotIn(FieldPingLatencyMs, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMsGT applies the GT predicate on the "ping_latency_ms" field.
|
||||||
|
func PingLatencyMsGT(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGT(FieldPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMsGTE applies the GTE predicate on the "ping_latency_ms" field.
|
||||||
|
func PingLatencyMsGTE(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGTE(FieldPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMsLT applies the LT predicate on the "ping_latency_ms" field.
|
||||||
|
func PingLatencyMsLT(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLT(FieldPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMsLTE applies the LTE predicate on the "ping_latency_ms" field.
|
||||||
|
func PingLatencyMsLTE(v int) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLTE(FieldPingLatencyMs, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMsIsNil applies the IsNil predicate on the "ping_latency_ms" field.
|
||||||
|
func PingLatencyMsIsNil() predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIsNull(FieldPingLatencyMs))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PingLatencyMsNotNil applies the NotNil predicate on the "ping_latency_ms" field.
|
||||||
|
func PingLatencyMsNotNil() predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotNull(FieldPingLatencyMs))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageEQ applies the EQ predicate on the "message" field.
|
||||||
|
func MessageEQ(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageNEQ applies the NEQ predicate on the "message" field.
|
||||||
|
func MessageNEQ(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNEQ(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageIn applies the In predicate on the "message" field.
|
||||||
|
func MessageIn(vs ...string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIn(FieldMessage, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageNotIn applies the NotIn predicate on the "message" field.
|
||||||
|
func MessageNotIn(vs ...string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotIn(FieldMessage, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageGT applies the GT predicate on the "message" field.
|
||||||
|
func MessageGT(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGT(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageGTE applies the GTE predicate on the "message" field.
|
||||||
|
func MessageGTE(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGTE(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageLT applies the LT predicate on the "message" field.
|
||||||
|
func MessageLT(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLT(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageLTE applies the LTE predicate on the "message" field.
|
||||||
|
func MessageLTE(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLTE(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageContains applies the Contains predicate on the "message" field.
|
||||||
|
func MessageContains(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldContains(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageHasPrefix applies the HasPrefix predicate on the "message" field.
|
||||||
|
func MessageHasPrefix(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldHasPrefix(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageHasSuffix applies the HasSuffix predicate on the "message" field.
|
||||||
|
func MessageHasSuffix(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldHasSuffix(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageIsNil applies the IsNil predicate on the "message" field.
|
||||||
|
func MessageIsNil() predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIsNull(FieldMessage))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageNotNil applies the NotNil predicate on the "message" field.
|
||||||
|
func MessageNotNil() predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotNull(FieldMessage))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageEqualFold applies the EqualFold predicate on the "message" field.
|
||||||
|
func MessageEqualFold(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEqualFold(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageContainsFold applies the ContainsFold predicate on the "message" field.
|
||||||
|
func MessageContainsFold(v string) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldContainsFold(FieldMessage, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckedAtEQ applies the EQ predicate on the "checked_at" field.
|
||||||
|
func CheckedAtEQ(v time.Time) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldEQ(FieldCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckedAtNEQ applies the NEQ predicate on the "checked_at" field.
|
||||||
|
func CheckedAtNEQ(v time.Time) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNEQ(FieldCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckedAtIn applies the In predicate on the "checked_at" field.
|
||||||
|
func CheckedAtIn(vs ...time.Time) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldIn(FieldCheckedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckedAtNotIn applies the NotIn predicate on the "checked_at" field.
|
||||||
|
func CheckedAtNotIn(vs ...time.Time) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldNotIn(FieldCheckedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckedAtGT applies the GT predicate on the "checked_at" field.
|
||||||
|
func CheckedAtGT(v time.Time) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGT(FieldCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckedAtGTE applies the GTE predicate on the "checked_at" field.
|
||||||
|
func CheckedAtGTE(v time.Time) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldGTE(FieldCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckedAtLT applies the LT predicate on the "checked_at" field.
|
||||||
|
func CheckedAtLT(v time.Time) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLT(FieldCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckedAtLTE applies the LTE predicate on the "checked_at" field.
|
||||||
|
func CheckedAtLTE(v time.Time) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.FieldLTE(FieldCheckedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasMonitor applies the HasEdge predicate on the "monitor" edge.
|
||||||
|
func HasMonitor() predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(func(s *sql.Selector) {
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, true, MonitorTable, MonitorColumn),
|
||||||
|
)
|
||||||
|
sqlgraph.HasNeighbors(s, step)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasMonitorWith applies the HasEdge predicate on the "monitor" edge with a given conditions (other predicates).
|
||||||
|
func HasMonitorWith(preds ...predicate.ChannelMonitor) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(func(s *sql.Selector) {
|
||||||
|
step := newMonitorStep()
|
||||||
|
sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) {
|
||||||
|
for _, p := range preds {
|
||||||
|
p(s)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// And groups predicates with the AND operator between them.
|
||||||
|
func And(predicates ...predicate.ChannelMonitorHistory) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.AndPredicates(predicates...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Or groups predicates with the OR operator between them.
|
||||||
|
func Or(predicates ...predicate.ChannelMonitorHistory) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.OrPredicates(predicates...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not applies the not operator on the given predicate.
|
||||||
|
func Not(p predicate.ChannelMonitorHistory) predicate.ChannelMonitorHistory {
|
||||||
|
return predicate.ChannelMonitorHistory(sql.NotPredicates(p))
|
||||||
|
}
|
||||||
947
backend/ent/channelmonitorhistory_create.go
Normal file
947
backend/ent/channelmonitorhistory_create.go
Normal file
@ -0,0 +1,947 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorhistory"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryCreate is the builder for creating a ChannelMonitorHistory entity.
|
||||||
|
type ChannelMonitorHistoryCreate struct {
|
||||||
|
config
|
||||||
|
mutation *ChannelMonitorHistoryMutation
|
||||||
|
hooks []Hook
|
||||||
|
conflict []sql.ConflictOption
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitorID sets the "monitor_id" field.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetMonitorID(v int64) *ChannelMonitorHistoryCreate {
|
||||||
|
_c.mutation.SetMonitorID(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetModel sets the "model" field.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetModel(v string) *ChannelMonitorHistoryCreate {
|
||||||
|
_c.mutation.SetModel(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStatus sets the "status" field.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetStatus(v channelmonitorhistory.Status) *ChannelMonitorHistoryCreate {
|
||||||
|
_c.mutation.SetStatus(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetLatencyMs sets the "latency_ms" field.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetLatencyMs(v int) *ChannelMonitorHistoryCreate {
|
||||||
|
_c.mutation.SetLatencyMs(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableLatencyMs sets the "latency_ms" field if the given value is not nil.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetNillableLatencyMs(v *int) *ChannelMonitorHistoryCreate {
|
||||||
|
if v != nil {
|
||||||
|
_c.SetLatencyMs(*v)
|
||||||
|
}
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPingLatencyMs sets the "ping_latency_ms" field.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetPingLatencyMs(v int) *ChannelMonitorHistoryCreate {
|
||||||
|
_c.mutation.SetPingLatencyMs(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillablePingLatencyMs sets the "ping_latency_ms" field if the given value is not nil.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetNillablePingLatencyMs(v *int) *ChannelMonitorHistoryCreate {
|
||||||
|
if v != nil {
|
||||||
|
_c.SetPingLatencyMs(*v)
|
||||||
|
}
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMessage sets the "message" field.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetMessage(v string) *ChannelMonitorHistoryCreate {
|
||||||
|
_c.mutation.SetMessage(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableMessage sets the "message" field if the given value is not nil.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetNillableMessage(v *string) *ChannelMonitorHistoryCreate {
|
||||||
|
if v != nil {
|
||||||
|
_c.SetMessage(*v)
|
||||||
|
}
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCheckedAt sets the "checked_at" field.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetCheckedAt(v time.Time) *ChannelMonitorHistoryCreate {
|
||||||
|
_c.mutation.SetCheckedAt(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableCheckedAt sets the "checked_at" field if the given value is not nil.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetNillableCheckedAt(v *time.Time) *ChannelMonitorHistoryCreate {
|
||||||
|
if v != nil {
|
||||||
|
_c.SetCheckedAt(*v)
|
||||||
|
}
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitor sets the "monitor" edge to the ChannelMonitor entity.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SetMonitor(v *ChannelMonitor) *ChannelMonitorHistoryCreate {
|
||||||
|
return _c.SetMonitorID(v.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutation returns the ChannelMonitorHistoryMutation object of the builder.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) Mutation() *ChannelMonitorHistoryMutation {
|
||||||
|
return _c.mutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save creates the ChannelMonitorHistory in the database.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) Save(ctx context.Context) (*ChannelMonitorHistory, error) {
|
||||||
|
_c.defaults()
|
||||||
|
return withHooks(ctx, _c.sqlSave, _c.mutation, _c.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveX calls Save and panics if Save returns an error.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) SaveX(ctx context.Context) *ChannelMonitorHistory {
|
||||||
|
v, err := _c.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) Exec(ctx context.Context) error {
|
||||||
|
_, err := _c.Save(ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) ExecX(ctx context.Context) {
|
||||||
|
if err := _c.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// defaults sets the default values of the builder before save.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) defaults() {
|
||||||
|
if _, ok := _c.mutation.Message(); !ok {
|
||||||
|
v := channelmonitorhistory.DefaultMessage
|
||||||
|
_c.mutation.SetMessage(v)
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.CheckedAt(); !ok {
|
||||||
|
v := channelmonitorhistory.DefaultCheckedAt()
|
||||||
|
_c.mutation.SetCheckedAt(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check runs all checks and user-defined validators on the builder.
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) check() error {
|
||||||
|
if _, ok := _c.mutation.MonitorID(); !ok {
|
||||||
|
return &ValidationError{Name: "monitor_id", err: errors.New(`ent: missing required field "ChannelMonitorHistory.monitor_id"`)}
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.Model(); !ok {
|
||||||
|
return &ValidationError{Name: "model", err: errors.New(`ent: missing required field "ChannelMonitorHistory.model"`)}
|
||||||
|
}
|
||||||
|
if v, ok := _c.mutation.Model(); ok {
|
||||||
|
if err := channelmonitorhistory.ModelValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "model", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorHistory.model": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.Status(); !ok {
|
||||||
|
return &ValidationError{Name: "status", err: errors.New(`ent: missing required field "ChannelMonitorHistory.status"`)}
|
||||||
|
}
|
||||||
|
if v, ok := _c.mutation.Status(); ok {
|
||||||
|
if err := channelmonitorhistory.StatusValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "status", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorHistory.status": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _c.mutation.Message(); ok {
|
||||||
|
if err := channelmonitorhistory.MessageValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "message", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorHistory.message": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.CheckedAt(); !ok {
|
||||||
|
return &ValidationError{Name: "checked_at", err: errors.New(`ent: missing required field "ChannelMonitorHistory.checked_at"`)}
|
||||||
|
}
|
||||||
|
if len(_c.mutation.MonitorIDs()) == 0 {
|
||||||
|
return &ValidationError{Name: "monitor", err: errors.New(`ent: missing required edge "ChannelMonitorHistory.monitor"`)}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) sqlSave(ctx context.Context) (*ChannelMonitorHistory, error) {
|
||||||
|
if err := _c.check(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
_node, _spec := _c.createSpec()
|
||||||
|
if err := sqlgraph.CreateNode(ctx, _c.driver, _spec); err != nil {
|
||||||
|
if sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
id := _spec.ID.Value.(int64)
|
||||||
|
_node.ID = int64(id)
|
||||||
|
_c.mutation.id = &_node.ID
|
||||||
|
_c.mutation.done = true
|
||||||
|
return _node, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) createSpec() (*ChannelMonitorHistory, *sqlgraph.CreateSpec) {
|
||||||
|
var (
|
||||||
|
_node = &ChannelMonitorHistory{config: _c.config}
|
||||||
|
_spec = sqlgraph.NewCreateSpec(channelmonitorhistory.Table, sqlgraph.NewFieldSpec(channelmonitorhistory.FieldID, field.TypeInt64))
|
||||||
|
)
|
||||||
|
_spec.OnConflict = _c.conflict
|
||||||
|
if value, ok := _c.mutation.Model(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldModel, field.TypeString, value)
|
||||||
|
_node.Model = value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.Status(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldStatus, field.TypeEnum, value)
|
||||||
|
_node.Status = value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.LatencyMs(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldLatencyMs, field.TypeInt, value)
|
||||||
|
_node.LatencyMs = &value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.PingLatencyMs(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldPingLatencyMs, field.TypeInt, value)
|
||||||
|
_node.PingLatencyMs = &value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.Message(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldMessage, field.TypeString, value)
|
||||||
|
_node.Message = value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.CheckedAt(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldCheckedAt, field.TypeTime, value)
|
||||||
|
_node.CheckedAt = value
|
||||||
|
}
|
||||||
|
if nodes := _c.mutation.MonitorIDs(); len(nodes) > 0 {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.M2O,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorhistory.MonitorTable,
|
||||||
|
Columns: []string{channelmonitorhistory.MonitorColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, k := range nodes {
|
||||||
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||||
|
}
|
||||||
|
_node.MonitorID = nodes[0]
|
||||||
|
_spec.Edges = append(_spec.Edges, edge)
|
||||||
|
}
|
||||||
|
return _node, _spec
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnConflict allows configuring the `ON CONFLICT` / `ON DUPLICATE KEY` clause
|
||||||
|
// of the `INSERT` statement. For example:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorHistory.Create().
|
||||||
|
// SetMonitorID(v).
|
||||||
|
// OnConflict(
|
||||||
|
// // Update the row with the new values
|
||||||
|
// // the was proposed for insertion.
|
||||||
|
// sql.ResolveWithNewValues(),
|
||||||
|
// ).
|
||||||
|
// // Override some of the fields with custom
|
||||||
|
// // update values.
|
||||||
|
// Update(func(u *ent.ChannelMonitorHistoryUpsert) {
|
||||||
|
// SetMonitorID(v+v).
|
||||||
|
// }).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) OnConflict(opts ...sql.ConflictOption) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
_c.conflict = opts
|
||||||
|
return &ChannelMonitorHistoryUpsertOne{
|
||||||
|
create: _c,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnConflictColumns calls `OnConflict` and configures the columns
|
||||||
|
// as conflict target. Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorHistory.Create().
|
||||||
|
// OnConflict(sql.ConflictColumns(columns...)).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (_c *ChannelMonitorHistoryCreate) OnConflictColumns(columns ...string) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
_c.conflict = append(_c.conflict, sql.ConflictColumns(columns...))
|
||||||
|
return &ChannelMonitorHistoryUpsertOne{
|
||||||
|
create: _c,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
// ChannelMonitorHistoryUpsertOne is the builder for "upsert"-ing
|
||||||
|
// one ChannelMonitorHistory node.
|
||||||
|
ChannelMonitorHistoryUpsertOne struct {
|
||||||
|
create *ChannelMonitorHistoryCreate
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryUpsert is the "OnConflict" setter.
|
||||||
|
ChannelMonitorHistoryUpsert struct {
|
||||||
|
*sql.UpdateSet
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetMonitorID sets the "monitor_id" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) SetMonitorID(v int64) *ChannelMonitorHistoryUpsert {
|
||||||
|
u.Set(channelmonitorhistory.FieldMonitorID, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateMonitorID sets the "monitor_id" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) UpdateMonitorID() *ChannelMonitorHistoryUpsert {
|
||||||
|
u.SetExcluded(channelmonitorhistory.FieldMonitorID)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetModel sets the "model" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) SetModel(v string) *ChannelMonitorHistoryUpsert {
|
||||||
|
u.Set(channelmonitorhistory.FieldModel, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateModel sets the "model" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) UpdateModel() *ChannelMonitorHistoryUpsert {
|
||||||
|
u.SetExcluded(channelmonitorhistory.FieldModel)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStatus sets the "status" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) SetStatus(v channelmonitorhistory.Status) *ChannelMonitorHistoryUpsert {
|
||||||
|
u.Set(channelmonitorhistory.FieldStatus, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateStatus sets the "status" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) UpdateStatus() *ChannelMonitorHistoryUpsert {
|
||||||
|
u.SetExcluded(channelmonitorhistory.FieldStatus)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetLatencyMs sets the "latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) SetLatencyMs(v int) *ChannelMonitorHistoryUpsert {
|
||||||
|
u.Set(channelmonitorhistory.FieldLatencyMs, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateLatencyMs sets the "latency_ms" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) UpdateLatencyMs() *ChannelMonitorHistoryUpsert {
|
||||||
|
u.SetExcluded(channelmonitorhistory.FieldLatencyMs)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddLatencyMs adds v to the "latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) AddLatencyMs(v int) *ChannelMonitorHistoryUpsert {
|
||||||
|
u.Add(channelmonitorhistory.FieldLatencyMs, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearLatencyMs clears the value of the "latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) ClearLatencyMs() *ChannelMonitorHistoryUpsert {
|
||||||
|
u.SetNull(channelmonitorhistory.FieldLatencyMs)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPingLatencyMs sets the "ping_latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) SetPingLatencyMs(v int) *ChannelMonitorHistoryUpsert {
|
||||||
|
u.Set(channelmonitorhistory.FieldPingLatencyMs, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatePingLatencyMs sets the "ping_latency_ms" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) UpdatePingLatencyMs() *ChannelMonitorHistoryUpsert {
|
||||||
|
u.SetExcluded(channelmonitorhistory.FieldPingLatencyMs)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddPingLatencyMs adds v to the "ping_latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) AddPingLatencyMs(v int) *ChannelMonitorHistoryUpsert {
|
||||||
|
u.Add(channelmonitorhistory.FieldPingLatencyMs, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearPingLatencyMs clears the value of the "ping_latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) ClearPingLatencyMs() *ChannelMonitorHistoryUpsert {
|
||||||
|
u.SetNull(channelmonitorhistory.FieldPingLatencyMs)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMessage sets the "message" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) SetMessage(v string) *ChannelMonitorHistoryUpsert {
|
||||||
|
u.Set(channelmonitorhistory.FieldMessage, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateMessage sets the "message" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) UpdateMessage() *ChannelMonitorHistoryUpsert {
|
||||||
|
u.SetExcluded(channelmonitorhistory.FieldMessage)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMessage clears the value of the "message" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) ClearMessage() *ChannelMonitorHistoryUpsert {
|
||||||
|
u.SetNull(channelmonitorhistory.FieldMessage)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCheckedAt sets the "checked_at" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) SetCheckedAt(v time.Time) *ChannelMonitorHistoryUpsert {
|
||||||
|
u.Set(channelmonitorhistory.FieldCheckedAt, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateCheckedAt sets the "checked_at" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsert) UpdateCheckedAt() *ChannelMonitorHistoryUpsert {
|
||||||
|
u.SetExcluded(channelmonitorhistory.FieldCheckedAt)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateNewValues updates the mutable fields using the new values that were set on create.
|
||||||
|
// Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorHistory.Create().
|
||||||
|
// OnConflict(
|
||||||
|
// sql.ResolveWithNewValues(),
|
||||||
|
// ).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) UpdateNewValues() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWithNewValues())
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore sets each column to itself in case of conflict.
|
||||||
|
// Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorHistory.Create().
|
||||||
|
// OnConflict(sql.ResolveWithIgnore()).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) Ignore() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWithIgnore())
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// DoNothing configures the conflict_action to `DO NOTHING`.
|
||||||
|
// Supported only by SQLite and PostgreSQL.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) DoNothing() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.DoNothing())
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update allows overriding fields `UPDATE` values. See the ChannelMonitorHistoryCreate.OnConflict
|
||||||
|
// documentation for more info.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) Update(set func(*ChannelMonitorHistoryUpsert)) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(update *sql.UpdateSet) {
|
||||||
|
set(&ChannelMonitorHistoryUpsert{UpdateSet: update})
|
||||||
|
}))
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitorID sets the "monitor_id" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) SetMonitorID(v int64) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetMonitorID(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateMonitorID sets the "monitor_id" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) UpdateMonitorID() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateMonitorID()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetModel sets the "model" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) SetModel(v string) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetModel(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateModel sets the "model" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) UpdateModel() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateModel()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStatus sets the "status" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) SetStatus(v channelmonitorhistory.Status) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetStatus(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateStatus sets the "status" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) UpdateStatus() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateStatus()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetLatencyMs sets the "latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) SetLatencyMs(v int) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetLatencyMs(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddLatencyMs adds v to the "latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) AddLatencyMs(v int) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.AddLatencyMs(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateLatencyMs sets the "latency_ms" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) UpdateLatencyMs() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateLatencyMs()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearLatencyMs clears the value of the "latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) ClearLatencyMs() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.ClearLatencyMs()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPingLatencyMs sets the "ping_latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) SetPingLatencyMs(v int) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetPingLatencyMs(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddPingLatencyMs adds v to the "ping_latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) AddPingLatencyMs(v int) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.AddPingLatencyMs(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatePingLatencyMs sets the "ping_latency_ms" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) UpdatePingLatencyMs() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdatePingLatencyMs()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearPingLatencyMs clears the value of the "ping_latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) ClearPingLatencyMs() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.ClearPingLatencyMs()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMessage sets the "message" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) SetMessage(v string) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetMessage(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateMessage sets the "message" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) UpdateMessage() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateMessage()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMessage clears the value of the "message" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) ClearMessage() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.ClearMessage()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCheckedAt sets the "checked_at" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) SetCheckedAt(v time.Time) *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetCheckedAt(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateCheckedAt sets the "checked_at" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) UpdateCheckedAt() *ChannelMonitorHistoryUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateCheckedAt()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) Exec(ctx context.Context) error {
|
||||||
|
if len(u.create.conflict) == 0 {
|
||||||
|
return errors.New("ent: missing options for ChannelMonitorHistoryCreate.OnConflict")
|
||||||
|
}
|
||||||
|
return u.create.Exec(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) ExecX(ctx context.Context) {
|
||||||
|
if err := u.create.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the UPSERT query and returns the inserted/updated ID.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) ID(ctx context.Context) (id int64, err error) {
|
||||||
|
node, err := u.create.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return id, err
|
||||||
|
}
|
||||||
|
return node.ID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDX is like ID, but panics if an error occurs.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertOne) IDX(ctx context.Context) int64 {
|
||||||
|
id, err := u.ID(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryCreateBulk is the builder for creating many ChannelMonitorHistory entities in bulk.
|
||||||
|
type ChannelMonitorHistoryCreateBulk struct {
|
||||||
|
config
|
||||||
|
err error
|
||||||
|
builders []*ChannelMonitorHistoryCreate
|
||||||
|
conflict []sql.ConflictOption
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save creates the ChannelMonitorHistory entities in the database.
|
||||||
|
func (_c *ChannelMonitorHistoryCreateBulk) Save(ctx context.Context) ([]*ChannelMonitorHistory, error) {
|
||||||
|
if _c.err != nil {
|
||||||
|
return nil, _c.err
|
||||||
|
}
|
||||||
|
specs := make([]*sqlgraph.CreateSpec, len(_c.builders))
|
||||||
|
nodes := make([]*ChannelMonitorHistory, len(_c.builders))
|
||||||
|
mutators := make([]Mutator, len(_c.builders))
|
||||||
|
for i := range _c.builders {
|
||||||
|
func(i int, root context.Context) {
|
||||||
|
builder := _c.builders[i]
|
||||||
|
builder.defaults()
|
||||||
|
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
|
||||||
|
mutation, ok := m.(*ChannelMonitorHistoryMutation)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("unexpected mutation type %T", m)
|
||||||
|
}
|
||||||
|
if err := builder.check(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
builder.mutation = mutation
|
||||||
|
var err error
|
||||||
|
nodes[i], specs[i] = builder.createSpec()
|
||||||
|
if i < len(mutators)-1 {
|
||||||
|
_, err = mutators[i+1].Mutate(root, _c.builders[i+1].mutation)
|
||||||
|
} else {
|
||||||
|
spec := &sqlgraph.BatchCreateSpec{Nodes: specs}
|
||||||
|
spec.OnConflict = _c.conflict
|
||||||
|
// Invoke the actual operation on the latest mutation in the chain.
|
||||||
|
if err = sqlgraph.BatchCreate(ctx, _c.driver, spec); err != nil {
|
||||||
|
if sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
mutation.id = &nodes[i].ID
|
||||||
|
if specs[i].ID.Value != nil {
|
||||||
|
id := specs[i].ID.Value.(int64)
|
||||||
|
nodes[i].ID = int64(id)
|
||||||
|
}
|
||||||
|
mutation.done = true
|
||||||
|
return nodes[i], nil
|
||||||
|
})
|
||||||
|
for i := len(builder.hooks) - 1; i >= 0; i-- {
|
||||||
|
mut = builder.hooks[i](mut)
|
||||||
|
}
|
||||||
|
mutators[i] = mut
|
||||||
|
}(i, ctx)
|
||||||
|
}
|
||||||
|
if len(mutators) > 0 {
|
||||||
|
if _, err := mutators[0].Mutate(ctx, _c.builders[0].mutation); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveX is like Save, but panics if an error occurs.
|
||||||
|
func (_c *ChannelMonitorHistoryCreateBulk) SaveX(ctx context.Context) []*ChannelMonitorHistory {
|
||||||
|
v, err := _c.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (_c *ChannelMonitorHistoryCreateBulk) Exec(ctx context.Context) error {
|
||||||
|
_, err := _c.Save(ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_c *ChannelMonitorHistoryCreateBulk) ExecX(ctx context.Context) {
|
||||||
|
if err := _c.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnConflict allows configuring the `ON CONFLICT` / `ON DUPLICATE KEY` clause
|
||||||
|
// of the `INSERT` statement. For example:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorHistory.CreateBulk(builders...).
|
||||||
|
// OnConflict(
|
||||||
|
// // Update the row with the new values
|
||||||
|
// // the was proposed for insertion.
|
||||||
|
// sql.ResolveWithNewValues(),
|
||||||
|
// ).
|
||||||
|
// // Override some of the fields with custom
|
||||||
|
// // update values.
|
||||||
|
// Update(func(u *ent.ChannelMonitorHistoryUpsert) {
|
||||||
|
// SetMonitorID(v+v).
|
||||||
|
// }).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (_c *ChannelMonitorHistoryCreateBulk) OnConflict(opts ...sql.ConflictOption) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
_c.conflict = opts
|
||||||
|
return &ChannelMonitorHistoryUpsertBulk{
|
||||||
|
create: _c,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnConflictColumns calls `OnConflict` and configures the columns
|
||||||
|
// as conflict target. Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorHistory.Create().
|
||||||
|
// OnConflict(sql.ConflictColumns(columns...)).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (_c *ChannelMonitorHistoryCreateBulk) OnConflictColumns(columns ...string) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
_c.conflict = append(_c.conflict, sql.ConflictColumns(columns...))
|
||||||
|
return &ChannelMonitorHistoryUpsertBulk{
|
||||||
|
create: _c,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryUpsertBulk is the builder for "upsert"-ing
|
||||||
|
// a bulk of ChannelMonitorHistory nodes.
|
||||||
|
type ChannelMonitorHistoryUpsertBulk struct {
|
||||||
|
create *ChannelMonitorHistoryCreateBulk
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateNewValues updates the mutable fields using the new values that
|
||||||
|
// were set on create. Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorHistory.Create().
|
||||||
|
// OnConflict(
|
||||||
|
// sql.ResolveWithNewValues(),
|
||||||
|
// ).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) UpdateNewValues() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWithNewValues())
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore sets each column to itself in case of conflict.
|
||||||
|
// Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorHistory.Create().
|
||||||
|
// OnConflict(sql.ResolveWithIgnore()).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) Ignore() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWithIgnore())
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// DoNothing configures the conflict_action to `DO NOTHING`.
|
||||||
|
// Supported only by SQLite and PostgreSQL.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) DoNothing() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.DoNothing())
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update allows overriding fields `UPDATE` values. See the ChannelMonitorHistoryCreateBulk.OnConflict
|
||||||
|
// documentation for more info.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) Update(set func(*ChannelMonitorHistoryUpsert)) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(update *sql.UpdateSet) {
|
||||||
|
set(&ChannelMonitorHistoryUpsert{UpdateSet: update})
|
||||||
|
}))
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitorID sets the "monitor_id" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) SetMonitorID(v int64) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetMonitorID(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateMonitorID sets the "monitor_id" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) UpdateMonitorID() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateMonitorID()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetModel sets the "model" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) SetModel(v string) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetModel(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateModel sets the "model" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) UpdateModel() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateModel()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStatus sets the "status" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) SetStatus(v channelmonitorhistory.Status) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetStatus(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateStatus sets the "status" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) UpdateStatus() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateStatus()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetLatencyMs sets the "latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) SetLatencyMs(v int) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetLatencyMs(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddLatencyMs adds v to the "latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) AddLatencyMs(v int) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.AddLatencyMs(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateLatencyMs sets the "latency_ms" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) UpdateLatencyMs() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateLatencyMs()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearLatencyMs clears the value of the "latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) ClearLatencyMs() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.ClearLatencyMs()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPingLatencyMs sets the "ping_latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) SetPingLatencyMs(v int) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetPingLatencyMs(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddPingLatencyMs adds v to the "ping_latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) AddPingLatencyMs(v int) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.AddPingLatencyMs(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatePingLatencyMs sets the "ping_latency_ms" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) UpdatePingLatencyMs() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdatePingLatencyMs()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearPingLatencyMs clears the value of the "ping_latency_ms" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) ClearPingLatencyMs() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.ClearPingLatencyMs()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMessage sets the "message" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) SetMessage(v string) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetMessage(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateMessage sets the "message" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) UpdateMessage() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateMessage()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMessage clears the value of the "message" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) ClearMessage() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.ClearMessage()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCheckedAt sets the "checked_at" field.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) SetCheckedAt(v time.Time) *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.SetCheckedAt(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateCheckedAt sets the "checked_at" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) UpdateCheckedAt() *ChannelMonitorHistoryUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorHistoryUpsert) {
|
||||||
|
s.UpdateCheckedAt()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) Exec(ctx context.Context) error {
|
||||||
|
if u.create.err != nil {
|
||||||
|
return u.create.err
|
||||||
|
}
|
||||||
|
for i, b := range u.create.builders {
|
||||||
|
if len(b.conflict) != 0 {
|
||||||
|
return fmt.Errorf("ent: OnConflict was set for builder %d. Set it on the ChannelMonitorHistoryCreateBulk instead", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(u.create.conflict) == 0 {
|
||||||
|
return errors.New("ent: missing options for ChannelMonitorHistoryCreateBulk.OnConflict")
|
||||||
|
}
|
||||||
|
return u.create.Exec(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (u *ChannelMonitorHistoryUpsertBulk) ExecX(ctx context.Context) {
|
||||||
|
if err := u.create.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
88
backend/ent/channelmonitorhistory_delete.go
Normal file
88
backend/ent/channelmonitorhistory_delete.go
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorhistory"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryDelete is the builder for deleting a ChannelMonitorHistory entity.
|
||||||
|
type ChannelMonitorHistoryDelete struct {
|
||||||
|
config
|
||||||
|
hooks []Hook
|
||||||
|
mutation *ChannelMonitorHistoryMutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorHistoryDelete builder.
|
||||||
|
func (_d *ChannelMonitorHistoryDelete) Where(ps ...predicate.ChannelMonitorHistory) *ChannelMonitorHistoryDelete {
|
||||||
|
_d.mutation.Where(ps...)
|
||||||
|
return _d
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the deletion query and returns how many vertices were deleted.
|
||||||
|
func (_d *ChannelMonitorHistoryDelete) Exec(ctx context.Context) (int, error) {
|
||||||
|
return withHooks(ctx, _d.sqlExec, _d.mutation, _d.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_d *ChannelMonitorHistoryDelete) ExecX(ctx context.Context) int {
|
||||||
|
n, err := _d.Exec(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_d *ChannelMonitorHistoryDelete) sqlExec(ctx context.Context) (int, error) {
|
||||||
|
_spec := sqlgraph.NewDeleteSpec(channelmonitorhistory.Table, sqlgraph.NewFieldSpec(channelmonitorhistory.FieldID, field.TypeInt64))
|
||||||
|
if ps := _d.mutation.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
affected, err := sqlgraph.DeleteNodes(ctx, _d.driver, _spec)
|
||||||
|
if err != nil && sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
_d.mutation.done = true
|
||||||
|
return affected, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryDeleteOne is the builder for deleting a single ChannelMonitorHistory entity.
|
||||||
|
type ChannelMonitorHistoryDeleteOne struct {
|
||||||
|
_d *ChannelMonitorHistoryDelete
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorHistoryDelete builder.
|
||||||
|
func (_d *ChannelMonitorHistoryDeleteOne) Where(ps ...predicate.ChannelMonitorHistory) *ChannelMonitorHistoryDeleteOne {
|
||||||
|
_d._d.mutation.Where(ps...)
|
||||||
|
return _d
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the deletion query.
|
||||||
|
func (_d *ChannelMonitorHistoryDeleteOne) Exec(ctx context.Context) error {
|
||||||
|
n, err := _d._d.Exec(ctx)
|
||||||
|
switch {
|
||||||
|
case err != nil:
|
||||||
|
return err
|
||||||
|
case n == 0:
|
||||||
|
return &NotFoundError{channelmonitorhistory.Label}
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_d *ChannelMonitorHistoryDeleteOne) ExecX(ctx context.Context) {
|
||||||
|
if err := _d.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
643
backend/ent/channelmonitorhistory_query.go
Normal file
643
backend/ent/channelmonitorhistory_query.go
Normal file
@ -0,0 +1,643 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect"
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorhistory"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryQuery is the builder for querying ChannelMonitorHistory entities.
|
||||||
|
type ChannelMonitorHistoryQuery struct {
|
||||||
|
config
|
||||||
|
ctx *QueryContext
|
||||||
|
order []channelmonitorhistory.OrderOption
|
||||||
|
inters []Interceptor
|
||||||
|
predicates []predicate.ChannelMonitorHistory
|
||||||
|
withMonitor *ChannelMonitorQuery
|
||||||
|
modifiers []func(*sql.Selector)
|
||||||
|
// intermediate query (i.e. traversal path).
|
||||||
|
sql *sql.Selector
|
||||||
|
path func(context.Context) (*sql.Selector, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where adds a new predicate for the ChannelMonitorHistoryQuery builder.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Where(ps ...predicate.ChannelMonitorHistory) *ChannelMonitorHistoryQuery {
|
||||||
|
_q.predicates = append(_q.predicates, ps...)
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Limit the number of records to be returned by this query.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Limit(limit int) *ChannelMonitorHistoryQuery {
|
||||||
|
_q.ctx.Limit = &limit
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Offset to start from.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Offset(offset int) *ChannelMonitorHistoryQuery {
|
||||||
|
_q.ctx.Offset = &offset
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unique configures the query builder to filter duplicate records on query.
|
||||||
|
// By default, unique is set to true, and can be disabled using this method.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Unique(unique bool) *ChannelMonitorHistoryQuery {
|
||||||
|
_q.ctx.Unique = &unique
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Order specifies how the records should be ordered.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Order(o ...channelmonitorhistory.OrderOption) *ChannelMonitorHistoryQuery {
|
||||||
|
_q.order = append(_q.order, o...)
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMonitor chains the current query on the "monitor" edge.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) QueryMonitor() *ChannelMonitorQuery {
|
||||||
|
query := (&ChannelMonitorClient{config: _q.config}).Query()
|
||||||
|
query.path = func(ctx context.Context) (fromU *sql.Selector, err error) {
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
selector := _q.sqlQuery(ctx)
|
||||||
|
if err := selector.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitorhistory.Table, channelmonitorhistory.FieldID, selector),
|
||||||
|
sqlgraph.To(channelmonitor.Table, channelmonitor.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, true, channelmonitorhistory.MonitorTable, channelmonitorhistory.MonitorColumn),
|
||||||
|
)
|
||||||
|
fromU = sqlgraph.SetNeighbors(_q.driver.Dialect(), step)
|
||||||
|
return fromU, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// First returns the first ChannelMonitorHistory entity from the query.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitorHistory was found.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) First(ctx context.Context) (*ChannelMonitorHistory, error) {
|
||||||
|
nodes, err := _q.Limit(1).All(setContextOp(ctx, _q.ctx, ent.OpQueryFirst))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(nodes) == 0 {
|
||||||
|
return nil, &NotFoundError{channelmonitorhistory.Label}
|
||||||
|
}
|
||||||
|
return nodes[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstX is like First, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) FirstX(ctx context.Context) *ChannelMonitorHistory {
|
||||||
|
node, err := _q.First(ctx)
|
||||||
|
if err != nil && !IsNotFound(err) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstID returns the first ChannelMonitorHistory ID from the query.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitorHistory ID was found.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) FirstID(ctx context.Context) (id int64, err error) {
|
||||||
|
var ids []int64
|
||||||
|
if ids, err = _q.Limit(1).IDs(setContextOp(ctx, _q.ctx, ent.OpQueryFirstID)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(ids) == 0 {
|
||||||
|
err = &NotFoundError{channelmonitorhistory.Label}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return ids[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstIDX is like FirstID, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) FirstIDX(ctx context.Context) int64 {
|
||||||
|
id, err := _q.FirstID(ctx)
|
||||||
|
if err != nil && !IsNotFound(err) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only returns a single ChannelMonitorHistory entity found by the query, ensuring it only returns one.
|
||||||
|
// Returns a *NotSingularError when more than one ChannelMonitorHistory entity is found.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitorHistory entities are found.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Only(ctx context.Context) (*ChannelMonitorHistory, error) {
|
||||||
|
nodes, err := _q.Limit(2).All(setContextOp(ctx, _q.ctx, ent.OpQueryOnly))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
switch len(nodes) {
|
||||||
|
case 1:
|
||||||
|
return nodes[0], nil
|
||||||
|
case 0:
|
||||||
|
return nil, &NotFoundError{channelmonitorhistory.Label}
|
||||||
|
default:
|
||||||
|
return nil, &NotSingularError{channelmonitorhistory.Label}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyX is like Only, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) OnlyX(ctx context.Context) *ChannelMonitorHistory {
|
||||||
|
node, err := _q.Only(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyID is like Only, but returns the only ChannelMonitorHistory ID in the query.
|
||||||
|
// Returns a *NotSingularError when more than one ChannelMonitorHistory ID is found.
|
||||||
|
// Returns a *NotFoundError when no entities are found.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) OnlyID(ctx context.Context) (id int64, err error) {
|
||||||
|
var ids []int64
|
||||||
|
if ids, err = _q.Limit(2).IDs(setContextOp(ctx, _q.ctx, ent.OpQueryOnlyID)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch len(ids) {
|
||||||
|
case 1:
|
||||||
|
id = ids[0]
|
||||||
|
case 0:
|
||||||
|
err = &NotFoundError{channelmonitorhistory.Label}
|
||||||
|
default:
|
||||||
|
err = &NotSingularError{channelmonitorhistory.Label}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyIDX is like OnlyID, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) OnlyIDX(ctx context.Context) int64 {
|
||||||
|
id, err := _q.OnlyID(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// All executes the query and returns a list of ChannelMonitorHistories.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) All(ctx context.Context) ([]*ChannelMonitorHistory, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryAll)
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
qr := querierAll[[]*ChannelMonitorHistory, *ChannelMonitorHistoryQuery]()
|
||||||
|
return withInterceptors[[]*ChannelMonitorHistory](ctx, _q, qr, _q.inters)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AllX is like All, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) AllX(ctx context.Context) []*ChannelMonitorHistory {
|
||||||
|
nodes, err := _q.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return nodes
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDs executes the query and returns a list of ChannelMonitorHistory IDs.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) IDs(ctx context.Context) (ids []int64, err error) {
|
||||||
|
if _q.ctx.Unique == nil && _q.path != nil {
|
||||||
|
_q.Unique(true)
|
||||||
|
}
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryIDs)
|
||||||
|
if err = _q.Select(channelmonitorhistory.FieldID).Scan(ctx, &ids); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ids, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDsX is like IDs, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) IDsX(ctx context.Context) []int64 {
|
||||||
|
ids, err := _q.IDs(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return ids
|
||||||
|
}
|
||||||
|
|
||||||
|
// Count returns the count of the given query.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Count(ctx context.Context) (int, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryCount)
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return withInterceptors[int](ctx, _q, querierCount[*ChannelMonitorHistoryQuery](), _q.inters)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountX is like Count, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) CountX(ctx context.Context) int {
|
||||||
|
count, err := _q.Count(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exist returns true if the query has elements in the graph.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Exist(ctx context.Context) (bool, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryExist)
|
||||||
|
switch _, err := _q.FirstID(ctx); {
|
||||||
|
case IsNotFound(err):
|
||||||
|
return false, nil
|
||||||
|
case err != nil:
|
||||||
|
return false, fmt.Errorf("ent: check existence: %w", err)
|
||||||
|
default:
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExistX is like Exist, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) ExistX(ctx context.Context) bool {
|
||||||
|
exist, err := _q.Exist(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return exist
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clone returns a duplicate of the ChannelMonitorHistoryQuery builder, including all associated steps. It can be
|
||||||
|
// used to prepare common query builders and use them differently after the clone is made.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Clone() *ChannelMonitorHistoryQuery {
|
||||||
|
if _q == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &ChannelMonitorHistoryQuery{
|
||||||
|
config: _q.config,
|
||||||
|
ctx: _q.ctx.Clone(),
|
||||||
|
order: append([]channelmonitorhistory.OrderOption{}, _q.order...),
|
||||||
|
inters: append([]Interceptor{}, _q.inters...),
|
||||||
|
predicates: append([]predicate.ChannelMonitorHistory{}, _q.predicates...),
|
||||||
|
withMonitor: _q.withMonitor.Clone(),
|
||||||
|
// clone intermediate query.
|
||||||
|
sql: _q.sql.Clone(),
|
||||||
|
path: _q.path,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMonitor tells the query-builder to eager-load the nodes that are connected to
|
||||||
|
// the "monitor" edge. The optional arguments are used to configure the query builder of the edge.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) WithMonitor(opts ...func(*ChannelMonitorQuery)) *ChannelMonitorHistoryQuery {
|
||||||
|
query := (&ChannelMonitorClient{config: _q.config}).Query()
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(query)
|
||||||
|
}
|
||||||
|
_q.withMonitor = query
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupBy is used to group vertices by one or more fields/columns.
|
||||||
|
// It is often used with aggregate functions, like: count, max, mean, min, sum.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var v []struct {
|
||||||
|
// MonitorID int64 `json:"monitor_id,omitempty"`
|
||||||
|
// Count int `json:"count,omitempty"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorHistory.Query().
|
||||||
|
// GroupBy(channelmonitorhistory.FieldMonitorID).
|
||||||
|
// Aggregate(ent.Count()).
|
||||||
|
// Scan(ctx, &v)
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) GroupBy(field string, fields ...string) *ChannelMonitorHistoryGroupBy {
|
||||||
|
_q.ctx.Fields = append([]string{field}, fields...)
|
||||||
|
grbuild := &ChannelMonitorHistoryGroupBy{build: _q}
|
||||||
|
grbuild.flds = &_q.ctx.Fields
|
||||||
|
grbuild.label = channelmonitorhistory.Label
|
||||||
|
grbuild.scan = grbuild.Scan
|
||||||
|
return grbuild
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select allows the selection one or more fields/columns for the given query,
|
||||||
|
// instead of selecting all fields in the entity.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var v []struct {
|
||||||
|
// MonitorID int64 `json:"monitor_id,omitempty"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorHistory.Query().
|
||||||
|
// Select(channelmonitorhistory.FieldMonitorID).
|
||||||
|
// Scan(ctx, &v)
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Select(fields ...string) *ChannelMonitorHistorySelect {
|
||||||
|
_q.ctx.Fields = append(_q.ctx.Fields, fields...)
|
||||||
|
sbuild := &ChannelMonitorHistorySelect{ChannelMonitorHistoryQuery: _q}
|
||||||
|
sbuild.label = channelmonitorhistory.Label
|
||||||
|
sbuild.flds, sbuild.scan = &_q.ctx.Fields, sbuild.Scan
|
||||||
|
return sbuild
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate returns a ChannelMonitorHistorySelect configured with the given aggregations.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) Aggregate(fns ...AggregateFunc) *ChannelMonitorHistorySelect {
|
||||||
|
return _q.Select().Aggregate(fns...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) prepareQuery(ctx context.Context) error {
|
||||||
|
for _, inter := range _q.inters {
|
||||||
|
if inter == nil {
|
||||||
|
return fmt.Errorf("ent: uninitialized interceptor (forgotten import ent/runtime?)")
|
||||||
|
}
|
||||||
|
if trv, ok := inter.(Traverser); ok {
|
||||||
|
if err := trv.Traverse(ctx, _q); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, f := range _q.ctx.Fields {
|
||||||
|
if !channelmonitorhistory.ValidColumn(f) {
|
||||||
|
return &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _q.path != nil {
|
||||||
|
prev, err := _q.path(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_q.sql = prev
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*ChannelMonitorHistory, error) {
|
||||||
|
var (
|
||||||
|
nodes = []*ChannelMonitorHistory{}
|
||||||
|
_spec = _q.querySpec()
|
||||||
|
loadedTypes = [1]bool{
|
||||||
|
_q.withMonitor != nil,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
_spec.ScanValues = func(columns []string) ([]any, error) {
|
||||||
|
return (*ChannelMonitorHistory).scanValues(nil, columns)
|
||||||
|
}
|
||||||
|
_spec.Assign = func(columns []string, values []any) error {
|
||||||
|
node := &ChannelMonitorHistory{config: _q.config}
|
||||||
|
nodes = append(nodes, node)
|
||||||
|
node.Edges.loadedTypes = loadedTypes
|
||||||
|
return node.assignValues(columns, values)
|
||||||
|
}
|
||||||
|
if len(_q.modifiers) > 0 {
|
||||||
|
_spec.Modifiers = _q.modifiers
|
||||||
|
}
|
||||||
|
for i := range hooks {
|
||||||
|
hooks[i](ctx, _spec)
|
||||||
|
}
|
||||||
|
if err := sqlgraph.QueryNodes(ctx, _q.driver, _spec); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(nodes) == 0 {
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
|
if query := _q.withMonitor; query != nil {
|
||||||
|
if err := _q.loadMonitor(ctx, query, nodes, nil,
|
||||||
|
func(n *ChannelMonitorHistory, e *ChannelMonitor) { n.Edges.Monitor = e }); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) loadMonitor(ctx context.Context, query *ChannelMonitorQuery, nodes []*ChannelMonitorHistory, init func(*ChannelMonitorHistory), assign func(*ChannelMonitorHistory, *ChannelMonitor)) error {
|
||||||
|
ids := make([]int64, 0, len(nodes))
|
||||||
|
nodeids := make(map[int64][]*ChannelMonitorHistory)
|
||||||
|
for i := range nodes {
|
||||||
|
fk := nodes[i].MonitorID
|
||||||
|
if _, ok := nodeids[fk]; !ok {
|
||||||
|
ids = append(ids, fk)
|
||||||
|
}
|
||||||
|
nodeids[fk] = append(nodeids[fk], nodes[i])
|
||||||
|
}
|
||||||
|
if len(ids) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
query.Where(channelmonitor.IDIn(ids...))
|
||||||
|
neighbors, err := query.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, n := range neighbors {
|
||||||
|
nodes, ok := nodeids[n.ID]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf(`unexpected foreign-key "monitor_id" returned %v`, n.ID)
|
||||||
|
}
|
||||||
|
for i := range nodes {
|
||||||
|
assign(nodes[i], n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) sqlCount(ctx context.Context) (int, error) {
|
||||||
|
_spec := _q.querySpec()
|
||||||
|
if len(_q.modifiers) > 0 {
|
||||||
|
_spec.Modifiers = _q.modifiers
|
||||||
|
}
|
||||||
|
_spec.Node.Columns = _q.ctx.Fields
|
||||||
|
if len(_q.ctx.Fields) > 0 {
|
||||||
|
_spec.Unique = _q.ctx.Unique != nil && *_q.ctx.Unique
|
||||||
|
}
|
||||||
|
return sqlgraph.CountNodes(ctx, _q.driver, _spec)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) querySpec() *sqlgraph.QuerySpec {
|
||||||
|
_spec := sqlgraph.NewQuerySpec(channelmonitorhistory.Table, channelmonitorhistory.Columns, sqlgraph.NewFieldSpec(channelmonitorhistory.FieldID, field.TypeInt64))
|
||||||
|
_spec.From = _q.sql
|
||||||
|
if unique := _q.ctx.Unique; unique != nil {
|
||||||
|
_spec.Unique = *unique
|
||||||
|
} else if _q.path != nil {
|
||||||
|
_spec.Unique = true
|
||||||
|
}
|
||||||
|
if fields := _q.ctx.Fields; len(fields) > 0 {
|
||||||
|
_spec.Node.Columns = make([]string, 0, len(fields))
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, channelmonitorhistory.FieldID)
|
||||||
|
for i := range fields {
|
||||||
|
if fields[i] != channelmonitorhistory.FieldID {
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, fields[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _q.withMonitor != nil {
|
||||||
|
_spec.Node.AddColumnOnce(channelmonitorhistory.FieldMonitorID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ps := _q.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if limit := _q.ctx.Limit; limit != nil {
|
||||||
|
_spec.Limit = *limit
|
||||||
|
}
|
||||||
|
if offset := _q.ctx.Offset; offset != nil {
|
||||||
|
_spec.Offset = *offset
|
||||||
|
}
|
||||||
|
if ps := _q.order; len(ps) > 0 {
|
||||||
|
_spec.Order = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _spec
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) sqlQuery(ctx context.Context) *sql.Selector {
|
||||||
|
builder := sql.Dialect(_q.driver.Dialect())
|
||||||
|
t1 := builder.Table(channelmonitorhistory.Table)
|
||||||
|
columns := _q.ctx.Fields
|
||||||
|
if len(columns) == 0 {
|
||||||
|
columns = channelmonitorhistory.Columns
|
||||||
|
}
|
||||||
|
selector := builder.Select(t1.Columns(columns...)...).From(t1)
|
||||||
|
if _q.sql != nil {
|
||||||
|
selector = _q.sql
|
||||||
|
selector.Select(selector.Columns(columns...)...)
|
||||||
|
}
|
||||||
|
if _q.ctx.Unique != nil && *_q.ctx.Unique {
|
||||||
|
selector.Distinct()
|
||||||
|
}
|
||||||
|
for _, m := range _q.modifiers {
|
||||||
|
m(selector)
|
||||||
|
}
|
||||||
|
for _, p := range _q.predicates {
|
||||||
|
p(selector)
|
||||||
|
}
|
||||||
|
for _, p := range _q.order {
|
||||||
|
p(selector)
|
||||||
|
}
|
||||||
|
if offset := _q.ctx.Offset; offset != nil {
|
||||||
|
// limit is mandatory for offset clause. We start
|
||||||
|
// with default value, and override it below if needed.
|
||||||
|
selector.Offset(*offset).Limit(math.MaxInt32)
|
||||||
|
}
|
||||||
|
if limit := _q.ctx.Limit; limit != nil {
|
||||||
|
selector.Limit(*limit)
|
||||||
|
}
|
||||||
|
return selector
|
||||||
|
}
|
||||||
|
|
||||||
|
// ForUpdate locks the selected rows against concurrent updates, and prevent them from being
|
||||||
|
// updated, deleted or "selected ... for update" by other sessions, until the transaction is
|
||||||
|
// either committed or rolled-back.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) ForUpdate(opts ...sql.LockOption) *ChannelMonitorHistoryQuery {
|
||||||
|
if _q.driver.Dialect() == dialect.Postgres {
|
||||||
|
_q.Unique(false)
|
||||||
|
}
|
||||||
|
_q.modifiers = append(_q.modifiers, func(s *sql.Selector) {
|
||||||
|
s.ForUpdate(opts...)
|
||||||
|
})
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// ForShare behaves similarly to ForUpdate, except that it acquires a shared mode lock
|
||||||
|
// on any rows that are read. Other sessions can read the rows, but cannot modify them
|
||||||
|
// until your transaction commits.
|
||||||
|
func (_q *ChannelMonitorHistoryQuery) ForShare(opts ...sql.LockOption) *ChannelMonitorHistoryQuery {
|
||||||
|
if _q.driver.Dialect() == dialect.Postgres {
|
||||||
|
_q.Unique(false)
|
||||||
|
}
|
||||||
|
_q.modifiers = append(_q.modifiers, func(s *sql.Selector) {
|
||||||
|
s.ForShare(opts...)
|
||||||
|
})
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryGroupBy is the group-by builder for ChannelMonitorHistory entities.
|
||||||
|
type ChannelMonitorHistoryGroupBy struct {
|
||||||
|
selector
|
||||||
|
build *ChannelMonitorHistoryQuery
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate adds the given aggregation functions to the group-by query.
|
||||||
|
func (_g *ChannelMonitorHistoryGroupBy) Aggregate(fns ...AggregateFunc) *ChannelMonitorHistoryGroupBy {
|
||||||
|
_g.fns = append(_g.fns, fns...)
|
||||||
|
return _g
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan applies the selector query and scans the result into the given value.
|
||||||
|
func (_g *ChannelMonitorHistoryGroupBy) Scan(ctx context.Context, v any) error {
|
||||||
|
ctx = setContextOp(ctx, _g.build.ctx, ent.OpQueryGroupBy)
|
||||||
|
if err := _g.build.prepareQuery(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return scanWithInterceptors[*ChannelMonitorHistoryQuery, *ChannelMonitorHistoryGroupBy](ctx, _g.build, _g, _g.build.inters, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_g *ChannelMonitorHistoryGroupBy) sqlScan(ctx context.Context, root *ChannelMonitorHistoryQuery, v any) error {
|
||||||
|
selector := root.sqlQuery(ctx).Select()
|
||||||
|
aggregation := make([]string, 0, len(_g.fns))
|
||||||
|
for _, fn := range _g.fns {
|
||||||
|
aggregation = append(aggregation, fn(selector))
|
||||||
|
}
|
||||||
|
if len(selector.SelectedColumns()) == 0 {
|
||||||
|
columns := make([]string, 0, len(*_g.flds)+len(_g.fns))
|
||||||
|
for _, f := range *_g.flds {
|
||||||
|
columns = append(columns, selector.C(f))
|
||||||
|
}
|
||||||
|
columns = append(columns, aggregation...)
|
||||||
|
selector.Select(columns...)
|
||||||
|
}
|
||||||
|
selector.GroupBy(selector.Columns(*_g.flds...)...)
|
||||||
|
if err := selector.Err(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
rows := &sql.Rows{}
|
||||||
|
query, args := selector.Query()
|
||||||
|
if err := _g.build.driver.Query(ctx, query, args, rows); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return sql.ScanSlice(rows, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorHistorySelect is the builder for selecting fields of ChannelMonitorHistory entities.
|
||||||
|
type ChannelMonitorHistorySelect struct {
|
||||||
|
*ChannelMonitorHistoryQuery
|
||||||
|
selector
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate adds the given aggregation functions to the selector query.
|
||||||
|
func (_s *ChannelMonitorHistorySelect) Aggregate(fns ...AggregateFunc) *ChannelMonitorHistorySelect {
|
||||||
|
_s.fns = append(_s.fns, fns...)
|
||||||
|
return _s
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan applies the selector query and scans the result into the given value.
|
||||||
|
func (_s *ChannelMonitorHistorySelect) Scan(ctx context.Context, v any) error {
|
||||||
|
ctx = setContextOp(ctx, _s.ctx, ent.OpQuerySelect)
|
||||||
|
if err := _s.prepareQuery(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return scanWithInterceptors[*ChannelMonitorHistoryQuery, *ChannelMonitorHistorySelect](ctx, _s.ChannelMonitorHistoryQuery, _s, _s.inters, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_s *ChannelMonitorHistorySelect) sqlScan(ctx context.Context, root *ChannelMonitorHistoryQuery, v any) error {
|
||||||
|
selector := root.sqlQuery(ctx)
|
||||||
|
aggregation := make([]string, 0, len(_s.fns))
|
||||||
|
for _, fn := range _s.fns {
|
||||||
|
aggregation = append(aggregation, fn(selector))
|
||||||
|
}
|
||||||
|
switch n := len(*_s.selector.flds); {
|
||||||
|
case n == 0 && len(aggregation) > 0:
|
||||||
|
selector.Select(aggregation...)
|
||||||
|
case n != 0 && len(aggregation) > 0:
|
||||||
|
selector.AppendSelect(aggregation...)
|
||||||
|
}
|
||||||
|
rows := &sql.Rows{}
|
||||||
|
query, args := selector.Query()
|
||||||
|
if err := _s.driver.Query(ctx, query, args, rows); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return sql.ScanSlice(rows, v)
|
||||||
|
}
|
||||||
635
backend/ent/channelmonitorhistory_update.go
Normal file
635
backend/ent/channelmonitorhistory_update.go
Normal file
@ -0,0 +1,635 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorhistory"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryUpdate is the builder for updating ChannelMonitorHistory entities.
|
||||||
|
type ChannelMonitorHistoryUpdate struct {
|
||||||
|
config
|
||||||
|
hooks []Hook
|
||||||
|
mutation *ChannelMonitorHistoryMutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorHistoryUpdate builder.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) Where(ps ...predicate.ChannelMonitorHistory) *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.Where(ps...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitorID sets the "monitor_id" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetMonitorID(v int64) *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.SetMonitorID(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableMonitorID sets the "monitor_id" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetNillableMonitorID(v *int64) *ChannelMonitorHistoryUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetMonitorID(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetModel sets the "model" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetModel(v string) *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.SetModel(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableModel sets the "model" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetNillableModel(v *string) *ChannelMonitorHistoryUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetModel(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStatus sets the "status" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetStatus(v channelmonitorhistory.Status) *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.SetStatus(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableStatus sets the "status" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetNillableStatus(v *channelmonitorhistory.Status) *ChannelMonitorHistoryUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetStatus(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetLatencyMs sets the "latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetLatencyMs(v int) *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.ResetLatencyMs()
|
||||||
|
_u.mutation.SetLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableLatencyMs sets the "latency_ms" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetNillableLatencyMs(v *int) *ChannelMonitorHistoryUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetLatencyMs(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddLatencyMs adds value to the "latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) AddLatencyMs(v int) *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.AddLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearLatencyMs clears the value of the "latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) ClearLatencyMs() *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.ClearLatencyMs()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPingLatencyMs sets the "ping_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetPingLatencyMs(v int) *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.ResetPingLatencyMs()
|
||||||
|
_u.mutation.SetPingLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillablePingLatencyMs sets the "ping_latency_ms" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetNillablePingLatencyMs(v *int) *ChannelMonitorHistoryUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetPingLatencyMs(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddPingLatencyMs adds value to the "ping_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) AddPingLatencyMs(v int) *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.AddPingLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearPingLatencyMs clears the value of the "ping_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) ClearPingLatencyMs() *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.ClearPingLatencyMs()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMessage sets the "message" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetMessage(v string) *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.SetMessage(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableMessage sets the "message" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetNillableMessage(v *string) *ChannelMonitorHistoryUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetMessage(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMessage clears the value of the "message" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) ClearMessage() *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.ClearMessage()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCheckedAt sets the "checked_at" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetCheckedAt(v time.Time) *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.SetCheckedAt(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableCheckedAt sets the "checked_at" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetNillableCheckedAt(v *time.Time) *ChannelMonitorHistoryUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetCheckedAt(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitor sets the "monitor" edge to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SetMonitor(v *ChannelMonitor) *ChannelMonitorHistoryUpdate {
|
||||||
|
return _u.SetMonitorID(v.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutation returns the ChannelMonitorHistoryMutation object of the builder.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) Mutation() *ChannelMonitorHistoryMutation {
|
||||||
|
return _u.mutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMonitor clears the "monitor" edge to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) ClearMonitor() *ChannelMonitorHistoryUpdate {
|
||||||
|
_u.mutation.ClearMonitor()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save executes the query and returns the number of nodes affected by the update operation.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) Save(ctx context.Context) (int, error) {
|
||||||
|
return withHooks(ctx, _u.sqlSave, _u.mutation, _u.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveX is like Save, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) SaveX(ctx context.Context) int {
|
||||||
|
affected, err := _u.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return affected
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) Exec(ctx context.Context) error {
|
||||||
|
_, err := _u.Save(ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) ExecX(ctx context.Context) {
|
||||||
|
if err := _u.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check runs all checks and user-defined validators on the builder.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) check() error {
|
||||||
|
if v, ok := _u.mutation.Model(); ok {
|
||||||
|
if err := channelmonitorhistory.ModelValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "model", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorHistory.model": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _u.mutation.Status(); ok {
|
||||||
|
if err := channelmonitorhistory.StatusValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "status", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorHistory.status": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _u.mutation.Message(); ok {
|
||||||
|
if err := channelmonitorhistory.MessageValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "message", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorHistory.message": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _u.mutation.MonitorCleared() && len(_u.mutation.MonitorIDs()) > 0 {
|
||||||
|
return errors.New(`ent: clearing a required unique edge "ChannelMonitorHistory.monitor"`)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_u *ChannelMonitorHistoryUpdate) sqlSave(ctx context.Context) (_node int, err error) {
|
||||||
|
if err := _u.check(); err != nil {
|
||||||
|
return _node, err
|
||||||
|
}
|
||||||
|
_spec := sqlgraph.NewUpdateSpec(channelmonitorhistory.Table, channelmonitorhistory.Columns, sqlgraph.NewFieldSpec(channelmonitorhistory.FieldID, field.TypeInt64))
|
||||||
|
if ps := _u.mutation.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Model(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldModel, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Status(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldStatus, field.TypeEnum, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.LatencyMs(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldLatencyMs, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedLatencyMs(); ok {
|
||||||
|
_spec.AddField(channelmonitorhistory.FieldLatencyMs, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.LatencyMsCleared() {
|
||||||
|
_spec.ClearField(channelmonitorhistory.FieldLatencyMs, field.TypeInt)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.PingLatencyMs(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldPingLatencyMs, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedPingLatencyMs(); ok {
|
||||||
|
_spec.AddField(channelmonitorhistory.FieldPingLatencyMs, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.PingLatencyMsCleared() {
|
||||||
|
_spec.ClearField(channelmonitorhistory.FieldPingLatencyMs, field.TypeInt)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Message(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldMessage, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.MessageCleared() {
|
||||||
|
_spec.ClearField(channelmonitorhistory.FieldMessage, field.TypeString)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.CheckedAt(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldCheckedAt, field.TypeTime, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.MonitorCleared() {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.M2O,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorhistory.MonitorTable,
|
||||||
|
Columns: []string{channelmonitorhistory.MonitorColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||||
|
}
|
||||||
|
if nodes := _u.mutation.MonitorIDs(); len(nodes) > 0 {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.M2O,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorhistory.MonitorTable,
|
||||||
|
Columns: []string{channelmonitorhistory.MonitorColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, k := range nodes {
|
||||||
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||||
|
}
|
||||||
|
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||||
|
}
|
||||||
|
if _node, err = sqlgraph.UpdateNodes(ctx, _u.driver, _spec); err != nil {
|
||||||
|
if _, ok := err.(*sqlgraph.NotFoundError); ok {
|
||||||
|
err = &NotFoundError{channelmonitorhistory.Label}
|
||||||
|
} else if sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
_u.mutation.done = true
|
||||||
|
return _node, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryUpdateOne is the builder for updating a single ChannelMonitorHistory entity.
|
||||||
|
type ChannelMonitorHistoryUpdateOne struct {
|
||||||
|
config
|
||||||
|
fields []string
|
||||||
|
hooks []Hook
|
||||||
|
mutation *ChannelMonitorHistoryMutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitorID sets the "monitor_id" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetMonitorID(v int64) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.SetMonitorID(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableMonitorID sets the "monitor_id" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetNillableMonitorID(v *int64) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetMonitorID(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetModel sets the "model" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetModel(v string) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.SetModel(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableModel sets the "model" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetNillableModel(v *string) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetModel(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStatus sets the "status" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetStatus(v channelmonitorhistory.Status) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.SetStatus(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableStatus sets the "status" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetNillableStatus(v *channelmonitorhistory.Status) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetStatus(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetLatencyMs sets the "latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetLatencyMs(v int) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.ResetLatencyMs()
|
||||||
|
_u.mutation.SetLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableLatencyMs sets the "latency_ms" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetNillableLatencyMs(v *int) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetLatencyMs(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddLatencyMs adds value to the "latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) AddLatencyMs(v int) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.AddLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearLatencyMs clears the value of the "latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) ClearLatencyMs() *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.ClearLatencyMs()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPingLatencyMs sets the "ping_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetPingLatencyMs(v int) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.ResetPingLatencyMs()
|
||||||
|
_u.mutation.SetPingLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillablePingLatencyMs sets the "ping_latency_ms" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetNillablePingLatencyMs(v *int) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetPingLatencyMs(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddPingLatencyMs adds value to the "ping_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) AddPingLatencyMs(v int) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.AddPingLatencyMs(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearPingLatencyMs clears the value of the "ping_latency_ms" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) ClearPingLatencyMs() *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.ClearPingLatencyMs()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMessage sets the "message" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetMessage(v string) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.SetMessage(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableMessage sets the "message" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetNillableMessage(v *string) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetMessage(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMessage clears the value of the "message" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) ClearMessage() *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.ClearMessage()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCheckedAt sets the "checked_at" field.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetCheckedAt(v time.Time) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.SetCheckedAt(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableCheckedAt sets the "checked_at" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetNillableCheckedAt(v *time.Time) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetCheckedAt(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMonitor sets the "monitor" edge to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SetMonitor(v *ChannelMonitor) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
return _u.SetMonitorID(v.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutation returns the ChannelMonitorHistoryMutation object of the builder.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) Mutation() *ChannelMonitorHistoryMutation {
|
||||||
|
return _u.mutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMonitor clears the "monitor" edge to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) ClearMonitor() *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.ClearMonitor()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorHistoryUpdate builder.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) Where(ps ...predicate.ChannelMonitorHistory) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.mutation.Where(ps...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select allows selecting one or more fields (columns) of the returned entity.
|
||||||
|
// The default is selecting all fields defined in the entity schema.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) Select(field string, fields ...string) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
_u.fields = append([]string{field}, fields...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save executes the query and returns the updated ChannelMonitorHistory entity.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) Save(ctx context.Context) (*ChannelMonitorHistory, error) {
|
||||||
|
return withHooks(ctx, _u.sqlSave, _u.mutation, _u.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveX is like Save, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) SaveX(ctx context.Context) *ChannelMonitorHistory {
|
||||||
|
node, err := _u.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query on the entity.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) Exec(ctx context.Context) error {
|
||||||
|
_, err := _u.Save(ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) ExecX(ctx context.Context) {
|
||||||
|
if err := _u.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check runs all checks and user-defined validators on the builder.
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) check() error {
|
||||||
|
if v, ok := _u.mutation.Model(); ok {
|
||||||
|
if err := channelmonitorhistory.ModelValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "model", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorHistory.model": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _u.mutation.Status(); ok {
|
||||||
|
if err := channelmonitorhistory.StatusValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "status", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorHistory.status": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _u.mutation.Message(); ok {
|
||||||
|
if err := channelmonitorhistory.MessageValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "message", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorHistory.message": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _u.mutation.MonitorCleared() && len(_u.mutation.MonitorIDs()) > 0 {
|
||||||
|
return errors.New(`ent: clearing a required unique edge "ChannelMonitorHistory.monitor"`)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_u *ChannelMonitorHistoryUpdateOne) sqlSave(ctx context.Context) (_node *ChannelMonitorHistory, err error) {
|
||||||
|
if err := _u.check(); err != nil {
|
||||||
|
return _node, err
|
||||||
|
}
|
||||||
|
_spec := sqlgraph.NewUpdateSpec(channelmonitorhistory.Table, channelmonitorhistory.Columns, sqlgraph.NewFieldSpec(channelmonitorhistory.FieldID, field.TypeInt64))
|
||||||
|
id, ok := _u.mutation.ID()
|
||||||
|
if !ok {
|
||||||
|
return nil, &ValidationError{Name: "id", err: errors.New(`ent: missing "ChannelMonitorHistory.id" for update`)}
|
||||||
|
}
|
||||||
|
_spec.Node.ID.Value = id
|
||||||
|
if fields := _u.fields; len(fields) > 0 {
|
||||||
|
_spec.Node.Columns = make([]string, 0, len(fields))
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, channelmonitorhistory.FieldID)
|
||||||
|
for _, f := range fields {
|
||||||
|
if !channelmonitorhistory.ValidColumn(f) {
|
||||||
|
return nil, &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)}
|
||||||
|
}
|
||||||
|
if f != channelmonitorhistory.FieldID {
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ps := _u.mutation.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Model(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldModel, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Status(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldStatus, field.TypeEnum, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.LatencyMs(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldLatencyMs, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedLatencyMs(); ok {
|
||||||
|
_spec.AddField(channelmonitorhistory.FieldLatencyMs, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.LatencyMsCleared() {
|
||||||
|
_spec.ClearField(channelmonitorhistory.FieldLatencyMs, field.TypeInt)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.PingLatencyMs(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldPingLatencyMs, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedPingLatencyMs(); ok {
|
||||||
|
_spec.AddField(channelmonitorhistory.FieldPingLatencyMs, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.PingLatencyMsCleared() {
|
||||||
|
_spec.ClearField(channelmonitorhistory.FieldPingLatencyMs, field.TypeInt)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Message(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldMessage, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.MessageCleared() {
|
||||||
|
_spec.ClearField(channelmonitorhistory.FieldMessage, field.TypeString)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.CheckedAt(); ok {
|
||||||
|
_spec.SetField(channelmonitorhistory.FieldCheckedAt, field.TypeTime, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.MonitorCleared() {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.M2O,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorhistory.MonitorTable,
|
||||||
|
Columns: []string{channelmonitorhistory.MonitorColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||||
|
}
|
||||||
|
if nodes := _u.mutation.MonitorIDs(); len(nodes) > 0 {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.M2O,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorhistory.MonitorTable,
|
||||||
|
Columns: []string{channelmonitorhistory.MonitorColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, k := range nodes {
|
||||||
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||||
|
}
|
||||||
|
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||||
|
}
|
||||||
|
_node = &ChannelMonitorHistory{config: _u.config}
|
||||||
|
_spec.Assign = _node.assignValues
|
||||||
|
_spec.ScanValues = _node.scanValues
|
||||||
|
if err = sqlgraph.UpdateNode(ctx, _u.driver, _spec); err != nil {
|
||||||
|
if _, ok := err.(*sqlgraph.NotFoundError); ok {
|
||||||
|
err = &NotFoundError{channelmonitorhistory.Label}
|
||||||
|
} else if sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
_u.mutation.done = true
|
||||||
|
return _node, nil
|
||||||
|
}
|
||||||
216
backend/ent/channelmonitorrequesttemplate.go
Normal file
216
backend/ent/channelmonitorrequesttemplate.go
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplate is the model entity for the ChannelMonitorRequestTemplate schema.
|
||||||
|
type ChannelMonitorRequestTemplate struct {
|
||||||
|
config `json:"-"`
|
||||||
|
// ID of the ent.
|
||||||
|
ID int64 `json:"id,omitempty"`
|
||||||
|
// CreatedAt holds the value of the "created_at" field.
|
||||||
|
CreatedAt time.Time `json:"created_at,omitempty"`
|
||||||
|
// UpdatedAt holds the value of the "updated_at" field.
|
||||||
|
UpdatedAt time.Time `json:"updated_at,omitempty"`
|
||||||
|
// Name holds the value of the "name" field.
|
||||||
|
Name string `json:"name,omitempty"`
|
||||||
|
// Provider holds the value of the "provider" field.
|
||||||
|
Provider channelmonitorrequesttemplate.Provider `json:"provider,omitempty"`
|
||||||
|
// Description holds the value of the "description" field.
|
||||||
|
Description string `json:"description,omitempty"`
|
||||||
|
// ExtraHeaders holds the value of the "extra_headers" field.
|
||||||
|
ExtraHeaders map[string]string `json:"extra_headers,omitempty"`
|
||||||
|
// BodyOverrideMode holds the value of the "body_override_mode" field.
|
||||||
|
BodyOverrideMode string `json:"body_override_mode,omitempty"`
|
||||||
|
// BodyOverride holds the value of the "body_override" field.
|
||||||
|
BodyOverride map[string]interface{} `json:"body_override,omitempty"`
|
||||||
|
// Edges holds the relations/edges for other nodes in the graph.
|
||||||
|
// The values are being populated by the ChannelMonitorRequestTemplateQuery when eager-loading is set.
|
||||||
|
Edges ChannelMonitorRequestTemplateEdges `json:"edges"`
|
||||||
|
selectValues sql.SelectValues
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateEdges holds the relations/edges for other nodes in the graph.
|
||||||
|
type ChannelMonitorRequestTemplateEdges struct {
|
||||||
|
// Monitors holds the value of the monitors edge.
|
||||||
|
Monitors []*ChannelMonitor `json:"monitors,omitempty"`
|
||||||
|
// loadedTypes holds the information for reporting if a
|
||||||
|
// type was loaded (or requested) in eager-loading or not.
|
||||||
|
loadedTypes [1]bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// MonitorsOrErr returns the Monitors value or an error if the edge
|
||||||
|
// was not loaded in eager-loading.
|
||||||
|
func (e ChannelMonitorRequestTemplateEdges) MonitorsOrErr() ([]*ChannelMonitor, error) {
|
||||||
|
if e.loadedTypes[0] {
|
||||||
|
return e.Monitors, nil
|
||||||
|
}
|
||||||
|
return nil, &NotLoadedError{edge: "monitors"}
|
||||||
|
}
|
||||||
|
|
||||||
|
// scanValues returns the types for scanning values from sql.Rows.
|
||||||
|
func (*ChannelMonitorRequestTemplate) scanValues(columns []string) ([]any, error) {
|
||||||
|
values := make([]any, len(columns))
|
||||||
|
for i := range columns {
|
||||||
|
switch columns[i] {
|
||||||
|
case channelmonitorrequesttemplate.FieldExtraHeaders, channelmonitorrequesttemplate.FieldBodyOverride:
|
||||||
|
values[i] = new([]byte)
|
||||||
|
case channelmonitorrequesttemplate.FieldID:
|
||||||
|
values[i] = new(sql.NullInt64)
|
||||||
|
case channelmonitorrequesttemplate.FieldName, channelmonitorrequesttemplate.FieldProvider, channelmonitorrequesttemplate.FieldDescription, channelmonitorrequesttemplate.FieldBodyOverrideMode:
|
||||||
|
values[i] = new(sql.NullString)
|
||||||
|
case channelmonitorrequesttemplate.FieldCreatedAt, channelmonitorrequesttemplate.FieldUpdatedAt:
|
||||||
|
values[i] = new(sql.NullTime)
|
||||||
|
default:
|
||||||
|
values[i] = new(sql.UnknownType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignValues assigns the values that were returned from sql.Rows (after scanning)
|
||||||
|
// to the ChannelMonitorRequestTemplate fields.
|
||||||
|
func (_m *ChannelMonitorRequestTemplate) assignValues(columns []string, values []any) error {
|
||||||
|
if m, n := len(values), len(columns); m < n {
|
||||||
|
return fmt.Errorf("mismatch number of scan values: %d != %d", m, n)
|
||||||
|
}
|
||||||
|
for i := range columns {
|
||||||
|
switch columns[i] {
|
||||||
|
case channelmonitorrequesttemplate.FieldID:
|
||||||
|
value, ok := values[i].(*sql.NullInt64)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field id", value)
|
||||||
|
}
|
||||||
|
_m.ID = int64(value.Int64)
|
||||||
|
case channelmonitorrequesttemplate.FieldCreatedAt:
|
||||||
|
if value, ok := values[i].(*sql.NullTime); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field created_at", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.CreatedAt = value.Time
|
||||||
|
}
|
||||||
|
case channelmonitorrequesttemplate.FieldUpdatedAt:
|
||||||
|
if value, ok := values[i].(*sql.NullTime); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field updated_at", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.UpdatedAt = value.Time
|
||||||
|
}
|
||||||
|
case channelmonitorrequesttemplate.FieldName:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field name", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Name = value.String
|
||||||
|
}
|
||||||
|
case channelmonitorrequesttemplate.FieldProvider:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field provider", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Provider = channelmonitorrequesttemplate.Provider(value.String)
|
||||||
|
}
|
||||||
|
case channelmonitorrequesttemplate.FieldDescription:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field description", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.Description = value.String
|
||||||
|
}
|
||||||
|
case channelmonitorrequesttemplate.FieldExtraHeaders:
|
||||||
|
if value, ok := values[i].(*[]byte); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field extra_headers", values[i])
|
||||||
|
} else if value != nil && len(*value) > 0 {
|
||||||
|
if err := json.Unmarshal(*value, &_m.ExtraHeaders); err != nil {
|
||||||
|
return fmt.Errorf("unmarshal field extra_headers: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case channelmonitorrequesttemplate.FieldBodyOverrideMode:
|
||||||
|
if value, ok := values[i].(*sql.NullString); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field body_override_mode", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.BodyOverrideMode = value.String
|
||||||
|
}
|
||||||
|
case channelmonitorrequesttemplate.FieldBodyOverride:
|
||||||
|
if value, ok := values[i].(*[]byte); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field body_override", values[i])
|
||||||
|
} else if value != nil && len(*value) > 0 {
|
||||||
|
if err := json.Unmarshal(*value, &_m.BodyOverride); err != nil {
|
||||||
|
return fmt.Errorf("unmarshal field body_override: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
_m.selectValues.Set(columns[i], values[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value returns the ent.Value that was dynamically selected and assigned to the ChannelMonitorRequestTemplate.
|
||||||
|
// This includes values selected through modifiers, order, etc.
|
||||||
|
func (_m *ChannelMonitorRequestTemplate) Value(name string) (ent.Value, error) {
|
||||||
|
return _m.selectValues.Get(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMonitors queries the "monitors" edge of the ChannelMonitorRequestTemplate entity.
|
||||||
|
func (_m *ChannelMonitorRequestTemplate) QueryMonitors() *ChannelMonitorQuery {
|
||||||
|
return NewChannelMonitorRequestTemplateClient(_m.config).QueryMonitors(_m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update returns a builder for updating this ChannelMonitorRequestTemplate.
|
||||||
|
// Note that you need to call ChannelMonitorRequestTemplate.Unwrap() before calling this method if this ChannelMonitorRequestTemplate
|
||||||
|
// was returned from a transaction, and the transaction was committed or rolled back.
|
||||||
|
func (_m *ChannelMonitorRequestTemplate) Update() *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
return NewChannelMonitorRequestTemplateClient(_m.config).UpdateOne(_m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unwrap unwraps the ChannelMonitorRequestTemplate entity that was returned from a transaction after it was closed,
|
||||||
|
// so that all future queries will be executed through the driver which created the transaction.
|
||||||
|
func (_m *ChannelMonitorRequestTemplate) Unwrap() *ChannelMonitorRequestTemplate {
|
||||||
|
_tx, ok := _m.config.driver.(*txDriver)
|
||||||
|
if !ok {
|
||||||
|
panic("ent: ChannelMonitorRequestTemplate is not a transactional entity")
|
||||||
|
}
|
||||||
|
_m.config.driver = _tx.drv
|
||||||
|
return _m
|
||||||
|
}
|
||||||
|
|
||||||
|
// String implements the fmt.Stringer.
|
||||||
|
func (_m *ChannelMonitorRequestTemplate) String() string {
|
||||||
|
var builder strings.Builder
|
||||||
|
builder.WriteString("ChannelMonitorRequestTemplate(")
|
||||||
|
builder.WriteString(fmt.Sprintf("id=%v, ", _m.ID))
|
||||||
|
builder.WriteString("created_at=")
|
||||||
|
builder.WriteString(_m.CreatedAt.Format(time.ANSIC))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("updated_at=")
|
||||||
|
builder.WriteString(_m.UpdatedAt.Format(time.ANSIC))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("name=")
|
||||||
|
builder.WriteString(_m.Name)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("provider=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.Provider))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("description=")
|
||||||
|
builder.WriteString(_m.Description)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("extra_headers=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.ExtraHeaders))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("body_override_mode=")
|
||||||
|
builder.WriteString(_m.BodyOverrideMode)
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("body_override=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.BodyOverride))
|
||||||
|
builder.WriteByte(')')
|
||||||
|
return builder.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplates is a parsable slice of ChannelMonitorRequestTemplate.
|
||||||
|
type ChannelMonitorRequestTemplates []*ChannelMonitorRequestTemplate
|
||||||
@ -0,0 +1,172 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package channelmonitorrequesttemplate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Label holds the string label denoting the channelmonitorrequesttemplate type in the database.
|
||||||
|
Label = "channel_monitor_request_template"
|
||||||
|
// FieldID holds the string denoting the id field in the database.
|
||||||
|
FieldID = "id"
|
||||||
|
// FieldCreatedAt holds the string denoting the created_at field in the database.
|
||||||
|
FieldCreatedAt = "created_at"
|
||||||
|
// FieldUpdatedAt holds the string denoting the updated_at field in the database.
|
||||||
|
FieldUpdatedAt = "updated_at"
|
||||||
|
// FieldName holds the string denoting the name field in the database.
|
||||||
|
FieldName = "name"
|
||||||
|
// FieldProvider holds the string denoting the provider field in the database.
|
||||||
|
FieldProvider = "provider"
|
||||||
|
// FieldDescription holds the string denoting the description field in the database.
|
||||||
|
FieldDescription = "description"
|
||||||
|
// FieldExtraHeaders holds the string denoting the extra_headers field in the database.
|
||||||
|
FieldExtraHeaders = "extra_headers"
|
||||||
|
// FieldBodyOverrideMode holds the string denoting the body_override_mode field in the database.
|
||||||
|
FieldBodyOverrideMode = "body_override_mode"
|
||||||
|
// FieldBodyOverride holds the string denoting the body_override field in the database.
|
||||||
|
FieldBodyOverride = "body_override"
|
||||||
|
// EdgeMonitors holds the string denoting the monitors edge name in mutations.
|
||||||
|
EdgeMonitors = "monitors"
|
||||||
|
// Table holds the table name of the channelmonitorrequesttemplate in the database.
|
||||||
|
Table = "channel_monitor_request_templates"
|
||||||
|
// MonitorsTable is the table that holds the monitors relation/edge.
|
||||||
|
MonitorsTable = "channel_monitors"
|
||||||
|
// MonitorsInverseTable is the table name for the ChannelMonitor entity.
|
||||||
|
// It exists in this package in order to avoid circular dependency with the "channelmonitor" package.
|
||||||
|
MonitorsInverseTable = "channel_monitors"
|
||||||
|
// MonitorsColumn is the table column denoting the monitors relation/edge.
|
||||||
|
MonitorsColumn = "template_id"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Columns holds all SQL columns for channelmonitorrequesttemplate fields.
|
||||||
|
var Columns = []string{
|
||||||
|
FieldID,
|
||||||
|
FieldCreatedAt,
|
||||||
|
FieldUpdatedAt,
|
||||||
|
FieldName,
|
||||||
|
FieldProvider,
|
||||||
|
FieldDescription,
|
||||||
|
FieldExtraHeaders,
|
||||||
|
FieldBodyOverrideMode,
|
||||||
|
FieldBodyOverride,
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidColumn reports if the column name is valid (part of the table columns).
|
||||||
|
func ValidColumn(column string) bool {
|
||||||
|
for i := range Columns {
|
||||||
|
if column == Columns[i] {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// DefaultCreatedAt holds the default value on creation for the "created_at" field.
|
||||||
|
DefaultCreatedAt func() time.Time
|
||||||
|
// DefaultUpdatedAt holds the default value on creation for the "updated_at" field.
|
||||||
|
DefaultUpdatedAt func() time.Time
|
||||||
|
// UpdateDefaultUpdatedAt holds the default value on update for the "updated_at" field.
|
||||||
|
UpdateDefaultUpdatedAt func() time.Time
|
||||||
|
// NameValidator is a validator for the "name" field. It is called by the builders before save.
|
||||||
|
NameValidator func(string) error
|
||||||
|
// DefaultDescription holds the default value on creation for the "description" field.
|
||||||
|
DefaultDescription string
|
||||||
|
// DescriptionValidator is a validator for the "description" field. It is called by the builders before save.
|
||||||
|
DescriptionValidator func(string) error
|
||||||
|
// DefaultExtraHeaders holds the default value on creation for the "extra_headers" field.
|
||||||
|
DefaultExtraHeaders map[string]string
|
||||||
|
// DefaultBodyOverrideMode holds the default value on creation for the "body_override_mode" field.
|
||||||
|
DefaultBodyOverrideMode string
|
||||||
|
// BodyOverrideModeValidator is a validator for the "body_override_mode" field. It is called by the builders before save.
|
||||||
|
BodyOverrideModeValidator func(string) error
|
||||||
|
)
|
||||||
|
|
||||||
|
// Provider defines the type for the "provider" enum field.
|
||||||
|
type Provider string
|
||||||
|
|
||||||
|
// Provider values.
|
||||||
|
const (
|
||||||
|
ProviderOpenai Provider = "openai"
|
||||||
|
ProviderAnthropic Provider = "anthropic"
|
||||||
|
ProviderGemini Provider = "gemini"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (pr Provider) String() string {
|
||||||
|
return string(pr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProviderValidator is a validator for the "provider" field enum values. It is called by the builders before save.
|
||||||
|
func ProviderValidator(pr Provider) error {
|
||||||
|
switch pr {
|
||||||
|
case ProviderOpenai, ProviderAnthropic, ProviderGemini:
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("channelmonitorrequesttemplate: invalid enum value for provider field: %q", pr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OrderOption defines the ordering options for the ChannelMonitorRequestTemplate queries.
|
||||||
|
type OrderOption func(*sql.Selector)
|
||||||
|
|
||||||
|
// ByID orders the results by the id field.
|
||||||
|
func ByID(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldID, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByCreatedAt orders the results by the created_at field.
|
||||||
|
func ByCreatedAt(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldCreatedAt, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByUpdatedAt orders the results by the updated_at field.
|
||||||
|
func ByUpdatedAt(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldUpdatedAt, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByName orders the results by the name field.
|
||||||
|
func ByName(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldName, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByProvider orders the results by the provider field.
|
||||||
|
func ByProvider(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldProvider, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByDescription orders the results by the description field.
|
||||||
|
func ByDescription(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldDescription, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByBodyOverrideMode orders the results by the body_override_mode field.
|
||||||
|
func ByBodyOverrideMode(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldBodyOverrideMode, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByMonitorsCount orders the results by monitors count.
|
||||||
|
func ByMonitorsCount(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return func(s *sql.Selector) {
|
||||||
|
sqlgraph.OrderByNeighborsCount(s, newMonitorsStep(), opts...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByMonitors orders the results by monitors terms.
|
||||||
|
func ByMonitors(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption {
|
||||||
|
return func(s *sql.Selector) {
|
||||||
|
sqlgraph.OrderByNeighborTerms(s, newMonitorsStep(), append([]sql.OrderTerm{term}, terms...)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func newMonitorsStep() *sqlgraph.Step {
|
||||||
|
return sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.To(MonitorsInverseTable, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, true, MonitorsTable, MonitorsColumn),
|
||||||
|
)
|
||||||
|
}
|
||||||
434
backend/ent/channelmonitorrequesttemplate/where.go
Normal file
434
backend/ent/channelmonitorrequesttemplate/where.go
Normal file
@ -0,0 +1,434 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package channelmonitorrequesttemplate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ID filters vertices based on their ID field.
|
||||||
|
func ID(id int64) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDEQ applies the EQ predicate on the ID field.
|
||||||
|
func IDEQ(id int64) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDNEQ applies the NEQ predicate on the ID field.
|
||||||
|
func IDNEQ(id int64) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNEQ(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDIn applies the In predicate on the ID field.
|
||||||
|
func IDIn(ids ...int64) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldIn(FieldID, ids...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDNotIn applies the NotIn predicate on the ID field.
|
||||||
|
func IDNotIn(ids ...int64) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNotIn(FieldID, ids...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDGT applies the GT predicate on the ID field.
|
||||||
|
func IDGT(id int64) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGT(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDGTE applies the GTE predicate on the ID field.
|
||||||
|
func IDGTE(id int64) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGTE(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDLT applies the LT predicate on the ID field.
|
||||||
|
func IDLT(id int64) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLT(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDLTE applies the LTE predicate on the ID field.
|
||||||
|
func IDLTE(id int64) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLTE(FieldID, id))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAt applies equality check predicate on the "created_at" field. It's identical to CreatedAtEQ.
|
||||||
|
func CreatedAt(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAt applies equality check predicate on the "updated_at" field. It's identical to UpdatedAtEQ.
|
||||||
|
func UpdatedAt(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Name applies equality check predicate on the "name" field. It's identical to NameEQ.
|
||||||
|
func Name(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Description applies equality check predicate on the "description" field. It's identical to DescriptionEQ.
|
||||||
|
func Description(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideMode applies equality check predicate on the "body_override_mode" field. It's identical to BodyOverrideModeEQ.
|
||||||
|
func BodyOverrideMode(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtEQ applies the EQ predicate on the "created_at" field.
|
||||||
|
func CreatedAtEQ(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtNEQ applies the NEQ predicate on the "created_at" field.
|
||||||
|
func CreatedAtNEQ(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNEQ(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtIn applies the In predicate on the "created_at" field.
|
||||||
|
func CreatedAtIn(vs ...time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldIn(FieldCreatedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtNotIn applies the NotIn predicate on the "created_at" field.
|
||||||
|
func CreatedAtNotIn(vs ...time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNotIn(FieldCreatedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtGT applies the GT predicate on the "created_at" field.
|
||||||
|
func CreatedAtGT(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGT(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtGTE applies the GTE predicate on the "created_at" field.
|
||||||
|
func CreatedAtGTE(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGTE(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtLT applies the LT predicate on the "created_at" field.
|
||||||
|
func CreatedAtLT(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLT(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatedAtLTE applies the LTE predicate on the "created_at" field.
|
||||||
|
func CreatedAtLTE(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLTE(FieldCreatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtEQ applies the EQ predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtEQ(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtNEQ applies the NEQ predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtNEQ(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNEQ(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtIn applies the In predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtIn(vs ...time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldIn(FieldUpdatedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtNotIn applies the NotIn predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtNotIn(vs ...time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNotIn(FieldUpdatedAt, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtGT applies the GT predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtGT(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGT(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtGTE applies the GTE predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtGTE(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGTE(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtLT applies the LT predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtLT(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLT(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatedAtLTE applies the LTE predicate on the "updated_at" field.
|
||||||
|
func UpdatedAtLTE(v time.Time) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLTE(FieldUpdatedAt, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameEQ applies the EQ predicate on the "name" field.
|
||||||
|
func NameEQ(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameNEQ applies the NEQ predicate on the "name" field.
|
||||||
|
func NameNEQ(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNEQ(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameIn applies the In predicate on the "name" field.
|
||||||
|
func NameIn(vs ...string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldIn(FieldName, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameNotIn applies the NotIn predicate on the "name" field.
|
||||||
|
func NameNotIn(vs ...string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNotIn(FieldName, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameGT applies the GT predicate on the "name" field.
|
||||||
|
func NameGT(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGT(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameGTE applies the GTE predicate on the "name" field.
|
||||||
|
func NameGTE(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGTE(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameLT applies the LT predicate on the "name" field.
|
||||||
|
func NameLT(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLT(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameLTE applies the LTE predicate on the "name" field.
|
||||||
|
func NameLTE(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLTE(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameContains applies the Contains predicate on the "name" field.
|
||||||
|
func NameContains(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldContains(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameHasPrefix applies the HasPrefix predicate on the "name" field.
|
||||||
|
func NameHasPrefix(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldHasPrefix(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameHasSuffix applies the HasSuffix predicate on the "name" field.
|
||||||
|
func NameHasSuffix(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldHasSuffix(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameEqualFold applies the EqualFold predicate on the "name" field.
|
||||||
|
func NameEqualFold(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEqualFold(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameContainsFold applies the ContainsFold predicate on the "name" field.
|
||||||
|
func NameContainsFold(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldContainsFold(FieldName, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProviderEQ applies the EQ predicate on the "provider" field.
|
||||||
|
func ProviderEQ(v Provider) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldProvider, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProviderNEQ applies the NEQ predicate on the "provider" field.
|
||||||
|
func ProviderNEQ(v Provider) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNEQ(FieldProvider, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProviderIn applies the In predicate on the "provider" field.
|
||||||
|
func ProviderIn(vs ...Provider) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldIn(FieldProvider, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProviderNotIn applies the NotIn predicate on the "provider" field.
|
||||||
|
func ProviderNotIn(vs ...Provider) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNotIn(FieldProvider, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionEQ applies the EQ predicate on the "description" field.
|
||||||
|
func DescriptionEQ(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionNEQ applies the NEQ predicate on the "description" field.
|
||||||
|
func DescriptionNEQ(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNEQ(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionIn applies the In predicate on the "description" field.
|
||||||
|
func DescriptionIn(vs ...string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldIn(FieldDescription, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionNotIn applies the NotIn predicate on the "description" field.
|
||||||
|
func DescriptionNotIn(vs ...string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNotIn(FieldDescription, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionGT applies the GT predicate on the "description" field.
|
||||||
|
func DescriptionGT(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGT(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionGTE applies the GTE predicate on the "description" field.
|
||||||
|
func DescriptionGTE(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGTE(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionLT applies the LT predicate on the "description" field.
|
||||||
|
func DescriptionLT(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLT(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionLTE applies the LTE predicate on the "description" field.
|
||||||
|
func DescriptionLTE(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLTE(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionContains applies the Contains predicate on the "description" field.
|
||||||
|
func DescriptionContains(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldContains(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionHasPrefix applies the HasPrefix predicate on the "description" field.
|
||||||
|
func DescriptionHasPrefix(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldHasPrefix(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionHasSuffix applies the HasSuffix predicate on the "description" field.
|
||||||
|
func DescriptionHasSuffix(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldHasSuffix(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionIsNil applies the IsNil predicate on the "description" field.
|
||||||
|
func DescriptionIsNil() predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldIsNull(FieldDescription))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionNotNil applies the NotNil predicate on the "description" field.
|
||||||
|
func DescriptionNotNil() predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNotNull(FieldDescription))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionEqualFold applies the EqualFold predicate on the "description" field.
|
||||||
|
func DescriptionEqualFold(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEqualFold(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DescriptionContainsFold applies the ContainsFold predicate on the "description" field.
|
||||||
|
func DescriptionContainsFold(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldContainsFold(FieldDescription, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeEQ applies the EQ predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeEQ(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEQ(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeNEQ applies the NEQ predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeNEQ(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNEQ(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeIn applies the In predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeIn(vs ...string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldIn(FieldBodyOverrideMode, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeNotIn applies the NotIn predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeNotIn(vs ...string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNotIn(FieldBodyOverrideMode, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeGT applies the GT predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeGT(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGT(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeGTE applies the GTE predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeGTE(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldGTE(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeLT applies the LT predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeLT(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLT(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeLTE applies the LTE predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeLTE(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldLTE(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeContains applies the Contains predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeContains(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldContains(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeHasPrefix applies the HasPrefix predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeHasPrefix(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldHasPrefix(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeHasSuffix applies the HasSuffix predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeHasSuffix(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldHasSuffix(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeEqualFold applies the EqualFold predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeEqualFold(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldEqualFold(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideModeContainsFold applies the ContainsFold predicate on the "body_override_mode" field.
|
||||||
|
func BodyOverrideModeContainsFold(v string) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldContainsFold(FieldBodyOverrideMode, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideIsNil applies the IsNil predicate on the "body_override" field.
|
||||||
|
func BodyOverrideIsNil() predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldIsNull(FieldBodyOverride))
|
||||||
|
}
|
||||||
|
|
||||||
|
// BodyOverrideNotNil applies the NotNil predicate on the "body_override" field.
|
||||||
|
func BodyOverrideNotNil() predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.FieldNotNull(FieldBodyOverride))
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasMonitors applies the HasEdge predicate on the "monitors" edge.
|
||||||
|
func HasMonitors() predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(func(s *sql.Selector) {
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(Table, FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, true, MonitorsTable, MonitorsColumn),
|
||||||
|
)
|
||||||
|
sqlgraph.HasNeighbors(s, step)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasMonitorsWith applies the HasEdge predicate on the "monitors" edge with a given conditions (other predicates).
|
||||||
|
func HasMonitorsWith(preds ...predicate.ChannelMonitor) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(func(s *sql.Selector) {
|
||||||
|
step := newMonitorsStep()
|
||||||
|
sqlgraph.HasNeighborsWith(s, step, func(s *sql.Selector) {
|
||||||
|
for _, p := range preds {
|
||||||
|
p(s)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// And groups predicates with the AND operator between them.
|
||||||
|
func And(predicates ...predicate.ChannelMonitorRequestTemplate) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.AndPredicates(predicates...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Or groups predicates with the OR operator between them.
|
||||||
|
func Or(predicates ...predicate.ChannelMonitorRequestTemplate) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.OrPredicates(predicates...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not applies the not operator on the given predicate.
|
||||||
|
func Not(p predicate.ChannelMonitorRequestTemplate) predicate.ChannelMonitorRequestTemplate {
|
||||||
|
return predicate.ChannelMonitorRequestTemplate(sql.NotPredicates(p))
|
||||||
|
}
|
||||||
942
backend/ent/channelmonitorrequesttemplate_create.go
Normal file
942
backend/ent/channelmonitorrequesttemplate_create.go
Normal file
@ -0,0 +1,942 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateCreate is the builder for creating a ChannelMonitorRequestTemplate entity.
|
||||||
|
type ChannelMonitorRequestTemplateCreate struct {
|
||||||
|
config
|
||||||
|
mutation *ChannelMonitorRequestTemplateMutation
|
||||||
|
hooks []Hook
|
||||||
|
conflict []sql.ConflictOption
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCreatedAt sets the "created_at" field.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetCreatedAt(v time.Time) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
_c.mutation.SetCreatedAt(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableCreatedAt sets the "created_at" field if the given value is not nil.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetNillableCreatedAt(v *time.Time) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
if v != nil {
|
||||||
|
_c.SetCreatedAt(*v)
|
||||||
|
}
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetUpdatedAt sets the "updated_at" field.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetUpdatedAt(v time.Time) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
_c.mutation.SetUpdatedAt(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableUpdatedAt sets the "updated_at" field if the given value is not nil.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetNillableUpdatedAt(v *time.Time) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
if v != nil {
|
||||||
|
_c.SetUpdatedAt(*v)
|
||||||
|
}
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetName sets the "name" field.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetName(v string) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
_c.mutation.SetName(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetProvider sets the "provider" field.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetProvider(v channelmonitorrequesttemplate.Provider) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
_c.mutation.SetProvider(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDescription sets the "description" field.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetDescription(v string) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
_c.mutation.SetDescription(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableDescription sets the "description" field if the given value is not nil.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetNillableDescription(v *string) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
if v != nil {
|
||||||
|
_c.SetDescription(*v)
|
||||||
|
}
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetExtraHeaders sets the "extra_headers" field.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetExtraHeaders(v map[string]string) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
_c.mutation.SetExtraHeaders(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverrideMode sets the "body_override_mode" field.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetBodyOverrideMode(v string) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
_c.mutation.SetBodyOverrideMode(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableBodyOverrideMode sets the "body_override_mode" field if the given value is not nil.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetNillableBodyOverrideMode(v *string) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
if v != nil {
|
||||||
|
_c.SetBodyOverrideMode(*v)
|
||||||
|
}
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverride sets the "body_override" field.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SetBodyOverride(v map[string]interface{}) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
_c.mutation.SetBodyOverride(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddMonitorIDs adds the "monitors" edge to the ChannelMonitor entity by IDs.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) AddMonitorIDs(ids ...int64) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
_c.mutation.AddMonitorIDs(ids...)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddMonitors adds the "monitors" edges to the ChannelMonitor entity.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) AddMonitors(v ...*ChannelMonitor) *ChannelMonitorRequestTemplateCreate {
|
||||||
|
ids := make([]int64, len(v))
|
||||||
|
for i := range v {
|
||||||
|
ids[i] = v[i].ID
|
||||||
|
}
|
||||||
|
return _c.AddMonitorIDs(ids...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutation returns the ChannelMonitorRequestTemplateMutation object of the builder.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) Mutation() *ChannelMonitorRequestTemplateMutation {
|
||||||
|
return _c.mutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save creates the ChannelMonitorRequestTemplate in the database.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) Save(ctx context.Context) (*ChannelMonitorRequestTemplate, error) {
|
||||||
|
_c.defaults()
|
||||||
|
return withHooks(ctx, _c.sqlSave, _c.mutation, _c.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveX calls Save and panics if Save returns an error.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) SaveX(ctx context.Context) *ChannelMonitorRequestTemplate {
|
||||||
|
v, err := _c.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) Exec(ctx context.Context) error {
|
||||||
|
_, err := _c.Save(ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) ExecX(ctx context.Context) {
|
||||||
|
if err := _c.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// defaults sets the default values of the builder before save.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) defaults() {
|
||||||
|
if _, ok := _c.mutation.CreatedAt(); !ok {
|
||||||
|
v := channelmonitorrequesttemplate.DefaultCreatedAt()
|
||||||
|
_c.mutation.SetCreatedAt(v)
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.UpdatedAt(); !ok {
|
||||||
|
v := channelmonitorrequesttemplate.DefaultUpdatedAt()
|
||||||
|
_c.mutation.SetUpdatedAt(v)
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.Description(); !ok {
|
||||||
|
v := channelmonitorrequesttemplate.DefaultDescription
|
||||||
|
_c.mutation.SetDescription(v)
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.ExtraHeaders(); !ok {
|
||||||
|
v := channelmonitorrequesttemplate.DefaultExtraHeaders
|
||||||
|
_c.mutation.SetExtraHeaders(v)
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.BodyOverrideMode(); !ok {
|
||||||
|
v := channelmonitorrequesttemplate.DefaultBodyOverrideMode
|
||||||
|
_c.mutation.SetBodyOverrideMode(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check runs all checks and user-defined validators on the builder.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) check() error {
|
||||||
|
if _, ok := _c.mutation.CreatedAt(); !ok {
|
||||||
|
return &ValidationError{Name: "created_at", err: errors.New(`ent: missing required field "ChannelMonitorRequestTemplate.created_at"`)}
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.UpdatedAt(); !ok {
|
||||||
|
return &ValidationError{Name: "updated_at", err: errors.New(`ent: missing required field "ChannelMonitorRequestTemplate.updated_at"`)}
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.Name(); !ok {
|
||||||
|
return &ValidationError{Name: "name", err: errors.New(`ent: missing required field "ChannelMonitorRequestTemplate.name"`)}
|
||||||
|
}
|
||||||
|
if v, ok := _c.mutation.Name(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.NameValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "name", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.name": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.Provider(); !ok {
|
||||||
|
return &ValidationError{Name: "provider", err: errors.New(`ent: missing required field "ChannelMonitorRequestTemplate.provider"`)}
|
||||||
|
}
|
||||||
|
if v, ok := _c.mutation.Provider(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.ProviderValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "provider", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.provider": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _c.mutation.Description(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.DescriptionValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "description", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.description": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.ExtraHeaders(); !ok {
|
||||||
|
return &ValidationError{Name: "extra_headers", err: errors.New(`ent: missing required field "ChannelMonitorRequestTemplate.extra_headers"`)}
|
||||||
|
}
|
||||||
|
if _, ok := _c.mutation.BodyOverrideMode(); !ok {
|
||||||
|
return &ValidationError{Name: "body_override_mode", err: errors.New(`ent: missing required field "ChannelMonitorRequestTemplate.body_override_mode"`)}
|
||||||
|
}
|
||||||
|
if v, ok := _c.mutation.BodyOverrideMode(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.BodyOverrideModeValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "body_override_mode", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.body_override_mode": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) sqlSave(ctx context.Context) (*ChannelMonitorRequestTemplate, error) {
|
||||||
|
if err := _c.check(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
_node, _spec := _c.createSpec()
|
||||||
|
if err := sqlgraph.CreateNode(ctx, _c.driver, _spec); err != nil {
|
||||||
|
if sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
id := _spec.ID.Value.(int64)
|
||||||
|
_node.ID = int64(id)
|
||||||
|
_c.mutation.id = &_node.ID
|
||||||
|
_c.mutation.done = true
|
||||||
|
return _node, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) createSpec() (*ChannelMonitorRequestTemplate, *sqlgraph.CreateSpec) {
|
||||||
|
var (
|
||||||
|
_node = &ChannelMonitorRequestTemplate{config: _c.config}
|
||||||
|
_spec = sqlgraph.NewCreateSpec(channelmonitorrequesttemplate.Table, sqlgraph.NewFieldSpec(channelmonitorrequesttemplate.FieldID, field.TypeInt64))
|
||||||
|
)
|
||||||
|
_spec.OnConflict = _c.conflict
|
||||||
|
if value, ok := _c.mutation.CreatedAt(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldCreatedAt, field.TypeTime, value)
|
||||||
|
_node.CreatedAt = value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.UpdatedAt(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldUpdatedAt, field.TypeTime, value)
|
||||||
|
_node.UpdatedAt = value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.Name(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldName, field.TypeString, value)
|
||||||
|
_node.Name = value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.Provider(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldProvider, field.TypeEnum, value)
|
||||||
|
_node.Provider = value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.Description(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldDescription, field.TypeString, value)
|
||||||
|
_node.Description = value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.ExtraHeaders(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldExtraHeaders, field.TypeJSON, value)
|
||||||
|
_node.ExtraHeaders = value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.BodyOverrideMode(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldBodyOverrideMode, field.TypeString, value)
|
||||||
|
_node.BodyOverrideMode = value
|
||||||
|
}
|
||||||
|
if value, ok := _c.mutation.BodyOverride(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldBodyOverride, field.TypeJSON, value)
|
||||||
|
_node.BodyOverride = value
|
||||||
|
}
|
||||||
|
if nodes := _c.mutation.MonitorsIDs(); len(nodes) > 0 {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.O2M,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorrequesttemplate.MonitorsTable,
|
||||||
|
Columns: []string{channelmonitorrequesttemplate.MonitorsColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, k := range nodes {
|
||||||
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||||
|
}
|
||||||
|
_spec.Edges = append(_spec.Edges, edge)
|
||||||
|
}
|
||||||
|
return _node, _spec
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnConflict allows configuring the `ON CONFLICT` / `ON DUPLICATE KEY` clause
|
||||||
|
// of the `INSERT` statement. For example:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorRequestTemplate.Create().
|
||||||
|
// SetCreatedAt(v).
|
||||||
|
// OnConflict(
|
||||||
|
// // Update the row with the new values
|
||||||
|
// // the was proposed for insertion.
|
||||||
|
// sql.ResolveWithNewValues(),
|
||||||
|
// ).
|
||||||
|
// // Override some of the fields with custom
|
||||||
|
// // update values.
|
||||||
|
// Update(func(u *ent.ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
// SetCreatedAt(v+v).
|
||||||
|
// }).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) OnConflict(opts ...sql.ConflictOption) *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
_c.conflict = opts
|
||||||
|
return &ChannelMonitorRequestTemplateUpsertOne{
|
||||||
|
create: _c,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnConflictColumns calls `OnConflict` and configures the columns
|
||||||
|
// as conflict target. Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorRequestTemplate.Create().
|
||||||
|
// OnConflict(sql.ConflictColumns(columns...)).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreate) OnConflictColumns(columns ...string) *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
_c.conflict = append(_c.conflict, sql.ConflictColumns(columns...))
|
||||||
|
return &ChannelMonitorRequestTemplateUpsertOne{
|
||||||
|
create: _c,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
// ChannelMonitorRequestTemplateUpsertOne is the builder for "upsert"-ing
|
||||||
|
// one ChannelMonitorRequestTemplate node.
|
||||||
|
ChannelMonitorRequestTemplateUpsertOne struct {
|
||||||
|
create *ChannelMonitorRequestTemplateCreate
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateUpsert is the "OnConflict" setter.
|
||||||
|
ChannelMonitorRequestTemplateUpsert struct {
|
||||||
|
*sql.UpdateSet
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetUpdatedAt sets the "updated_at" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) SetUpdatedAt(v time.Time) *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.Set(channelmonitorrequesttemplate.FieldUpdatedAt, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateUpdatedAt sets the "updated_at" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) UpdateUpdatedAt() *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.SetExcluded(channelmonitorrequesttemplate.FieldUpdatedAt)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetName sets the "name" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) SetName(v string) *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.Set(channelmonitorrequesttemplate.FieldName, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateName sets the "name" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) UpdateName() *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.SetExcluded(channelmonitorrequesttemplate.FieldName)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetProvider sets the "provider" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) SetProvider(v channelmonitorrequesttemplate.Provider) *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.Set(channelmonitorrequesttemplate.FieldProvider, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateProvider sets the "provider" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) UpdateProvider() *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.SetExcluded(channelmonitorrequesttemplate.FieldProvider)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDescription sets the "description" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) SetDescription(v string) *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.Set(channelmonitorrequesttemplate.FieldDescription, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateDescription sets the "description" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) UpdateDescription() *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.SetExcluded(channelmonitorrequesttemplate.FieldDescription)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearDescription clears the value of the "description" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) ClearDescription() *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.SetNull(channelmonitorrequesttemplate.FieldDescription)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetExtraHeaders sets the "extra_headers" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) SetExtraHeaders(v map[string]string) *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.Set(channelmonitorrequesttemplate.FieldExtraHeaders, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateExtraHeaders sets the "extra_headers" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) UpdateExtraHeaders() *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.SetExcluded(channelmonitorrequesttemplate.FieldExtraHeaders)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverrideMode sets the "body_override_mode" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) SetBodyOverrideMode(v string) *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.Set(channelmonitorrequesttemplate.FieldBodyOverrideMode, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateBodyOverrideMode sets the "body_override_mode" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) UpdateBodyOverrideMode() *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.SetExcluded(channelmonitorrequesttemplate.FieldBodyOverrideMode)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverride sets the "body_override" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) SetBodyOverride(v map[string]interface{}) *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.Set(channelmonitorrequesttemplate.FieldBodyOverride, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateBodyOverride sets the "body_override" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) UpdateBodyOverride() *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.SetExcluded(channelmonitorrequesttemplate.FieldBodyOverride)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearBodyOverride clears the value of the "body_override" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsert) ClearBodyOverride() *ChannelMonitorRequestTemplateUpsert {
|
||||||
|
u.SetNull(channelmonitorrequesttemplate.FieldBodyOverride)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateNewValues updates the mutable fields using the new values that were set on create.
|
||||||
|
// Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorRequestTemplate.Create().
|
||||||
|
// OnConflict(
|
||||||
|
// sql.ResolveWithNewValues(),
|
||||||
|
// ).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) UpdateNewValues() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWithNewValues())
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(s *sql.UpdateSet) {
|
||||||
|
if _, exists := u.create.mutation.CreatedAt(); exists {
|
||||||
|
s.SetIgnore(channelmonitorrequesttemplate.FieldCreatedAt)
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore sets each column to itself in case of conflict.
|
||||||
|
// Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorRequestTemplate.Create().
|
||||||
|
// OnConflict(sql.ResolveWithIgnore()).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) Ignore() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWithIgnore())
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// DoNothing configures the conflict_action to `DO NOTHING`.
|
||||||
|
// Supported only by SQLite and PostgreSQL.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) DoNothing() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.DoNothing())
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update allows overriding fields `UPDATE` values. See the ChannelMonitorRequestTemplateCreate.OnConflict
|
||||||
|
// documentation for more info.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) Update(set func(*ChannelMonitorRequestTemplateUpsert)) *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(update *sql.UpdateSet) {
|
||||||
|
set(&ChannelMonitorRequestTemplateUpsert{UpdateSet: update})
|
||||||
|
}))
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetUpdatedAt sets the "updated_at" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) SetUpdatedAt(v time.Time) *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetUpdatedAt(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateUpdatedAt sets the "updated_at" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) UpdateUpdatedAt() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateUpdatedAt()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetName sets the "name" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) SetName(v string) *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetName(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateName sets the "name" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) UpdateName() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateName()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetProvider sets the "provider" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) SetProvider(v channelmonitorrequesttemplate.Provider) *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetProvider(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateProvider sets the "provider" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) UpdateProvider() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateProvider()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDescription sets the "description" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) SetDescription(v string) *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetDescription(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateDescription sets the "description" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) UpdateDescription() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateDescription()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearDescription clears the value of the "description" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) ClearDescription() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.ClearDescription()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetExtraHeaders sets the "extra_headers" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) SetExtraHeaders(v map[string]string) *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetExtraHeaders(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateExtraHeaders sets the "extra_headers" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) UpdateExtraHeaders() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateExtraHeaders()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverrideMode sets the "body_override_mode" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) SetBodyOverrideMode(v string) *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetBodyOverrideMode(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateBodyOverrideMode sets the "body_override_mode" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) UpdateBodyOverrideMode() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateBodyOverrideMode()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverride sets the "body_override" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) SetBodyOverride(v map[string]interface{}) *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetBodyOverride(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateBodyOverride sets the "body_override" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) UpdateBodyOverride() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateBodyOverride()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearBodyOverride clears the value of the "body_override" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) ClearBodyOverride() *ChannelMonitorRequestTemplateUpsertOne {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.ClearBodyOverride()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) Exec(ctx context.Context) error {
|
||||||
|
if len(u.create.conflict) == 0 {
|
||||||
|
return errors.New("ent: missing options for ChannelMonitorRequestTemplateCreate.OnConflict")
|
||||||
|
}
|
||||||
|
return u.create.Exec(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) ExecX(ctx context.Context) {
|
||||||
|
if err := u.create.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the UPSERT query and returns the inserted/updated ID.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) ID(ctx context.Context) (id int64, err error) {
|
||||||
|
node, err := u.create.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return id, err
|
||||||
|
}
|
||||||
|
return node.ID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDX is like ID, but panics if an error occurs.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertOne) IDX(ctx context.Context) int64 {
|
||||||
|
id, err := u.ID(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateCreateBulk is the builder for creating many ChannelMonitorRequestTemplate entities in bulk.
|
||||||
|
type ChannelMonitorRequestTemplateCreateBulk struct {
|
||||||
|
config
|
||||||
|
err error
|
||||||
|
builders []*ChannelMonitorRequestTemplateCreate
|
||||||
|
conflict []sql.ConflictOption
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save creates the ChannelMonitorRequestTemplate entities in the database.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreateBulk) Save(ctx context.Context) ([]*ChannelMonitorRequestTemplate, error) {
|
||||||
|
if _c.err != nil {
|
||||||
|
return nil, _c.err
|
||||||
|
}
|
||||||
|
specs := make([]*sqlgraph.CreateSpec, len(_c.builders))
|
||||||
|
nodes := make([]*ChannelMonitorRequestTemplate, len(_c.builders))
|
||||||
|
mutators := make([]Mutator, len(_c.builders))
|
||||||
|
for i := range _c.builders {
|
||||||
|
func(i int, root context.Context) {
|
||||||
|
builder := _c.builders[i]
|
||||||
|
builder.defaults()
|
||||||
|
var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) {
|
||||||
|
mutation, ok := m.(*ChannelMonitorRequestTemplateMutation)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("unexpected mutation type %T", m)
|
||||||
|
}
|
||||||
|
if err := builder.check(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
builder.mutation = mutation
|
||||||
|
var err error
|
||||||
|
nodes[i], specs[i] = builder.createSpec()
|
||||||
|
if i < len(mutators)-1 {
|
||||||
|
_, err = mutators[i+1].Mutate(root, _c.builders[i+1].mutation)
|
||||||
|
} else {
|
||||||
|
spec := &sqlgraph.BatchCreateSpec{Nodes: specs}
|
||||||
|
spec.OnConflict = _c.conflict
|
||||||
|
// Invoke the actual operation on the latest mutation in the chain.
|
||||||
|
if err = sqlgraph.BatchCreate(ctx, _c.driver, spec); err != nil {
|
||||||
|
if sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
mutation.id = &nodes[i].ID
|
||||||
|
if specs[i].ID.Value != nil {
|
||||||
|
id := specs[i].ID.Value.(int64)
|
||||||
|
nodes[i].ID = int64(id)
|
||||||
|
}
|
||||||
|
mutation.done = true
|
||||||
|
return nodes[i], nil
|
||||||
|
})
|
||||||
|
for i := len(builder.hooks) - 1; i >= 0; i-- {
|
||||||
|
mut = builder.hooks[i](mut)
|
||||||
|
}
|
||||||
|
mutators[i] = mut
|
||||||
|
}(i, ctx)
|
||||||
|
}
|
||||||
|
if len(mutators) > 0 {
|
||||||
|
if _, err := mutators[0].Mutate(ctx, _c.builders[0].mutation); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveX is like Save, but panics if an error occurs.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreateBulk) SaveX(ctx context.Context) []*ChannelMonitorRequestTemplate {
|
||||||
|
v, err := _c.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreateBulk) Exec(ctx context.Context) error {
|
||||||
|
_, err := _c.Save(ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreateBulk) ExecX(ctx context.Context) {
|
||||||
|
if err := _c.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnConflict allows configuring the `ON CONFLICT` / `ON DUPLICATE KEY` clause
|
||||||
|
// of the `INSERT` statement. For example:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorRequestTemplate.CreateBulk(builders...).
|
||||||
|
// OnConflict(
|
||||||
|
// // Update the row with the new values
|
||||||
|
// // the was proposed for insertion.
|
||||||
|
// sql.ResolveWithNewValues(),
|
||||||
|
// ).
|
||||||
|
// // Override some of the fields with custom
|
||||||
|
// // update values.
|
||||||
|
// Update(func(u *ent.ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
// SetCreatedAt(v+v).
|
||||||
|
// }).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreateBulk) OnConflict(opts ...sql.ConflictOption) *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
_c.conflict = opts
|
||||||
|
return &ChannelMonitorRequestTemplateUpsertBulk{
|
||||||
|
create: _c,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnConflictColumns calls `OnConflict` and configures the columns
|
||||||
|
// as conflict target. Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorRequestTemplate.Create().
|
||||||
|
// OnConflict(sql.ConflictColumns(columns...)).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (_c *ChannelMonitorRequestTemplateCreateBulk) OnConflictColumns(columns ...string) *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
_c.conflict = append(_c.conflict, sql.ConflictColumns(columns...))
|
||||||
|
return &ChannelMonitorRequestTemplateUpsertBulk{
|
||||||
|
create: _c,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateUpsertBulk is the builder for "upsert"-ing
|
||||||
|
// a bulk of ChannelMonitorRequestTemplate nodes.
|
||||||
|
type ChannelMonitorRequestTemplateUpsertBulk struct {
|
||||||
|
create *ChannelMonitorRequestTemplateCreateBulk
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateNewValues updates the mutable fields using the new values that
|
||||||
|
// were set on create. Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorRequestTemplate.Create().
|
||||||
|
// OnConflict(
|
||||||
|
// sql.ResolveWithNewValues(),
|
||||||
|
// ).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) UpdateNewValues() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWithNewValues())
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(s *sql.UpdateSet) {
|
||||||
|
for _, b := range u.create.builders {
|
||||||
|
if _, exists := b.mutation.CreatedAt(); exists {
|
||||||
|
s.SetIgnore(channelmonitorrequesttemplate.FieldCreatedAt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore sets each column to itself in case of conflict.
|
||||||
|
// Using this option is equivalent to using:
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorRequestTemplate.Create().
|
||||||
|
// OnConflict(sql.ResolveWithIgnore()).
|
||||||
|
// Exec(ctx)
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) Ignore() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWithIgnore())
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// DoNothing configures the conflict_action to `DO NOTHING`.
|
||||||
|
// Supported only by SQLite and PostgreSQL.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) DoNothing() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.DoNothing())
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update allows overriding fields `UPDATE` values. See the ChannelMonitorRequestTemplateCreateBulk.OnConflict
|
||||||
|
// documentation for more info.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) Update(set func(*ChannelMonitorRequestTemplateUpsert)) *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
u.create.conflict = append(u.create.conflict, sql.ResolveWith(func(update *sql.UpdateSet) {
|
||||||
|
set(&ChannelMonitorRequestTemplateUpsert{UpdateSet: update})
|
||||||
|
}))
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetUpdatedAt sets the "updated_at" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) SetUpdatedAt(v time.Time) *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetUpdatedAt(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateUpdatedAt sets the "updated_at" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) UpdateUpdatedAt() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateUpdatedAt()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetName sets the "name" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) SetName(v string) *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetName(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateName sets the "name" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) UpdateName() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateName()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetProvider sets the "provider" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) SetProvider(v channelmonitorrequesttemplate.Provider) *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetProvider(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateProvider sets the "provider" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) UpdateProvider() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateProvider()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDescription sets the "description" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) SetDescription(v string) *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetDescription(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateDescription sets the "description" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) UpdateDescription() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateDescription()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearDescription clears the value of the "description" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) ClearDescription() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.ClearDescription()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetExtraHeaders sets the "extra_headers" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) SetExtraHeaders(v map[string]string) *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetExtraHeaders(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateExtraHeaders sets the "extra_headers" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) UpdateExtraHeaders() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateExtraHeaders()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverrideMode sets the "body_override_mode" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) SetBodyOverrideMode(v string) *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetBodyOverrideMode(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateBodyOverrideMode sets the "body_override_mode" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) UpdateBodyOverrideMode() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateBodyOverrideMode()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverride sets the "body_override" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) SetBodyOverride(v map[string]interface{}) *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.SetBodyOverride(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateBodyOverride sets the "body_override" field to the value that was provided on create.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) UpdateBodyOverride() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.UpdateBodyOverride()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearBodyOverride clears the value of the "body_override" field.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) ClearBodyOverride() *ChannelMonitorRequestTemplateUpsertBulk {
|
||||||
|
return u.Update(func(s *ChannelMonitorRequestTemplateUpsert) {
|
||||||
|
s.ClearBodyOverride()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) Exec(ctx context.Context) error {
|
||||||
|
if u.create.err != nil {
|
||||||
|
return u.create.err
|
||||||
|
}
|
||||||
|
for i, b := range u.create.builders {
|
||||||
|
if len(b.conflict) != 0 {
|
||||||
|
return fmt.Errorf("ent: OnConflict was set for builder %d. Set it on the ChannelMonitorRequestTemplateCreateBulk instead", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(u.create.conflict) == 0 {
|
||||||
|
return errors.New("ent: missing options for ChannelMonitorRequestTemplateCreateBulk.OnConflict")
|
||||||
|
}
|
||||||
|
return u.create.Exec(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (u *ChannelMonitorRequestTemplateUpsertBulk) ExecX(ctx context.Context) {
|
||||||
|
if err := u.create.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
88
backend/ent/channelmonitorrequesttemplate_delete.go
Normal file
88
backend/ent/channelmonitorrequesttemplate_delete.go
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateDelete is the builder for deleting a ChannelMonitorRequestTemplate entity.
|
||||||
|
type ChannelMonitorRequestTemplateDelete struct {
|
||||||
|
config
|
||||||
|
hooks []Hook
|
||||||
|
mutation *ChannelMonitorRequestTemplateMutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorRequestTemplateDelete builder.
|
||||||
|
func (_d *ChannelMonitorRequestTemplateDelete) Where(ps ...predicate.ChannelMonitorRequestTemplate) *ChannelMonitorRequestTemplateDelete {
|
||||||
|
_d.mutation.Where(ps...)
|
||||||
|
return _d
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the deletion query and returns how many vertices were deleted.
|
||||||
|
func (_d *ChannelMonitorRequestTemplateDelete) Exec(ctx context.Context) (int, error) {
|
||||||
|
return withHooks(ctx, _d.sqlExec, _d.mutation, _d.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_d *ChannelMonitorRequestTemplateDelete) ExecX(ctx context.Context) int {
|
||||||
|
n, err := _d.Exec(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_d *ChannelMonitorRequestTemplateDelete) sqlExec(ctx context.Context) (int, error) {
|
||||||
|
_spec := sqlgraph.NewDeleteSpec(channelmonitorrequesttemplate.Table, sqlgraph.NewFieldSpec(channelmonitorrequesttemplate.FieldID, field.TypeInt64))
|
||||||
|
if ps := _d.mutation.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
affected, err := sqlgraph.DeleteNodes(ctx, _d.driver, _spec)
|
||||||
|
if err != nil && sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
_d.mutation.done = true
|
||||||
|
return affected, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateDeleteOne is the builder for deleting a single ChannelMonitorRequestTemplate entity.
|
||||||
|
type ChannelMonitorRequestTemplateDeleteOne struct {
|
||||||
|
_d *ChannelMonitorRequestTemplateDelete
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorRequestTemplateDelete builder.
|
||||||
|
func (_d *ChannelMonitorRequestTemplateDeleteOne) Where(ps ...predicate.ChannelMonitorRequestTemplate) *ChannelMonitorRequestTemplateDeleteOne {
|
||||||
|
_d._d.mutation.Where(ps...)
|
||||||
|
return _d
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the deletion query.
|
||||||
|
func (_d *ChannelMonitorRequestTemplateDeleteOne) Exec(ctx context.Context) error {
|
||||||
|
n, err := _d._d.Exec(ctx)
|
||||||
|
switch {
|
||||||
|
case err != nil:
|
||||||
|
return err
|
||||||
|
case n == 0:
|
||||||
|
return &NotFoundError{channelmonitorrequesttemplate.Label}
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_d *ChannelMonitorRequestTemplateDeleteOne) ExecX(ctx context.Context) {
|
||||||
|
if err := _d.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
648
backend/ent/channelmonitorrequesttemplate_query.go
Normal file
648
backend/ent/channelmonitorrequesttemplate_query.go
Normal file
@ -0,0 +1,648 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"database/sql/driver"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect"
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateQuery is the builder for querying ChannelMonitorRequestTemplate entities.
|
||||||
|
type ChannelMonitorRequestTemplateQuery struct {
|
||||||
|
config
|
||||||
|
ctx *QueryContext
|
||||||
|
order []channelmonitorrequesttemplate.OrderOption
|
||||||
|
inters []Interceptor
|
||||||
|
predicates []predicate.ChannelMonitorRequestTemplate
|
||||||
|
withMonitors *ChannelMonitorQuery
|
||||||
|
modifiers []func(*sql.Selector)
|
||||||
|
// intermediate query (i.e. traversal path).
|
||||||
|
sql *sql.Selector
|
||||||
|
path func(context.Context) (*sql.Selector, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where adds a new predicate for the ChannelMonitorRequestTemplateQuery builder.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Where(ps ...predicate.ChannelMonitorRequestTemplate) *ChannelMonitorRequestTemplateQuery {
|
||||||
|
_q.predicates = append(_q.predicates, ps...)
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Limit the number of records to be returned by this query.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Limit(limit int) *ChannelMonitorRequestTemplateQuery {
|
||||||
|
_q.ctx.Limit = &limit
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Offset to start from.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Offset(offset int) *ChannelMonitorRequestTemplateQuery {
|
||||||
|
_q.ctx.Offset = &offset
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unique configures the query builder to filter duplicate records on query.
|
||||||
|
// By default, unique is set to true, and can be disabled using this method.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Unique(unique bool) *ChannelMonitorRequestTemplateQuery {
|
||||||
|
_q.ctx.Unique = &unique
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// Order specifies how the records should be ordered.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Order(o ...channelmonitorrequesttemplate.OrderOption) *ChannelMonitorRequestTemplateQuery {
|
||||||
|
_q.order = append(_q.order, o...)
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMonitors chains the current query on the "monitors" edge.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) QueryMonitors() *ChannelMonitorQuery {
|
||||||
|
query := (&ChannelMonitorClient{config: _q.config}).Query()
|
||||||
|
query.path = func(ctx context.Context) (fromU *sql.Selector, err error) {
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
selector := _q.sqlQuery(ctx)
|
||||||
|
if err := selector.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitorrequesttemplate.Table, channelmonitorrequesttemplate.FieldID, selector),
|
||||||
|
sqlgraph.To(channelmonitor.Table, channelmonitor.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, true, channelmonitorrequesttemplate.MonitorsTable, channelmonitorrequesttemplate.MonitorsColumn),
|
||||||
|
)
|
||||||
|
fromU = sqlgraph.SetNeighbors(_q.driver.Dialect(), step)
|
||||||
|
return fromU, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// First returns the first ChannelMonitorRequestTemplate entity from the query.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitorRequestTemplate was found.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) First(ctx context.Context) (*ChannelMonitorRequestTemplate, error) {
|
||||||
|
nodes, err := _q.Limit(1).All(setContextOp(ctx, _q.ctx, ent.OpQueryFirst))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(nodes) == 0 {
|
||||||
|
return nil, &NotFoundError{channelmonitorrequesttemplate.Label}
|
||||||
|
}
|
||||||
|
return nodes[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstX is like First, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) FirstX(ctx context.Context) *ChannelMonitorRequestTemplate {
|
||||||
|
node, err := _q.First(ctx)
|
||||||
|
if err != nil && !IsNotFound(err) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstID returns the first ChannelMonitorRequestTemplate ID from the query.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitorRequestTemplate ID was found.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) FirstID(ctx context.Context) (id int64, err error) {
|
||||||
|
var ids []int64
|
||||||
|
if ids, err = _q.Limit(1).IDs(setContextOp(ctx, _q.ctx, ent.OpQueryFirstID)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(ids) == 0 {
|
||||||
|
err = &NotFoundError{channelmonitorrequesttemplate.Label}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return ids[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// FirstIDX is like FirstID, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) FirstIDX(ctx context.Context) int64 {
|
||||||
|
id, err := _q.FirstID(ctx)
|
||||||
|
if err != nil && !IsNotFound(err) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only returns a single ChannelMonitorRequestTemplate entity found by the query, ensuring it only returns one.
|
||||||
|
// Returns a *NotSingularError when more than one ChannelMonitorRequestTemplate entity is found.
|
||||||
|
// Returns a *NotFoundError when no ChannelMonitorRequestTemplate entities are found.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Only(ctx context.Context) (*ChannelMonitorRequestTemplate, error) {
|
||||||
|
nodes, err := _q.Limit(2).All(setContextOp(ctx, _q.ctx, ent.OpQueryOnly))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
switch len(nodes) {
|
||||||
|
case 1:
|
||||||
|
return nodes[0], nil
|
||||||
|
case 0:
|
||||||
|
return nil, &NotFoundError{channelmonitorrequesttemplate.Label}
|
||||||
|
default:
|
||||||
|
return nil, &NotSingularError{channelmonitorrequesttemplate.Label}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyX is like Only, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) OnlyX(ctx context.Context) *ChannelMonitorRequestTemplate {
|
||||||
|
node, err := _q.Only(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyID is like Only, but returns the only ChannelMonitorRequestTemplate ID in the query.
|
||||||
|
// Returns a *NotSingularError when more than one ChannelMonitorRequestTemplate ID is found.
|
||||||
|
// Returns a *NotFoundError when no entities are found.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) OnlyID(ctx context.Context) (id int64, err error) {
|
||||||
|
var ids []int64
|
||||||
|
if ids, err = _q.Limit(2).IDs(setContextOp(ctx, _q.ctx, ent.OpQueryOnlyID)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch len(ids) {
|
||||||
|
case 1:
|
||||||
|
id = ids[0]
|
||||||
|
case 0:
|
||||||
|
err = &NotFoundError{channelmonitorrequesttemplate.Label}
|
||||||
|
default:
|
||||||
|
err = &NotSingularError{channelmonitorrequesttemplate.Label}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnlyIDX is like OnlyID, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) OnlyIDX(ctx context.Context) int64 {
|
||||||
|
id, err := _q.OnlyID(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// All executes the query and returns a list of ChannelMonitorRequestTemplates.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) All(ctx context.Context) ([]*ChannelMonitorRequestTemplate, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryAll)
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
qr := querierAll[[]*ChannelMonitorRequestTemplate, *ChannelMonitorRequestTemplateQuery]()
|
||||||
|
return withInterceptors[[]*ChannelMonitorRequestTemplate](ctx, _q, qr, _q.inters)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AllX is like All, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) AllX(ctx context.Context) []*ChannelMonitorRequestTemplate {
|
||||||
|
nodes, err := _q.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return nodes
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDs executes the query and returns a list of ChannelMonitorRequestTemplate IDs.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) IDs(ctx context.Context) (ids []int64, err error) {
|
||||||
|
if _q.ctx.Unique == nil && _q.path != nil {
|
||||||
|
_q.Unique(true)
|
||||||
|
}
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryIDs)
|
||||||
|
if err = _q.Select(channelmonitorrequesttemplate.FieldID).Scan(ctx, &ids); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ids, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDsX is like IDs, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) IDsX(ctx context.Context) []int64 {
|
||||||
|
ids, err := _q.IDs(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return ids
|
||||||
|
}
|
||||||
|
|
||||||
|
// Count returns the count of the given query.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Count(ctx context.Context) (int, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryCount)
|
||||||
|
if err := _q.prepareQuery(ctx); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return withInterceptors[int](ctx, _q, querierCount[*ChannelMonitorRequestTemplateQuery](), _q.inters)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CountX is like Count, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) CountX(ctx context.Context) int {
|
||||||
|
count, err := _q.Count(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exist returns true if the query has elements in the graph.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Exist(ctx context.Context) (bool, error) {
|
||||||
|
ctx = setContextOp(ctx, _q.ctx, ent.OpQueryExist)
|
||||||
|
switch _, err := _q.FirstID(ctx); {
|
||||||
|
case IsNotFound(err):
|
||||||
|
return false, nil
|
||||||
|
case err != nil:
|
||||||
|
return false, fmt.Errorf("ent: check existence: %w", err)
|
||||||
|
default:
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExistX is like Exist, but panics if an error occurs.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) ExistX(ctx context.Context) bool {
|
||||||
|
exist, err := _q.Exist(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return exist
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clone returns a duplicate of the ChannelMonitorRequestTemplateQuery builder, including all associated steps. It can be
|
||||||
|
// used to prepare common query builders and use them differently after the clone is made.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Clone() *ChannelMonitorRequestTemplateQuery {
|
||||||
|
if _q == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &ChannelMonitorRequestTemplateQuery{
|
||||||
|
config: _q.config,
|
||||||
|
ctx: _q.ctx.Clone(),
|
||||||
|
order: append([]channelmonitorrequesttemplate.OrderOption{}, _q.order...),
|
||||||
|
inters: append([]Interceptor{}, _q.inters...),
|
||||||
|
predicates: append([]predicate.ChannelMonitorRequestTemplate{}, _q.predicates...),
|
||||||
|
withMonitors: _q.withMonitors.Clone(),
|
||||||
|
// clone intermediate query.
|
||||||
|
sql: _q.sql.Clone(),
|
||||||
|
path: _q.path,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMonitors tells the query-builder to eager-load the nodes that are connected to
|
||||||
|
// the "monitors" edge. The optional arguments are used to configure the query builder of the edge.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) WithMonitors(opts ...func(*ChannelMonitorQuery)) *ChannelMonitorRequestTemplateQuery {
|
||||||
|
query := (&ChannelMonitorClient{config: _q.config}).Query()
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(query)
|
||||||
|
}
|
||||||
|
_q.withMonitors = query
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// GroupBy is used to group vertices by one or more fields/columns.
|
||||||
|
// It is often used with aggregate functions, like: count, max, mean, min, sum.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var v []struct {
|
||||||
|
// CreatedAt time.Time `json:"created_at,omitempty"`
|
||||||
|
// Count int `json:"count,omitempty"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorRequestTemplate.Query().
|
||||||
|
// GroupBy(channelmonitorrequesttemplate.FieldCreatedAt).
|
||||||
|
// Aggregate(ent.Count()).
|
||||||
|
// Scan(ctx, &v)
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) GroupBy(field string, fields ...string) *ChannelMonitorRequestTemplateGroupBy {
|
||||||
|
_q.ctx.Fields = append([]string{field}, fields...)
|
||||||
|
grbuild := &ChannelMonitorRequestTemplateGroupBy{build: _q}
|
||||||
|
grbuild.flds = &_q.ctx.Fields
|
||||||
|
grbuild.label = channelmonitorrequesttemplate.Label
|
||||||
|
grbuild.scan = grbuild.Scan
|
||||||
|
return grbuild
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select allows the selection one or more fields/columns for the given query,
|
||||||
|
// instead of selecting all fields in the entity.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var v []struct {
|
||||||
|
// CreatedAt time.Time `json:"created_at,omitempty"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// client.ChannelMonitorRequestTemplate.Query().
|
||||||
|
// Select(channelmonitorrequesttemplate.FieldCreatedAt).
|
||||||
|
// Scan(ctx, &v)
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Select(fields ...string) *ChannelMonitorRequestTemplateSelect {
|
||||||
|
_q.ctx.Fields = append(_q.ctx.Fields, fields...)
|
||||||
|
sbuild := &ChannelMonitorRequestTemplateSelect{ChannelMonitorRequestTemplateQuery: _q}
|
||||||
|
sbuild.label = channelmonitorrequesttemplate.Label
|
||||||
|
sbuild.flds, sbuild.scan = &_q.ctx.Fields, sbuild.Scan
|
||||||
|
return sbuild
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate returns a ChannelMonitorRequestTemplateSelect configured with the given aggregations.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) Aggregate(fns ...AggregateFunc) *ChannelMonitorRequestTemplateSelect {
|
||||||
|
return _q.Select().Aggregate(fns...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) prepareQuery(ctx context.Context) error {
|
||||||
|
for _, inter := range _q.inters {
|
||||||
|
if inter == nil {
|
||||||
|
return fmt.Errorf("ent: uninitialized interceptor (forgotten import ent/runtime?)")
|
||||||
|
}
|
||||||
|
if trv, ok := inter.(Traverser); ok {
|
||||||
|
if err := trv.Traverse(ctx, _q); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, f := range _q.ctx.Fields {
|
||||||
|
if !channelmonitorrequesttemplate.ValidColumn(f) {
|
||||||
|
return &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _q.path != nil {
|
||||||
|
prev, err := _q.path(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_q.sql = prev
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*ChannelMonitorRequestTemplate, error) {
|
||||||
|
var (
|
||||||
|
nodes = []*ChannelMonitorRequestTemplate{}
|
||||||
|
_spec = _q.querySpec()
|
||||||
|
loadedTypes = [1]bool{
|
||||||
|
_q.withMonitors != nil,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
_spec.ScanValues = func(columns []string) ([]any, error) {
|
||||||
|
return (*ChannelMonitorRequestTemplate).scanValues(nil, columns)
|
||||||
|
}
|
||||||
|
_spec.Assign = func(columns []string, values []any) error {
|
||||||
|
node := &ChannelMonitorRequestTemplate{config: _q.config}
|
||||||
|
nodes = append(nodes, node)
|
||||||
|
node.Edges.loadedTypes = loadedTypes
|
||||||
|
return node.assignValues(columns, values)
|
||||||
|
}
|
||||||
|
if len(_q.modifiers) > 0 {
|
||||||
|
_spec.Modifiers = _q.modifiers
|
||||||
|
}
|
||||||
|
for i := range hooks {
|
||||||
|
hooks[i](ctx, _spec)
|
||||||
|
}
|
||||||
|
if err := sqlgraph.QueryNodes(ctx, _q.driver, _spec); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(nodes) == 0 {
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
|
if query := _q.withMonitors; query != nil {
|
||||||
|
if err := _q.loadMonitors(ctx, query, nodes,
|
||||||
|
func(n *ChannelMonitorRequestTemplate) { n.Edges.Monitors = []*ChannelMonitor{} },
|
||||||
|
func(n *ChannelMonitorRequestTemplate, e *ChannelMonitor) {
|
||||||
|
n.Edges.Monitors = append(n.Edges.Monitors, e)
|
||||||
|
}); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) loadMonitors(ctx context.Context, query *ChannelMonitorQuery, nodes []*ChannelMonitorRequestTemplate, init func(*ChannelMonitorRequestTemplate), assign func(*ChannelMonitorRequestTemplate, *ChannelMonitor)) error {
|
||||||
|
fks := make([]driver.Value, 0, len(nodes))
|
||||||
|
nodeids := make(map[int64]*ChannelMonitorRequestTemplate)
|
||||||
|
for i := range nodes {
|
||||||
|
fks = append(fks, nodes[i].ID)
|
||||||
|
nodeids[nodes[i].ID] = nodes[i]
|
||||||
|
if init != nil {
|
||||||
|
init(nodes[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(query.ctx.Fields) > 0 {
|
||||||
|
query.ctx.AppendFieldOnce(channelmonitor.FieldTemplateID)
|
||||||
|
}
|
||||||
|
query.Where(predicate.ChannelMonitor(func(s *sql.Selector) {
|
||||||
|
s.Where(sql.InValues(s.C(channelmonitorrequesttemplate.MonitorsColumn), fks...))
|
||||||
|
}))
|
||||||
|
neighbors, err := query.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, n := range neighbors {
|
||||||
|
fk := n.TemplateID
|
||||||
|
if fk == nil {
|
||||||
|
return fmt.Errorf(`foreign-key "template_id" is nil for node %v`, n.ID)
|
||||||
|
}
|
||||||
|
node, ok := nodeids[*fk]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf(`unexpected referenced foreign-key "template_id" returned %v for node %v`, *fk, n.ID)
|
||||||
|
}
|
||||||
|
assign(node, n)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) sqlCount(ctx context.Context) (int, error) {
|
||||||
|
_spec := _q.querySpec()
|
||||||
|
if len(_q.modifiers) > 0 {
|
||||||
|
_spec.Modifiers = _q.modifiers
|
||||||
|
}
|
||||||
|
_spec.Node.Columns = _q.ctx.Fields
|
||||||
|
if len(_q.ctx.Fields) > 0 {
|
||||||
|
_spec.Unique = _q.ctx.Unique != nil && *_q.ctx.Unique
|
||||||
|
}
|
||||||
|
return sqlgraph.CountNodes(ctx, _q.driver, _spec)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) querySpec() *sqlgraph.QuerySpec {
|
||||||
|
_spec := sqlgraph.NewQuerySpec(channelmonitorrequesttemplate.Table, channelmonitorrequesttemplate.Columns, sqlgraph.NewFieldSpec(channelmonitorrequesttemplate.FieldID, field.TypeInt64))
|
||||||
|
_spec.From = _q.sql
|
||||||
|
if unique := _q.ctx.Unique; unique != nil {
|
||||||
|
_spec.Unique = *unique
|
||||||
|
} else if _q.path != nil {
|
||||||
|
_spec.Unique = true
|
||||||
|
}
|
||||||
|
if fields := _q.ctx.Fields; len(fields) > 0 {
|
||||||
|
_spec.Node.Columns = make([]string, 0, len(fields))
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, channelmonitorrequesttemplate.FieldID)
|
||||||
|
for i := range fields {
|
||||||
|
if fields[i] != channelmonitorrequesttemplate.FieldID {
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, fields[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ps := _q.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if limit := _q.ctx.Limit; limit != nil {
|
||||||
|
_spec.Limit = *limit
|
||||||
|
}
|
||||||
|
if offset := _q.ctx.Offset; offset != nil {
|
||||||
|
_spec.Offset = *offset
|
||||||
|
}
|
||||||
|
if ps := _q.order; len(ps) > 0 {
|
||||||
|
_spec.Order = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _spec
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) sqlQuery(ctx context.Context) *sql.Selector {
|
||||||
|
builder := sql.Dialect(_q.driver.Dialect())
|
||||||
|
t1 := builder.Table(channelmonitorrequesttemplate.Table)
|
||||||
|
columns := _q.ctx.Fields
|
||||||
|
if len(columns) == 0 {
|
||||||
|
columns = channelmonitorrequesttemplate.Columns
|
||||||
|
}
|
||||||
|
selector := builder.Select(t1.Columns(columns...)...).From(t1)
|
||||||
|
if _q.sql != nil {
|
||||||
|
selector = _q.sql
|
||||||
|
selector.Select(selector.Columns(columns...)...)
|
||||||
|
}
|
||||||
|
if _q.ctx.Unique != nil && *_q.ctx.Unique {
|
||||||
|
selector.Distinct()
|
||||||
|
}
|
||||||
|
for _, m := range _q.modifiers {
|
||||||
|
m(selector)
|
||||||
|
}
|
||||||
|
for _, p := range _q.predicates {
|
||||||
|
p(selector)
|
||||||
|
}
|
||||||
|
for _, p := range _q.order {
|
||||||
|
p(selector)
|
||||||
|
}
|
||||||
|
if offset := _q.ctx.Offset; offset != nil {
|
||||||
|
// limit is mandatory for offset clause. We start
|
||||||
|
// with default value, and override it below if needed.
|
||||||
|
selector.Offset(*offset).Limit(math.MaxInt32)
|
||||||
|
}
|
||||||
|
if limit := _q.ctx.Limit; limit != nil {
|
||||||
|
selector.Limit(*limit)
|
||||||
|
}
|
||||||
|
return selector
|
||||||
|
}
|
||||||
|
|
||||||
|
// ForUpdate locks the selected rows against concurrent updates, and prevent them from being
|
||||||
|
// updated, deleted or "selected ... for update" by other sessions, until the transaction is
|
||||||
|
// either committed or rolled-back.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) ForUpdate(opts ...sql.LockOption) *ChannelMonitorRequestTemplateQuery {
|
||||||
|
if _q.driver.Dialect() == dialect.Postgres {
|
||||||
|
_q.Unique(false)
|
||||||
|
}
|
||||||
|
_q.modifiers = append(_q.modifiers, func(s *sql.Selector) {
|
||||||
|
s.ForUpdate(opts...)
|
||||||
|
})
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// ForShare behaves similarly to ForUpdate, except that it acquires a shared mode lock
|
||||||
|
// on any rows that are read. Other sessions can read the rows, but cannot modify them
|
||||||
|
// until your transaction commits.
|
||||||
|
func (_q *ChannelMonitorRequestTemplateQuery) ForShare(opts ...sql.LockOption) *ChannelMonitorRequestTemplateQuery {
|
||||||
|
if _q.driver.Dialect() == dialect.Postgres {
|
||||||
|
_q.Unique(false)
|
||||||
|
}
|
||||||
|
_q.modifiers = append(_q.modifiers, func(s *sql.Selector) {
|
||||||
|
s.ForShare(opts...)
|
||||||
|
})
|
||||||
|
return _q
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateGroupBy is the group-by builder for ChannelMonitorRequestTemplate entities.
|
||||||
|
type ChannelMonitorRequestTemplateGroupBy struct {
|
||||||
|
selector
|
||||||
|
build *ChannelMonitorRequestTemplateQuery
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate adds the given aggregation functions to the group-by query.
|
||||||
|
func (_g *ChannelMonitorRequestTemplateGroupBy) Aggregate(fns ...AggregateFunc) *ChannelMonitorRequestTemplateGroupBy {
|
||||||
|
_g.fns = append(_g.fns, fns...)
|
||||||
|
return _g
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan applies the selector query and scans the result into the given value.
|
||||||
|
func (_g *ChannelMonitorRequestTemplateGroupBy) Scan(ctx context.Context, v any) error {
|
||||||
|
ctx = setContextOp(ctx, _g.build.ctx, ent.OpQueryGroupBy)
|
||||||
|
if err := _g.build.prepareQuery(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return scanWithInterceptors[*ChannelMonitorRequestTemplateQuery, *ChannelMonitorRequestTemplateGroupBy](ctx, _g.build, _g, _g.build.inters, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_g *ChannelMonitorRequestTemplateGroupBy) sqlScan(ctx context.Context, root *ChannelMonitorRequestTemplateQuery, v any) error {
|
||||||
|
selector := root.sqlQuery(ctx).Select()
|
||||||
|
aggregation := make([]string, 0, len(_g.fns))
|
||||||
|
for _, fn := range _g.fns {
|
||||||
|
aggregation = append(aggregation, fn(selector))
|
||||||
|
}
|
||||||
|
if len(selector.SelectedColumns()) == 0 {
|
||||||
|
columns := make([]string, 0, len(*_g.flds)+len(_g.fns))
|
||||||
|
for _, f := range *_g.flds {
|
||||||
|
columns = append(columns, selector.C(f))
|
||||||
|
}
|
||||||
|
columns = append(columns, aggregation...)
|
||||||
|
selector.Select(columns...)
|
||||||
|
}
|
||||||
|
selector.GroupBy(selector.Columns(*_g.flds...)...)
|
||||||
|
if err := selector.Err(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
rows := &sql.Rows{}
|
||||||
|
query, args := selector.Query()
|
||||||
|
if err := _g.build.driver.Query(ctx, query, args, rows); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return sql.ScanSlice(rows, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateSelect is the builder for selecting fields of ChannelMonitorRequestTemplate entities.
|
||||||
|
type ChannelMonitorRequestTemplateSelect struct {
|
||||||
|
*ChannelMonitorRequestTemplateQuery
|
||||||
|
selector
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggregate adds the given aggregation functions to the selector query.
|
||||||
|
func (_s *ChannelMonitorRequestTemplateSelect) Aggregate(fns ...AggregateFunc) *ChannelMonitorRequestTemplateSelect {
|
||||||
|
_s.fns = append(_s.fns, fns...)
|
||||||
|
return _s
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan applies the selector query and scans the result into the given value.
|
||||||
|
func (_s *ChannelMonitorRequestTemplateSelect) Scan(ctx context.Context, v any) error {
|
||||||
|
ctx = setContextOp(ctx, _s.ctx, ent.OpQuerySelect)
|
||||||
|
if err := _s.prepareQuery(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return scanWithInterceptors[*ChannelMonitorRequestTemplateQuery, *ChannelMonitorRequestTemplateSelect](ctx, _s.ChannelMonitorRequestTemplateQuery, _s, _s.inters, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_s *ChannelMonitorRequestTemplateSelect) sqlScan(ctx context.Context, root *ChannelMonitorRequestTemplateQuery, v any) error {
|
||||||
|
selector := root.sqlQuery(ctx)
|
||||||
|
aggregation := make([]string, 0, len(_s.fns))
|
||||||
|
for _, fn := range _s.fns {
|
||||||
|
aggregation = append(aggregation, fn(selector))
|
||||||
|
}
|
||||||
|
switch n := len(*_s.selector.flds); {
|
||||||
|
case n == 0 && len(aggregation) > 0:
|
||||||
|
selector.Select(aggregation...)
|
||||||
|
case n != 0 && len(aggregation) > 0:
|
||||||
|
selector.AppendSelect(aggregation...)
|
||||||
|
}
|
||||||
|
rows := &sql.Rows{}
|
||||||
|
query, args := selector.Query()
|
||||||
|
if err := _s.driver.Query(ctx, query, args, rows); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
return sql.ScanSlice(rows, v)
|
||||||
|
}
|
||||||
639
backend/ent/channelmonitorrequesttemplate_update.go
Normal file
639
backend/ent/channelmonitorrequesttemplate_update.go
Normal file
@ -0,0 +1,639 @@
|
|||||||
|
// Code generated by ent, DO NOT EDIT.
|
||||||
|
|
||||||
|
package ent
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent/dialect/sql"
|
||||||
|
"entgo.io/ent/dialect/sql/sqlgraph"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/predicate"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateUpdate is the builder for updating ChannelMonitorRequestTemplate entities.
|
||||||
|
type ChannelMonitorRequestTemplateUpdate struct {
|
||||||
|
config
|
||||||
|
hooks []Hook
|
||||||
|
mutation *ChannelMonitorRequestTemplateMutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorRequestTemplateUpdate builder.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) Where(ps ...predicate.ChannelMonitorRequestTemplate) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.Where(ps...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetUpdatedAt sets the "updated_at" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetUpdatedAt(v time.Time) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.SetUpdatedAt(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetName sets the "name" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetName(v string) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.SetName(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableName sets the "name" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetNillableName(v *string) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetName(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetProvider sets the "provider" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetProvider(v channelmonitorrequesttemplate.Provider) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.SetProvider(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableProvider sets the "provider" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetNillableProvider(v *channelmonitorrequesttemplate.Provider) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetProvider(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDescription sets the "description" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetDescription(v string) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.SetDescription(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableDescription sets the "description" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetNillableDescription(v *string) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetDescription(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearDescription clears the value of the "description" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) ClearDescription() *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.ClearDescription()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetExtraHeaders sets the "extra_headers" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetExtraHeaders(v map[string]string) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.SetExtraHeaders(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverrideMode sets the "body_override_mode" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetBodyOverrideMode(v string) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.SetBodyOverrideMode(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableBodyOverrideMode sets the "body_override_mode" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetNillableBodyOverrideMode(v *string) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetBodyOverrideMode(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverride sets the "body_override" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SetBodyOverride(v map[string]interface{}) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.SetBodyOverride(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearBodyOverride clears the value of the "body_override" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) ClearBodyOverride() *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.ClearBodyOverride()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddMonitorIDs adds the "monitors" edge to the ChannelMonitor entity by IDs.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) AddMonitorIDs(ids ...int64) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.AddMonitorIDs(ids...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddMonitors adds the "monitors" edges to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) AddMonitors(v ...*ChannelMonitor) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
ids := make([]int64, len(v))
|
||||||
|
for i := range v {
|
||||||
|
ids[i] = v[i].ID
|
||||||
|
}
|
||||||
|
return _u.AddMonitorIDs(ids...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutation returns the ChannelMonitorRequestTemplateMutation object of the builder.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) Mutation() *ChannelMonitorRequestTemplateMutation {
|
||||||
|
return _u.mutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMonitors clears all "monitors" edges to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) ClearMonitors() *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.ClearMonitors()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveMonitorIDs removes the "monitors" edge to ChannelMonitor entities by IDs.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) RemoveMonitorIDs(ids ...int64) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
_u.mutation.RemoveMonitorIDs(ids...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveMonitors removes "monitors" edges to ChannelMonitor entities.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) RemoveMonitors(v ...*ChannelMonitor) *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
ids := make([]int64, len(v))
|
||||||
|
for i := range v {
|
||||||
|
ids[i] = v[i].ID
|
||||||
|
}
|
||||||
|
return _u.RemoveMonitorIDs(ids...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save executes the query and returns the number of nodes affected by the update operation.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) Save(ctx context.Context) (int, error) {
|
||||||
|
_u.defaults()
|
||||||
|
return withHooks(ctx, _u.sqlSave, _u.mutation, _u.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveX is like Save, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) SaveX(ctx context.Context) int {
|
||||||
|
affected, err := _u.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return affected
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) Exec(ctx context.Context) error {
|
||||||
|
_, err := _u.Save(ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) ExecX(ctx context.Context) {
|
||||||
|
if err := _u.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// defaults sets the default values of the builder before save.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) defaults() {
|
||||||
|
if _, ok := _u.mutation.UpdatedAt(); !ok {
|
||||||
|
v := channelmonitorrequesttemplate.UpdateDefaultUpdatedAt()
|
||||||
|
_u.mutation.SetUpdatedAt(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check runs all checks and user-defined validators on the builder.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) check() error {
|
||||||
|
if v, ok := _u.mutation.Name(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.NameValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "name", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.name": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _u.mutation.Provider(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.ProviderValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "provider", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.provider": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _u.mutation.Description(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.DescriptionValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "description", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.description": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _u.mutation.BodyOverrideMode(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.BodyOverrideModeValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "body_override_mode", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.body_override_mode": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdate) sqlSave(ctx context.Context) (_node int, err error) {
|
||||||
|
if err := _u.check(); err != nil {
|
||||||
|
return _node, err
|
||||||
|
}
|
||||||
|
_spec := sqlgraph.NewUpdateSpec(channelmonitorrequesttemplate.Table, channelmonitorrequesttemplate.Columns, sqlgraph.NewFieldSpec(channelmonitorrequesttemplate.FieldID, field.TypeInt64))
|
||||||
|
if ps := _u.mutation.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.UpdatedAt(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldUpdatedAt, field.TypeTime, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Name(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldName, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Provider(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldProvider, field.TypeEnum, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Description(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldDescription, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.DescriptionCleared() {
|
||||||
|
_spec.ClearField(channelmonitorrequesttemplate.FieldDescription, field.TypeString)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.ExtraHeaders(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldExtraHeaders, field.TypeJSON, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.BodyOverrideMode(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldBodyOverrideMode, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.BodyOverride(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldBodyOverride, field.TypeJSON, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.BodyOverrideCleared() {
|
||||||
|
_spec.ClearField(channelmonitorrequesttemplate.FieldBodyOverride, field.TypeJSON)
|
||||||
|
}
|
||||||
|
if _u.mutation.MonitorsCleared() {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.O2M,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorrequesttemplate.MonitorsTable,
|
||||||
|
Columns: []string{channelmonitorrequesttemplate.MonitorsColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||||
|
}
|
||||||
|
if nodes := _u.mutation.RemovedMonitorsIDs(); len(nodes) > 0 && !_u.mutation.MonitorsCleared() {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.O2M,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorrequesttemplate.MonitorsTable,
|
||||||
|
Columns: []string{channelmonitorrequesttemplate.MonitorsColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, k := range nodes {
|
||||||
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||||
|
}
|
||||||
|
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||||
|
}
|
||||||
|
if nodes := _u.mutation.MonitorsIDs(); len(nodes) > 0 {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.O2M,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorrequesttemplate.MonitorsTable,
|
||||||
|
Columns: []string{channelmonitorrequesttemplate.MonitorsColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, k := range nodes {
|
||||||
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||||
|
}
|
||||||
|
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||||
|
}
|
||||||
|
if _node, err = sqlgraph.UpdateNodes(ctx, _u.driver, _spec); err != nil {
|
||||||
|
if _, ok := err.(*sqlgraph.NotFoundError); ok {
|
||||||
|
err = &NotFoundError{channelmonitorrequesttemplate.Label}
|
||||||
|
} else if sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
_u.mutation.done = true
|
||||||
|
return _node, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateUpdateOne is the builder for updating a single ChannelMonitorRequestTemplate entity.
|
||||||
|
type ChannelMonitorRequestTemplateUpdateOne struct {
|
||||||
|
config
|
||||||
|
fields []string
|
||||||
|
hooks []Hook
|
||||||
|
mutation *ChannelMonitorRequestTemplateMutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetUpdatedAt sets the "updated_at" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetUpdatedAt(v time.Time) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.SetUpdatedAt(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetName sets the "name" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetName(v string) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.SetName(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableName sets the "name" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetNillableName(v *string) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetName(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetProvider sets the "provider" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetProvider(v channelmonitorrequesttemplate.Provider) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.SetProvider(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableProvider sets the "provider" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetNillableProvider(v *channelmonitorrequesttemplate.Provider) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetProvider(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDescription sets the "description" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetDescription(v string) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.SetDescription(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableDescription sets the "description" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetNillableDescription(v *string) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetDescription(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearDescription clears the value of the "description" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) ClearDescription() *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.ClearDescription()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetExtraHeaders sets the "extra_headers" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetExtraHeaders(v map[string]string) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.SetExtraHeaders(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverrideMode sets the "body_override_mode" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetBodyOverrideMode(v string) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.SetBodyOverrideMode(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableBodyOverrideMode sets the "body_override_mode" field if the given value is not nil.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetNillableBodyOverrideMode(v *string) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetBodyOverrideMode(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetBodyOverride sets the "body_override" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SetBodyOverride(v map[string]interface{}) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.SetBodyOverride(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearBodyOverride clears the value of the "body_override" field.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) ClearBodyOverride() *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.ClearBodyOverride()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddMonitorIDs adds the "monitors" edge to the ChannelMonitor entity by IDs.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) AddMonitorIDs(ids ...int64) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.AddMonitorIDs(ids...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddMonitors adds the "monitors" edges to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) AddMonitors(v ...*ChannelMonitor) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
ids := make([]int64, len(v))
|
||||||
|
for i := range v {
|
||||||
|
ids[i] = v[i].ID
|
||||||
|
}
|
||||||
|
return _u.AddMonitorIDs(ids...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutation returns the ChannelMonitorRequestTemplateMutation object of the builder.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) Mutation() *ChannelMonitorRequestTemplateMutation {
|
||||||
|
return _u.mutation
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearMonitors clears all "monitors" edges to the ChannelMonitor entity.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) ClearMonitors() *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.ClearMonitors()
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveMonitorIDs removes the "monitors" edge to ChannelMonitor entities by IDs.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) RemoveMonitorIDs(ids ...int64) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.RemoveMonitorIDs(ids...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveMonitors removes "monitors" edges to ChannelMonitor entities.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) RemoveMonitors(v ...*ChannelMonitor) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
ids := make([]int64, len(v))
|
||||||
|
for i := range v {
|
||||||
|
ids[i] = v[i].ID
|
||||||
|
}
|
||||||
|
return _u.RemoveMonitorIDs(ids...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where appends a list predicates to the ChannelMonitorRequestTemplateUpdate builder.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) Where(ps ...predicate.ChannelMonitorRequestTemplate) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.mutation.Where(ps...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select allows selecting one or more fields (columns) of the returned entity.
|
||||||
|
// The default is selecting all fields defined in the entity schema.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) Select(field string, fields ...string) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
_u.fields = append([]string{field}, fields...)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save executes the query and returns the updated ChannelMonitorRequestTemplate entity.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) Save(ctx context.Context) (*ChannelMonitorRequestTemplate, error) {
|
||||||
|
_u.defaults()
|
||||||
|
return withHooks(ctx, _u.sqlSave, _u.mutation, _u.hooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveX is like Save, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) SaveX(ctx context.Context) *ChannelMonitorRequestTemplate {
|
||||||
|
node, err := _u.Save(ctx)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exec executes the query on the entity.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) Exec(ctx context.Context) error {
|
||||||
|
_, err := _u.Save(ctx)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecX is like Exec, but panics if an error occurs.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) ExecX(ctx context.Context) {
|
||||||
|
if err := _u.Exec(ctx); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// defaults sets the default values of the builder before save.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) defaults() {
|
||||||
|
if _, ok := _u.mutation.UpdatedAt(); !ok {
|
||||||
|
v := channelmonitorrequesttemplate.UpdateDefaultUpdatedAt()
|
||||||
|
_u.mutation.SetUpdatedAt(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check runs all checks and user-defined validators on the builder.
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) check() error {
|
||||||
|
if v, ok := _u.mutation.Name(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.NameValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "name", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.name": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _u.mutation.Provider(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.ProviderValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "provider", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.provider": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _u.mutation.Description(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.DescriptionValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "description", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.description": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v, ok := _u.mutation.BodyOverrideMode(); ok {
|
||||||
|
if err := channelmonitorrequesttemplate.BodyOverrideModeValidator(v); err != nil {
|
||||||
|
return &ValidationError{Name: "body_override_mode", err: fmt.Errorf(`ent: validator failed for field "ChannelMonitorRequestTemplate.body_override_mode": %w`, err)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (_u *ChannelMonitorRequestTemplateUpdateOne) sqlSave(ctx context.Context) (_node *ChannelMonitorRequestTemplate, err error) {
|
||||||
|
if err := _u.check(); err != nil {
|
||||||
|
return _node, err
|
||||||
|
}
|
||||||
|
_spec := sqlgraph.NewUpdateSpec(channelmonitorrequesttemplate.Table, channelmonitorrequesttemplate.Columns, sqlgraph.NewFieldSpec(channelmonitorrequesttemplate.FieldID, field.TypeInt64))
|
||||||
|
id, ok := _u.mutation.ID()
|
||||||
|
if !ok {
|
||||||
|
return nil, &ValidationError{Name: "id", err: errors.New(`ent: missing "ChannelMonitorRequestTemplate.id" for update`)}
|
||||||
|
}
|
||||||
|
_spec.Node.ID.Value = id
|
||||||
|
if fields := _u.fields; len(fields) > 0 {
|
||||||
|
_spec.Node.Columns = make([]string, 0, len(fields))
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, channelmonitorrequesttemplate.FieldID)
|
||||||
|
for _, f := range fields {
|
||||||
|
if !channelmonitorrequesttemplate.ValidColumn(f) {
|
||||||
|
return nil, &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)}
|
||||||
|
}
|
||||||
|
if f != channelmonitorrequesttemplate.FieldID {
|
||||||
|
_spec.Node.Columns = append(_spec.Node.Columns, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ps := _u.mutation.predicates; len(ps) > 0 {
|
||||||
|
_spec.Predicate = func(selector *sql.Selector) {
|
||||||
|
for i := range ps {
|
||||||
|
ps[i](selector)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.UpdatedAt(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldUpdatedAt, field.TypeTime, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Name(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldName, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Provider(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldProvider, field.TypeEnum, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.Description(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldDescription, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.DescriptionCleared() {
|
||||||
|
_spec.ClearField(channelmonitorrequesttemplate.FieldDescription, field.TypeString)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.ExtraHeaders(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldExtraHeaders, field.TypeJSON, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.BodyOverrideMode(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldBodyOverrideMode, field.TypeString, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.BodyOverride(); ok {
|
||||||
|
_spec.SetField(channelmonitorrequesttemplate.FieldBodyOverride, field.TypeJSON, value)
|
||||||
|
}
|
||||||
|
if _u.mutation.BodyOverrideCleared() {
|
||||||
|
_spec.ClearField(channelmonitorrequesttemplate.FieldBodyOverride, field.TypeJSON)
|
||||||
|
}
|
||||||
|
if _u.mutation.MonitorsCleared() {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.O2M,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorrequesttemplate.MonitorsTable,
|
||||||
|
Columns: []string{channelmonitorrequesttemplate.MonitorsColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||||
|
}
|
||||||
|
if nodes := _u.mutation.RemovedMonitorsIDs(); len(nodes) > 0 && !_u.mutation.MonitorsCleared() {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.O2M,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorrequesttemplate.MonitorsTable,
|
||||||
|
Columns: []string{channelmonitorrequesttemplate.MonitorsColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, k := range nodes {
|
||||||
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||||
|
}
|
||||||
|
_spec.Edges.Clear = append(_spec.Edges.Clear, edge)
|
||||||
|
}
|
||||||
|
if nodes := _u.mutation.MonitorsIDs(); len(nodes) > 0 {
|
||||||
|
edge := &sqlgraph.EdgeSpec{
|
||||||
|
Rel: sqlgraph.O2M,
|
||||||
|
Inverse: true,
|
||||||
|
Table: channelmonitorrequesttemplate.MonitorsTable,
|
||||||
|
Columns: []string{channelmonitorrequesttemplate.MonitorsColumn},
|
||||||
|
Bidi: false,
|
||||||
|
Target: &sqlgraph.EdgeTarget{
|
||||||
|
IDSpec: sqlgraph.NewFieldSpec(channelmonitor.FieldID, field.TypeInt64),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, k := range nodes {
|
||||||
|
edge.Target.Nodes = append(edge.Target.Nodes, k)
|
||||||
|
}
|
||||||
|
_spec.Edges.Add = append(_spec.Edges.Add, edge)
|
||||||
|
}
|
||||||
|
_node = &ChannelMonitorRequestTemplate{config: _u.config}
|
||||||
|
_spec.Assign = _node.assignValues
|
||||||
|
_spec.ScanValues = _node.scanValues
|
||||||
|
if err = sqlgraph.UpdateNode(ctx, _u.driver, _spec); err != nil {
|
||||||
|
if _, ok := err.(*sqlgraph.NotFoundError); ok {
|
||||||
|
err = &NotFoundError{channelmonitorrequesttemplate.Label}
|
||||||
|
} else if sqlgraph.IsConstraintError(err) {
|
||||||
|
err = &ConstraintError{msg: err.Error(), wrap: err}
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
_u.mutation.done = true
|
||||||
|
return _node, nil
|
||||||
|
}
|
||||||
@ -22,6 +22,10 @@ import (
|
|||||||
"github.com/Wei-Shaw/sub2api/ent/apikey"
|
"github.com/Wei-Shaw/sub2api/ent/apikey"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/authidentity"
|
"github.com/Wei-Shaw/sub2api/ent/authidentity"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/authidentitychannel"
|
"github.com/Wei-Shaw/sub2api/ent/authidentitychannel"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitordailyrollup"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorhistory"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/errorpassthroughrule"
|
"github.com/Wei-Shaw/sub2api/ent/errorpassthroughrule"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/group"
|
"github.com/Wei-Shaw/sub2api/ent/group"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/idempotencyrecord"
|
"github.com/Wei-Shaw/sub2api/ent/idempotencyrecord"
|
||||||
@ -68,6 +72,14 @@ type Client struct {
|
|||||||
AuthIdentity *AuthIdentityClient
|
AuthIdentity *AuthIdentityClient
|
||||||
// AuthIdentityChannel is the client for interacting with the AuthIdentityChannel builders.
|
// AuthIdentityChannel is the client for interacting with the AuthIdentityChannel builders.
|
||||||
AuthIdentityChannel *AuthIdentityChannelClient
|
AuthIdentityChannel *AuthIdentityChannelClient
|
||||||
|
// ChannelMonitor is the client for interacting with the ChannelMonitor builders.
|
||||||
|
ChannelMonitor *ChannelMonitorClient
|
||||||
|
// ChannelMonitorDailyRollup is the client for interacting with the ChannelMonitorDailyRollup builders.
|
||||||
|
ChannelMonitorDailyRollup *ChannelMonitorDailyRollupClient
|
||||||
|
// ChannelMonitorHistory is the client for interacting with the ChannelMonitorHistory builders.
|
||||||
|
ChannelMonitorHistory *ChannelMonitorHistoryClient
|
||||||
|
// ChannelMonitorRequestTemplate is the client for interacting with the ChannelMonitorRequestTemplate builders.
|
||||||
|
ChannelMonitorRequestTemplate *ChannelMonitorRequestTemplateClient
|
||||||
// ErrorPassthroughRule is the client for interacting with the ErrorPassthroughRule builders.
|
// ErrorPassthroughRule is the client for interacting with the ErrorPassthroughRule builders.
|
||||||
ErrorPassthroughRule *ErrorPassthroughRuleClient
|
ErrorPassthroughRule *ErrorPassthroughRuleClient
|
||||||
// Group is the client for interacting with the Group builders.
|
// Group is the client for interacting with the Group builders.
|
||||||
@ -132,6 +144,10 @@ func (c *Client) init() {
|
|||||||
c.AnnouncementRead = NewAnnouncementReadClient(c.config)
|
c.AnnouncementRead = NewAnnouncementReadClient(c.config)
|
||||||
c.AuthIdentity = NewAuthIdentityClient(c.config)
|
c.AuthIdentity = NewAuthIdentityClient(c.config)
|
||||||
c.AuthIdentityChannel = NewAuthIdentityChannelClient(c.config)
|
c.AuthIdentityChannel = NewAuthIdentityChannelClient(c.config)
|
||||||
|
c.ChannelMonitor = NewChannelMonitorClient(c.config)
|
||||||
|
c.ChannelMonitorDailyRollup = NewChannelMonitorDailyRollupClient(c.config)
|
||||||
|
c.ChannelMonitorHistory = NewChannelMonitorHistoryClient(c.config)
|
||||||
|
c.ChannelMonitorRequestTemplate = NewChannelMonitorRequestTemplateClient(c.config)
|
||||||
c.ErrorPassthroughRule = NewErrorPassthroughRuleClient(c.config)
|
c.ErrorPassthroughRule = NewErrorPassthroughRuleClient(c.config)
|
||||||
c.Group = NewGroupClient(c.config)
|
c.Group = NewGroupClient(c.config)
|
||||||
c.IdempotencyRecord = NewIdempotencyRecordClient(c.config)
|
c.IdempotencyRecord = NewIdempotencyRecordClient(c.config)
|
||||||
@ -245,38 +261,42 @@ func (c *Client) Tx(ctx context.Context) (*Tx, error) {
|
|||||||
cfg := c.config
|
cfg := c.config
|
||||||
cfg.driver = tx
|
cfg.driver = tx
|
||||||
return &Tx{
|
return &Tx{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
config: cfg,
|
config: cfg,
|
||||||
APIKey: NewAPIKeyClient(cfg),
|
APIKey: NewAPIKeyClient(cfg),
|
||||||
Account: NewAccountClient(cfg),
|
Account: NewAccountClient(cfg),
|
||||||
AccountGroup: NewAccountGroupClient(cfg),
|
AccountGroup: NewAccountGroupClient(cfg),
|
||||||
Announcement: NewAnnouncementClient(cfg),
|
Announcement: NewAnnouncementClient(cfg),
|
||||||
AnnouncementRead: NewAnnouncementReadClient(cfg),
|
AnnouncementRead: NewAnnouncementReadClient(cfg),
|
||||||
AuthIdentity: NewAuthIdentityClient(cfg),
|
AuthIdentity: NewAuthIdentityClient(cfg),
|
||||||
AuthIdentityChannel: NewAuthIdentityChannelClient(cfg),
|
AuthIdentityChannel: NewAuthIdentityChannelClient(cfg),
|
||||||
ErrorPassthroughRule: NewErrorPassthroughRuleClient(cfg),
|
ChannelMonitor: NewChannelMonitorClient(cfg),
|
||||||
Group: NewGroupClient(cfg),
|
ChannelMonitorDailyRollup: NewChannelMonitorDailyRollupClient(cfg),
|
||||||
IdempotencyRecord: NewIdempotencyRecordClient(cfg),
|
ChannelMonitorHistory: NewChannelMonitorHistoryClient(cfg),
|
||||||
IdentityAdoptionDecision: NewIdentityAdoptionDecisionClient(cfg),
|
ChannelMonitorRequestTemplate: NewChannelMonitorRequestTemplateClient(cfg),
|
||||||
PaymentAuditLog: NewPaymentAuditLogClient(cfg),
|
ErrorPassthroughRule: NewErrorPassthroughRuleClient(cfg),
|
||||||
PaymentOrder: NewPaymentOrderClient(cfg),
|
Group: NewGroupClient(cfg),
|
||||||
PaymentProviderInstance: NewPaymentProviderInstanceClient(cfg),
|
IdempotencyRecord: NewIdempotencyRecordClient(cfg),
|
||||||
PendingAuthSession: NewPendingAuthSessionClient(cfg),
|
IdentityAdoptionDecision: NewIdentityAdoptionDecisionClient(cfg),
|
||||||
PromoCode: NewPromoCodeClient(cfg),
|
PaymentAuditLog: NewPaymentAuditLogClient(cfg),
|
||||||
PromoCodeUsage: NewPromoCodeUsageClient(cfg),
|
PaymentOrder: NewPaymentOrderClient(cfg),
|
||||||
Proxy: NewProxyClient(cfg),
|
PaymentProviderInstance: NewPaymentProviderInstanceClient(cfg),
|
||||||
RedeemCode: NewRedeemCodeClient(cfg),
|
PendingAuthSession: NewPendingAuthSessionClient(cfg),
|
||||||
SecuritySecret: NewSecuritySecretClient(cfg),
|
PromoCode: NewPromoCodeClient(cfg),
|
||||||
Setting: NewSettingClient(cfg),
|
PromoCodeUsage: NewPromoCodeUsageClient(cfg),
|
||||||
SubscriptionPlan: NewSubscriptionPlanClient(cfg),
|
Proxy: NewProxyClient(cfg),
|
||||||
TLSFingerprintProfile: NewTLSFingerprintProfileClient(cfg),
|
RedeemCode: NewRedeemCodeClient(cfg),
|
||||||
UsageCleanupTask: NewUsageCleanupTaskClient(cfg),
|
SecuritySecret: NewSecuritySecretClient(cfg),
|
||||||
UsageLog: NewUsageLogClient(cfg),
|
Setting: NewSettingClient(cfg),
|
||||||
User: NewUserClient(cfg),
|
SubscriptionPlan: NewSubscriptionPlanClient(cfg),
|
||||||
UserAllowedGroup: NewUserAllowedGroupClient(cfg),
|
TLSFingerprintProfile: NewTLSFingerprintProfileClient(cfg),
|
||||||
UserAttributeDefinition: NewUserAttributeDefinitionClient(cfg),
|
UsageCleanupTask: NewUsageCleanupTaskClient(cfg),
|
||||||
UserAttributeValue: NewUserAttributeValueClient(cfg),
|
UsageLog: NewUsageLogClient(cfg),
|
||||||
UserSubscription: NewUserSubscriptionClient(cfg),
|
User: NewUserClient(cfg),
|
||||||
|
UserAllowedGroup: NewUserAllowedGroupClient(cfg),
|
||||||
|
UserAttributeDefinition: NewUserAttributeDefinitionClient(cfg),
|
||||||
|
UserAttributeValue: NewUserAttributeValueClient(cfg),
|
||||||
|
UserSubscription: NewUserSubscriptionClient(cfg),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,38 +314,42 @@ func (c *Client) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error)
|
|||||||
cfg := c.config
|
cfg := c.config
|
||||||
cfg.driver = &txDriver{tx: tx, drv: c.driver}
|
cfg.driver = &txDriver{tx: tx, drv: c.driver}
|
||||||
return &Tx{
|
return &Tx{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
config: cfg,
|
config: cfg,
|
||||||
APIKey: NewAPIKeyClient(cfg),
|
APIKey: NewAPIKeyClient(cfg),
|
||||||
Account: NewAccountClient(cfg),
|
Account: NewAccountClient(cfg),
|
||||||
AccountGroup: NewAccountGroupClient(cfg),
|
AccountGroup: NewAccountGroupClient(cfg),
|
||||||
Announcement: NewAnnouncementClient(cfg),
|
Announcement: NewAnnouncementClient(cfg),
|
||||||
AnnouncementRead: NewAnnouncementReadClient(cfg),
|
AnnouncementRead: NewAnnouncementReadClient(cfg),
|
||||||
AuthIdentity: NewAuthIdentityClient(cfg),
|
AuthIdentity: NewAuthIdentityClient(cfg),
|
||||||
AuthIdentityChannel: NewAuthIdentityChannelClient(cfg),
|
AuthIdentityChannel: NewAuthIdentityChannelClient(cfg),
|
||||||
ErrorPassthroughRule: NewErrorPassthroughRuleClient(cfg),
|
ChannelMonitor: NewChannelMonitorClient(cfg),
|
||||||
Group: NewGroupClient(cfg),
|
ChannelMonitorDailyRollup: NewChannelMonitorDailyRollupClient(cfg),
|
||||||
IdempotencyRecord: NewIdempotencyRecordClient(cfg),
|
ChannelMonitorHistory: NewChannelMonitorHistoryClient(cfg),
|
||||||
IdentityAdoptionDecision: NewIdentityAdoptionDecisionClient(cfg),
|
ChannelMonitorRequestTemplate: NewChannelMonitorRequestTemplateClient(cfg),
|
||||||
PaymentAuditLog: NewPaymentAuditLogClient(cfg),
|
ErrorPassthroughRule: NewErrorPassthroughRuleClient(cfg),
|
||||||
PaymentOrder: NewPaymentOrderClient(cfg),
|
Group: NewGroupClient(cfg),
|
||||||
PaymentProviderInstance: NewPaymentProviderInstanceClient(cfg),
|
IdempotencyRecord: NewIdempotencyRecordClient(cfg),
|
||||||
PendingAuthSession: NewPendingAuthSessionClient(cfg),
|
IdentityAdoptionDecision: NewIdentityAdoptionDecisionClient(cfg),
|
||||||
PromoCode: NewPromoCodeClient(cfg),
|
PaymentAuditLog: NewPaymentAuditLogClient(cfg),
|
||||||
PromoCodeUsage: NewPromoCodeUsageClient(cfg),
|
PaymentOrder: NewPaymentOrderClient(cfg),
|
||||||
Proxy: NewProxyClient(cfg),
|
PaymentProviderInstance: NewPaymentProviderInstanceClient(cfg),
|
||||||
RedeemCode: NewRedeemCodeClient(cfg),
|
PendingAuthSession: NewPendingAuthSessionClient(cfg),
|
||||||
SecuritySecret: NewSecuritySecretClient(cfg),
|
PromoCode: NewPromoCodeClient(cfg),
|
||||||
Setting: NewSettingClient(cfg),
|
PromoCodeUsage: NewPromoCodeUsageClient(cfg),
|
||||||
SubscriptionPlan: NewSubscriptionPlanClient(cfg),
|
Proxy: NewProxyClient(cfg),
|
||||||
TLSFingerprintProfile: NewTLSFingerprintProfileClient(cfg),
|
RedeemCode: NewRedeemCodeClient(cfg),
|
||||||
UsageCleanupTask: NewUsageCleanupTaskClient(cfg),
|
SecuritySecret: NewSecuritySecretClient(cfg),
|
||||||
UsageLog: NewUsageLogClient(cfg),
|
Setting: NewSettingClient(cfg),
|
||||||
User: NewUserClient(cfg),
|
SubscriptionPlan: NewSubscriptionPlanClient(cfg),
|
||||||
UserAllowedGroup: NewUserAllowedGroupClient(cfg),
|
TLSFingerprintProfile: NewTLSFingerprintProfileClient(cfg),
|
||||||
UserAttributeDefinition: NewUserAttributeDefinitionClient(cfg),
|
UsageCleanupTask: NewUsageCleanupTaskClient(cfg),
|
||||||
UserAttributeValue: NewUserAttributeValueClient(cfg),
|
UsageLog: NewUsageLogClient(cfg),
|
||||||
UserSubscription: NewUserSubscriptionClient(cfg),
|
User: NewUserClient(cfg),
|
||||||
|
UserAllowedGroup: NewUserAllowedGroupClient(cfg),
|
||||||
|
UserAttributeDefinition: NewUserAttributeDefinitionClient(cfg),
|
||||||
|
UserAttributeValue: NewUserAttributeValueClient(cfg),
|
||||||
|
UserSubscription: NewUserSubscriptionClient(cfg),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,7 +380,9 @@ func (c *Client) Close() error {
|
|||||||
func (c *Client) Use(hooks ...Hook) {
|
func (c *Client) Use(hooks ...Hook) {
|
||||||
for _, n := range []interface{ Use(...Hook) }{
|
for _, n := range []interface{ Use(...Hook) }{
|
||||||
c.APIKey, c.Account, c.AccountGroup, c.Announcement, c.AnnouncementRead,
|
c.APIKey, c.Account, c.AccountGroup, c.Announcement, c.AnnouncementRead,
|
||||||
c.AuthIdentity, c.AuthIdentityChannel, c.ErrorPassthroughRule, c.Group,
|
c.AuthIdentity, c.AuthIdentityChannel, c.ChannelMonitor,
|
||||||
|
c.ChannelMonitorDailyRollup, c.ChannelMonitorHistory,
|
||||||
|
c.ChannelMonitorRequestTemplate, c.ErrorPassthroughRule, c.Group,
|
||||||
c.IdempotencyRecord, c.IdentityAdoptionDecision, c.PaymentAuditLog,
|
c.IdempotencyRecord, c.IdentityAdoptionDecision, c.PaymentAuditLog,
|
||||||
c.PaymentOrder, c.PaymentProviderInstance, c.PendingAuthSession, c.PromoCode,
|
c.PaymentOrder, c.PaymentProviderInstance, c.PendingAuthSession, c.PromoCode,
|
||||||
c.PromoCodeUsage, c.Proxy, c.RedeemCode, c.SecuritySecret, c.Setting,
|
c.PromoCodeUsage, c.Proxy, c.RedeemCode, c.SecuritySecret, c.Setting,
|
||||||
@ -373,7 +399,9 @@ func (c *Client) Use(hooks ...Hook) {
|
|||||||
func (c *Client) Intercept(interceptors ...Interceptor) {
|
func (c *Client) Intercept(interceptors ...Interceptor) {
|
||||||
for _, n := range []interface{ Intercept(...Interceptor) }{
|
for _, n := range []interface{ Intercept(...Interceptor) }{
|
||||||
c.APIKey, c.Account, c.AccountGroup, c.Announcement, c.AnnouncementRead,
|
c.APIKey, c.Account, c.AccountGroup, c.Announcement, c.AnnouncementRead,
|
||||||
c.AuthIdentity, c.AuthIdentityChannel, c.ErrorPassthroughRule, c.Group,
|
c.AuthIdentity, c.AuthIdentityChannel, c.ChannelMonitor,
|
||||||
|
c.ChannelMonitorDailyRollup, c.ChannelMonitorHistory,
|
||||||
|
c.ChannelMonitorRequestTemplate, c.ErrorPassthroughRule, c.Group,
|
||||||
c.IdempotencyRecord, c.IdentityAdoptionDecision, c.PaymentAuditLog,
|
c.IdempotencyRecord, c.IdentityAdoptionDecision, c.PaymentAuditLog,
|
||||||
c.PaymentOrder, c.PaymentProviderInstance, c.PendingAuthSession, c.PromoCode,
|
c.PaymentOrder, c.PaymentProviderInstance, c.PendingAuthSession, c.PromoCode,
|
||||||
c.PromoCodeUsage, c.Proxy, c.RedeemCode, c.SecuritySecret, c.Setting,
|
c.PromoCodeUsage, c.Proxy, c.RedeemCode, c.SecuritySecret, c.Setting,
|
||||||
@ -402,6 +430,14 @@ func (c *Client) Mutate(ctx context.Context, m Mutation) (Value, error) {
|
|||||||
return c.AuthIdentity.mutate(ctx, m)
|
return c.AuthIdentity.mutate(ctx, m)
|
||||||
case *AuthIdentityChannelMutation:
|
case *AuthIdentityChannelMutation:
|
||||||
return c.AuthIdentityChannel.mutate(ctx, m)
|
return c.AuthIdentityChannel.mutate(ctx, m)
|
||||||
|
case *ChannelMonitorMutation:
|
||||||
|
return c.ChannelMonitor.mutate(ctx, m)
|
||||||
|
case *ChannelMonitorDailyRollupMutation:
|
||||||
|
return c.ChannelMonitorDailyRollup.mutate(ctx, m)
|
||||||
|
case *ChannelMonitorHistoryMutation:
|
||||||
|
return c.ChannelMonitorHistory.mutate(ctx, m)
|
||||||
|
case *ChannelMonitorRequestTemplateMutation:
|
||||||
|
return c.ChannelMonitorRequestTemplate.mutate(ctx, m)
|
||||||
case *ErrorPassthroughRuleMutation:
|
case *ErrorPassthroughRuleMutation:
|
||||||
return c.ErrorPassthroughRule.mutate(ctx, m)
|
return c.ErrorPassthroughRule.mutate(ctx, m)
|
||||||
case *GroupMutation:
|
case *GroupMutation:
|
||||||
@ -1595,6 +1631,634 @@ func (c *AuthIdentityChannelClient) mutate(ctx context.Context, m *AuthIdentityC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorClient is a client for the ChannelMonitor schema.
|
||||||
|
type ChannelMonitorClient struct {
|
||||||
|
config
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewChannelMonitorClient returns a client for the ChannelMonitor from the given config.
|
||||||
|
func NewChannelMonitorClient(c config) *ChannelMonitorClient {
|
||||||
|
return &ChannelMonitorClient{config: c}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use adds a list of mutation hooks to the hooks stack.
|
||||||
|
// A call to `Use(f, g, h)` equals to `channelmonitor.Hooks(f(g(h())))`.
|
||||||
|
func (c *ChannelMonitorClient) Use(hooks ...Hook) {
|
||||||
|
c.hooks.ChannelMonitor = append(c.hooks.ChannelMonitor, hooks...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Intercept adds a list of query interceptors to the interceptors stack.
|
||||||
|
// A call to `Intercept(f, g, h)` equals to `channelmonitor.Intercept(f(g(h())))`.
|
||||||
|
func (c *ChannelMonitorClient) Intercept(interceptors ...Interceptor) {
|
||||||
|
c.inters.ChannelMonitor = append(c.inters.ChannelMonitor, interceptors...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create returns a builder for creating a ChannelMonitor entity.
|
||||||
|
func (c *ChannelMonitorClient) Create() *ChannelMonitorCreate {
|
||||||
|
mutation := newChannelMonitorMutation(c.config, OpCreate)
|
||||||
|
return &ChannelMonitorCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateBulk returns a builder for creating a bulk of ChannelMonitor entities.
|
||||||
|
func (c *ChannelMonitorClient) CreateBulk(builders ...*ChannelMonitorCreate) *ChannelMonitorCreateBulk {
|
||||||
|
return &ChannelMonitorCreateBulk{config: c.config, builders: builders}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
|
||||||
|
// a builder and applies setFunc on it.
|
||||||
|
func (c *ChannelMonitorClient) MapCreateBulk(slice any, setFunc func(*ChannelMonitorCreate, int)) *ChannelMonitorCreateBulk {
|
||||||
|
rv := reflect.ValueOf(slice)
|
||||||
|
if rv.Kind() != reflect.Slice {
|
||||||
|
return &ChannelMonitorCreateBulk{err: fmt.Errorf("calling to ChannelMonitorClient.MapCreateBulk with wrong type %T, need slice", slice)}
|
||||||
|
}
|
||||||
|
builders := make([]*ChannelMonitorCreate, rv.Len())
|
||||||
|
for i := 0; i < rv.Len(); i++ {
|
||||||
|
builders[i] = c.Create()
|
||||||
|
setFunc(builders[i], i)
|
||||||
|
}
|
||||||
|
return &ChannelMonitorCreateBulk{config: c.config, builders: builders}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update returns an update builder for ChannelMonitor.
|
||||||
|
func (c *ChannelMonitorClient) Update() *ChannelMonitorUpdate {
|
||||||
|
mutation := newChannelMonitorMutation(c.config, OpUpdate)
|
||||||
|
return &ChannelMonitorUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateOne returns an update builder for the given entity.
|
||||||
|
func (c *ChannelMonitorClient) UpdateOne(_m *ChannelMonitor) *ChannelMonitorUpdateOne {
|
||||||
|
mutation := newChannelMonitorMutation(c.config, OpUpdateOne, withChannelMonitor(_m))
|
||||||
|
return &ChannelMonitorUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateOneID returns an update builder for the given id.
|
||||||
|
func (c *ChannelMonitorClient) UpdateOneID(id int64) *ChannelMonitorUpdateOne {
|
||||||
|
mutation := newChannelMonitorMutation(c.config, OpUpdateOne, withChannelMonitorID(id))
|
||||||
|
return &ChannelMonitorUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete returns a delete builder for ChannelMonitor.
|
||||||
|
func (c *ChannelMonitorClient) Delete() *ChannelMonitorDelete {
|
||||||
|
mutation := newChannelMonitorMutation(c.config, OpDelete)
|
||||||
|
return &ChannelMonitorDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteOne returns a builder for deleting the given entity.
|
||||||
|
func (c *ChannelMonitorClient) DeleteOne(_m *ChannelMonitor) *ChannelMonitorDeleteOne {
|
||||||
|
return c.DeleteOneID(_m.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteOneID returns a builder for deleting the given entity by its id.
|
||||||
|
func (c *ChannelMonitorClient) DeleteOneID(id int64) *ChannelMonitorDeleteOne {
|
||||||
|
builder := c.Delete().Where(channelmonitor.ID(id))
|
||||||
|
builder.mutation.id = &id
|
||||||
|
builder.mutation.op = OpDeleteOne
|
||||||
|
return &ChannelMonitorDeleteOne{builder}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query returns a query builder for ChannelMonitor.
|
||||||
|
func (c *ChannelMonitorClient) Query() *ChannelMonitorQuery {
|
||||||
|
return &ChannelMonitorQuery{
|
||||||
|
config: c.config,
|
||||||
|
ctx: &QueryContext{Type: TypeChannelMonitor},
|
||||||
|
inters: c.Interceptors(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get returns a ChannelMonitor entity by its id.
|
||||||
|
func (c *ChannelMonitorClient) Get(ctx context.Context, id int64) (*ChannelMonitor, error) {
|
||||||
|
return c.Query().Where(channelmonitor.ID(id)).Only(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetX is like Get, but panics if an error occurs.
|
||||||
|
func (c *ChannelMonitorClient) GetX(ctx context.Context, id int64) *ChannelMonitor {
|
||||||
|
obj, err := c.Get(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryHistory queries the history edge of a ChannelMonitor.
|
||||||
|
func (c *ChannelMonitorClient) QueryHistory(_m *ChannelMonitor) *ChannelMonitorHistoryQuery {
|
||||||
|
query := (&ChannelMonitorHistoryClient{config: c.config}).Query()
|
||||||
|
query.path = func(context.Context) (fromV *sql.Selector, _ error) {
|
||||||
|
id := _m.ID
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitor.Table, channelmonitor.FieldID, id),
|
||||||
|
sqlgraph.To(channelmonitorhistory.Table, channelmonitorhistory.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, false, channelmonitor.HistoryTable, channelmonitor.HistoryColumn),
|
||||||
|
)
|
||||||
|
fromV = sqlgraph.Neighbors(_m.driver.Dialect(), step)
|
||||||
|
return fromV, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryDailyRollups queries the daily_rollups edge of a ChannelMonitor.
|
||||||
|
func (c *ChannelMonitorClient) QueryDailyRollups(_m *ChannelMonitor) *ChannelMonitorDailyRollupQuery {
|
||||||
|
query := (&ChannelMonitorDailyRollupClient{config: c.config}).Query()
|
||||||
|
query.path = func(context.Context) (fromV *sql.Selector, _ error) {
|
||||||
|
id := _m.ID
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitor.Table, channelmonitor.FieldID, id),
|
||||||
|
sqlgraph.To(channelmonitordailyrollup.Table, channelmonitordailyrollup.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, false, channelmonitor.DailyRollupsTable, channelmonitor.DailyRollupsColumn),
|
||||||
|
)
|
||||||
|
fromV = sqlgraph.Neighbors(_m.driver.Dialect(), step)
|
||||||
|
return fromV, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryRequestTemplate queries the request_template edge of a ChannelMonitor.
|
||||||
|
func (c *ChannelMonitorClient) QueryRequestTemplate(_m *ChannelMonitor) *ChannelMonitorRequestTemplateQuery {
|
||||||
|
query := (&ChannelMonitorRequestTemplateClient{config: c.config}).Query()
|
||||||
|
query.path = func(context.Context) (fromV *sql.Selector, _ error) {
|
||||||
|
id := _m.ID
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitor.Table, channelmonitor.FieldID, id),
|
||||||
|
sqlgraph.To(channelmonitorrequesttemplate.Table, channelmonitorrequesttemplate.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, false, channelmonitor.RequestTemplateTable, channelmonitor.RequestTemplateColumn),
|
||||||
|
)
|
||||||
|
fromV = sqlgraph.Neighbors(_m.driver.Dialect(), step)
|
||||||
|
return fromV, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hooks returns the client hooks.
|
||||||
|
func (c *ChannelMonitorClient) Hooks() []Hook {
|
||||||
|
return c.hooks.ChannelMonitor
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interceptors returns the client interceptors.
|
||||||
|
func (c *ChannelMonitorClient) Interceptors() []Interceptor {
|
||||||
|
return c.inters.ChannelMonitor
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ChannelMonitorClient) mutate(ctx context.Context, m *ChannelMonitorMutation) (Value, error) {
|
||||||
|
switch m.Op() {
|
||||||
|
case OpCreate:
|
||||||
|
return (&ChannelMonitorCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpUpdate:
|
||||||
|
return (&ChannelMonitorUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpUpdateOne:
|
||||||
|
return (&ChannelMonitorUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpDelete, OpDeleteOne:
|
||||||
|
return (&ChannelMonitorDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("ent: unknown ChannelMonitor mutation op: %q", m.Op())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollupClient is a client for the ChannelMonitorDailyRollup schema.
|
||||||
|
type ChannelMonitorDailyRollupClient struct {
|
||||||
|
config
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewChannelMonitorDailyRollupClient returns a client for the ChannelMonitorDailyRollup from the given config.
|
||||||
|
func NewChannelMonitorDailyRollupClient(c config) *ChannelMonitorDailyRollupClient {
|
||||||
|
return &ChannelMonitorDailyRollupClient{config: c}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use adds a list of mutation hooks to the hooks stack.
|
||||||
|
// A call to `Use(f, g, h)` equals to `channelmonitordailyrollup.Hooks(f(g(h())))`.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) Use(hooks ...Hook) {
|
||||||
|
c.hooks.ChannelMonitorDailyRollup = append(c.hooks.ChannelMonitorDailyRollup, hooks...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Intercept adds a list of query interceptors to the interceptors stack.
|
||||||
|
// A call to `Intercept(f, g, h)` equals to `channelmonitordailyrollup.Intercept(f(g(h())))`.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) Intercept(interceptors ...Interceptor) {
|
||||||
|
c.inters.ChannelMonitorDailyRollup = append(c.inters.ChannelMonitorDailyRollup, interceptors...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create returns a builder for creating a ChannelMonitorDailyRollup entity.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) Create() *ChannelMonitorDailyRollupCreate {
|
||||||
|
mutation := newChannelMonitorDailyRollupMutation(c.config, OpCreate)
|
||||||
|
return &ChannelMonitorDailyRollupCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateBulk returns a builder for creating a bulk of ChannelMonitorDailyRollup entities.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) CreateBulk(builders ...*ChannelMonitorDailyRollupCreate) *ChannelMonitorDailyRollupCreateBulk {
|
||||||
|
return &ChannelMonitorDailyRollupCreateBulk{config: c.config, builders: builders}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
|
||||||
|
// a builder and applies setFunc on it.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) MapCreateBulk(slice any, setFunc func(*ChannelMonitorDailyRollupCreate, int)) *ChannelMonitorDailyRollupCreateBulk {
|
||||||
|
rv := reflect.ValueOf(slice)
|
||||||
|
if rv.Kind() != reflect.Slice {
|
||||||
|
return &ChannelMonitorDailyRollupCreateBulk{err: fmt.Errorf("calling to ChannelMonitorDailyRollupClient.MapCreateBulk with wrong type %T, need slice", slice)}
|
||||||
|
}
|
||||||
|
builders := make([]*ChannelMonitorDailyRollupCreate, rv.Len())
|
||||||
|
for i := 0; i < rv.Len(); i++ {
|
||||||
|
builders[i] = c.Create()
|
||||||
|
setFunc(builders[i], i)
|
||||||
|
}
|
||||||
|
return &ChannelMonitorDailyRollupCreateBulk{config: c.config, builders: builders}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update returns an update builder for ChannelMonitorDailyRollup.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) Update() *ChannelMonitorDailyRollupUpdate {
|
||||||
|
mutation := newChannelMonitorDailyRollupMutation(c.config, OpUpdate)
|
||||||
|
return &ChannelMonitorDailyRollupUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateOne returns an update builder for the given entity.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) UpdateOne(_m *ChannelMonitorDailyRollup) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
mutation := newChannelMonitorDailyRollupMutation(c.config, OpUpdateOne, withChannelMonitorDailyRollup(_m))
|
||||||
|
return &ChannelMonitorDailyRollupUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateOneID returns an update builder for the given id.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) UpdateOneID(id int64) *ChannelMonitorDailyRollupUpdateOne {
|
||||||
|
mutation := newChannelMonitorDailyRollupMutation(c.config, OpUpdateOne, withChannelMonitorDailyRollupID(id))
|
||||||
|
return &ChannelMonitorDailyRollupUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete returns a delete builder for ChannelMonitorDailyRollup.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) Delete() *ChannelMonitorDailyRollupDelete {
|
||||||
|
mutation := newChannelMonitorDailyRollupMutation(c.config, OpDelete)
|
||||||
|
return &ChannelMonitorDailyRollupDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteOne returns a builder for deleting the given entity.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) DeleteOne(_m *ChannelMonitorDailyRollup) *ChannelMonitorDailyRollupDeleteOne {
|
||||||
|
return c.DeleteOneID(_m.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteOneID returns a builder for deleting the given entity by its id.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) DeleteOneID(id int64) *ChannelMonitorDailyRollupDeleteOne {
|
||||||
|
builder := c.Delete().Where(channelmonitordailyrollup.ID(id))
|
||||||
|
builder.mutation.id = &id
|
||||||
|
builder.mutation.op = OpDeleteOne
|
||||||
|
return &ChannelMonitorDailyRollupDeleteOne{builder}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query returns a query builder for ChannelMonitorDailyRollup.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) Query() *ChannelMonitorDailyRollupQuery {
|
||||||
|
return &ChannelMonitorDailyRollupQuery{
|
||||||
|
config: c.config,
|
||||||
|
ctx: &QueryContext{Type: TypeChannelMonitorDailyRollup},
|
||||||
|
inters: c.Interceptors(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get returns a ChannelMonitorDailyRollup entity by its id.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) Get(ctx context.Context, id int64) (*ChannelMonitorDailyRollup, error) {
|
||||||
|
return c.Query().Where(channelmonitordailyrollup.ID(id)).Only(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetX is like Get, but panics if an error occurs.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) GetX(ctx context.Context, id int64) *ChannelMonitorDailyRollup {
|
||||||
|
obj, err := c.Get(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMonitor queries the monitor edge of a ChannelMonitorDailyRollup.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) QueryMonitor(_m *ChannelMonitorDailyRollup) *ChannelMonitorQuery {
|
||||||
|
query := (&ChannelMonitorClient{config: c.config}).Query()
|
||||||
|
query.path = func(context.Context) (fromV *sql.Selector, _ error) {
|
||||||
|
id := _m.ID
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitordailyrollup.Table, channelmonitordailyrollup.FieldID, id),
|
||||||
|
sqlgraph.To(channelmonitor.Table, channelmonitor.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, true, channelmonitordailyrollup.MonitorTable, channelmonitordailyrollup.MonitorColumn),
|
||||||
|
)
|
||||||
|
fromV = sqlgraph.Neighbors(_m.driver.Dialect(), step)
|
||||||
|
return fromV, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hooks returns the client hooks.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) Hooks() []Hook {
|
||||||
|
return c.hooks.ChannelMonitorDailyRollup
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interceptors returns the client interceptors.
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) Interceptors() []Interceptor {
|
||||||
|
return c.inters.ChannelMonitorDailyRollup
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ChannelMonitorDailyRollupClient) mutate(ctx context.Context, m *ChannelMonitorDailyRollupMutation) (Value, error) {
|
||||||
|
switch m.Op() {
|
||||||
|
case OpCreate:
|
||||||
|
return (&ChannelMonitorDailyRollupCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpUpdate:
|
||||||
|
return (&ChannelMonitorDailyRollupUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpUpdateOne:
|
||||||
|
return (&ChannelMonitorDailyRollupUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpDelete, OpDeleteOne:
|
||||||
|
return (&ChannelMonitorDailyRollupDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("ent: unknown ChannelMonitorDailyRollup mutation op: %q", m.Op())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorHistoryClient is a client for the ChannelMonitorHistory schema.
|
||||||
|
type ChannelMonitorHistoryClient struct {
|
||||||
|
config
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewChannelMonitorHistoryClient returns a client for the ChannelMonitorHistory from the given config.
|
||||||
|
func NewChannelMonitorHistoryClient(c config) *ChannelMonitorHistoryClient {
|
||||||
|
return &ChannelMonitorHistoryClient{config: c}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use adds a list of mutation hooks to the hooks stack.
|
||||||
|
// A call to `Use(f, g, h)` equals to `channelmonitorhistory.Hooks(f(g(h())))`.
|
||||||
|
func (c *ChannelMonitorHistoryClient) Use(hooks ...Hook) {
|
||||||
|
c.hooks.ChannelMonitorHistory = append(c.hooks.ChannelMonitorHistory, hooks...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Intercept adds a list of query interceptors to the interceptors stack.
|
||||||
|
// A call to `Intercept(f, g, h)` equals to `channelmonitorhistory.Intercept(f(g(h())))`.
|
||||||
|
func (c *ChannelMonitorHistoryClient) Intercept(interceptors ...Interceptor) {
|
||||||
|
c.inters.ChannelMonitorHistory = append(c.inters.ChannelMonitorHistory, interceptors...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create returns a builder for creating a ChannelMonitorHistory entity.
|
||||||
|
func (c *ChannelMonitorHistoryClient) Create() *ChannelMonitorHistoryCreate {
|
||||||
|
mutation := newChannelMonitorHistoryMutation(c.config, OpCreate)
|
||||||
|
return &ChannelMonitorHistoryCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateBulk returns a builder for creating a bulk of ChannelMonitorHistory entities.
|
||||||
|
func (c *ChannelMonitorHistoryClient) CreateBulk(builders ...*ChannelMonitorHistoryCreate) *ChannelMonitorHistoryCreateBulk {
|
||||||
|
return &ChannelMonitorHistoryCreateBulk{config: c.config, builders: builders}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
|
||||||
|
// a builder and applies setFunc on it.
|
||||||
|
func (c *ChannelMonitorHistoryClient) MapCreateBulk(slice any, setFunc func(*ChannelMonitorHistoryCreate, int)) *ChannelMonitorHistoryCreateBulk {
|
||||||
|
rv := reflect.ValueOf(slice)
|
||||||
|
if rv.Kind() != reflect.Slice {
|
||||||
|
return &ChannelMonitorHistoryCreateBulk{err: fmt.Errorf("calling to ChannelMonitorHistoryClient.MapCreateBulk with wrong type %T, need slice", slice)}
|
||||||
|
}
|
||||||
|
builders := make([]*ChannelMonitorHistoryCreate, rv.Len())
|
||||||
|
for i := 0; i < rv.Len(); i++ {
|
||||||
|
builders[i] = c.Create()
|
||||||
|
setFunc(builders[i], i)
|
||||||
|
}
|
||||||
|
return &ChannelMonitorHistoryCreateBulk{config: c.config, builders: builders}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update returns an update builder for ChannelMonitorHistory.
|
||||||
|
func (c *ChannelMonitorHistoryClient) Update() *ChannelMonitorHistoryUpdate {
|
||||||
|
mutation := newChannelMonitorHistoryMutation(c.config, OpUpdate)
|
||||||
|
return &ChannelMonitorHistoryUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateOne returns an update builder for the given entity.
|
||||||
|
func (c *ChannelMonitorHistoryClient) UpdateOne(_m *ChannelMonitorHistory) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
mutation := newChannelMonitorHistoryMutation(c.config, OpUpdateOne, withChannelMonitorHistory(_m))
|
||||||
|
return &ChannelMonitorHistoryUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateOneID returns an update builder for the given id.
|
||||||
|
func (c *ChannelMonitorHistoryClient) UpdateOneID(id int64) *ChannelMonitorHistoryUpdateOne {
|
||||||
|
mutation := newChannelMonitorHistoryMutation(c.config, OpUpdateOne, withChannelMonitorHistoryID(id))
|
||||||
|
return &ChannelMonitorHistoryUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete returns a delete builder for ChannelMonitorHistory.
|
||||||
|
func (c *ChannelMonitorHistoryClient) Delete() *ChannelMonitorHistoryDelete {
|
||||||
|
mutation := newChannelMonitorHistoryMutation(c.config, OpDelete)
|
||||||
|
return &ChannelMonitorHistoryDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteOne returns a builder for deleting the given entity.
|
||||||
|
func (c *ChannelMonitorHistoryClient) DeleteOne(_m *ChannelMonitorHistory) *ChannelMonitorHistoryDeleteOne {
|
||||||
|
return c.DeleteOneID(_m.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteOneID returns a builder for deleting the given entity by its id.
|
||||||
|
func (c *ChannelMonitorHistoryClient) DeleteOneID(id int64) *ChannelMonitorHistoryDeleteOne {
|
||||||
|
builder := c.Delete().Where(channelmonitorhistory.ID(id))
|
||||||
|
builder.mutation.id = &id
|
||||||
|
builder.mutation.op = OpDeleteOne
|
||||||
|
return &ChannelMonitorHistoryDeleteOne{builder}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query returns a query builder for ChannelMonitorHistory.
|
||||||
|
func (c *ChannelMonitorHistoryClient) Query() *ChannelMonitorHistoryQuery {
|
||||||
|
return &ChannelMonitorHistoryQuery{
|
||||||
|
config: c.config,
|
||||||
|
ctx: &QueryContext{Type: TypeChannelMonitorHistory},
|
||||||
|
inters: c.Interceptors(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get returns a ChannelMonitorHistory entity by its id.
|
||||||
|
func (c *ChannelMonitorHistoryClient) Get(ctx context.Context, id int64) (*ChannelMonitorHistory, error) {
|
||||||
|
return c.Query().Where(channelmonitorhistory.ID(id)).Only(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetX is like Get, but panics if an error occurs.
|
||||||
|
func (c *ChannelMonitorHistoryClient) GetX(ctx context.Context, id int64) *ChannelMonitorHistory {
|
||||||
|
obj, err := c.Get(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMonitor queries the monitor edge of a ChannelMonitorHistory.
|
||||||
|
func (c *ChannelMonitorHistoryClient) QueryMonitor(_m *ChannelMonitorHistory) *ChannelMonitorQuery {
|
||||||
|
query := (&ChannelMonitorClient{config: c.config}).Query()
|
||||||
|
query.path = func(context.Context) (fromV *sql.Selector, _ error) {
|
||||||
|
id := _m.ID
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitorhistory.Table, channelmonitorhistory.FieldID, id),
|
||||||
|
sqlgraph.To(channelmonitor.Table, channelmonitor.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.M2O, true, channelmonitorhistory.MonitorTable, channelmonitorhistory.MonitorColumn),
|
||||||
|
)
|
||||||
|
fromV = sqlgraph.Neighbors(_m.driver.Dialect(), step)
|
||||||
|
return fromV, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hooks returns the client hooks.
|
||||||
|
func (c *ChannelMonitorHistoryClient) Hooks() []Hook {
|
||||||
|
return c.hooks.ChannelMonitorHistory
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interceptors returns the client interceptors.
|
||||||
|
func (c *ChannelMonitorHistoryClient) Interceptors() []Interceptor {
|
||||||
|
return c.inters.ChannelMonitorHistory
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ChannelMonitorHistoryClient) mutate(ctx context.Context, m *ChannelMonitorHistoryMutation) (Value, error) {
|
||||||
|
switch m.Op() {
|
||||||
|
case OpCreate:
|
||||||
|
return (&ChannelMonitorHistoryCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpUpdate:
|
||||||
|
return (&ChannelMonitorHistoryUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpUpdateOne:
|
||||||
|
return (&ChannelMonitorHistoryUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpDelete, OpDeleteOne:
|
||||||
|
return (&ChannelMonitorHistoryDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("ent: unknown ChannelMonitorHistory mutation op: %q", m.Op())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateClient is a client for the ChannelMonitorRequestTemplate schema.
|
||||||
|
type ChannelMonitorRequestTemplateClient struct {
|
||||||
|
config
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewChannelMonitorRequestTemplateClient returns a client for the ChannelMonitorRequestTemplate from the given config.
|
||||||
|
func NewChannelMonitorRequestTemplateClient(c config) *ChannelMonitorRequestTemplateClient {
|
||||||
|
return &ChannelMonitorRequestTemplateClient{config: c}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use adds a list of mutation hooks to the hooks stack.
|
||||||
|
// A call to `Use(f, g, h)` equals to `channelmonitorrequesttemplate.Hooks(f(g(h())))`.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) Use(hooks ...Hook) {
|
||||||
|
c.hooks.ChannelMonitorRequestTemplate = append(c.hooks.ChannelMonitorRequestTemplate, hooks...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Intercept adds a list of query interceptors to the interceptors stack.
|
||||||
|
// A call to `Intercept(f, g, h)` equals to `channelmonitorrequesttemplate.Intercept(f(g(h())))`.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) Intercept(interceptors ...Interceptor) {
|
||||||
|
c.inters.ChannelMonitorRequestTemplate = append(c.inters.ChannelMonitorRequestTemplate, interceptors...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create returns a builder for creating a ChannelMonitorRequestTemplate entity.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) Create() *ChannelMonitorRequestTemplateCreate {
|
||||||
|
mutation := newChannelMonitorRequestTemplateMutation(c.config, OpCreate)
|
||||||
|
return &ChannelMonitorRequestTemplateCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateBulk returns a builder for creating a bulk of ChannelMonitorRequestTemplate entities.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) CreateBulk(builders ...*ChannelMonitorRequestTemplateCreate) *ChannelMonitorRequestTemplateCreateBulk {
|
||||||
|
return &ChannelMonitorRequestTemplateCreateBulk{config: c.config, builders: builders}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
|
||||||
|
// a builder and applies setFunc on it.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) MapCreateBulk(slice any, setFunc func(*ChannelMonitorRequestTemplateCreate, int)) *ChannelMonitorRequestTemplateCreateBulk {
|
||||||
|
rv := reflect.ValueOf(slice)
|
||||||
|
if rv.Kind() != reflect.Slice {
|
||||||
|
return &ChannelMonitorRequestTemplateCreateBulk{err: fmt.Errorf("calling to ChannelMonitorRequestTemplateClient.MapCreateBulk with wrong type %T, need slice", slice)}
|
||||||
|
}
|
||||||
|
builders := make([]*ChannelMonitorRequestTemplateCreate, rv.Len())
|
||||||
|
for i := 0; i < rv.Len(); i++ {
|
||||||
|
builders[i] = c.Create()
|
||||||
|
setFunc(builders[i], i)
|
||||||
|
}
|
||||||
|
return &ChannelMonitorRequestTemplateCreateBulk{config: c.config, builders: builders}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update returns an update builder for ChannelMonitorRequestTemplate.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) Update() *ChannelMonitorRequestTemplateUpdate {
|
||||||
|
mutation := newChannelMonitorRequestTemplateMutation(c.config, OpUpdate)
|
||||||
|
return &ChannelMonitorRequestTemplateUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateOne returns an update builder for the given entity.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) UpdateOne(_m *ChannelMonitorRequestTemplate) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
mutation := newChannelMonitorRequestTemplateMutation(c.config, OpUpdateOne, withChannelMonitorRequestTemplate(_m))
|
||||||
|
return &ChannelMonitorRequestTemplateUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateOneID returns an update builder for the given id.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) UpdateOneID(id int64) *ChannelMonitorRequestTemplateUpdateOne {
|
||||||
|
mutation := newChannelMonitorRequestTemplateMutation(c.config, OpUpdateOne, withChannelMonitorRequestTemplateID(id))
|
||||||
|
return &ChannelMonitorRequestTemplateUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete returns a delete builder for ChannelMonitorRequestTemplate.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) Delete() *ChannelMonitorRequestTemplateDelete {
|
||||||
|
mutation := newChannelMonitorRequestTemplateMutation(c.config, OpDelete)
|
||||||
|
return &ChannelMonitorRequestTemplateDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteOne returns a builder for deleting the given entity.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) DeleteOne(_m *ChannelMonitorRequestTemplate) *ChannelMonitorRequestTemplateDeleteOne {
|
||||||
|
return c.DeleteOneID(_m.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteOneID returns a builder for deleting the given entity by its id.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) DeleteOneID(id int64) *ChannelMonitorRequestTemplateDeleteOne {
|
||||||
|
builder := c.Delete().Where(channelmonitorrequesttemplate.ID(id))
|
||||||
|
builder.mutation.id = &id
|
||||||
|
builder.mutation.op = OpDeleteOne
|
||||||
|
return &ChannelMonitorRequestTemplateDeleteOne{builder}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query returns a query builder for ChannelMonitorRequestTemplate.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) Query() *ChannelMonitorRequestTemplateQuery {
|
||||||
|
return &ChannelMonitorRequestTemplateQuery{
|
||||||
|
config: c.config,
|
||||||
|
ctx: &QueryContext{Type: TypeChannelMonitorRequestTemplate},
|
||||||
|
inters: c.Interceptors(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get returns a ChannelMonitorRequestTemplate entity by its id.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) Get(ctx context.Context, id int64) (*ChannelMonitorRequestTemplate, error) {
|
||||||
|
return c.Query().Where(channelmonitorrequesttemplate.ID(id)).Only(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetX is like Get, but panics if an error occurs.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) GetX(ctx context.Context, id int64) *ChannelMonitorRequestTemplate {
|
||||||
|
obj, err := c.Get(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMonitors queries the monitors edge of a ChannelMonitorRequestTemplate.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) QueryMonitors(_m *ChannelMonitorRequestTemplate) *ChannelMonitorQuery {
|
||||||
|
query := (&ChannelMonitorClient{config: c.config}).Query()
|
||||||
|
query.path = func(context.Context) (fromV *sql.Selector, _ error) {
|
||||||
|
id := _m.ID
|
||||||
|
step := sqlgraph.NewStep(
|
||||||
|
sqlgraph.From(channelmonitorrequesttemplate.Table, channelmonitorrequesttemplate.FieldID, id),
|
||||||
|
sqlgraph.To(channelmonitor.Table, channelmonitor.FieldID),
|
||||||
|
sqlgraph.Edge(sqlgraph.O2M, true, channelmonitorrequesttemplate.MonitorsTable, channelmonitorrequesttemplate.MonitorsColumn),
|
||||||
|
)
|
||||||
|
fromV = sqlgraph.Neighbors(_m.driver.Dialect(), step)
|
||||||
|
return fromV, nil
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hooks returns the client hooks.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) Hooks() []Hook {
|
||||||
|
return c.hooks.ChannelMonitorRequestTemplate
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interceptors returns the client interceptors.
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) Interceptors() []Interceptor {
|
||||||
|
return c.inters.ChannelMonitorRequestTemplate
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ChannelMonitorRequestTemplateClient) mutate(ctx context.Context, m *ChannelMonitorRequestTemplateMutation) (Value, error) {
|
||||||
|
switch m.Op() {
|
||||||
|
case OpCreate:
|
||||||
|
return (&ChannelMonitorRequestTemplateCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpUpdate:
|
||||||
|
return (&ChannelMonitorRequestTemplateUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpUpdateOne:
|
||||||
|
return (&ChannelMonitorRequestTemplateUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
|
||||||
|
case OpDelete, OpDeleteOne:
|
||||||
|
return (&ChannelMonitorRequestTemplateDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("ent: unknown ChannelMonitorRequestTemplate mutation op: %q", m.Op())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ErrorPassthroughRuleClient is a client for the ErrorPassthroughRule schema.
|
// ErrorPassthroughRuleClient is a client for the ErrorPassthroughRule schema.
|
||||||
type ErrorPassthroughRuleClient struct {
|
type ErrorPassthroughRuleClient struct {
|
||||||
config
|
config
|
||||||
@ -5355,21 +6019,23 @@ func (c *UserSubscriptionClient) mutate(ctx context.Context, m *UserSubscription
|
|||||||
type (
|
type (
|
||||||
hooks struct {
|
hooks struct {
|
||||||
APIKey, Account, AccountGroup, Announcement, AnnouncementRead, AuthIdentity,
|
APIKey, Account, AccountGroup, Announcement, AnnouncementRead, AuthIdentity,
|
||||||
AuthIdentityChannel, ErrorPassthroughRule, Group, IdempotencyRecord,
|
AuthIdentityChannel, ChannelMonitor, ChannelMonitorDailyRollup,
|
||||||
IdentityAdoptionDecision, PaymentAuditLog, PaymentOrder,
|
ChannelMonitorHistory, ChannelMonitorRequestTemplate, ErrorPassthroughRule,
|
||||||
PaymentProviderInstance, PendingAuthSession, PromoCode, PromoCodeUsage, Proxy,
|
Group, IdempotencyRecord, IdentityAdoptionDecision, PaymentAuditLog,
|
||||||
RedeemCode, SecuritySecret, Setting, SubscriptionPlan, TLSFingerprintProfile,
|
PaymentOrder, PaymentProviderInstance, PendingAuthSession, PromoCode,
|
||||||
UsageCleanupTask, UsageLog, User, UserAllowedGroup, UserAttributeDefinition,
|
PromoCodeUsage, Proxy, RedeemCode, SecuritySecret, Setting, SubscriptionPlan,
|
||||||
UserAttributeValue, UserSubscription []ent.Hook
|
TLSFingerprintProfile, UsageCleanupTask, UsageLog, User, UserAllowedGroup,
|
||||||
|
UserAttributeDefinition, UserAttributeValue, UserSubscription []ent.Hook
|
||||||
}
|
}
|
||||||
inters struct {
|
inters struct {
|
||||||
APIKey, Account, AccountGroup, Announcement, AnnouncementRead, AuthIdentity,
|
APIKey, Account, AccountGroup, Announcement, AnnouncementRead, AuthIdentity,
|
||||||
AuthIdentityChannel, ErrorPassthroughRule, Group, IdempotencyRecord,
|
AuthIdentityChannel, ChannelMonitor, ChannelMonitorDailyRollup,
|
||||||
IdentityAdoptionDecision, PaymentAuditLog, PaymentOrder,
|
ChannelMonitorHistory, ChannelMonitorRequestTemplate, ErrorPassthroughRule,
|
||||||
PaymentProviderInstance, PendingAuthSession, PromoCode, PromoCodeUsage, Proxy,
|
Group, IdempotencyRecord, IdentityAdoptionDecision, PaymentAuditLog,
|
||||||
RedeemCode, SecuritySecret, Setting, SubscriptionPlan, TLSFingerprintProfile,
|
PaymentOrder, PaymentProviderInstance, PendingAuthSession, PromoCode,
|
||||||
UsageCleanupTask, UsageLog, User, UserAllowedGroup, UserAttributeDefinition,
|
PromoCodeUsage, Proxy, RedeemCode, SecuritySecret, Setting, SubscriptionPlan,
|
||||||
UserAttributeValue, UserSubscription []ent.Interceptor
|
TLSFingerprintProfile, UsageCleanupTask, UsageLog, User, UserAllowedGroup,
|
||||||
|
UserAttributeDefinition, UserAttributeValue, UserSubscription []ent.Interceptor
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,10 @@ import (
|
|||||||
"github.com/Wei-Shaw/sub2api/ent/apikey"
|
"github.com/Wei-Shaw/sub2api/ent/apikey"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/authidentity"
|
"github.com/Wei-Shaw/sub2api/ent/authidentity"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/authidentitychannel"
|
"github.com/Wei-Shaw/sub2api/ent/authidentitychannel"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitordailyrollup"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorhistory"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/errorpassthroughrule"
|
"github.com/Wei-Shaw/sub2api/ent/errorpassthroughrule"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/group"
|
"github.com/Wei-Shaw/sub2api/ent/group"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/idempotencyrecord"
|
"github.com/Wei-Shaw/sub2api/ent/idempotencyrecord"
|
||||||
@ -102,36 +106,40 @@ var (
|
|||||||
func checkColumn(t, c string) error {
|
func checkColumn(t, c string) error {
|
||||||
initCheck.Do(func() {
|
initCheck.Do(func() {
|
||||||
columnCheck = sql.NewColumnCheck(map[string]func(string) bool{
|
columnCheck = sql.NewColumnCheck(map[string]func(string) bool{
|
||||||
apikey.Table: apikey.ValidColumn,
|
apikey.Table: apikey.ValidColumn,
|
||||||
account.Table: account.ValidColumn,
|
account.Table: account.ValidColumn,
|
||||||
accountgroup.Table: accountgroup.ValidColumn,
|
accountgroup.Table: accountgroup.ValidColumn,
|
||||||
announcement.Table: announcement.ValidColumn,
|
announcement.Table: announcement.ValidColumn,
|
||||||
announcementread.Table: announcementread.ValidColumn,
|
announcementread.Table: announcementread.ValidColumn,
|
||||||
authidentity.Table: authidentity.ValidColumn,
|
authidentity.Table: authidentity.ValidColumn,
|
||||||
authidentitychannel.Table: authidentitychannel.ValidColumn,
|
authidentitychannel.Table: authidentitychannel.ValidColumn,
|
||||||
errorpassthroughrule.Table: errorpassthroughrule.ValidColumn,
|
channelmonitor.Table: channelmonitor.ValidColumn,
|
||||||
group.Table: group.ValidColumn,
|
channelmonitordailyrollup.Table: channelmonitordailyrollup.ValidColumn,
|
||||||
idempotencyrecord.Table: idempotencyrecord.ValidColumn,
|
channelmonitorhistory.Table: channelmonitorhistory.ValidColumn,
|
||||||
identityadoptiondecision.Table: identityadoptiondecision.ValidColumn,
|
channelmonitorrequesttemplate.Table: channelmonitorrequesttemplate.ValidColumn,
|
||||||
paymentauditlog.Table: paymentauditlog.ValidColumn,
|
errorpassthroughrule.Table: errorpassthroughrule.ValidColumn,
|
||||||
paymentorder.Table: paymentorder.ValidColumn,
|
group.Table: group.ValidColumn,
|
||||||
paymentproviderinstance.Table: paymentproviderinstance.ValidColumn,
|
idempotencyrecord.Table: idempotencyrecord.ValidColumn,
|
||||||
pendingauthsession.Table: pendingauthsession.ValidColumn,
|
identityadoptiondecision.Table: identityadoptiondecision.ValidColumn,
|
||||||
promocode.Table: promocode.ValidColumn,
|
paymentauditlog.Table: paymentauditlog.ValidColumn,
|
||||||
promocodeusage.Table: promocodeusage.ValidColumn,
|
paymentorder.Table: paymentorder.ValidColumn,
|
||||||
proxy.Table: proxy.ValidColumn,
|
paymentproviderinstance.Table: paymentproviderinstance.ValidColumn,
|
||||||
redeemcode.Table: redeemcode.ValidColumn,
|
pendingauthsession.Table: pendingauthsession.ValidColumn,
|
||||||
securitysecret.Table: securitysecret.ValidColumn,
|
promocode.Table: promocode.ValidColumn,
|
||||||
setting.Table: setting.ValidColumn,
|
promocodeusage.Table: promocodeusage.ValidColumn,
|
||||||
subscriptionplan.Table: subscriptionplan.ValidColumn,
|
proxy.Table: proxy.ValidColumn,
|
||||||
tlsfingerprintprofile.Table: tlsfingerprintprofile.ValidColumn,
|
redeemcode.Table: redeemcode.ValidColumn,
|
||||||
usagecleanuptask.Table: usagecleanuptask.ValidColumn,
|
securitysecret.Table: securitysecret.ValidColumn,
|
||||||
usagelog.Table: usagelog.ValidColumn,
|
setting.Table: setting.ValidColumn,
|
||||||
user.Table: user.ValidColumn,
|
subscriptionplan.Table: subscriptionplan.ValidColumn,
|
||||||
userallowedgroup.Table: userallowedgroup.ValidColumn,
|
tlsfingerprintprofile.Table: tlsfingerprintprofile.ValidColumn,
|
||||||
userattributedefinition.Table: userattributedefinition.ValidColumn,
|
usagecleanuptask.Table: usagecleanuptask.ValidColumn,
|
||||||
userattributevalue.Table: userattributevalue.ValidColumn,
|
usagelog.Table: usagelog.ValidColumn,
|
||||||
usersubscription.Table: usersubscription.ValidColumn,
|
user.Table: user.ValidColumn,
|
||||||
|
userallowedgroup.Table: userallowedgroup.ValidColumn,
|
||||||
|
userattributedefinition.Table: userattributedefinition.ValidColumn,
|
||||||
|
userattributevalue.Table: userattributevalue.ValidColumn,
|
||||||
|
usersubscription.Table: usersubscription.ValidColumn,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
return columnCheck(t, c)
|
return columnCheck(t, c)
|
||||||
|
|||||||
@ -79,6 +79,8 @@ type Group struct {
|
|||||||
DefaultMappedModel string `json:"default_mapped_model,omitempty"`
|
DefaultMappedModel string `json:"default_mapped_model,omitempty"`
|
||||||
// OpenAI Messages 调度模型配置:按 Claude 系列/精确模型映射到目标 GPT 模型
|
// OpenAI Messages 调度模型配置:按 Claude 系列/精确模型映射到目标 GPT 模型
|
||||||
MessagesDispatchModelConfig domain.OpenAIMessagesDispatchModelConfig `json:"messages_dispatch_model_config,omitempty"`
|
MessagesDispatchModelConfig domain.OpenAIMessagesDispatchModelConfig `json:"messages_dispatch_model_config,omitempty"`
|
||||||
|
// 分组 RPM 上限,0 表示不限制;设置后接管该分组用户的限流
|
||||||
|
RpmLimit int `json:"rpm_limit,omitempty"`
|
||||||
// Edges holds the relations/edges for other nodes in the graph.
|
// Edges holds the relations/edges for other nodes in the graph.
|
||||||
// The values are being populated by the GroupQuery when eager-loading is set.
|
// The values are being populated by the GroupQuery when eager-loading is set.
|
||||||
Edges GroupEdges `json:"edges"`
|
Edges GroupEdges `json:"edges"`
|
||||||
@ -191,7 +193,7 @@ func (*Group) scanValues(columns []string) ([]any, error) {
|
|||||||
values[i] = new(sql.NullBool)
|
values[i] = new(sql.NullBool)
|
||||||
case group.FieldRateMultiplier, group.FieldDailyLimitUsd, group.FieldWeeklyLimitUsd, group.FieldMonthlyLimitUsd, group.FieldImagePrice1k, group.FieldImagePrice2k, group.FieldImagePrice4k:
|
case group.FieldRateMultiplier, group.FieldDailyLimitUsd, group.FieldWeeklyLimitUsd, group.FieldMonthlyLimitUsd, group.FieldImagePrice1k, group.FieldImagePrice2k, group.FieldImagePrice4k:
|
||||||
values[i] = new(sql.NullFloat64)
|
values[i] = new(sql.NullFloat64)
|
||||||
case group.FieldID, group.FieldDefaultValidityDays, group.FieldFallbackGroupID, group.FieldFallbackGroupIDOnInvalidRequest, group.FieldSortOrder:
|
case group.FieldID, group.FieldDefaultValidityDays, group.FieldFallbackGroupID, group.FieldFallbackGroupIDOnInvalidRequest, group.FieldSortOrder, group.FieldRpmLimit:
|
||||||
values[i] = new(sql.NullInt64)
|
values[i] = new(sql.NullInt64)
|
||||||
case group.FieldName, group.FieldDescription, group.FieldStatus, group.FieldPlatform, group.FieldSubscriptionType, group.FieldDefaultMappedModel:
|
case group.FieldName, group.FieldDescription, group.FieldStatus, group.FieldPlatform, group.FieldSubscriptionType, group.FieldDefaultMappedModel:
|
||||||
values[i] = new(sql.NullString)
|
values[i] = new(sql.NullString)
|
||||||
@ -414,6 +416,12 @@ func (_m *Group) assignValues(columns []string, values []any) error {
|
|||||||
return fmt.Errorf("unmarshal field messages_dispatch_model_config: %w", err)
|
return fmt.Errorf("unmarshal field messages_dispatch_model_config: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case group.FieldRpmLimit:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field rpm_limit", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.RpmLimit = int(value.Int64)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
_m.selectValues.Set(columns[i], values[i])
|
_m.selectValues.Set(columns[i], values[i])
|
||||||
}
|
}
|
||||||
@ -599,6 +607,9 @@ func (_m *Group) String() string {
|
|||||||
builder.WriteString(", ")
|
builder.WriteString(", ")
|
||||||
builder.WriteString("messages_dispatch_model_config=")
|
builder.WriteString("messages_dispatch_model_config=")
|
||||||
builder.WriteString(fmt.Sprintf("%v", _m.MessagesDispatchModelConfig))
|
builder.WriteString(fmt.Sprintf("%v", _m.MessagesDispatchModelConfig))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("rpm_limit=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.RpmLimit))
|
||||||
builder.WriteByte(')')
|
builder.WriteByte(')')
|
||||||
return builder.String()
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -76,6 +76,8 @@ const (
|
|||||||
FieldDefaultMappedModel = "default_mapped_model"
|
FieldDefaultMappedModel = "default_mapped_model"
|
||||||
// FieldMessagesDispatchModelConfig holds the string denoting the messages_dispatch_model_config field in the database.
|
// FieldMessagesDispatchModelConfig holds the string denoting the messages_dispatch_model_config field in the database.
|
||||||
FieldMessagesDispatchModelConfig = "messages_dispatch_model_config"
|
FieldMessagesDispatchModelConfig = "messages_dispatch_model_config"
|
||||||
|
// FieldRpmLimit holds the string denoting the rpm_limit field in the database.
|
||||||
|
FieldRpmLimit = "rpm_limit"
|
||||||
// EdgeAPIKeys holds the string denoting the api_keys edge name in mutations.
|
// EdgeAPIKeys holds the string denoting the api_keys edge name in mutations.
|
||||||
EdgeAPIKeys = "api_keys"
|
EdgeAPIKeys = "api_keys"
|
||||||
// EdgeRedeemCodes holds the string denoting the redeem_codes edge name in mutations.
|
// EdgeRedeemCodes holds the string denoting the redeem_codes edge name in mutations.
|
||||||
@ -181,6 +183,7 @@ var Columns = []string{
|
|||||||
FieldRequirePrivacySet,
|
FieldRequirePrivacySet,
|
||||||
FieldDefaultMappedModel,
|
FieldDefaultMappedModel,
|
||||||
FieldMessagesDispatchModelConfig,
|
FieldMessagesDispatchModelConfig,
|
||||||
|
FieldRpmLimit,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -258,6 +261,8 @@ var (
|
|||||||
DefaultMappedModelValidator func(string) error
|
DefaultMappedModelValidator func(string) error
|
||||||
// DefaultMessagesDispatchModelConfig holds the default value on creation for the "messages_dispatch_model_config" field.
|
// DefaultMessagesDispatchModelConfig holds the default value on creation for the "messages_dispatch_model_config" field.
|
||||||
DefaultMessagesDispatchModelConfig domain.OpenAIMessagesDispatchModelConfig
|
DefaultMessagesDispatchModelConfig domain.OpenAIMessagesDispatchModelConfig
|
||||||
|
// DefaultRpmLimit holds the default value on creation for the "rpm_limit" field.
|
||||||
|
DefaultRpmLimit int
|
||||||
)
|
)
|
||||||
|
|
||||||
// OrderOption defines the ordering options for the Group queries.
|
// OrderOption defines the ordering options for the Group queries.
|
||||||
@ -403,6 +408,11 @@ func ByDefaultMappedModel(opts ...sql.OrderTermOption) OrderOption {
|
|||||||
return sql.OrderByField(FieldDefaultMappedModel, opts...).ToFunc()
|
return sql.OrderByField(FieldDefaultMappedModel, opts...).ToFunc()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ByRpmLimit orders the results by the rpm_limit field.
|
||||||
|
func ByRpmLimit(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldRpmLimit, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
// ByAPIKeysCount orders the results by api_keys count.
|
// ByAPIKeysCount orders the results by api_keys count.
|
||||||
func ByAPIKeysCount(opts ...sql.OrderTermOption) OrderOption {
|
func ByAPIKeysCount(opts ...sql.OrderTermOption) OrderOption {
|
||||||
return func(s *sql.Selector) {
|
return func(s *sql.Selector) {
|
||||||
|
|||||||
@ -190,6 +190,11 @@ func DefaultMappedModel(v string) predicate.Group {
|
|||||||
return predicate.Group(sql.FieldEQ(FieldDefaultMappedModel, v))
|
return predicate.Group(sql.FieldEQ(FieldDefaultMappedModel, v))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RpmLimit applies equality check predicate on the "rpm_limit" field. It's identical to RpmLimitEQ.
|
||||||
|
func RpmLimit(v int) predicate.Group {
|
||||||
|
return predicate.Group(sql.FieldEQ(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
// CreatedAtEQ applies the EQ predicate on the "created_at" field.
|
// CreatedAtEQ applies the EQ predicate on the "created_at" field.
|
||||||
func CreatedAtEQ(v time.Time) predicate.Group {
|
func CreatedAtEQ(v time.Time) predicate.Group {
|
||||||
return predicate.Group(sql.FieldEQ(FieldCreatedAt, v))
|
return predicate.Group(sql.FieldEQ(FieldCreatedAt, v))
|
||||||
@ -1320,6 +1325,46 @@ func DefaultMappedModelContainsFold(v string) predicate.Group {
|
|||||||
return predicate.Group(sql.FieldContainsFold(FieldDefaultMappedModel, v))
|
return predicate.Group(sql.FieldContainsFold(FieldDefaultMappedModel, v))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RpmLimitEQ applies the EQ predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitEQ(v int) predicate.Group {
|
||||||
|
return predicate.Group(sql.FieldEQ(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitNEQ applies the NEQ predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitNEQ(v int) predicate.Group {
|
||||||
|
return predicate.Group(sql.FieldNEQ(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitIn applies the In predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitIn(vs ...int) predicate.Group {
|
||||||
|
return predicate.Group(sql.FieldIn(FieldRpmLimit, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitNotIn applies the NotIn predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitNotIn(vs ...int) predicate.Group {
|
||||||
|
return predicate.Group(sql.FieldNotIn(FieldRpmLimit, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitGT applies the GT predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitGT(v int) predicate.Group {
|
||||||
|
return predicate.Group(sql.FieldGT(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitGTE applies the GTE predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitGTE(v int) predicate.Group {
|
||||||
|
return predicate.Group(sql.FieldGTE(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitLT applies the LT predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitLT(v int) predicate.Group {
|
||||||
|
return predicate.Group(sql.FieldLT(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitLTE applies the LTE predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitLTE(v int) predicate.Group {
|
||||||
|
return predicate.Group(sql.FieldLTE(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
// HasAPIKeys applies the HasEdge predicate on the "api_keys" edge.
|
// HasAPIKeys applies the HasEdge predicate on the "api_keys" edge.
|
||||||
func HasAPIKeys() predicate.Group {
|
func HasAPIKeys() predicate.Group {
|
||||||
return predicate.Group(func(s *sql.Selector) {
|
return predicate.Group(func(s *sql.Selector) {
|
||||||
|
|||||||
@ -425,6 +425,20 @@ func (_c *GroupCreate) SetNillableMessagesDispatchModelConfig(v *domain.OpenAIMe
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (_c *GroupCreate) SetRpmLimit(v int) *GroupCreate {
|
||||||
|
_c.mutation.SetRpmLimit(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableRpmLimit sets the "rpm_limit" field if the given value is not nil.
|
||||||
|
func (_c *GroupCreate) SetNillableRpmLimit(v *int) *GroupCreate {
|
||||||
|
if v != nil {
|
||||||
|
_c.SetRpmLimit(*v)
|
||||||
|
}
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
||||||
func (_c *GroupCreate) AddAPIKeyIDs(ids ...int64) *GroupCreate {
|
func (_c *GroupCreate) AddAPIKeyIDs(ids ...int64) *GroupCreate {
|
||||||
_c.mutation.AddAPIKeyIDs(ids...)
|
_c.mutation.AddAPIKeyIDs(ids...)
|
||||||
@ -630,6 +644,10 @@ func (_c *GroupCreate) defaults() error {
|
|||||||
v := group.DefaultMessagesDispatchModelConfig
|
v := group.DefaultMessagesDispatchModelConfig
|
||||||
_c.mutation.SetMessagesDispatchModelConfig(v)
|
_c.mutation.SetMessagesDispatchModelConfig(v)
|
||||||
}
|
}
|
||||||
|
if _, ok := _c.mutation.RpmLimit(); !ok {
|
||||||
|
v := group.DefaultRpmLimit
|
||||||
|
_c.mutation.SetRpmLimit(v)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -717,6 +735,9 @@ func (_c *GroupCreate) check() error {
|
|||||||
if _, ok := _c.mutation.MessagesDispatchModelConfig(); !ok {
|
if _, ok := _c.mutation.MessagesDispatchModelConfig(); !ok {
|
||||||
return &ValidationError{Name: "messages_dispatch_model_config", err: errors.New(`ent: missing required field "Group.messages_dispatch_model_config"`)}
|
return &ValidationError{Name: "messages_dispatch_model_config", err: errors.New(`ent: missing required field "Group.messages_dispatch_model_config"`)}
|
||||||
}
|
}
|
||||||
|
if _, ok := _c.mutation.RpmLimit(); !ok {
|
||||||
|
return &ValidationError{Name: "rpm_limit", err: errors.New(`ent: missing required field "Group.rpm_limit"`)}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -864,6 +885,10 @@ func (_c *GroupCreate) createSpec() (*Group, *sqlgraph.CreateSpec) {
|
|||||||
_spec.SetField(group.FieldMessagesDispatchModelConfig, field.TypeJSON, value)
|
_spec.SetField(group.FieldMessagesDispatchModelConfig, field.TypeJSON, value)
|
||||||
_node.MessagesDispatchModelConfig = value
|
_node.MessagesDispatchModelConfig = value
|
||||||
}
|
}
|
||||||
|
if value, ok := _c.mutation.RpmLimit(); ok {
|
||||||
|
_spec.SetField(group.FieldRpmLimit, field.TypeInt, value)
|
||||||
|
_node.RpmLimit = value
|
||||||
|
}
|
||||||
if nodes := _c.mutation.APIKeysIDs(); len(nodes) > 0 {
|
if nodes := _c.mutation.APIKeysIDs(); len(nodes) > 0 {
|
||||||
edge := &sqlgraph.EdgeSpec{
|
edge := &sqlgraph.EdgeSpec{
|
||||||
Rel: sqlgraph.O2M,
|
Rel: sqlgraph.O2M,
|
||||||
@ -1500,6 +1525,24 @@ func (u *GroupUpsert) UpdateMessagesDispatchModelConfig() *GroupUpsert {
|
|||||||
return u
|
return u
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (u *GroupUpsert) SetRpmLimit(v int) *GroupUpsert {
|
||||||
|
u.Set(group.FieldRpmLimit, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateRpmLimit sets the "rpm_limit" field to the value that was provided on create.
|
||||||
|
func (u *GroupUpsert) UpdateRpmLimit() *GroupUpsert {
|
||||||
|
u.SetExcluded(group.FieldRpmLimit)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRpmLimit adds v to the "rpm_limit" field.
|
||||||
|
func (u *GroupUpsert) AddRpmLimit(v int) *GroupUpsert {
|
||||||
|
u.Add(group.FieldRpmLimit, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
// UpdateNewValues updates the mutable fields using the new values that were set on create.
|
// UpdateNewValues updates the mutable fields using the new values that were set on create.
|
||||||
// Using this option is equivalent to using:
|
// Using this option is equivalent to using:
|
||||||
//
|
//
|
||||||
@ -2105,6 +2148,27 @@ func (u *GroupUpsertOne) UpdateMessagesDispatchModelConfig() *GroupUpsertOne {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (u *GroupUpsertOne) SetRpmLimit(v int) *GroupUpsertOne {
|
||||||
|
return u.Update(func(s *GroupUpsert) {
|
||||||
|
s.SetRpmLimit(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRpmLimit adds v to the "rpm_limit" field.
|
||||||
|
func (u *GroupUpsertOne) AddRpmLimit(v int) *GroupUpsertOne {
|
||||||
|
return u.Update(func(s *GroupUpsert) {
|
||||||
|
s.AddRpmLimit(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateRpmLimit sets the "rpm_limit" field to the value that was provided on create.
|
||||||
|
func (u *GroupUpsertOne) UpdateRpmLimit() *GroupUpsertOne {
|
||||||
|
return u.Update(func(s *GroupUpsert) {
|
||||||
|
s.UpdateRpmLimit()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Exec executes the query.
|
// Exec executes the query.
|
||||||
func (u *GroupUpsertOne) Exec(ctx context.Context) error {
|
func (u *GroupUpsertOne) Exec(ctx context.Context) error {
|
||||||
if len(u.create.conflict) == 0 {
|
if len(u.create.conflict) == 0 {
|
||||||
@ -2876,6 +2940,27 @@ func (u *GroupUpsertBulk) UpdateMessagesDispatchModelConfig() *GroupUpsertBulk {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (u *GroupUpsertBulk) SetRpmLimit(v int) *GroupUpsertBulk {
|
||||||
|
return u.Update(func(s *GroupUpsert) {
|
||||||
|
s.SetRpmLimit(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRpmLimit adds v to the "rpm_limit" field.
|
||||||
|
func (u *GroupUpsertBulk) AddRpmLimit(v int) *GroupUpsertBulk {
|
||||||
|
return u.Update(func(s *GroupUpsert) {
|
||||||
|
s.AddRpmLimit(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateRpmLimit sets the "rpm_limit" field to the value that was provided on create.
|
||||||
|
func (u *GroupUpsertBulk) UpdateRpmLimit() *GroupUpsertBulk {
|
||||||
|
return u.Update(func(s *GroupUpsert) {
|
||||||
|
s.UpdateRpmLimit()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Exec executes the query.
|
// Exec executes the query.
|
||||||
func (u *GroupUpsertBulk) Exec(ctx context.Context) error {
|
func (u *GroupUpsertBulk) Exec(ctx context.Context) error {
|
||||||
if u.create.err != nil {
|
if u.create.err != nil {
|
||||||
|
|||||||
@ -567,6 +567,27 @@ func (_u *GroupUpdate) SetNillableMessagesDispatchModelConfig(v *domain.OpenAIMe
|
|||||||
return _u
|
return _u
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (_u *GroupUpdate) SetRpmLimit(v int) *GroupUpdate {
|
||||||
|
_u.mutation.ResetRpmLimit()
|
||||||
|
_u.mutation.SetRpmLimit(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableRpmLimit sets the "rpm_limit" field if the given value is not nil.
|
||||||
|
func (_u *GroupUpdate) SetNillableRpmLimit(v *int) *GroupUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetRpmLimit(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRpmLimit adds value to the "rpm_limit" field.
|
||||||
|
func (_u *GroupUpdate) AddRpmLimit(v int) *GroupUpdate {
|
||||||
|
_u.mutation.AddRpmLimit(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
||||||
func (_u *GroupUpdate) AddAPIKeyIDs(ids ...int64) *GroupUpdate {
|
func (_u *GroupUpdate) AddAPIKeyIDs(ids ...int64) *GroupUpdate {
|
||||||
_u.mutation.AddAPIKeyIDs(ids...)
|
_u.mutation.AddAPIKeyIDs(ids...)
|
||||||
@ -1030,6 +1051,12 @@ func (_u *GroupUpdate) sqlSave(ctx context.Context) (_node int, err error) {
|
|||||||
if value, ok := _u.mutation.MessagesDispatchModelConfig(); ok {
|
if value, ok := _u.mutation.MessagesDispatchModelConfig(); ok {
|
||||||
_spec.SetField(group.FieldMessagesDispatchModelConfig, field.TypeJSON, value)
|
_spec.SetField(group.FieldMessagesDispatchModelConfig, field.TypeJSON, value)
|
||||||
}
|
}
|
||||||
|
if value, ok := _u.mutation.RpmLimit(); ok {
|
||||||
|
_spec.SetField(group.FieldRpmLimit, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedRpmLimit(); ok {
|
||||||
|
_spec.AddField(group.FieldRpmLimit, field.TypeInt, value)
|
||||||
|
}
|
||||||
if _u.mutation.APIKeysCleared() {
|
if _u.mutation.APIKeysCleared() {
|
||||||
edge := &sqlgraph.EdgeSpec{
|
edge := &sqlgraph.EdgeSpec{
|
||||||
Rel: sqlgraph.O2M,
|
Rel: sqlgraph.O2M,
|
||||||
@ -1875,6 +1902,27 @@ func (_u *GroupUpdateOne) SetNillableMessagesDispatchModelConfig(v *domain.OpenA
|
|||||||
return _u
|
return _u
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (_u *GroupUpdateOne) SetRpmLimit(v int) *GroupUpdateOne {
|
||||||
|
_u.mutation.ResetRpmLimit()
|
||||||
|
_u.mutation.SetRpmLimit(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableRpmLimit sets the "rpm_limit" field if the given value is not nil.
|
||||||
|
func (_u *GroupUpdateOne) SetNillableRpmLimit(v *int) *GroupUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetRpmLimit(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRpmLimit adds value to the "rpm_limit" field.
|
||||||
|
func (_u *GroupUpdateOne) AddRpmLimit(v int) *GroupUpdateOne {
|
||||||
|
_u.mutation.AddRpmLimit(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
||||||
func (_u *GroupUpdateOne) AddAPIKeyIDs(ids ...int64) *GroupUpdateOne {
|
func (_u *GroupUpdateOne) AddAPIKeyIDs(ids ...int64) *GroupUpdateOne {
|
||||||
_u.mutation.AddAPIKeyIDs(ids...)
|
_u.mutation.AddAPIKeyIDs(ids...)
|
||||||
@ -2368,6 +2416,12 @@ func (_u *GroupUpdateOne) sqlSave(ctx context.Context) (_node *Group, err error)
|
|||||||
if value, ok := _u.mutation.MessagesDispatchModelConfig(); ok {
|
if value, ok := _u.mutation.MessagesDispatchModelConfig(); ok {
|
||||||
_spec.SetField(group.FieldMessagesDispatchModelConfig, field.TypeJSON, value)
|
_spec.SetField(group.FieldMessagesDispatchModelConfig, field.TypeJSON, value)
|
||||||
}
|
}
|
||||||
|
if value, ok := _u.mutation.RpmLimit(); ok {
|
||||||
|
_spec.SetField(group.FieldRpmLimit, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedRpmLimit(); ok {
|
||||||
|
_spec.AddField(group.FieldRpmLimit, field.TypeInt, value)
|
||||||
|
}
|
||||||
if _u.mutation.APIKeysCleared() {
|
if _u.mutation.APIKeysCleared() {
|
||||||
edge := &sqlgraph.EdgeSpec{
|
edge := &sqlgraph.EdgeSpec{
|
||||||
Rel: sqlgraph.O2M,
|
Rel: sqlgraph.O2M,
|
||||||
|
|||||||
@ -93,6 +93,54 @@ func (f AuthIdentityChannelFunc) Mutate(ctx context.Context, m ent.Mutation) (en
|
|||||||
return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.AuthIdentityChannelMutation", m)
|
return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.AuthIdentityChannelMutation", m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The ChannelMonitorFunc type is an adapter to allow the use of ordinary
|
||||||
|
// function as ChannelMonitor mutator.
|
||||||
|
type ChannelMonitorFunc func(context.Context, *ent.ChannelMonitorMutation) (ent.Value, error)
|
||||||
|
|
||||||
|
// Mutate calls f(ctx, m).
|
||||||
|
func (f ChannelMonitorFunc) Mutate(ctx context.Context, m ent.Mutation) (ent.Value, error) {
|
||||||
|
if mv, ok := m.(*ent.ChannelMonitorMutation); ok {
|
||||||
|
return f(ctx, mv)
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.ChannelMonitorMutation", m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The ChannelMonitorDailyRollupFunc type is an adapter to allow the use of ordinary
|
||||||
|
// function as ChannelMonitorDailyRollup mutator.
|
||||||
|
type ChannelMonitorDailyRollupFunc func(context.Context, *ent.ChannelMonitorDailyRollupMutation) (ent.Value, error)
|
||||||
|
|
||||||
|
// Mutate calls f(ctx, m).
|
||||||
|
func (f ChannelMonitorDailyRollupFunc) Mutate(ctx context.Context, m ent.Mutation) (ent.Value, error) {
|
||||||
|
if mv, ok := m.(*ent.ChannelMonitorDailyRollupMutation); ok {
|
||||||
|
return f(ctx, mv)
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.ChannelMonitorDailyRollupMutation", m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The ChannelMonitorHistoryFunc type is an adapter to allow the use of ordinary
|
||||||
|
// function as ChannelMonitorHistory mutator.
|
||||||
|
type ChannelMonitorHistoryFunc func(context.Context, *ent.ChannelMonitorHistoryMutation) (ent.Value, error)
|
||||||
|
|
||||||
|
// Mutate calls f(ctx, m).
|
||||||
|
func (f ChannelMonitorHistoryFunc) Mutate(ctx context.Context, m ent.Mutation) (ent.Value, error) {
|
||||||
|
if mv, ok := m.(*ent.ChannelMonitorHistoryMutation); ok {
|
||||||
|
return f(ctx, mv)
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.ChannelMonitorHistoryMutation", m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The ChannelMonitorRequestTemplateFunc type is an adapter to allow the use of ordinary
|
||||||
|
// function as ChannelMonitorRequestTemplate mutator.
|
||||||
|
type ChannelMonitorRequestTemplateFunc func(context.Context, *ent.ChannelMonitorRequestTemplateMutation) (ent.Value, error)
|
||||||
|
|
||||||
|
// Mutate calls f(ctx, m).
|
||||||
|
func (f ChannelMonitorRequestTemplateFunc) Mutate(ctx context.Context, m ent.Mutation) (ent.Value, error) {
|
||||||
|
if mv, ok := m.(*ent.ChannelMonitorRequestTemplateMutation); ok {
|
||||||
|
return f(ctx, mv)
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.ChannelMonitorRequestTemplateMutation", m)
|
||||||
|
}
|
||||||
|
|
||||||
// The ErrorPassthroughRuleFunc type is an adapter to allow the use of ordinary
|
// The ErrorPassthroughRuleFunc type is an adapter to allow the use of ordinary
|
||||||
// function as ErrorPassthroughRule mutator.
|
// function as ErrorPassthroughRule mutator.
|
||||||
type ErrorPassthroughRuleFunc func(context.Context, *ent.ErrorPassthroughRuleMutation) (ent.Value, error)
|
type ErrorPassthroughRuleFunc func(context.Context, *ent.ErrorPassthroughRuleMutation) (ent.Value, error)
|
||||||
|
|||||||
@ -15,6 +15,10 @@ import (
|
|||||||
"github.com/Wei-Shaw/sub2api/ent/apikey"
|
"github.com/Wei-Shaw/sub2api/ent/apikey"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/authidentity"
|
"github.com/Wei-Shaw/sub2api/ent/authidentity"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/authidentitychannel"
|
"github.com/Wei-Shaw/sub2api/ent/authidentitychannel"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitordailyrollup"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorhistory"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/errorpassthroughrule"
|
"github.com/Wei-Shaw/sub2api/ent/errorpassthroughrule"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/group"
|
"github.com/Wei-Shaw/sub2api/ent/group"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/idempotencyrecord"
|
"github.com/Wei-Shaw/sub2api/ent/idempotencyrecord"
|
||||||
@ -286,6 +290,114 @@ func (f TraverseAuthIdentityChannel) Traverse(ctx context.Context, q ent.Query)
|
|||||||
return fmt.Errorf("unexpected query type %T. expect *ent.AuthIdentityChannelQuery", q)
|
return fmt.Errorf("unexpected query type %T. expect *ent.AuthIdentityChannelQuery", q)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The ChannelMonitorFunc type is an adapter to allow the use of ordinary function as a Querier.
|
||||||
|
type ChannelMonitorFunc func(context.Context, *ent.ChannelMonitorQuery) (ent.Value, error)
|
||||||
|
|
||||||
|
// Query calls f(ctx, q).
|
||||||
|
func (f ChannelMonitorFunc) Query(ctx context.Context, q ent.Query) (ent.Value, error) {
|
||||||
|
if q, ok := q.(*ent.ChannelMonitorQuery); ok {
|
||||||
|
return f(ctx, q)
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unexpected query type %T. expect *ent.ChannelMonitorQuery", q)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The TraverseChannelMonitor type is an adapter to allow the use of ordinary function as Traverser.
|
||||||
|
type TraverseChannelMonitor func(context.Context, *ent.ChannelMonitorQuery) error
|
||||||
|
|
||||||
|
// Intercept is a dummy implementation of Intercept that returns the next Querier in the pipeline.
|
||||||
|
func (f TraverseChannelMonitor) Intercept(next ent.Querier) ent.Querier {
|
||||||
|
return next
|
||||||
|
}
|
||||||
|
|
||||||
|
// Traverse calls f(ctx, q).
|
||||||
|
func (f TraverseChannelMonitor) Traverse(ctx context.Context, q ent.Query) error {
|
||||||
|
if q, ok := q.(*ent.ChannelMonitorQuery); ok {
|
||||||
|
return f(ctx, q)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("unexpected query type %T. expect *ent.ChannelMonitorQuery", q)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The ChannelMonitorDailyRollupFunc type is an adapter to allow the use of ordinary function as a Querier.
|
||||||
|
type ChannelMonitorDailyRollupFunc func(context.Context, *ent.ChannelMonitorDailyRollupQuery) (ent.Value, error)
|
||||||
|
|
||||||
|
// Query calls f(ctx, q).
|
||||||
|
func (f ChannelMonitorDailyRollupFunc) Query(ctx context.Context, q ent.Query) (ent.Value, error) {
|
||||||
|
if q, ok := q.(*ent.ChannelMonitorDailyRollupQuery); ok {
|
||||||
|
return f(ctx, q)
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unexpected query type %T. expect *ent.ChannelMonitorDailyRollupQuery", q)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The TraverseChannelMonitorDailyRollup type is an adapter to allow the use of ordinary function as Traverser.
|
||||||
|
type TraverseChannelMonitorDailyRollup func(context.Context, *ent.ChannelMonitorDailyRollupQuery) error
|
||||||
|
|
||||||
|
// Intercept is a dummy implementation of Intercept that returns the next Querier in the pipeline.
|
||||||
|
func (f TraverseChannelMonitorDailyRollup) Intercept(next ent.Querier) ent.Querier {
|
||||||
|
return next
|
||||||
|
}
|
||||||
|
|
||||||
|
// Traverse calls f(ctx, q).
|
||||||
|
func (f TraverseChannelMonitorDailyRollup) Traverse(ctx context.Context, q ent.Query) error {
|
||||||
|
if q, ok := q.(*ent.ChannelMonitorDailyRollupQuery); ok {
|
||||||
|
return f(ctx, q)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("unexpected query type %T. expect *ent.ChannelMonitorDailyRollupQuery", q)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The ChannelMonitorHistoryFunc type is an adapter to allow the use of ordinary function as a Querier.
|
||||||
|
type ChannelMonitorHistoryFunc func(context.Context, *ent.ChannelMonitorHistoryQuery) (ent.Value, error)
|
||||||
|
|
||||||
|
// Query calls f(ctx, q).
|
||||||
|
func (f ChannelMonitorHistoryFunc) Query(ctx context.Context, q ent.Query) (ent.Value, error) {
|
||||||
|
if q, ok := q.(*ent.ChannelMonitorHistoryQuery); ok {
|
||||||
|
return f(ctx, q)
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unexpected query type %T. expect *ent.ChannelMonitorHistoryQuery", q)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The TraverseChannelMonitorHistory type is an adapter to allow the use of ordinary function as Traverser.
|
||||||
|
type TraverseChannelMonitorHistory func(context.Context, *ent.ChannelMonitorHistoryQuery) error
|
||||||
|
|
||||||
|
// Intercept is a dummy implementation of Intercept that returns the next Querier in the pipeline.
|
||||||
|
func (f TraverseChannelMonitorHistory) Intercept(next ent.Querier) ent.Querier {
|
||||||
|
return next
|
||||||
|
}
|
||||||
|
|
||||||
|
// Traverse calls f(ctx, q).
|
||||||
|
func (f TraverseChannelMonitorHistory) Traverse(ctx context.Context, q ent.Query) error {
|
||||||
|
if q, ok := q.(*ent.ChannelMonitorHistoryQuery); ok {
|
||||||
|
return f(ctx, q)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("unexpected query type %T. expect *ent.ChannelMonitorHistoryQuery", q)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The ChannelMonitorRequestTemplateFunc type is an adapter to allow the use of ordinary function as a Querier.
|
||||||
|
type ChannelMonitorRequestTemplateFunc func(context.Context, *ent.ChannelMonitorRequestTemplateQuery) (ent.Value, error)
|
||||||
|
|
||||||
|
// Query calls f(ctx, q).
|
||||||
|
func (f ChannelMonitorRequestTemplateFunc) Query(ctx context.Context, q ent.Query) (ent.Value, error) {
|
||||||
|
if q, ok := q.(*ent.ChannelMonitorRequestTemplateQuery); ok {
|
||||||
|
return f(ctx, q)
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unexpected query type %T. expect *ent.ChannelMonitorRequestTemplateQuery", q)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The TraverseChannelMonitorRequestTemplate type is an adapter to allow the use of ordinary function as Traverser.
|
||||||
|
type TraverseChannelMonitorRequestTemplate func(context.Context, *ent.ChannelMonitorRequestTemplateQuery) error
|
||||||
|
|
||||||
|
// Intercept is a dummy implementation of Intercept that returns the next Querier in the pipeline.
|
||||||
|
func (f TraverseChannelMonitorRequestTemplate) Intercept(next ent.Querier) ent.Querier {
|
||||||
|
return next
|
||||||
|
}
|
||||||
|
|
||||||
|
// Traverse calls f(ctx, q).
|
||||||
|
func (f TraverseChannelMonitorRequestTemplate) Traverse(ctx context.Context, q ent.Query) error {
|
||||||
|
if q, ok := q.(*ent.ChannelMonitorRequestTemplateQuery); ok {
|
||||||
|
return f(ctx, q)
|
||||||
|
}
|
||||||
|
return fmt.Errorf("unexpected query type %T. expect *ent.ChannelMonitorRequestTemplateQuery", q)
|
||||||
|
}
|
||||||
|
|
||||||
// The ErrorPassthroughRuleFunc type is an adapter to allow the use of ordinary function as a Querier.
|
// The ErrorPassthroughRuleFunc type is an adapter to allow the use of ordinary function as a Querier.
|
||||||
type ErrorPassthroughRuleFunc func(context.Context, *ent.ErrorPassthroughRuleQuery) (ent.Value, error)
|
type ErrorPassthroughRuleFunc func(context.Context, *ent.ErrorPassthroughRuleQuery) (ent.Value, error)
|
||||||
|
|
||||||
@ -924,6 +1036,14 @@ func NewQuery(q ent.Query) (Query, error) {
|
|||||||
return &query[*ent.AuthIdentityQuery, predicate.AuthIdentity, authidentity.OrderOption]{typ: ent.TypeAuthIdentity, tq: q}, nil
|
return &query[*ent.AuthIdentityQuery, predicate.AuthIdentity, authidentity.OrderOption]{typ: ent.TypeAuthIdentity, tq: q}, nil
|
||||||
case *ent.AuthIdentityChannelQuery:
|
case *ent.AuthIdentityChannelQuery:
|
||||||
return &query[*ent.AuthIdentityChannelQuery, predicate.AuthIdentityChannel, authidentitychannel.OrderOption]{typ: ent.TypeAuthIdentityChannel, tq: q}, nil
|
return &query[*ent.AuthIdentityChannelQuery, predicate.AuthIdentityChannel, authidentitychannel.OrderOption]{typ: ent.TypeAuthIdentityChannel, tq: q}, nil
|
||||||
|
case *ent.ChannelMonitorQuery:
|
||||||
|
return &query[*ent.ChannelMonitorQuery, predicate.ChannelMonitor, channelmonitor.OrderOption]{typ: ent.TypeChannelMonitor, tq: q}, nil
|
||||||
|
case *ent.ChannelMonitorDailyRollupQuery:
|
||||||
|
return &query[*ent.ChannelMonitorDailyRollupQuery, predicate.ChannelMonitorDailyRollup, channelmonitordailyrollup.OrderOption]{typ: ent.TypeChannelMonitorDailyRollup, tq: q}, nil
|
||||||
|
case *ent.ChannelMonitorHistoryQuery:
|
||||||
|
return &query[*ent.ChannelMonitorHistoryQuery, predicate.ChannelMonitorHistory, channelmonitorhistory.OrderOption]{typ: ent.TypeChannelMonitorHistory, tq: q}, nil
|
||||||
|
case *ent.ChannelMonitorRequestTemplateQuery:
|
||||||
|
return &query[*ent.ChannelMonitorRequestTemplateQuery, predicate.ChannelMonitorRequestTemplate, channelmonitorrequesttemplate.OrderOption]{typ: ent.TypeChannelMonitorRequestTemplate, tq: q}, nil
|
||||||
case *ent.ErrorPassthroughRuleQuery:
|
case *ent.ErrorPassthroughRuleQuery:
|
||||||
return &query[*ent.ErrorPassthroughRuleQuery, predicate.ErrorPassthroughRule, errorpassthroughrule.OrderOption]{typ: ent.TypeErrorPassthroughRule, tq: q}, nil
|
return &query[*ent.ErrorPassthroughRuleQuery, predicate.ErrorPassthroughRule, errorpassthroughrule.OrderOption]{typ: ent.TypeErrorPassthroughRule, tq: q}, nil
|
||||||
case *ent.GroupQuery:
|
case *ent.GroupQuery:
|
||||||
|
|||||||
@ -421,6 +421,169 @@ var (
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
// ChannelMonitorsColumns holds the columns for the "channel_monitors" table.
|
||||||
|
ChannelMonitorsColumns = []*schema.Column{
|
||||||
|
{Name: "id", Type: field.TypeInt64, Increment: true},
|
||||||
|
{Name: "created_at", Type: field.TypeTime, SchemaType: map[string]string{"postgres": "timestamptz"}},
|
||||||
|
{Name: "updated_at", Type: field.TypeTime, SchemaType: map[string]string{"postgres": "timestamptz"}},
|
||||||
|
{Name: "name", Type: field.TypeString, Size: 100},
|
||||||
|
{Name: "provider", Type: field.TypeEnum, Enums: []string{"openai", "anthropic", "gemini"}},
|
||||||
|
{Name: "endpoint", Type: field.TypeString, Size: 500},
|
||||||
|
{Name: "api_key_encrypted", Type: field.TypeString},
|
||||||
|
{Name: "primary_model", Type: field.TypeString, Size: 200},
|
||||||
|
{Name: "extra_models", Type: field.TypeJSON},
|
||||||
|
{Name: "group_name", Type: field.TypeString, Nullable: true, Size: 100, Default: ""},
|
||||||
|
{Name: "enabled", Type: field.TypeBool, Default: true},
|
||||||
|
{Name: "interval_seconds", Type: field.TypeInt},
|
||||||
|
{Name: "last_checked_at", Type: field.TypeTime, Nullable: true},
|
||||||
|
{Name: "created_by", Type: field.TypeInt64},
|
||||||
|
{Name: "extra_headers", Type: field.TypeJSON},
|
||||||
|
{Name: "body_override_mode", Type: field.TypeString, Size: 10, Default: "off"},
|
||||||
|
{Name: "body_override", Type: field.TypeJSON, Nullable: true},
|
||||||
|
{Name: "template_id", Type: field.TypeInt64, Nullable: true},
|
||||||
|
}
|
||||||
|
// ChannelMonitorsTable holds the schema information for the "channel_monitors" table.
|
||||||
|
ChannelMonitorsTable = &schema.Table{
|
||||||
|
Name: "channel_monitors",
|
||||||
|
Columns: ChannelMonitorsColumns,
|
||||||
|
PrimaryKey: []*schema.Column{ChannelMonitorsColumns[0]},
|
||||||
|
ForeignKeys: []*schema.ForeignKey{
|
||||||
|
{
|
||||||
|
Symbol: "channel_monitors_channel_monitor_request_templates_request_template",
|
||||||
|
Columns: []*schema.Column{ChannelMonitorsColumns[17]},
|
||||||
|
RefColumns: []*schema.Column{ChannelMonitorRequestTemplatesColumns[0]},
|
||||||
|
OnDelete: schema.SetNull,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Indexes: []*schema.Index{
|
||||||
|
{
|
||||||
|
Name: "channelmonitor_enabled_last_checked_at",
|
||||||
|
Unique: false,
|
||||||
|
Columns: []*schema.Column{ChannelMonitorsColumns[10], ChannelMonitorsColumns[12]},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "channelmonitor_provider",
|
||||||
|
Unique: false,
|
||||||
|
Columns: []*schema.Column{ChannelMonitorsColumns[4]},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "channelmonitor_group_name",
|
||||||
|
Unique: false,
|
||||||
|
Columns: []*schema.Column{ChannelMonitorsColumns[9]},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "channelmonitor_template_id",
|
||||||
|
Unique: false,
|
||||||
|
Columns: []*schema.Column{ChannelMonitorsColumns[17]},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
// ChannelMonitorDailyRollupsColumns holds the columns for the "channel_monitor_daily_rollups" table.
|
||||||
|
ChannelMonitorDailyRollupsColumns = []*schema.Column{
|
||||||
|
{Name: "id", Type: field.TypeInt64, Increment: true},
|
||||||
|
{Name: "model", Type: field.TypeString, Size: 200},
|
||||||
|
{Name: "bucket_date", Type: field.TypeTime, SchemaType: map[string]string{"postgres": "date"}},
|
||||||
|
{Name: "total_checks", Type: field.TypeInt, Default: 0},
|
||||||
|
{Name: "ok_count", Type: field.TypeInt, Default: 0},
|
||||||
|
{Name: "operational_count", Type: field.TypeInt, Default: 0},
|
||||||
|
{Name: "degraded_count", Type: field.TypeInt, Default: 0},
|
||||||
|
{Name: "failed_count", Type: field.TypeInt, Default: 0},
|
||||||
|
{Name: "error_count", Type: field.TypeInt, Default: 0},
|
||||||
|
{Name: "sum_latency_ms", Type: field.TypeInt64, Default: 0},
|
||||||
|
{Name: "count_latency", Type: field.TypeInt, Default: 0},
|
||||||
|
{Name: "sum_ping_latency_ms", Type: field.TypeInt64, Default: 0},
|
||||||
|
{Name: "count_ping_latency", Type: field.TypeInt, Default: 0},
|
||||||
|
{Name: "computed_at", Type: field.TypeTime},
|
||||||
|
{Name: "monitor_id", Type: field.TypeInt64},
|
||||||
|
}
|
||||||
|
// ChannelMonitorDailyRollupsTable holds the schema information for the "channel_monitor_daily_rollups" table.
|
||||||
|
ChannelMonitorDailyRollupsTable = &schema.Table{
|
||||||
|
Name: "channel_monitor_daily_rollups",
|
||||||
|
Columns: ChannelMonitorDailyRollupsColumns,
|
||||||
|
PrimaryKey: []*schema.Column{ChannelMonitorDailyRollupsColumns[0]},
|
||||||
|
ForeignKeys: []*schema.ForeignKey{
|
||||||
|
{
|
||||||
|
Symbol: "channel_monitor_daily_rollups_channel_monitors_daily_rollups",
|
||||||
|
Columns: []*schema.Column{ChannelMonitorDailyRollupsColumns[14]},
|
||||||
|
RefColumns: []*schema.Column{ChannelMonitorsColumns[0]},
|
||||||
|
OnDelete: schema.Cascade,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Indexes: []*schema.Index{
|
||||||
|
{
|
||||||
|
Name: "channelmonitordailyrollup_monitor_id_model_bucket_date",
|
||||||
|
Unique: true,
|
||||||
|
Columns: []*schema.Column{ChannelMonitorDailyRollupsColumns[14], ChannelMonitorDailyRollupsColumns[1], ChannelMonitorDailyRollupsColumns[2]},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "channelmonitordailyrollup_bucket_date",
|
||||||
|
Unique: false,
|
||||||
|
Columns: []*schema.Column{ChannelMonitorDailyRollupsColumns[2]},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
// ChannelMonitorHistoriesColumns holds the columns for the "channel_monitor_histories" table.
|
||||||
|
ChannelMonitorHistoriesColumns = []*schema.Column{
|
||||||
|
{Name: "id", Type: field.TypeInt64, Increment: true},
|
||||||
|
{Name: "model", Type: field.TypeString, Size: 200},
|
||||||
|
{Name: "status", Type: field.TypeEnum, Enums: []string{"operational", "degraded", "failed", "error"}},
|
||||||
|
{Name: "latency_ms", Type: field.TypeInt, Nullable: true},
|
||||||
|
{Name: "ping_latency_ms", Type: field.TypeInt, Nullable: true},
|
||||||
|
{Name: "message", Type: field.TypeString, Nullable: true, Size: 500, Default: ""},
|
||||||
|
{Name: "checked_at", Type: field.TypeTime},
|
||||||
|
{Name: "monitor_id", Type: field.TypeInt64},
|
||||||
|
}
|
||||||
|
// ChannelMonitorHistoriesTable holds the schema information for the "channel_monitor_histories" table.
|
||||||
|
ChannelMonitorHistoriesTable = &schema.Table{
|
||||||
|
Name: "channel_monitor_histories",
|
||||||
|
Columns: ChannelMonitorHistoriesColumns,
|
||||||
|
PrimaryKey: []*schema.Column{ChannelMonitorHistoriesColumns[0]},
|
||||||
|
ForeignKeys: []*schema.ForeignKey{
|
||||||
|
{
|
||||||
|
Symbol: "channel_monitor_histories_channel_monitors_history",
|
||||||
|
Columns: []*schema.Column{ChannelMonitorHistoriesColumns[7]},
|
||||||
|
RefColumns: []*schema.Column{ChannelMonitorsColumns[0]},
|
||||||
|
OnDelete: schema.Cascade,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Indexes: []*schema.Index{
|
||||||
|
{
|
||||||
|
Name: "channelmonitorhistory_monitor_id_model_checked_at",
|
||||||
|
Unique: false,
|
||||||
|
Columns: []*schema.Column{ChannelMonitorHistoriesColumns[7], ChannelMonitorHistoriesColumns[1], ChannelMonitorHistoriesColumns[6]},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "channelmonitorhistory_checked_at",
|
||||||
|
Unique: false,
|
||||||
|
Columns: []*schema.Column{ChannelMonitorHistoriesColumns[6]},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
// ChannelMonitorRequestTemplatesColumns holds the columns for the "channel_monitor_request_templates" table.
|
||||||
|
ChannelMonitorRequestTemplatesColumns = []*schema.Column{
|
||||||
|
{Name: "id", Type: field.TypeInt64, Increment: true},
|
||||||
|
{Name: "created_at", Type: field.TypeTime, SchemaType: map[string]string{"postgres": "timestamptz"}},
|
||||||
|
{Name: "updated_at", Type: field.TypeTime, SchemaType: map[string]string{"postgres": "timestamptz"}},
|
||||||
|
{Name: "name", Type: field.TypeString, Size: 100},
|
||||||
|
{Name: "provider", Type: field.TypeEnum, Enums: []string{"openai", "anthropic", "gemini"}},
|
||||||
|
{Name: "description", Type: field.TypeString, Nullable: true, Size: 500, Default: ""},
|
||||||
|
{Name: "extra_headers", Type: field.TypeJSON},
|
||||||
|
{Name: "body_override_mode", Type: field.TypeString, Size: 10, Default: "off"},
|
||||||
|
{Name: "body_override", Type: field.TypeJSON, Nullable: true},
|
||||||
|
}
|
||||||
|
// ChannelMonitorRequestTemplatesTable holds the schema information for the "channel_monitor_request_templates" table.
|
||||||
|
ChannelMonitorRequestTemplatesTable = &schema.Table{
|
||||||
|
Name: "channel_monitor_request_templates",
|
||||||
|
Columns: ChannelMonitorRequestTemplatesColumns,
|
||||||
|
PrimaryKey: []*schema.Column{ChannelMonitorRequestTemplatesColumns[0]},
|
||||||
|
Indexes: []*schema.Index{
|
||||||
|
{
|
||||||
|
Name: "channelmonitorrequesttemplate_provider_name",
|
||||||
|
Unique: true,
|
||||||
|
Columns: []*schema.Column{ChannelMonitorRequestTemplatesColumns[4], ChannelMonitorRequestTemplatesColumns[3]},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
// ErrorPassthroughRulesColumns holds the columns for the "error_passthrough_rules" table.
|
// ErrorPassthroughRulesColumns holds the columns for the "error_passthrough_rules" table.
|
||||||
ErrorPassthroughRulesColumns = []*schema.Column{
|
ErrorPassthroughRulesColumns = []*schema.Column{
|
||||||
{Name: "id", Type: field.TypeInt64, Increment: true},
|
{Name: "id", Type: field.TypeInt64, Increment: true},
|
||||||
@ -491,6 +654,7 @@ var (
|
|||||||
{Name: "require_privacy_set", Type: field.TypeBool, Default: false},
|
{Name: "require_privacy_set", Type: field.TypeBool, Default: false},
|
||||||
{Name: "default_mapped_model", Type: field.TypeString, Size: 100, Default: ""},
|
{Name: "default_mapped_model", Type: field.TypeString, Size: 100, Default: ""},
|
||||||
{Name: "messages_dispatch_model_config", Type: field.TypeJSON, SchemaType: map[string]string{"postgres": "jsonb"}},
|
{Name: "messages_dispatch_model_config", Type: field.TypeJSON, SchemaType: map[string]string{"postgres": "jsonb"}},
|
||||||
|
{Name: "rpm_limit", Type: field.TypeInt, Default: 0},
|
||||||
}
|
}
|
||||||
// GroupsTable holds the schema information for the "groups" table.
|
// GroupsTable holds the schema information for the "groups" table.
|
||||||
GroupsTable = &schema.Table{
|
GroupsTable = &schema.Table{
|
||||||
@ -1276,7 +1440,7 @@ var (
|
|||||||
{Name: "totp_secret_encrypted", Type: field.TypeString, Nullable: true, SchemaType: map[string]string{"postgres": "text"}},
|
{Name: "totp_secret_encrypted", Type: field.TypeString, Nullable: true, SchemaType: map[string]string{"postgres": "text"}},
|
||||||
{Name: "totp_enabled", Type: field.TypeBool, Default: false},
|
{Name: "totp_enabled", Type: field.TypeBool, Default: false},
|
||||||
{Name: "totp_enabled_at", Type: field.TypeTime, Nullable: true},
|
{Name: "totp_enabled_at", Type: field.TypeTime, Nullable: true},
|
||||||
{Name: "signup_source", Type: field.TypeString, Size: 20, Default: "email"},
|
{Name: "signup_source", Type: field.TypeString, Default: "email"},
|
||||||
{Name: "last_login_at", Type: field.TypeTime, Nullable: true, SchemaType: map[string]string{"postgres": "timestamptz"}},
|
{Name: "last_login_at", Type: field.TypeTime, Nullable: true, SchemaType: map[string]string{"postgres": "timestamptz"}},
|
||||||
{Name: "last_active_at", Type: field.TypeTime, Nullable: true, SchemaType: map[string]string{"postgres": "timestamptz"}},
|
{Name: "last_active_at", Type: field.TypeTime, Nullable: true, SchemaType: map[string]string{"postgres": "timestamptz"}},
|
||||||
{Name: "balance_notify_enabled", Type: field.TypeBool, Default: true},
|
{Name: "balance_notify_enabled", Type: field.TypeBool, Default: true},
|
||||||
@ -1284,6 +1448,7 @@ var (
|
|||||||
{Name: "balance_notify_threshold", Type: field.TypeFloat64, Nullable: true, SchemaType: map[string]string{"postgres": "decimal(20,8)"}},
|
{Name: "balance_notify_threshold", Type: field.TypeFloat64, Nullable: true, SchemaType: map[string]string{"postgres": "decimal(20,8)"}},
|
||||||
{Name: "balance_notify_extra_emails", Type: field.TypeString, Default: "[]", SchemaType: map[string]string{"postgres": "text"}},
|
{Name: "balance_notify_extra_emails", Type: field.TypeString, Default: "[]", SchemaType: map[string]string{"postgres": "text"}},
|
||||||
{Name: "total_recharged", Type: field.TypeFloat64, Default: 0, SchemaType: map[string]string{"postgres": "decimal(20,8)"}},
|
{Name: "total_recharged", Type: field.TypeFloat64, Default: 0, SchemaType: map[string]string{"postgres": "decimal(20,8)"}},
|
||||||
|
{Name: "rpm_limit", Type: field.TypeInt, Default: 0},
|
||||||
}
|
}
|
||||||
// UsersTable holds the schema information for the "users" table.
|
// UsersTable holds the schema information for the "users" table.
|
||||||
UsersTable = &schema.Table{
|
UsersTable = &schema.Table{
|
||||||
@ -1520,6 +1685,10 @@ var (
|
|||||||
AnnouncementReadsTable,
|
AnnouncementReadsTable,
|
||||||
AuthIdentitiesTable,
|
AuthIdentitiesTable,
|
||||||
AuthIdentityChannelsTable,
|
AuthIdentityChannelsTable,
|
||||||
|
ChannelMonitorsTable,
|
||||||
|
ChannelMonitorDailyRollupsTable,
|
||||||
|
ChannelMonitorHistoriesTable,
|
||||||
|
ChannelMonitorRequestTemplatesTable,
|
||||||
ErrorPassthroughRulesTable,
|
ErrorPassthroughRulesTable,
|
||||||
GroupsTable,
|
GroupsTable,
|
||||||
IdempotencyRecordsTable,
|
IdempotencyRecordsTable,
|
||||||
@ -1577,6 +1746,21 @@ func init() {
|
|||||||
AuthIdentityChannelsTable.Annotation = &entsql.Annotation{
|
AuthIdentityChannelsTable.Annotation = &entsql.Annotation{
|
||||||
Table: "auth_identity_channels",
|
Table: "auth_identity_channels",
|
||||||
}
|
}
|
||||||
|
ChannelMonitorsTable.ForeignKeys[0].RefTable = ChannelMonitorRequestTemplatesTable
|
||||||
|
ChannelMonitorsTable.Annotation = &entsql.Annotation{
|
||||||
|
Table: "channel_monitors",
|
||||||
|
}
|
||||||
|
ChannelMonitorDailyRollupsTable.ForeignKeys[0].RefTable = ChannelMonitorsTable
|
||||||
|
ChannelMonitorDailyRollupsTable.Annotation = &entsql.Annotation{
|
||||||
|
Table: "channel_monitor_daily_rollups",
|
||||||
|
}
|
||||||
|
ChannelMonitorHistoriesTable.ForeignKeys[0].RefTable = ChannelMonitorsTable
|
||||||
|
ChannelMonitorHistoriesTable.Annotation = &entsql.Annotation{
|
||||||
|
Table: "channel_monitor_histories",
|
||||||
|
}
|
||||||
|
ChannelMonitorRequestTemplatesTable.Annotation = &entsql.Annotation{
|
||||||
|
Table: "channel_monitor_request_templates",
|
||||||
|
}
|
||||||
ErrorPassthroughRulesTable.Annotation = &entsql.Annotation{
|
ErrorPassthroughRulesTable.Annotation = &entsql.Annotation{
|
||||||
Table: "error_passthrough_rules",
|
Table: "error_passthrough_rules",
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -27,6 +27,18 @@ type AuthIdentity func(*sql.Selector)
|
|||||||
// AuthIdentityChannel is the predicate function for authidentitychannel builders.
|
// AuthIdentityChannel is the predicate function for authidentitychannel builders.
|
||||||
type AuthIdentityChannel func(*sql.Selector)
|
type AuthIdentityChannel func(*sql.Selector)
|
||||||
|
|
||||||
|
// ChannelMonitor is the predicate function for channelmonitor builders.
|
||||||
|
type ChannelMonitor func(*sql.Selector)
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollup is the predicate function for channelmonitordailyrollup builders.
|
||||||
|
type ChannelMonitorDailyRollup func(*sql.Selector)
|
||||||
|
|
||||||
|
// ChannelMonitorHistory is the predicate function for channelmonitorhistory builders.
|
||||||
|
type ChannelMonitorHistory func(*sql.Selector)
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplate is the predicate function for channelmonitorrequesttemplate builders.
|
||||||
|
type ChannelMonitorRequestTemplate func(*sql.Selector)
|
||||||
|
|
||||||
// ErrorPassthroughRule is the predicate function for errorpassthroughrule builders.
|
// ErrorPassthroughRule is the predicate function for errorpassthroughrule builders.
|
||||||
type ErrorPassthroughRule func(*sql.Selector)
|
type ErrorPassthroughRule func(*sql.Selector)
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,10 @@ import (
|
|||||||
"github.com/Wei-Shaw/sub2api/ent/apikey"
|
"github.com/Wei-Shaw/sub2api/ent/apikey"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/authidentity"
|
"github.com/Wei-Shaw/sub2api/ent/authidentity"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/authidentitychannel"
|
"github.com/Wei-Shaw/sub2api/ent/authidentitychannel"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitor"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitordailyrollup"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorhistory"
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/channelmonitorrequesttemplate"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/errorpassthroughrule"
|
"github.com/Wei-Shaw/sub2api/ent/errorpassthroughrule"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/group"
|
"github.com/Wei-Shaw/sub2api/ent/group"
|
||||||
"github.com/Wei-Shaw/sub2api/ent/idempotencyrecord"
|
"github.com/Wei-Shaw/sub2api/ent/idempotencyrecord"
|
||||||
@ -427,6 +431,252 @@ func init() {
|
|||||||
authidentitychannelDescMetadata := authidentitychannelFields[6].Descriptor()
|
authidentitychannelDescMetadata := authidentitychannelFields[6].Descriptor()
|
||||||
// authidentitychannel.DefaultMetadata holds the default value on creation for the metadata field.
|
// authidentitychannel.DefaultMetadata holds the default value on creation for the metadata field.
|
||||||
authidentitychannel.DefaultMetadata = authidentitychannelDescMetadata.Default.(func() map[string]interface{})
|
authidentitychannel.DefaultMetadata = authidentitychannelDescMetadata.Default.(func() map[string]interface{})
|
||||||
|
channelmonitorMixin := schema.ChannelMonitor{}.Mixin()
|
||||||
|
channelmonitorMixinFields0 := channelmonitorMixin[0].Fields()
|
||||||
|
_ = channelmonitorMixinFields0
|
||||||
|
channelmonitorFields := schema.ChannelMonitor{}.Fields()
|
||||||
|
_ = channelmonitorFields
|
||||||
|
// channelmonitorDescCreatedAt is the schema descriptor for created_at field.
|
||||||
|
channelmonitorDescCreatedAt := channelmonitorMixinFields0[0].Descriptor()
|
||||||
|
// channelmonitor.DefaultCreatedAt holds the default value on creation for the created_at field.
|
||||||
|
channelmonitor.DefaultCreatedAt = channelmonitorDescCreatedAt.Default.(func() time.Time)
|
||||||
|
// channelmonitorDescUpdatedAt is the schema descriptor for updated_at field.
|
||||||
|
channelmonitorDescUpdatedAt := channelmonitorMixinFields0[1].Descriptor()
|
||||||
|
// channelmonitor.DefaultUpdatedAt holds the default value on creation for the updated_at field.
|
||||||
|
channelmonitor.DefaultUpdatedAt = channelmonitorDescUpdatedAt.Default.(func() time.Time)
|
||||||
|
// channelmonitor.UpdateDefaultUpdatedAt holds the default value on update for the updated_at field.
|
||||||
|
channelmonitor.UpdateDefaultUpdatedAt = channelmonitorDescUpdatedAt.UpdateDefault.(func() time.Time)
|
||||||
|
// channelmonitorDescName is the schema descriptor for name field.
|
||||||
|
channelmonitorDescName := channelmonitorFields[0].Descriptor()
|
||||||
|
// channelmonitor.NameValidator is a validator for the "name" field. It is called by the builders before save.
|
||||||
|
channelmonitor.NameValidator = func() func(string) error {
|
||||||
|
validators := channelmonitorDescName.Validators
|
||||||
|
fns := [...]func(string) error{
|
||||||
|
validators[0].(func(string) error),
|
||||||
|
validators[1].(func(string) error),
|
||||||
|
}
|
||||||
|
return func(name string) error {
|
||||||
|
for _, fn := range fns {
|
||||||
|
if err := fn(name); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
// channelmonitorDescEndpoint is the schema descriptor for endpoint field.
|
||||||
|
channelmonitorDescEndpoint := channelmonitorFields[2].Descriptor()
|
||||||
|
// channelmonitor.EndpointValidator is a validator for the "endpoint" field. It is called by the builders before save.
|
||||||
|
channelmonitor.EndpointValidator = func() func(string) error {
|
||||||
|
validators := channelmonitorDescEndpoint.Validators
|
||||||
|
fns := [...]func(string) error{
|
||||||
|
validators[0].(func(string) error),
|
||||||
|
validators[1].(func(string) error),
|
||||||
|
}
|
||||||
|
return func(endpoint string) error {
|
||||||
|
for _, fn := range fns {
|
||||||
|
if err := fn(endpoint); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
// channelmonitorDescAPIKeyEncrypted is the schema descriptor for api_key_encrypted field.
|
||||||
|
channelmonitorDescAPIKeyEncrypted := channelmonitorFields[3].Descriptor()
|
||||||
|
// channelmonitor.APIKeyEncryptedValidator is a validator for the "api_key_encrypted" field. It is called by the builders before save.
|
||||||
|
channelmonitor.APIKeyEncryptedValidator = channelmonitorDescAPIKeyEncrypted.Validators[0].(func(string) error)
|
||||||
|
// channelmonitorDescPrimaryModel is the schema descriptor for primary_model field.
|
||||||
|
channelmonitorDescPrimaryModel := channelmonitorFields[4].Descriptor()
|
||||||
|
// channelmonitor.PrimaryModelValidator is a validator for the "primary_model" field. It is called by the builders before save.
|
||||||
|
channelmonitor.PrimaryModelValidator = func() func(string) error {
|
||||||
|
validators := channelmonitorDescPrimaryModel.Validators
|
||||||
|
fns := [...]func(string) error{
|
||||||
|
validators[0].(func(string) error),
|
||||||
|
validators[1].(func(string) error),
|
||||||
|
}
|
||||||
|
return func(primary_model string) error {
|
||||||
|
for _, fn := range fns {
|
||||||
|
if err := fn(primary_model); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
// channelmonitorDescExtraModels is the schema descriptor for extra_models field.
|
||||||
|
channelmonitorDescExtraModels := channelmonitorFields[5].Descriptor()
|
||||||
|
// channelmonitor.DefaultExtraModels holds the default value on creation for the extra_models field.
|
||||||
|
channelmonitor.DefaultExtraModels = channelmonitorDescExtraModels.Default.([]string)
|
||||||
|
// channelmonitorDescGroupName is the schema descriptor for group_name field.
|
||||||
|
channelmonitorDescGroupName := channelmonitorFields[6].Descriptor()
|
||||||
|
// channelmonitor.DefaultGroupName holds the default value on creation for the group_name field.
|
||||||
|
channelmonitor.DefaultGroupName = channelmonitorDescGroupName.Default.(string)
|
||||||
|
// channelmonitor.GroupNameValidator is a validator for the "group_name" field. It is called by the builders before save.
|
||||||
|
channelmonitor.GroupNameValidator = channelmonitorDescGroupName.Validators[0].(func(string) error)
|
||||||
|
// channelmonitorDescEnabled is the schema descriptor for enabled field.
|
||||||
|
channelmonitorDescEnabled := channelmonitorFields[7].Descriptor()
|
||||||
|
// channelmonitor.DefaultEnabled holds the default value on creation for the enabled field.
|
||||||
|
channelmonitor.DefaultEnabled = channelmonitorDescEnabled.Default.(bool)
|
||||||
|
// channelmonitorDescIntervalSeconds is the schema descriptor for interval_seconds field.
|
||||||
|
channelmonitorDescIntervalSeconds := channelmonitorFields[8].Descriptor()
|
||||||
|
// channelmonitor.IntervalSecondsValidator is a validator for the "interval_seconds" field. It is called by the builders before save.
|
||||||
|
channelmonitor.IntervalSecondsValidator = channelmonitorDescIntervalSeconds.Validators[0].(func(int) error)
|
||||||
|
// channelmonitorDescExtraHeaders is the schema descriptor for extra_headers field.
|
||||||
|
channelmonitorDescExtraHeaders := channelmonitorFields[12].Descriptor()
|
||||||
|
// channelmonitor.DefaultExtraHeaders holds the default value on creation for the extra_headers field.
|
||||||
|
channelmonitor.DefaultExtraHeaders = channelmonitorDescExtraHeaders.Default.(map[string]string)
|
||||||
|
// channelmonitorDescBodyOverrideMode is the schema descriptor for body_override_mode field.
|
||||||
|
channelmonitorDescBodyOverrideMode := channelmonitorFields[13].Descriptor()
|
||||||
|
// channelmonitor.DefaultBodyOverrideMode holds the default value on creation for the body_override_mode field.
|
||||||
|
channelmonitor.DefaultBodyOverrideMode = channelmonitorDescBodyOverrideMode.Default.(string)
|
||||||
|
// channelmonitor.BodyOverrideModeValidator is a validator for the "body_override_mode" field. It is called by the builders before save.
|
||||||
|
channelmonitor.BodyOverrideModeValidator = channelmonitorDescBodyOverrideMode.Validators[0].(func(string) error)
|
||||||
|
channelmonitordailyrollupFields := schema.ChannelMonitorDailyRollup{}.Fields()
|
||||||
|
_ = channelmonitordailyrollupFields
|
||||||
|
// channelmonitordailyrollupDescModel is the schema descriptor for model field.
|
||||||
|
channelmonitordailyrollupDescModel := channelmonitordailyrollupFields[1].Descriptor()
|
||||||
|
// channelmonitordailyrollup.ModelValidator is a validator for the "model" field. It is called by the builders before save.
|
||||||
|
channelmonitordailyrollup.ModelValidator = func() func(string) error {
|
||||||
|
validators := channelmonitordailyrollupDescModel.Validators
|
||||||
|
fns := [...]func(string) error{
|
||||||
|
validators[0].(func(string) error),
|
||||||
|
validators[1].(func(string) error),
|
||||||
|
}
|
||||||
|
return func(model string) error {
|
||||||
|
for _, fn := range fns {
|
||||||
|
if err := fn(model); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
// channelmonitordailyrollupDescTotalChecks is the schema descriptor for total_checks field.
|
||||||
|
channelmonitordailyrollupDescTotalChecks := channelmonitordailyrollupFields[3].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultTotalChecks holds the default value on creation for the total_checks field.
|
||||||
|
channelmonitordailyrollup.DefaultTotalChecks = channelmonitordailyrollupDescTotalChecks.Default.(int)
|
||||||
|
// channelmonitordailyrollupDescOkCount is the schema descriptor for ok_count field.
|
||||||
|
channelmonitordailyrollupDescOkCount := channelmonitordailyrollupFields[4].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultOkCount holds the default value on creation for the ok_count field.
|
||||||
|
channelmonitordailyrollup.DefaultOkCount = channelmonitordailyrollupDescOkCount.Default.(int)
|
||||||
|
// channelmonitordailyrollupDescOperationalCount is the schema descriptor for operational_count field.
|
||||||
|
channelmonitordailyrollupDescOperationalCount := channelmonitordailyrollupFields[5].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultOperationalCount holds the default value on creation for the operational_count field.
|
||||||
|
channelmonitordailyrollup.DefaultOperationalCount = channelmonitordailyrollupDescOperationalCount.Default.(int)
|
||||||
|
// channelmonitordailyrollupDescDegradedCount is the schema descriptor for degraded_count field.
|
||||||
|
channelmonitordailyrollupDescDegradedCount := channelmonitordailyrollupFields[6].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultDegradedCount holds the default value on creation for the degraded_count field.
|
||||||
|
channelmonitordailyrollup.DefaultDegradedCount = channelmonitordailyrollupDescDegradedCount.Default.(int)
|
||||||
|
// channelmonitordailyrollupDescFailedCount is the schema descriptor for failed_count field.
|
||||||
|
channelmonitordailyrollupDescFailedCount := channelmonitordailyrollupFields[7].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultFailedCount holds the default value on creation for the failed_count field.
|
||||||
|
channelmonitordailyrollup.DefaultFailedCount = channelmonitordailyrollupDescFailedCount.Default.(int)
|
||||||
|
// channelmonitordailyrollupDescErrorCount is the schema descriptor for error_count field.
|
||||||
|
channelmonitordailyrollupDescErrorCount := channelmonitordailyrollupFields[8].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultErrorCount holds the default value on creation for the error_count field.
|
||||||
|
channelmonitordailyrollup.DefaultErrorCount = channelmonitordailyrollupDescErrorCount.Default.(int)
|
||||||
|
// channelmonitordailyrollupDescSumLatencyMs is the schema descriptor for sum_latency_ms field.
|
||||||
|
channelmonitordailyrollupDescSumLatencyMs := channelmonitordailyrollupFields[9].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultSumLatencyMs holds the default value on creation for the sum_latency_ms field.
|
||||||
|
channelmonitordailyrollup.DefaultSumLatencyMs = channelmonitordailyrollupDescSumLatencyMs.Default.(int64)
|
||||||
|
// channelmonitordailyrollupDescCountLatency is the schema descriptor for count_latency field.
|
||||||
|
channelmonitordailyrollupDescCountLatency := channelmonitordailyrollupFields[10].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultCountLatency holds the default value on creation for the count_latency field.
|
||||||
|
channelmonitordailyrollup.DefaultCountLatency = channelmonitordailyrollupDescCountLatency.Default.(int)
|
||||||
|
// channelmonitordailyrollupDescSumPingLatencyMs is the schema descriptor for sum_ping_latency_ms field.
|
||||||
|
channelmonitordailyrollupDescSumPingLatencyMs := channelmonitordailyrollupFields[11].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultSumPingLatencyMs holds the default value on creation for the sum_ping_latency_ms field.
|
||||||
|
channelmonitordailyrollup.DefaultSumPingLatencyMs = channelmonitordailyrollupDescSumPingLatencyMs.Default.(int64)
|
||||||
|
// channelmonitordailyrollupDescCountPingLatency is the schema descriptor for count_ping_latency field.
|
||||||
|
channelmonitordailyrollupDescCountPingLatency := channelmonitordailyrollupFields[12].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultCountPingLatency holds the default value on creation for the count_ping_latency field.
|
||||||
|
channelmonitordailyrollup.DefaultCountPingLatency = channelmonitordailyrollupDescCountPingLatency.Default.(int)
|
||||||
|
// channelmonitordailyrollupDescComputedAt is the schema descriptor for computed_at field.
|
||||||
|
channelmonitordailyrollupDescComputedAt := channelmonitordailyrollupFields[13].Descriptor()
|
||||||
|
// channelmonitordailyrollup.DefaultComputedAt holds the default value on creation for the computed_at field.
|
||||||
|
channelmonitordailyrollup.DefaultComputedAt = channelmonitordailyrollupDescComputedAt.Default.(func() time.Time)
|
||||||
|
// channelmonitordailyrollup.UpdateDefaultComputedAt holds the default value on update for the computed_at field.
|
||||||
|
channelmonitordailyrollup.UpdateDefaultComputedAt = channelmonitordailyrollupDescComputedAt.UpdateDefault.(func() time.Time)
|
||||||
|
channelmonitorhistoryFields := schema.ChannelMonitorHistory{}.Fields()
|
||||||
|
_ = channelmonitorhistoryFields
|
||||||
|
// channelmonitorhistoryDescModel is the schema descriptor for model field.
|
||||||
|
channelmonitorhistoryDescModel := channelmonitorhistoryFields[1].Descriptor()
|
||||||
|
// channelmonitorhistory.ModelValidator is a validator for the "model" field. It is called by the builders before save.
|
||||||
|
channelmonitorhistory.ModelValidator = func() func(string) error {
|
||||||
|
validators := channelmonitorhistoryDescModel.Validators
|
||||||
|
fns := [...]func(string) error{
|
||||||
|
validators[0].(func(string) error),
|
||||||
|
validators[1].(func(string) error),
|
||||||
|
}
|
||||||
|
return func(model string) error {
|
||||||
|
for _, fn := range fns {
|
||||||
|
if err := fn(model); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
// channelmonitorhistoryDescMessage is the schema descriptor for message field.
|
||||||
|
channelmonitorhistoryDescMessage := channelmonitorhistoryFields[5].Descriptor()
|
||||||
|
// channelmonitorhistory.DefaultMessage holds the default value on creation for the message field.
|
||||||
|
channelmonitorhistory.DefaultMessage = channelmonitorhistoryDescMessage.Default.(string)
|
||||||
|
// channelmonitorhistory.MessageValidator is a validator for the "message" field. It is called by the builders before save.
|
||||||
|
channelmonitorhistory.MessageValidator = channelmonitorhistoryDescMessage.Validators[0].(func(string) error)
|
||||||
|
// channelmonitorhistoryDescCheckedAt is the schema descriptor for checked_at field.
|
||||||
|
channelmonitorhistoryDescCheckedAt := channelmonitorhistoryFields[6].Descriptor()
|
||||||
|
// channelmonitorhistory.DefaultCheckedAt holds the default value on creation for the checked_at field.
|
||||||
|
channelmonitorhistory.DefaultCheckedAt = channelmonitorhistoryDescCheckedAt.Default.(func() time.Time)
|
||||||
|
channelmonitorrequesttemplateMixin := schema.ChannelMonitorRequestTemplate{}.Mixin()
|
||||||
|
channelmonitorrequesttemplateMixinFields0 := channelmonitorrequesttemplateMixin[0].Fields()
|
||||||
|
_ = channelmonitorrequesttemplateMixinFields0
|
||||||
|
channelmonitorrequesttemplateFields := schema.ChannelMonitorRequestTemplate{}.Fields()
|
||||||
|
_ = channelmonitorrequesttemplateFields
|
||||||
|
// channelmonitorrequesttemplateDescCreatedAt is the schema descriptor for created_at field.
|
||||||
|
channelmonitorrequesttemplateDescCreatedAt := channelmonitorrequesttemplateMixinFields0[0].Descriptor()
|
||||||
|
// channelmonitorrequesttemplate.DefaultCreatedAt holds the default value on creation for the created_at field.
|
||||||
|
channelmonitorrequesttemplate.DefaultCreatedAt = channelmonitorrequesttemplateDescCreatedAt.Default.(func() time.Time)
|
||||||
|
// channelmonitorrequesttemplateDescUpdatedAt is the schema descriptor for updated_at field.
|
||||||
|
channelmonitorrequesttemplateDescUpdatedAt := channelmonitorrequesttemplateMixinFields0[1].Descriptor()
|
||||||
|
// channelmonitorrequesttemplate.DefaultUpdatedAt holds the default value on creation for the updated_at field.
|
||||||
|
channelmonitorrequesttemplate.DefaultUpdatedAt = channelmonitorrequesttemplateDescUpdatedAt.Default.(func() time.Time)
|
||||||
|
// channelmonitorrequesttemplate.UpdateDefaultUpdatedAt holds the default value on update for the updated_at field.
|
||||||
|
channelmonitorrequesttemplate.UpdateDefaultUpdatedAt = channelmonitorrequesttemplateDescUpdatedAt.UpdateDefault.(func() time.Time)
|
||||||
|
// channelmonitorrequesttemplateDescName is the schema descriptor for name field.
|
||||||
|
channelmonitorrequesttemplateDescName := channelmonitorrequesttemplateFields[0].Descriptor()
|
||||||
|
// channelmonitorrequesttemplate.NameValidator is a validator for the "name" field. It is called by the builders before save.
|
||||||
|
channelmonitorrequesttemplate.NameValidator = func() func(string) error {
|
||||||
|
validators := channelmonitorrequesttemplateDescName.Validators
|
||||||
|
fns := [...]func(string) error{
|
||||||
|
validators[0].(func(string) error),
|
||||||
|
validators[1].(func(string) error),
|
||||||
|
}
|
||||||
|
return func(name string) error {
|
||||||
|
for _, fn := range fns {
|
||||||
|
if err := fn(name); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
// channelmonitorrequesttemplateDescDescription is the schema descriptor for description field.
|
||||||
|
channelmonitorrequesttemplateDescDescription := channelmonitorrequesttemplateFields[2].Descriptor()
|
||||||
|
// channelmonitorrequesttemplate.DefaultDescription holds the default value on creation for the description field.
|
||||||
|
channelmonitorrequesttemplate.DefaultDescription = channelmonitorrequesttemplateDescDescription.Default.(string)
|
||||||
|
// channelmonitorrequesttemplate.DescriptionValidator is a validator for the "description" field. It is called by the builders before save.
|
||||||
|
channelmonitorrequesttemplate.DescriptionValidator = channelmonitorrequesttemplateDescDescription.Validators[0].(func(string) error)
|
||||||
|
// channelmonitorrequesttemplateDescExtraHeaders is the schema descriptor for extra_headers field.
|
||||||
|
channelmonitorrequesttemplateDescExtraHeaders := channelmonitorrequesttemplateFields[3].Descriptor()
|
||||||
|
// channelmonitorrequesttemplate.DefaultExtraHeaders holds the default value on creation for the extra_headers field.
|
||||||
|
channelmonitorrequesttemplate.DefaultExtraHeaders = channelmonitorrequesttemplateDescExtraHeaders.Default.(map[string]string)
|
||||||
|
// channelmonitorrequesttemplateDescBodyOverrideMode is the schema descriptor for body_override_mode field.
|
||||||
|
channelmonitorrequesttemplateDescBodyOverrideMode := channelmonitorrequesttemplateFields[4].Descriptor()
|
||||||
|
// channelmonitorrequesttemplate.DefaultBodyOverrideMode holds the default value on creation for the body_override_mode field.
|
||||||
|
channelmonitorrequesttemplate.DefaultBodyOverrideMode = channelmonitorrequesttemplateDescBodyOverrideMode.Default.(string)
|
||||||
|
// channelmonitorrequesttemplate.BodyOverrideModeValidator is a validator for the "body_override_mode" field. It is called by the builders before save.
|
||||||
|
channelmonitorrequesttemplate.BodyOverrideModeValidator = channelmonitorrequesttemplateDescBodyOverrideMode.Validators[0].(func(string) error)
|
||||||
errorpassthroughruleMixin := schema.ErrorPassthroughRule{}.Mixin()
|
errorpassthroughruleMixin := schema.ErrorPassthroughRule{}.Mixin()
|
||||||
errorpassthroughruleMixinFields0 := errorpassthroughruleMixin[0].Fields()
|
errorpassthroughruleMixinFields0 := errorpassthroughruleMixin[0].Fields()
|
||||||
_ = errorpassthroughruleMixinFields0
|
_ = errorpassthroughruleMixinFields0
|
||||||
@ -595,6 +845,10 @@ func init() {
|
|||||||
groupDescMessagesDispatchModelConfig := groupFields[26].Descriptor()
|
groupDescMessagesDispatchModelConfig := groupFields[26].Descriptor()
|
||||||
// group.DefaultMessagesDispatchModelConfig holds the default value on creation for the messages_dispatch_model_config field.
|
// group.DefaultMessagesDispatchModelConfig holds the default value on creation for the messages_dispatch_model_config field.
|
||||||
group.DefaultMessagesDispatchModelConfig = groupDescMessagesDispatchModelConfig.Default.(domain.OpenAIMessagesDispatchModelConfig)
|
group.DefaultMessagesDispatchModelConfig = groupDescMessagesDispatchModelConfig.Default.(domain.OpenAIMessagesDispatchModelConfig)
|
||||||
|
// groupDescRpmLimit is the schema descriptor for rpm_limit field.
|
||||||
|
groupDescRpmLimit := groupFields[27].Descriptor()
|
||||||
|
// group.DefaultRpmLimit holds the default value on creation for the rpm_limit field.
|
||||||
|
group.DefaultRpmLimit = groupDescRpmLimit.Default.(int)
|
||||||
idempotencyrecordMixin := schema.IdempotencyRecord{}.Mixin()
|
idempotencyrecordMixin := schema.IdempotencyRecord{}.Mixin()
|
||||||
idempotencyrecordMixinFields0 := idempotencyrecordMixin[0].Fields()
|
idempotencyrecordMixinFields0 := idempotencyrecordMixin[0].Fields()
|
||||||
_ = idempotencyrecordMixinFields0
|
_ = idempotencyrecordMixinFields0
|
||||||
@ -1575,6 +1829,10 @@ func init() {
|
|||||||
userDescTotalRecharged := userFields[18].Descriptor()
|
userDescTotalRecharged := userFields[18].Descriptor()
|
||||||
// user.DefaultTotalRecharged holds the default value on creation for the total_recharged field.
|
// user.DefaultTotalRecharged holds the default value on creation for the total_recharged field.
|
||||||
user.DefaultTotalRecharged = userDescTotalRecharged.Default.(float64)
|
user.DefaultTotalRecharged = userDescTotalRecharged.Default.(float64)
|
||||||
|
// userDescRpmLimit is the schema descriptor for rpm_limit field.
|
||||||
|
userDescRpmLimit := userFields[19].Descriptor()
|
||||||
|
// user.DefaultRpmLimit holds the default value on creation for the rpm_limit field.
|
||||||
|
user.DefaultRpmLimit = userDescRpmLimit.Default.(int)
|
||||||
userallowedgroupFields := schema.UserAllowedGroup{}.Fields()
|
userallowedgroupFields := schema.UserAllowedGroup{}.Fields()
|
||||||
_ = userallowedgroupFields
|
_ = userallowedgroupFields
|
||||||
// userallowedgroupDescCreatedAt is the schema descriptor for created_at field.
|
// userallowedgroupDescCreatedAt is the schema descriptor for created_at field.
|
||||||
|
|||||||
110
backend/ent/schema/channel_monitor.go
Normal file
110
backend/ent/schema/channel_monitor.go
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
package schema
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/schema/mixins"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect/entsql"
|
||||||
|
"entgo.io/ent/schema"
|
||||||
|
"entgo.io/ent/schema/edge"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"entgo.io/ent/schema/index"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitor holds the schema definition for the ChannelMonitor entity.
|
||||||
|
// 渠道监控配置:定期对指定 provider/endpoint/api_key 下的模型做心跳测试。
|
||||||
|
type ChannelMonitor struct {
|
||||||
|
ent.Schema
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitor) Annotations() []schema.Annotation {
|
||||||
|
return []schema.Annotation{
|
||||||
|
entsql.Annotation{Table: "channel_monitors"},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitor) Mixin() []ent.Mixin {
|
||||||
|
return []ent.Mixin{
|
||||||
|
mixins.TimeMixin{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitor) Fields() []ent.Field {
|
||||||
|
return []ent.Field{
|
||||||
|
field.String("name").
|
||||||
|
NotEmpty().
|
||||||
|
MaxLen(100),
|
||||||
|
field.Enum("provider").
|
||||||
|
Values("openai", "anthropic", "gemini"),
|
||||||
|
field.String("endpoint").
|
||||||
|
NotEmpty().
|
||||||
|
MaxLen(500).
|
||||||
|
Comment("Provider base origin, e.g. https://api.openai.com"),
|
||||||
|
field.String("api_key_encrypted").
|
||||||
|
NotEmpty().
|
||||||
|
Sensitive().
|
||||||
|
Comment("AES-256-GCM encrypted API key"),
|
||||||
|
field.String("primary_model").
|
||||||
|
NotEmpty().
|
||||||
|
MaxLen(200),
|
||||||
|
field.JSON("extra_models", []string{}).
|
||||||
|
Default([]string{}).
|
||||||
|
Comment("Additional model names to test alongside primary_model"),
|
||||||
|
field.String("group_name").
|
||||||
|
Optional().
|
||||||
|
Default("").
|
||||||
|
MaxLen(100),
|
||||||
|
field.Bool("enabled").
|
||||||
|
Default(true),
|
||||||
|
field.Int("interval_seconds").
|
||||||
|
Range(15, 3600),
|
||||||
|
field.Time("last_checked_at").
|
||||||
|
Optional().
|
||||||
|
Nillable(),
|
||||||
|
field.Int64("created_by"),
|
||||||
|
|
||||||
|
// ---- 自定义请求快照字段(来自模板 / 手动编辑) ----
|
||||||
|
|
||||||
|
// template_id: 关联的请求模板 ID(仅用于 UI 分组 + 一键应用)。
|
||||||
|
// 实际运行时 checker 只读下面 3 个快照字段,**不再回查模板表**。
|
||||||
|
// 模板被删除时此字段会被 SET NULL(见 Edges 的 OnDelete 注解)。
|
||||||
|
field.Int64("template_id").
|
||||||
|
Optional().
|
||||||
|
Nillable(),
|
||||||
|
// extra_headers: 自定义 HTTP 头快照(来自模板 or 用户手填)。
|
||||||
|
// 运行时 merge 进 adapter 默认 headers。
|
||||||
|
field.JSON("extra_headers", map[string]string{}).
|
||||||
|
Default(map[string]string{}),
|
||||||
|
// body_override_mode: 同 ChannelMonitorRequestTemplate.body_override_mode
|
||||||
|
field.String("body_override_mode").
|
||||||
|
Default("off").
|
||||||
|
MaxLen(10),
|
||||||
|
// body_override: 同 ChannelMonitorRequestTemplate.body_override
|
||||||
|
field.JSON("body_override", map[string]any{}).
|
||||||
|
Optional(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitor) Edges() []ent.Edge {
|
||||||
|
return []ent.Edge{
|
||||||
|
edge.To("history", ChannelMonitorHistory.Type).
|
||||||
|
Annotations(entsql.OnDelete(entsql.Cascade)),
|
||||||
|
edge.To("daily_rollups", ChannelMonitorDailyRollup.Type).
|
||||||
|
Annotations(entsql.OnDelete(entsql.Cascade)),
|
||||||
|
// 关联请求模板:模板被删除时 template_id 自动置空,
|
||||||
|
// 监控本身保留(继续用快照字段跑)。
|
||||||
|
edge.To("request_template", ChannelMonitorRequestTemplate.Type).
|
||||||
|
Field("template_id").
|
||||||
|
Unique().
|
||||||
|
Annotations(entsql.OnDelete(entsql.SetNull)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitor) Indexes() []ent.Index {
|
||||||
|
return []ent.Index{
|
||||||
|
index.Fields("enabled", "last_checked_at"),
|
||||||
|
index.Fields("provider"),
|
||||||
|
index.Fields("group_name"),
|
||||||
|
index.Fields("template_id"),
|
||||||
|
}
|
||||||
|
}
|
||||||
66
backend/ent/schema/channel_monitor_daily_rollup.go
Normal file
66
backend/ent/schema/channel_monitor_daily_rollup.go
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
package schema
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect"
|
||||||
|
"entgo.io/ent/dialect/entsql"
|
||||||
|
"entgo.io/ent/schema"
|
||||||
|
"entgo.io/ent/schema/edge"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"entgo.io/ent/schema/index"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorDailyRollup 按 (monitor_id, model, bucket_date) 维度聚合的渠道监控日统计。
|
||||||
|
// 每天的明细被收敛为一行(保留 status 分布 + 延迟和),用于 7d/15d/30d 窗口的可用率
|
||||||
|
// 加权计算(avg_latency = sum_latency_ms / count_latency;availability = ok_count / total_checks)。
|
||||||
|
// 超过保留期由每日维护任务分批物理删(不用软删除,理由同 channel_monitor_history)。
|
||||||
|
type ChannelMonitorDailyRollup struct {
|
||||||
|
ent.Schema
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorDailyRollup) Annotations() []schema.Annotation {
|
||||||
|
return []schema.Annotation{
|
||||||
|
entsql.Annotation{Table: "channel_monitor_daily_rollups"},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorDailyRollup) Fields() []ent.Field {
|
||||||
|
return []ent.Field{
|
||||||
|
field.Int64("monitor_id"),
|
||||||
|
field.String("model").
|
||||||
|
NotEmpty().
|
||||||
|
MaxLen(200),
|
||||||
|
field.Time("bucket_date").
|
||||||
|
SchemaType(map[string]string{dialect.Postgres: "date"}),
|
||||||
|
field.Int("total_checks").Default(0),
|
||||||
|
field.Int("ok_count").Default(0),
|
||||||
|
field.Int("operational_count").Default(0),
|
||||||
|
field.Int("degraded_count").Default(0),
|
||||||
|
field.Int("failed_count").Default(0),
|
||||||
|
field.Int("error_count").Default(0),
|
||||||
|
field.Int64("sum_latency_ms").Default(0),
|
||||||
|
field.Int("count_latency").Default(0),
|
||||||
|
field.Int64("sum_ping_latency_ms").Default(0),
|
||||||
|
field.Int("count_ping_latency").Default(0),
|
||||||
|
field.Time("computed_at").Default(time.Now).UpdateDefault(time.Now),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorDailyRollup) Edges() []ent.Edge {
|
||||||
|
return []ent.Edge{
|
||||||
|
edge.From("monitor", ChannelMonitor.Type).
|
||||||
|
Ref("daily_rollups").
|
||||||
|
Field("monitor_id").
|
||||||
|
Unique().
|
||||||
|
Required(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorDailyRollup) Indexes() []ent.Index {
|
||||||
|
return []ent.Index{
|
||||||
|
index.Fields("monitor_id", "model", "bucket_date").Unique(),
|
||||||
|
index.Fields("bucket_date"),
|
||||||
|
}
|
||||||
|
}
|
||||||
66
backend/ent/schema/channel_monitor_history.go
Normal file
66
backend/ent/schema/channel_monitor_history.go
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
package schema
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect/entsql"
|
||||||
|
"entgo.io/ent/schema"
|
||||||
|
"entgo.io/ent/schema/edge"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"entgo.io/ent/schema/index"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorHistory holds the schema definition for the ChannelMonitorHistory entity.
|
||||||
|
// 渠道监控历史:每次检测每个模型一行记录。明细只保留 1 天,超过 1 天由每日维护任务
|
||||||
|
// 先聚合到 channel_monitor_daily_rollups,再分批物理删(不用软删除:日志类表无恢复
|
||||||
|
// 需求,软删会让行和索引只增不减,徒增磁盘和查询开销)。
|
||||||
|
type ChannelMonitorHistory struct {
|
||||||
|
ent.Schema
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorHistory) Annotations() []schema.Annotation {
|
||||||
|
return []schema.Annotation{
|
||||||
|
entsql.Annotation{Table: "channel_monitor_histories"},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorHistory) Fields() []ent.Field {
|
||||||
|
return []ent.Field{
|
||||||
|
field.Int64("monitor_id"),
|
||||||
|
field.String("model").
|
||||||
|
NotEmpty().
|
||||||
|
MaxLen(200),
|
||||||
|
field.Enum("status").
|
||||||
|
Values("operational", "degraded", "failed", "error"),
|
||||||
|
field.Int("latency_ms").
|
||||||
|
Optional().
|
||||||
|
Nillable(),
|
||||||
|
field.Int("ping_latency_ms").
|
||||||
|
Optional().
|
||||||
|
Nillable(),
|
||||||
|
field.String("message").
|
||||||
|
Optional().
|
||||||
|
Default("").
|
||||||
|
MaxLen(500),
|
||||||
|
field.Time("checked_at").
|
||||||
|
Default(time.Now),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorHistory) Edges() []ent.Edge {
|
||||||
|
return []ent.Edge{
|
||||||
|
edge.From("monitor", ChannelMonitor.Type).
|
||||||
|
Ref("history").
|
||||||
|
Field("monitor_id").
|
||||||
|
Unique().
|
||||||
|
Required(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorHistory) Indexes() []ent.Index {
|
||||||
|
return []ent.Index{
|
||||||
|
index.Fields("monitor_id", "model", "checked_at"),
|
||||||
|
index.Fields("checked_at"),
|
||||||
|
}
|
||||||
|
}
|
||||||
80
backend/ent/schema/channel_monitor_request_template.go
Normal file
80
backend/ent/schema/channel_monitor_request_template.go
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
package schema
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Wei-Shaw/sub2api/ent/schema/mixins"
|
||||||
|
|
||||||
|
"entgo.io/ent"
|
||||||
|
"entgo.io/ent/dialect/entsql"
|
||||||
|
"entgo.io/ent/schema"
|
||||||
|
"entgo.io/ent/schema/edge"
|
||||||
|
"entgo.io/ent/schema/field"
|
||||||
|
"entgo.io/ent/schema/index"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplate 请求模板:一组可复用的 headers + 可选 body 覆盖配置。
|
||||||
|
//
|
||||||
|
// 语义为快照:模板被"应用"到监控时,extra_headers / body_override_mode / body_override
|
||||||
|
// 会被**拷贝**到 channel_monitors 同名字段;后续模板变动不会自动影响已应用的监控——
|
||||||
|
// 必须用户主动在模板编辑 Dialog 里点「应用到关联监控」才会覆盖快照。
|
||||||
|
// 这样模板改错不会瞬间打挂所有已经跑起来的监控。
|
||||||
|
type ChannelMonitorRequestTemplate struct {
|
||||||
|
ent.Schema
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorRequestTemplate) Annotations() []schema.Annotation {
|
||||||
|
return []schema.Annotation{
|
||||||
|
entsql.Annotation{Table: "channel_monitor_request_templates"},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorRequestTemplate) Mixin() []ent.Mixin {
|
||||||
|
return []ent.Mixin{
|
||||||
|
mixins.TimeMixin{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorRequestTemplate) Fields() []ent.Field {
|
||||||
|
return []ent.Field{
|
||||||
|
field.String("name").
|
||||||
|
NotEmpty().
|
||||||
|
MaxLen(100),
|
||||||
|
field.Enum("provider").
|
||||||
|
Values("openai", "anthropic", "gemini"),
|
||||||
|
field.String("description").
|
||||||
|
Optional().
|
||||||
|
Default("").
|
||||||
|
MaxLen(500),
|
||||||
|
// extra_headers: 用户自定义 HTTP 头(如 User-Agent 伪装)。
|
||||||
|
// 运行时 merge 进 adapter 默认 headers,用户值优先;
|
||||||
|
// hop-by-hop 黑名单(Host/Content-Length/...)由 checker 过滤。
|
||||||
|
field.JSON("extra_headers", map[string]string{}).
|
||||||
|
Default(map[string]string{}),
|
||||||
|
// body_override_mode: 'off' | 'merge' | 'replace'
|
||||||
|
// off - 用 adapter 默认 body(忽略 body_override)
|
||||||
|
// merge - adapter 默认 body 与 body_override 浅合并(body_override 优先,
|
||||||
|
// model/messages/contents 等关键字段在 checker 里走黑名单跳过)
|
||||||
|
// replace - 直接用 body_override 作为完整 body;此时跳过 challenge 校验,
|
||||||
|
// 改为 HTTP 2xx + 响应文本非空即视为可用
|
||||||
|
field.String("body_override_mode").
|
||||||
|
Default("off").
|
||||||
|
MaxLen(10),
|
||||||
|
// body_override: JSON 对象,根据 body_override_mode 使用。
|
||||||
|
// 用 map[string]any 以便前端传任意结构(含嵌套)。
|
||||||
|
field.JSON("body_override", map[string]any{}).
|
||||||
|
Optional(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorRequestTemplate) Edges() []ent.Edge {
|
||||||
|
return []ent.Edge{
|
||||||
|
edge.From("monitors", ChannelMonitor.Type).
|
||||||
|
Ref("request_template"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ChannelMonitorRequestTemplate) Indexes() []ent.Index {
|
||||||
|
return []ent.Index{
|
||||||
|
// 同一 provider 内 name 唯一:允许 Anthropic + OpenAI 重名 "伪装官方客户端"。
|
||||||
|
index.Fields("provider", "name").Unique(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -145,6 +145,11 @@ func (Group) Fields() []ent.Field {
|
|||||||
Default(domain.OpenAIMessagesDispatchModelConfig{}).
|
Default(domain.OpenAIMessagesDispatchModelConfig{}).
|
||||||
SchemaType(map[string]string{dialect.Postgres: "jsonb"}).
|
SchemaType(map[string]string{dialect.Postgres: "jsonb"}).
|
||||||
Comment("OpenAI Messages 调度模型配置:按 Claude 系列/精确模型映射到目标 GPT 模型"),
|
Comment("OpenAI Messages 调度模型配置:按 Claude 系列/精确模型映射到目标 GPT 模型"),
|
||||||
|
|
||||||
|
// 分组级每分钟请求数上限(0 = 不限制)。设置后优先于用户级兜底生效。
|
||||||
|
field.Int("rpm_limit").
|
||||||
|
Default(0).
|
||||||
|
Comment("分组 RPM 上限,0 表示不限制;设置后接管该分组用户的限流"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -108,6 +108,10 @@ func (User) Fields() []ent.Field {
|
|||||||
field.Float("total_recharged").
|
field.Float("total_recharged").
|
||||||
SchemaType(map[string]string{dialect.Postgres: "decimal(20,8)"}).
|
SchemaType(map[string]string{dialect.Postgres: "decimal(20,8)"}).
|
||||||
Default(0),
|
Default(0),
|
||||||
|
|
||||||
|
// 用户级每分钟请求数上限(0 = 不限制)。仅当所在分组未设置 rpm_limit 时作为兜底生效。
|
||||||
|
field.Int("rpm_limit").
|
||||||
|
Default(0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,6 +28,14 @@ type Tx struct {
|
|||||||
AuthIdentity *AuthIdentityClient
|
AuthIdentity *AuthIdentityClient
|
||||||
// AuthIdentityChannel is the client for interacting with the AuthIdentityChannel builders.
|
// AuthIdentityChannel is the client for interacting with the AuthIdentityChannel builders.
|
||||||
AuthIdentityChannel *AuthIdentityChannelClient
|
AuthIdentityChannel *AuthIdentityChannelClient
|
||||||
|
// ChannelMonitor is the client for interacting with the ChannelMonitor builders.
|
||||||
|
ChannelMonitor *ChannelMonitorClient
|
||||||
|
// ChannelMonitorDailyRollup is the client for interacting with the ChannelMonitorDailyRollup builders.
|
||||||
|
ChannelMonitorDailyRollup *ChannelMonitorDailyRollupClient
|
||||||
|
// ChannelMonitorHistory is the client for interacting with the ChannelMonitorHistory builders.
|
||||||
|
ChannelMonitorHistory *ChannelMonitorHistoryClient
|
||||||
|
// ChannelMonitorRequestTemplate is the client for interacting with the ChannelMonitorRequestTemplate builders.
|
||||||
|
ChannelMonitorRequestTemplate *ChannelMonitorRequestTemplateClient
|
||||||
// ErrorPassthroughRule is the client for interacting with the ErrorPassthroughRule builders.
|
// ErrorPassthroughRule is the client for interacting with the ErrorPassthroughRule builders.
|
||||||
ErrorPassthroughRule *ErrorPassthroughRuleClient
|
ErrorPassthroughRule *ErrorPassthroughRuleClient
|
||||||
// Group is the client for interacting with the Group builders.
|
// Group is the client for interacting with the Group builders.
|
||||||
@ -212,6 +220,10 @@ func (tx *Tx) init() {
|
|||||||
tx.AnnouncementRead = NewAnnouncementReadClient(tx.config)
|
tx.AnnouncementRead = NewAnnouncementReadClient(tx.config)
|
||||||
tx.AuthIdentity = NewAuthIdentityClient(tx.config)
|
tx.AuthIdentity = NewAuthIdentityClient(tx.config)
|
||||||
tx.AuthIdentityChannel = NewAuthIdentityChannelClient(tx.config)
|
tx.AuthIdentityChannel = NewAuthIdentityChannelClient(tx.config)
|
||||||
|
tx.ChannelMonitor = NewChannelMonitorClient(tx.config)
|
||||||
|
tx.ChannelMonitorDailyRollup = NewChannelMonitorDailyRollupClient(tx.config)
|
||||||
|
tx.ChannelMonitorHistory = NewChannelMonitorHistoryClient(tx.config)
|
||||||
|
tx.ChannelMonitorRequestTemplate = NewChannelMonitorRequestTemplateClient(tx.config)
|
||||||
tx.ErrorPassthroughRule = NewErrorPassthroughRuleClient(tx.config)
|
tx.ErrorPassthroughRule = NewErrorPassthroughRuleClient(tx.config)
|
||||||
tx.Group = NewGroupClient(tx.config)
|
tx.Group = NewGroupClient(tx.config)
|
||||||
tx.IdempotencyRecord = NewIdempotencyRecordClient(tx.config)
|
tx.IdempotencyRecord = NewIdempotencyRecordClient(tx.config)
|
||||||
|
|||||||
@ -61,6 +61,8 @@ type User struct {
|
|||||||
BalanceNotifyExtraEmails string `json:"balance_notify_extra_emails,omitempty"`
|
BalanceNotifyExtraEmails string `json:"balance_notify_extra_emails,omitempty"`
|
||||||
// TotalRecharged holds the value of the "total_recharged" field.
|
// TotalRecharged holds the value of the "total_recharged" field.
|
||||||
TotalRecharged float64 `json:"total_recharged,omitempty"`
|
TotalRecharged float64 `json:"total_recharged,omitempty"`
|
||||||
|
// RpmLimit holds the value of the "rpm_limit" field.
|
||||||
|
RpmLimit int `json:"rpm_limit,omitempty"`
|
||||||
// Edges holds the relations/edges for other nodes in the graph.
|
// Edges holds the relations/edges for other nodes in the graph.
|
||||||
// The values are being populated by the UserQuery when eager-loading is set.
|
// The values are being populated by the UserQuery when eager-loading is set.
|
||||||
Edges UserEdges `json:"edges"`
|
Edges UserEdges `json:"edges"`
|
||||||
@ -226,7 +228,7 @@ func (*User) scanValues(columns []string) ([]any, error) {
|
|||||||
values[i] = new(sql.NullBool)
|
values[i] = new(sql.NullBool)
|
||||||
case user.FieldBalance, user.FieldBalanceNotifyThreshold, user.FieldTotalRecharged:
|
case user.FieldBalance, user.FieldBalanceNotifyThreshold, user.FieldTotalRecharged:
|
||||||
values[i] = new(sql.NullFloat64)
|
values[i] = new(sql.NullFloat64)
|
||||||
case user.FieldID, user.FieldConcurrency:
|
case user.FieldID, user.FieldConcurrency, user.FieldRpmLimit:
|
||||||
values[i] = new(sql.NullInt64)
|
values[i] = new(sql.NullInt64)
|
||||||
case user.FieldEmail, user.FieldPasswordHash, user.FieldRole, user.FieldStatus, user.FieldUsername, user.FieldNotes, user.FieldTotpSecretEncrypted, user.FieldSignupSource, user.FieldBalanceNotifyThresholdType, user.FieldBalanceNotifyExtraEmails:
|
case user.FieldEmail, user.FieldPasswordHash, user.FieldRole, user.FieldStatus, user.FieldUsername, user.FieldNotes, user.FieldTotpSecretEncrypted, user.FieldSignupSource, user.FieldBalanceNotifyThresholdType, user.FieldBalanceNotifyExtraEmails:
|
||||||
values[i] = new(sql.NullString)
|
values[i] = new(sql.NullString)
|
||||||
@ -391,6 +393,12 @@ func (_m *User) assignValues(columns []string, values []any) error {
|
|||||||
} else if value.Valid {
|
} else if value.Valid {
|
||||||
_m.TotalRecharged = value.Float64
|
_m.TotalRecharged = value.Float64
|
||||||
}
|
}
|
||||||
|
case user.FieldRpmLimit:
|
||||||
|
if value, ok := values[i].(*sql.NullInt64); !ok {
|
||||||
|
return fmt.Errorf("unexpected type %T for field rpm_limit", values[i])
|
||||||
|
} else if value.Valid {
|
||||||
|
_m.RpmLimit = int(value.Int64)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
_m.selectValues.Set(columns[i], values[i])
|
_m.selectValues.Set(columns[i], values[i])
|
||||||
}
|
}
|
||||||
@ -569,6 +577,9 @@ func (_m *User) String() string {
|
|||||||
builder.WriteString(", ")
|
builder.WriteString(", ")
|
||||||
builder.WriteString("total_recharged=")
|
builder.WriteString("total_recharged=")
|
||||||
builder.WriteString(fmt.Sprintf("%v", _m.TotalRecharged))
|
builder.WriteString(fmt.Sprintf("%v", _m.TotalRecharged))
|
||||||
|
builder.WriteString(", ")
|
||||||
|
builder.WriteString("rpm_limit=")
|
||||||
|
builder.WriteString(fmt.Sprintf("%v", _m.RpmLimit))
|
||||||
builder.WriteByte(')')
|
builder.WriteByte(')')
|
||||||
return builder.String()
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,6 +59,8 @@ const (
|
|||||||
FieldBalanceNotifyExtraEmails = "balance_notify_extra_emails"
|
FieldBalanceNotifyExtraEmails = "balance_notify_extra_emails"
|
||||||
// FieldTotalRecharged holds the string denoting the total_recharged field in the database.
|
// FieldTotalRecharged holds the string denoting the total_recharged field in the database.
|
||||||
FieldTotalRecharged = "total_recharged"
|
FieldTotalRecharged = "total_recharged"
|
||||||
|
// FieldRpmLimit holds the string denoting the rpm_limit field in the database.
|
||||||
|
FieldRpmLimit = "rpm_limit"
|
||||||
// EdgeAPIKeys holds the string denoting the api_keys edge name in mutations.
|
// EdgeAPIKeys holds the string denoting the api_keys edge name in mutations.
|
||||||
EdgeAPIKeys = "api_keys"
|
EdgeAPIKeys = "api_keys"
|
||||||
// EdgeRedeemCodes holds the string denoting the redeem_codes edge name in mutations.
|
// EdgeRedeemCodes holds the string denoting the redeem_codes edge name in mutations.
|
||||||
@ -203,6 +205,7 @@ var Columns = []string{
|
|||||||
FieldBalanceNotifyThreshold,
|
FieldBalanceNotifyThreshold,
|
||||||
FieldBalanceNotifyExtraEmails,
|
FieldBalanceNotifyExtraEmails,
|
||||||
FieldTotalRecharged,
|
FieldTotalRecharged,
|
||||||
|
FieldRpmLimit,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -271,6 +274,8 @@ var (
|
|||||||
DefaultBalanceNotifyExtraEmails string
|
DefaultBalanceNotifyExtraEmails string
|
||||||
// DefaultTotalRecharged holds the default value on creation for the "total_recharged" field.
|
// DefaultTotalRecharged holds the default value on creation for the "total_recharged" field.
|
||||||
DefaultTotalRecharged float64
|
DefaultTotalRecharged float64
|
||||||
|
// DefaultRpmLimit holds the default value on creation for the "rpm_limit" field.
|
||||||
|
DefaultRpmLimit int
|
||||||
)
|
)
|
||||||
|
|
||||||
// OrderOption defines the ordering options for the User queries.
|
// OrderOption defines the ordering options for the User queries.
|
||||||
@ -391,6 +396,11 @@ func ByTotalRecharged(opts ...sql.OrderTermOption) OrderOption {
|
|||||||
return sql.OrderByField(FieldTotalRecharged, opts...).ToFunc()
|
return sql.OrderByField(FieldTotalRecharged, opts...).ToFunc()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ByRpmLimit orders the results by the rpm_limit field.
|
||||||
|
func ByRpmLimit(opts ...sql.OrderTermOption) OrderOption {
|
||||||
|
return sql.OrderByField(FieldRpmLimit, opts...).ToFunc()
|
||||||
|
}
|
||||||
|
|
||||||
// ByAPIKeysCount orders the results by api_keys count.
|
// ByAPIKeysCount orders the results by api_keys count.
|
||||||
func ByAPIKeysCount(opts ...sql.OrderTermOption) OrderOption {
|
func ByAPIKeysCount(opts ...sql.OrderTermOption) OrderOption {
|
||||||
return func(s *sql.Selector) {
|
return func(s *sql.Selector) {
|
||||||
|
|||||||
@ -165,6 +165,11 @@ func TotalRecharged(v float64) predicate.User {
|
|||||||
return predicate.User(sql.FieldEQ(FieldTotalRecharged, v))
|
return predicate.User(sql.FieldEQ(FieldTotalRecharged, v))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RpmLimit applies equality check predicate on the "rpm_limit" field. It's identical to RpmLimitEQ.
|
||||||
|
func RpmLimit(v int) predicate.User {
|
||||||
|
return predicate.User(sql.FieldEQ(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
// CreatedAtEQ applies the EQ predicate on the "created_at" field.
|
// CreatedAtEQ applies the EQ predicate on the "created_at" field.
|
||||||
func CreatedAtEQ(v time.Time) predicate.User {
|
func CreatedAtEQ(v time.Time) predicate.User {
|
||||||
return predicate.User(sql.FieldEQ(FieldCreatedAt, v))
|
return predicate.User(sql.FieldEQ(FieldCreatedAt, v))
|
||||||
@ -1295,6 +1300,46 @@ func TotalRechargedLTE(v float64) predicate.User {
|
|||||||
return predicate.User(sql.FieldLTE(FieldTotalRecharged, v))
|
return predicate.User(sql.FieldLTE(FieldTotalRecharged, v))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RpmLimitEQ applies the EQ predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitEQ(v int) predicate.User {
|
||||||
|
return predicate.User(sql.FieldEQ(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitNEQ applies the NEQ predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitNEQ(v int) predicate.User {
|
||||||
|
return predicate.User(sql.FieldNEQ(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitIn applies the In predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitIn(vs ...int) predicate.User {
|
||||||
|
return predicate.User(sql.FieldIn(FieldRpmLimit, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitNotIn applies the NotIn predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitNotIn(vs ...int) predicate.User {
|
||||||
|
return predicate.User(sql.FieldNotIn(FieldRpmLimit, vs...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitGT applies the GT predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitGT(v int) predicate.User {
|
||||||
|
return predicate.User(sql.FieldGT(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitGTE applies the GTE predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitGTE(v int) predicate.User {
|
||||||
|
return predicate.User(sql.FieldGTE(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitLT applies the LT predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitLT(v int) predicate.User {
|
||||||
|
return predicate.User(sql.FieldLT(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
// RpmLimitLTE applies the LTE predicate on the "rpm_limit" field.
|
||||||
|
func RpmLimitLTE(v int) predicate.User {
|
||||||
|
return predicate.User(sql.FieldLTE(FieldRpmLimit, v))
|
||||||
|
}
|
||||||
|
|
||||||
// HasAPIKeys applies the HasEdge predicate on the "api_keys" edge.
|
// HasAPIKeys applies the HasEdge predicate on the "api_keys" edge.
|
||||||
func HasAPIKeys() predicate.User {
|
func HasAPIKeys() predicate.User {
|
||||||
return predicate.User(func(s *sql.Selector) {
|
return predicate.User(func(s *sql.Selector) {
|
||||||
|
|||||||
@ -325,6 +325,20 @@ func (_c *UserCreate) SetNillableTotalRecharged(v *float64) *UserCreate {
|
|||||||
return _c
|
return _c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (_c *UserCreate) SetRpmLimit(v int) *UserCreate {
|
||||||
|
_c.mutation.SetRpmLimit(v)
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableRpmLimit sets the "rpm_limit" field if the given value is not nil.
|
||||||
|
func (_c *UserCreate) SetNillableRpmLimit(v *int) *UserCreate {
|
||||||
|
if v != nil {
|
||||||
|
_c.SetRpmLimit(*v)
|
||||||
|
}
|
||||||
|
return _c
|
||||||
|
}
|
||||||
|
|
||||||
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
||||||
func (_c *UserCreate) AddAPIKeyIDs(ids ...int64) *UserCreate {
|
func (_c *UserCreate) AddAPIKeyIDs(ids ...int64) *UserCreate {
|
||||||
_c.mutation.AddAPIKeyIDs(ids...)
|
_c.mutation.AddAPIKeyIDs(ids...)
|
||||||
@ -604,6 +618,10 @@ func (_c *UserCreate) defaults() error {
|
|||||||
v := user.DefaultTotalRecharged
|
v := user.DefaultTotalRecharged
|
||||||
_c.mutation.SetTotalRecharged(v)
|
_c.mutation.SetTotalRecharged(v)
|
||||||
}
|
}
|
||||||
|
if _, ok := _c.mutation.RpmLimit(); !ok {
|
||||||
|
v := user.DefaultRpmLimit
|
||||||
|
_c.mutation.SetRpmLimit(v)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -687,6 +705,9 @@ func (_c *UserCreate) check() error {
|
|||||||
if _, ok := _c.mutation.TotalRecharged(); !ok {
|
if _, ok := _c.mutation.TotalRecharged(); !ok {
|
||||||
return &ValidationError{Name: "total_recharged", err: errors.New(`ent: missing required field "User.total_recharged"`)}
|
return &ValidationError{Name: "total_recharged", err: errors.New(`ent: missing required field "User.total_recharged"`)}
|
||||||
}
|
}
|
||||||
|
if _, ok := _c.mutation.RpmLimit(); !ok {
|
||||||
|
return &ValidationError{Name: "rpm_limit", err: errors.New(`ent: missing required field "User.rpm_limit"`)}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -802,6 +823,10 @@ func (_c *UserCreate) createSpec() (*User, *sqlgraph.CreateSpec) {
|
|||||||
_spec.SetField(user.FieldTotalRecharged, field.TypeFloat64, value)
|
_spec.SetField(user.FieldTotalRecharged, field.TypeFloat64, value)
|
||||||
_node.TotalRecharged = value
|
_node.TotalRecharged = value
|
||||||
}
|
}
|
||||||
|
if value, ok := _c.mutation.RpmLimit(); ok {
|
||||||
|
_spec.SetField(user.FieldRpmLimit, field.TypeInt, value)
|
||||||
|
_node.RpmLimit = value
|
||||||
|
}
|
||||||
if nodes := _c.mutation.APIKeysIDs(); len(nodes) > 0 {
|
if nodes := _c.mutation.APIKeysIDs(); len(nodes) > 0 {
|
||||||
edge := &sqlgraph.EdgeSpec{
|
edge := &sqlgraph.EdgeSpec{
|
||||||
Rel: sqlgraph.O2M,
|
Rel: sqlgraph.O2M,
|
||||||
@ -1362,6 +1387,24 @@ func (u *UserUpsert) AddTotalRecharged(v float64) *UserUpsert {
|
|||||||
return u
|
return u
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (u *UserUpsert) SetRpmLimit(v int) *UserUpsert {
|
||||||
|
u.Set(user.FieldRpmLimit, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateRpmLimit sets the "rpm_limit" field to the value that was provided on create.
|
||||||
|
func (u *UserUpsert) UpdateRpmLimit() *UserUpsert {
|
||||||
|
u.SetExcluded(user.FieldRpmLimit)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRpmLimit adds v to the "rpm_limit" field.
|
||||||
|
func (u *UserUpsert) AddRpmLimit(v int) *UserUpsert {
|
||||||
|
u.Add(user.FieldRpmLimit, v)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
// UpdateNewValues updates the mutable fields using the new values that were set on create.
|
// UpdateNewValues updates the mutable fields using the new values that were set on create.
|
||||||
// Using this option is equivalent to using:
|
// Using this option is equivalent to using:
|
||||||
//
|
//
|
||||||
@ -1771,6 +1814,27 @@ func (u *UserUpsertOne) UpdateTotalRecharged() *UserUpsertOne {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (u *UserUpsertOne) SetRpmLimit(v int) *UserUpsertOne {
|
||||||
|
return u.Update(func(s *UserUpsert) {
|
||||||
|
s.SetRpmLimit(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRpmLimit adds v to the "rpm_limit" field.
|
||||||
|
func (u *UserUpsertOne) AddRpmLimit(v int) *UserUpsertOne {
|
||||||
|
return u.Update(func(s *UserUpsert) {
|
||||||
|
s.AddRpmLimit(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateRpmLimit sets the "rpm_limit" field to the value that was provided on create.
|
||||||
|
func (u *UserUpsertOne) UpdateRpmLimit() *UserUpsertOne {
|
||||||
|
return u.Update(func(s *UserUpsert) {
|
||||||
|
s.UpdateRpmLimit()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Exec executes the query.
|
// Exec executes the query.
|
||||||
func (u *UserUpsertOne) Exec(ctx context.Context) error {
|
func (u *UserUpsertOne) Exec(ctx context.Context) error {
|
||||||
if len(u.create.conflict) == 0 {
|
if len(u.create.conflict) == 0 {
|
||||||
@ -2346,6 +2410,27 @@ func (u *UserUpsertBulk) UpdateTotalRecharged() *UserUpsertBulk {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (u *UserUpsertBulk) SetRpmLimit(v int) *UserUpsertBulk {
|
||||||
|
return u.Update(func(s *UserUpsert) {
|
||||||
|
s.SetRpmLimit(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRpmLimit adds v to the "rpm_limit" field.
|
||||||
|
func (u *UserUpsertBulk) AddRpmLimit(v int) *UserUpsertBulk {
|
||||||
|
return u.Update(func(s *UserUpsert) {
|
||||||
|
s.AddRpmLimit(v)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateRpmLimit sets the "rpm_limit" field to the value that was provided on create.
|
||||||
|
func (u *UserUpsertBulk) UpdateRpmLimit() *UserUpsertBulk {
|
||||||
|
return u.Update(func(s *UserUpsert) {
|
||||||
|
s.UpdateRpmLimit()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Exec executes the query.
|
// Exec executes the query.
|
||||||
func (u *UserUpsertBulk) Exec(ctx context.Context) error {
|
func (u *UserUpsertBulk) Exec(ctx context.Context) error {
|
||||||
if u.create.err != nil {
|
if u.create.err != nil {
|
||||||
|
|||||||
@ -389,6 +389,27 @@ func (_u *UserUpdate) AddTotalRecharged(v float64) *UserUpdate {
|
|||||||
return _u
|
return _u
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (_u *UserUpdate) SetRpmLimit(v int) *UserUpdate {
|
||||||
|
_u.mutation.ResetRpmLimit()
|
||||||
|
_u.mutation.SetRpmLimit(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableRpmLimit sets the "rpm_limit" field if the given value is not nil.
|
||||||
|
func (_u *UserUpdate) SetNillableRpmLimit(v *int) *UserUpdate {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetRpmLimit(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRpmLimit adds value to the "rpm_limit" field.
|
||||||
|
func (_u *UserUpdate) AddRpmLimit(v int) *UserUpdate {
|
||||||
|
_u.mutation.AddRpmLimit(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
||||||
func (_u *UserUpdate) AddAPIKeyIDs(ids ...int64) *UserUpdate {
|
func (_u *UserUpdate) AddAPIKeyIDs(ids ...int64) *UserUpdate {
|
||||||
_u.mutation.AddAPIKeyIDs(ids...)
|
_u.mutation.AddAPIKeyIDs(ids...)
|
||||||
@ -1008,6 +1029,12 @@ func (_u *UserUpdate) sqlSave(ctx context.Context) (_node int, err error) {
|
|||||||
if value, ok := _u.mutation.AddedTotalRecharged(); ok {
|
if value, ok := _u.mutation.AddedTotalRecharged(); ok {
|
||||||
_spec.AddField(user.FieldTotalRecharged, field.TypeFloat64, value)
|
_spec.AddField(user.FieldTotalRecharged, field.TypeFloat64, value)
|
||||||
}
|
}
|
||||||
|
if value, ok := _u.mutation.RpmLimit(); ok {
|
||||||
|
_spec.SetField(user.FieldRpmLimit, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedRpmLimit(); ok {
|
||||||
|
_spec.AddField(user.FieldRpmLimit, field.TypeInt, value)
|
||||||
|
}
|
||||||
if _u.mutation.APIKeysCleared() {
|
if _u.mutation.APIKeysCleared() {
|
||||||
edge := &sqlgraph.EdgeSpec{
|
edge := &sqlgraph.EdgeSpec{
|
||||||
Rel: sqlgraph.O2M,
|
Rel: sqlgraph.O2M,
|
||||||
@ -1930,6 +1957,27 @@ func (_u *UserUpdateOne) AddTotalRecharged(v float64) *UserUpdateOne {
|
|||||||
return _u
|
return _u
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetRpmLimit sets the "rpm_limit" field.
|
||||||
|
func (_u *UserUpdateOne) SetRpmLimit(v int) *UserUpdateOne {
|
||||||
|
_u.mutation.ResetRpmLimit()
|
||||||
|
_u.mutation.SetRpmLimit(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNillableRpmLimit sets the "rpm_limit" field if the given value is not nil.
|
||||||
|
func (_u *UserUpdateOne) SetNillableRpmLimit(v *int) *UserUpdateOne {
|
||||||
|
if v != nil {
|
||||||
|
_u.SetRpmLimit(*v)
|
||||||
|
}
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRpmLimit adds value to the "rpm_limit" field.
|
||||||
|
func (_u *UserUpdateOne) AddRpmLimit(v int) *UserUpdateOne {
|
||||||
|
_u.mutation.AddRpmLimit(v)
|
||||||
|
return _u
|
||||||
|
}
|
||||||
|
|
||||||
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
// AddAPIKeyIDs adds the "api_keys" edge to the APIKey entity by IDs.
|
||||||
func (_u *UserUpdateOne) AddAPIKeyIDs(ids ...int64) *UserUpdateOne {
|
func (_u *UserUpdateOne) AddAPIKeyIDs(ids ...int64) *UserUpdateOne {
|
||||||
_u.mutation.AddAPIKeyIDs(ids...)
|
_u.mutation.AddAPIKeyIDs(ids...)
|
||||||
@ -2579,6 +2627,12 @@ func (_u *UserUpdateOne) sqlSave(ctx context.Context) (_node *User, err error) {
|
|||||||
if value, ok := _u.mutation.AddedTotalRecharged(); ok {
|
if value, ok := _u.mutation.AddedTotalRecharged(); ok {
|
||||||
_spec.AddField(user.FieldTotalRecharged, field.TypeFloat64, value)
|
_spec.AddField(user.FieldTotalRecharged, field.TypeFloat64, value)
|
||||||
}
|
}
|
||||||
|
if value, ok := _u.mutation.RpmLimit(); ok {
|
||||||
|
_spec.SetField(user.FieldRpmLimit, field.TypeInt, value)
|
||||||
|
}
|
||||||
|
if value, ok := _u.mutation.AddedRpmLimit(); ok {
|
||||||
|
_spec.AddField(user.FieldRpmLimit, field.TypeInt, value)
|
||||||
|
}
|
||||||
if _u.mutation.APIKeysCleared() {
|
if _u.mutation.APIKeysCleared() {
|
||||||
edge := &sqlgraph.EdgeSpec{
|
edge := &sqlgraph.EdgeSpec{
|
||||||
Rel: sqlgraph.O2M,
|
Rel: sqlgraph.O2M,
|
||||||
|
|||||||
@ -106,6 +106,7 @@ require (
|
|||||||
github.com/goccy/go-json v0.10.2 // indirect
|
github.com/goccy/go-json v0.10.2 // indirect
|
||||||
github.com/google/go-cmp v0.7.0 // indirect
|
github.com/google/go-cmp v0.7.0 // indirect
|
||||||
github.com/google/go-querystring v1.1.0 // indirect
|
github.com/google/go-querystring v1.1.0 // indirect
|
||||||
|
github.com/google/subcommands v1.2.0 // indirect
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
|
||||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
github.com/hashicorp/hcl/v2 v2.18.1 // indirect
|
github.com/hashicorp/hcl/v2 v2.18.1 // indirect
|
||||||
|
|||||||
@ -166,6 +166,8 @@ github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17
|
|||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs=
|
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs=
|
||||||
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
|
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
|
||||||
|
github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE=
|
||||||
|
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/wire v0.7.0 h1:JxUKI6+CVBgCO2WToKy/nQk0sS+amI9z9EjVmdaocj4=
|
github.com/google/wire v0.7.0 h1:JxUKI6+CVBgCO2WToKy/nQk0sS+amI9z9EjVmdaocj4=
|
||||||
@ -185,6 +187,8 @@ github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4=
|
|||||||
github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y=
|
github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y=
|
||||||
github.com/imroc/req/v3 v3.57.0 h1:LMTUjNRUybUkTPn8oJDq8Kg3JRBOBTcnDhKu7mzupKI=
|
github.com/imroc/req/v3 v3.57.0 h1:LMTUjNRUybUkTPn8oJDq8Kg3JRBOBTcnDhKu7mzupKI=
|
||||||
github.com/imroc/req/v3 v3.57.0/go.mod h1:JL62ey1nvSLq81HORNcosvlf7SxZStONNqOprg0Pz00=
|
github.com/imroc/req/v3 v3.57.0/go.mod h1:JL62ey1nvSLq81HORNcosvlf7SxZStONNqOprg0Pz00=
|
||||||
|
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||||
|
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||||
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||||
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||||
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
|
||||||
@ -220,6 +224,8 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk
|
|||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
|
||||||
|
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||||
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
|
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
|
||||||
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||||
github.com/mdelapenya/tlscert v0.2.0 h1:7H81W6Z/4weDvZBNOfQte5GpIMo0lGYEeWbkGp5LJHI=
|
github.com/mdelapenya/tlscert v0.2.0 h1:7H81W6Z/4weDvZBNOfQte5GpIMo0lGYEeWbkGp5LJHI=
|
||||||
@ -253,6 +259,8 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
|||||||
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
||||||
github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
|
github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
|
||||||
github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
|
||||||
|
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
||||||
|
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
||||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||||
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
|
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
|
||||||
@ -282,6 +290,8 @@ github.com/refraction-networking/utls v1.8.2 h1:j4Q1gJj0xngdeH+Ox/qND11aEfhpgoEv
|
|||||||
github.com/refraction-networking/utls v1.8.2/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM=
|
github.com/refraction-networking/utls v1.8.2/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM=
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||||
|
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||||
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||||
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
||||||
@ -314,6 +324,8 @@ github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
|
|||||||
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
|
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
|
||||||
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
|
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
|
||||||
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
||||||
|
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
|
||||||
|
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
|
||||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
|
github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
|
||||||
|
|||||||
@ -1852,10 +1852,10 @@ func setDefaults() {
|
|||||||
viper.SetDefault("windsurf.docker.discover_interval", "60s")
|
viper.SetDefault("windsurf.docker.discover_interval", "60s")
|
||||||
viper.SetDefault("windsurf.docker.probe_interval", "30s")
|
viper.SetDefault("windsurf.docker.probe_interval", "30s")
|
||||||
viper.SetDefault("windsurf.docker.probe_timeout", "3s")
|
viper.SetDefault("windsurf.docker.probe_timeout", "3s")
|
||||||
viper.SetDefault("windsurf.embedded.binary", "/opt/windsurf/language_server_linux_x64")
|
viper.SetDefault("windsurf.embedded.binary", DefaultWindsurfEmbeddedBinary)
|
||||||
viper.SetDefault("windsurf.embedded.base_port", 42100)
|
viper.SetDefault("windsurf.embedded.base_port", DefaultWindsurfEmbeddedBasePort)
|
||||||
viper.SetDefault("windsurf.embedded.data_dir", "/opt/windsurf/data")
|
viper.SetDefault("windsurf.embedded.data_dir", DefaultWindsurfEmbeddedDataDir)
|
||||||
viper.SetDefault("windsurf.embedded.api_server_url", "https://server.self-serve.windsurf.com")
|
viper.SetDefault("windsurf.embedded.api_server_url", DefaultWindsurfEmbeddedAPIServerURL)
|
||||||
viper.SetDefault("windsurf.refresh.enabled", true)
|
viper.SetDefault("windsurf.refresh.enabled", true)
|
||||||
viper.SetDefault("windsurf.refresh.token_scan_interval", "5m")
|
viper.SetDefault("windsurf.refresh.token_scan_interval", "5m")
|
||||||
viper.SetDefault("windsurf.refresh.refresh_before_expiry", "10m")
|
viper.SetDefault("windsurf.refresh.refresh_before_expiry", "10m")
|
||||||
|
|||||||
@ -3,31 +3,31 @@ package config
|
|||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
type WindsurfConfig struct {
|
type WindsurfConfig struct {
|
||||||
Enabled bool `mapstructure:"enabled"`
|
Enabled bool `mapstructure:"enabled"`
|
||||||
FirebaseAPIKey string `mapstructure:"firebase_api_key"`
|
FirebaseAPIKey string `mapstructure:"firebase_api_key"`
|
||||||
Auth1BaseURL string `mapstructure:"auth1_base_url"`
|
Auth1BaseURL string `mapstructure:"auth1_base_url"`
|
||||||
SeatServiceBaseURL string `mapstructure:"seat_service_base_url"`
|
SeatServiceBaseURL string `mapstructure:"seat_service_base_url"`
|
||||||
CodeiumRegisterURL string `mapstructure:"codeium_register_url"`
|
CodeiumRegisterURL string `mapstructure:"codeium_register_url"`
|
||||||
UserStatusBaseURL string `mapstructure:"user_status_base_url"`
|
UserStatusBaseURL string `mapstructure:"user_status_base_url"`
|
||||||
LSMode string `mapstructure:"ls_mode"`
|
LSMode string `mapstructure:"ls_mode"`
|
||||||
RequestTimeout time.Duration `mapstructure:"request_timeout"`
|
RequestTimeout time.Duration `mapstructure:"request_timeout"`
|
||||||
StartupTimeout time.Duration `mapstructure:"startup_timeout"`
|
StartupTimeout time.Duration `mapstructure:"startup_timeout"`
|
||||||
Docker WindsurfDockerConfig `mapstructure:"docker"`
|
Docker WindsurfDockerConfig `mapstructure:"docker"`
|
||||||
Embedded WindsurfEmbeddedConfig `mapstructure:"embedded"`
|
Embedded WindsurfEmbeddedConfig `mapstructure:"embedded"`
|
||||||
External WindsurfExternalConfig `mapstructure:"external"`
|
External WindsurfExternalConfig `mapstructure:"external"`
|
||||||
Refresh WindsurfRefreshConfig `mapstructure:"refresh"`
|
Refresh WindsurfRefreshConfig `mapstructure:"refresh"`
|
||||||
Probe WindsurfProbeConfig `mapstructure:"probe"`
|
Probe WindsurfProbeConfig `mapstructure:"probe"`
|
||||||
Chat WindsurfChatConfig `mapstructure:"chat"`
|
Chat WindsurfChatConfig `mapstructure:"chat"`
|
||||||
Scheduling WindsurfScheduleConfig `mapstructure:"scheduling"`
|
Scheduling WindsurfScheduleConfig `mapstructure:"scheduling"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type WindsurfDockerConfig struct {
|
type WindsurfDockerConfig struct {
|
||||||
Host string `mapstructure:"host"`
|
Host string `mapstructure:"host"`
|
||||||
Port int `mapstructure:"port"`
|
Port int `mapstructure:"port"`
|
||||||
CSRFToken string `mapstructure:"csrf_token"`
|
CSRFToken string `mapstructure:"csrf_token"`
|
||||||
DiscoverInterval time.Duration `mapstructure:"discover_interval"`
|
DiscoverInterval time.Duration `mapstructure:"discover_interval"`
|
||||||
ProbeInterval time.Duration `mapstructure:"probe_interval"`
|
ProbeInterval time.Duration `mapstructure:"probe_interval"`
|
||||||
ProbeTimeout time.Duration `mapstructure:"probe_timeout"`
|
ProbeTimeout time.Duration `mapstructure:"probe_timeout"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type WindsurfEmbeddedConfig struct {
|
type WindsurfEmbeddedConfig struct {
|
||||||
@ -43,13 +43,13 @@ type WindsurfExternalConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type WindsurfRefreshConfig struct {
|
type WindsurfRefreshConfig struct {
|
||||||
Enabled bool `mapstructure:"enabled"`
|
Enabled bool `mapstructure:"enabled"`
|
||||||
TokenScanInterval time.Duration `mapstructure:"token_scan_interval"`
|
TokenScanInterval time.Duration `mapstructure:"token_scan_interval"`
|
||||||
RefreshBeforeExpiry time.Duration `mapstructure:"refresh_before_expiry"`
|
RefreshBeforeExpiry time.Duration `mapstructure:"refresh_before_expiry"`
|
||||||
StatusRefreshInterval time.Duration `mapstructure:"status_refresh_interval"`
|
StatusRefreshInterval time.Duration `mapstructure:"status_refresh_interval"`
|
||||||
StatusLockTTL time.Duration `mapstructure:"status_lock_ttl"`
|
StatusLockTTL time.Duration `mapstructure:"status_lock_ttl"`
|
||||||
WorkerConcurrency int `mapstructure:"worker_concurrency"`
|
WorkerConcurrency int `mapstructure:"worker_concurrency"`
|
||||||
TempUnschedulableOnNetworkErr time.Duration `mapstructure:"temp_unschedulable_on_network_error"`
|
TempUnschedulableOnNetworkErr time.Duration `mapstructure:"temp_unschedulable_on_network_error"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type WindsurfProbeConfig struct {
|
type WindsurfProbeConfig struct {
|
||||||
@ -58,13 +58,13 @@ type WindsurfProbeConfig struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type WindsurfChatConfig struct {
|
type WindsurfChatConfig struct {
|
||||||
DefaultMode string `mapstructure:"default_mode"`
|
DefaultMode string `mapstructure:"default_mode"`
|
||||||
LegacyEnumCutoff int32 `mapstructure:"legacy_enum_cutoff"`
|
LegacyEnumCutoff int32 `mapstructure:"legacy_enum_cutoff"`
|
||||||
CascadePollInterval time.Duration `mapstructure:"cascade_poll_interval"`
|
CascadePollInterval time.Duration `mapstructure:"cascade_poll_interval"`
|
||||||
CascadeIdleGrace time.Duration `mapstructure:"cascade_idle_grace"`
|
CascadeIdleGrace time.Duration `mapstructure:"cascade_idle_grace"`
|
||||||
CascadeTimeout time.Duration `mapstructure:"cascade_timeout"`
|
CascadeTimeout time.Duration `mapstructure:"cascade_timeout"`
|
||||||
PreflightCapCheck bool `mapstructure:"preflight_capacity_check"`
|
PreflightCapCheck bool `mapstructure:"preflight_capacity_check"`
|
||||||
AllowModeFallback bool `mapstructure:"allow_mode_fallback"`
|
AllowModeFallback bool `mapstructure:"allow_mode_fallback"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type WindsurfScheduleConfig struct {
|
type WindsurfScheduleConfig struct {
|
||||||
@ -94,10 +94,10 @@ func DefaultWindsurfConfig() WindsurfConfig {
|
|||||||
ProbeTimeout: 3 * time.Second,
|
ProbeTimeout: 3 * time.Second,
|
||||||
},
|
},
|
||||||
Embedded: WindsurfEmbeddedConfig{
|
Embedded: WindsurfEmbeddedConfig{
|
||||||
Binary: "/opt/windsurf/language_server_linux_x64",
|
Binary: DefaultWindsurfEmbeddedBinary,
|
||||||
BasePort: 42100,
|
BasePort: DefaultWindsurfEmbeddedBasePort,
|
||||||
DataDir: "/opt/windsurf/data",
|
DataDir: DefaultWindsurfEmbeddedDataDir,
|
||||||
APIServerURL: "https://server.self-serve.windsurf.com",
|
APIServerURL: DefaultWindsurfEmbeddedAPIServerURL,
|
||||||
},
|
},
|
||||||
External: WindsurfExternalConfig{},
|
External: WindsurfExternalConfig{},
|
||||||
Refresh: WindsurfRefreshConfig{
|
Refresh: WindsurfRefreshConfig{
|
||||||
@ -106,7 +106,7 @@ func DefaultWindsurfConfig() WindsurfConfig {
|
|||||||
RefreshBeforeExpiry: 10 * time.Minute,
|
RefreshBeforeExpiry: 10 * time.Minute,
|
||||||
StatusRefreshInterval: 15 * time.Minute,
|
StatusRefreshInterval: 15 * time.Minute,
|
||||||
StatusLockTTL: 2 * time.Minute,
|
StatusLockTTL: 2 * time.Minute,
|
||||||
WorkerConcurrency: 4,
|
WorkerConcurrency: 4,
|
||||||
TempUnschedulableOnNetworkErr: 10 * time.Minute,
|
TempUnschedulableOnNetworkErr: 10 * time.Minute,
|
||||||
},
|
},
|
||||||
Probe: WindsurfProbeConfig{
|
Probe: WindsurfProbeConfig{
|
||||||
|
|||||||
18
backend/internal/config/windsurf_defaults.go
Normal file
18
backend/internal/config/windsurf_defaults.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
// Windsurf embedded-mode defaults. Defined once here so that both the struct
|
||||||
|
// defaults in DefaultWindsurfConfig() (windsurf.go) and the viper.SetDefault
|
||||||
|
// calls in config.go reference a single source of truth — this prevents
|
||||||
|
// silent drift when one side is updated without the other.
|
||||||
|
//
|
||||||
|
// Binary and DataDir are intentionally left empty: the cross-platform
|
||||||
|
// discovery in backend/internal/pkg/windsurf/lspool.go (via DiscoverBinary
|
||||||
|
// and resolveDataDir) picks the correct path at runtime based on GOOS/GOARCH
|
||||||
|
// and the user's install layout. Hardcoding /opt/windsurf/... here would
|
||||||
|
// override that discovery on non-Linux platforms.
|
||||||
|
const (
|
||||||
|
DefaultWindsurfEmbeddedBinary = ""
|
||||||
|
DefaultWindsurfEmbeddedBasePort = 42100
|
||||||
|
DefaultWindsurfEmbeddedDataDir = ""
|
||||||
|
DefaultWindsurfEmbeddedAPIServerURL = "https://server.self-serve.windsurf.com"
|
||||||
|
)
|
||||||
@ -27,12 +27,12 @@ const (
|
|||||||
|
|
||||||
// Account type constants
|
// Account type constants
|
||||||
const (
|
const (
|
||||||
AccountTypeOAuth = "oauth" // OAuth类型账号(full scope: profile + inference)
|
AccountTypeOAuth = "oauth" // OAuth类型账号(full scope: profile + inference)
|
||||||
AccountTypeSetupToken = "setup-token" // Setup Token类型账号(inference only scope)
|
AccountTypeSetupToken = "setup-token" // Setup Token类型账号(inference only scope)
|
||||||
AccountTypeAPIKey = "apikey" // API Key类型账号
|
AccountTypeAPIKey = "apikey" // API Key类型账号
|
||||||
AccountTypeUpstream = "upstream" // 上游透传类型账号(通过 Base URL + API Key 连接上游)
|
AccountTypeUpstream = "upstream" // 上游透传类型账号(通过 Base URL + API Key 连接上游)
|
||||||
AccountTypeBedrock = "bedrock" // AWS Bedrock 类型账号(通过 SigV4 签名或 API Key 连接 Bedrock,由 credentials.auth_mode 区分)
|
AccountTypeBedrock = "bedrock" // AWS Bedrock 类型账号(通过 SigV4 签名或 API Key 连接 Bedrock,由 credentials.auth_mode 区分)
|
||||||
AccountTypeWindsurfSession = "windsurf-session" // Windsurf Session 类型账号(邮箱密码登录获取的 session token + api_key)
|
AccountTypeWindsurfSession = "windsurf-session" // Windsurf Session 类型账号(邮箱密码登录获取的 session token + api_key)
|
||||||
)
|
)
|
||||||
|
|
||||||
// Redeem type constants
|
// Redeem type constants
|
||||||
|
|||||||
@ -7,13 +7,14 @@
|
|||||||
package language_server_pb
|
package language_server_pb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
|
unsafe "unsafe"
|
||||||
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
_ "google.golang.org/protobuf/types/known/emptypb"
|
_ "google.golang.org/protobuf/types/known/emptypb"
|
||||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||||
reflect "reflect"
|
|
||||||
sync "sync"
|
|
||||||
unsafe "unsafe"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@ -5,12 +5,13 @@
|
|||||||
package language_server_pbconnect
|
package language_server_pbconnect
|
||||||
|
|
||||||
import (
|
import (
|
||||||
connect "connectrpc.com/connect"
|
|
||||||
context "context"
|
context "context"
|
||||||
errors "errors"
|
errors "errors"
|
||||||
language_server_pb "github.com/Wei-Shaw/sub2api/internal/gen/language_server_pb"
|
|
||||||
http "net/http"
|
http "net/http"
|
||||||
strings "strings"
|
strings "strings"
|
||||||
|
|
||||||
|
connect "connectrpc.com/connect"
|
||||||
|
language_server_pb "github.com/Wei-Shaw/sub2api/internal/gen/language_server_pb"
|
||||||
)
|
)
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file and the connect package are
|
// This is a compile-time assertion to ensure that this generated file and the connect package are
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import (
|
|||||||
|
|
||||||
"log/slog"
|
"log/slog"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/domain"
|
||||||
infraerrors "github.com/Wei-Shaw/sub2api/internal/pkg/errors"
|
infraerrors "github.com/Wei-Shaw/sub2api/internal/pkg/errors"
|
||||||
"github.com/Wei-Shaw/sub2api/internal/pkg/openai"
|
"github.com/Wei-Shaw/sub2api/internal/pkg/openai"
|
||||||
"github.com/Wei-Shaw/sub2api/internal/pkg/response"
|
"github.com/Wei-Shaw/sub2api/internal/pkg/response"
|
||||||
@ -560,7 +561,7 @@ func validateDataAccount(item DataAccount) error {
|
|||||||
return errors.New("account credentials is required")
|
return errors.New("account credentials is required")
|
||||||
}
|
}
|
||||||
switch item.Type {
|
switch item.Type {
|
||||||
case service.AccountTypeOAuth, service.AccountTypeSetupToken, service.AccountTypeAPIKey, service.AccountTypeUpstream:
|
case service.AccountTypeOAuth, service.AccountTypeSetupToken, service.AccountTypeAPIKey, service.AccountTypeUpstream, domain.AccountTypeBedrock, domain.AccountTypeWindsurfSession:
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("account type is invalid: %s", item.Type)
|
return fmt.Errorf("account type is invalid: %s", item.Type)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,8 +24,8 @@ import (
|
|||||||
"github.com/Wei-Shaw/sub2api/internal/pkg/geminicli"
|
"github.com/Wei-Shaw/sub2api/internal/pkg/geminicli"
|
||||||
"github.com/Wei-Shaw/sub2api/internal/pkg/openai"
|
"github.com/Wei-Shaw/sub2api/internal/pkg/openai"
|
||||||
"github.com/Wei-Shaw/sub2api/internal/pkg/response"
|
"github.com/Wei-Shaw/sub2api/internal/pkg/response"
|
||||||
"github.com/Wei-Shaw/sub2api/internal/pkg/windsurf"
|
|
||||||
"github.com/Wei-Shaw/sub2api/internal/pkg/timezone"
|
"github.com/Wei-Shaw/sub2api/internal/pkg/timezone"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/pkg/windsurf"
|
||||||
"github.com/Wei-Shaw/sub2api/internal/service"
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@ -653,6 +653,7 @@ func (h *AccountHandler) Delete(c *gin.Context) {
|
|||||||
type TestAccountRequest struct {
|
type TestAccountRequest struct {
|
||||||
ModelID string `json:"model_id"`
|
ModelID string `json:"model_id"`
|
||||||
Prompt string `json:"prompt"`
|
Prompt string `json:"prompt"`
|
||||||
|
Mode string `json:"mode"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SyncFromCRSRequest struct {
|
type SyncFromCRSRequest struct {
|
||||||
@ -683,7 +684,7 @@ func (h *AccountHandler) Test(c *gin.Context) {
|
|||||||
_ = c.ShouldBindJSON(&req)
|
_ = c.ShouldBindJSON(&req)
|
||||||
|
|
||||||
// Use AccountTestService to test the account with SSE streaming
|
// Use AccountTestService to test the account with SSE streaming
|
||||||
if err := h.accountTestService.TestAccountConnection(c, accountID, req.ModelID, req.Prompt); err != nil {
|
if err := h.accountTestService.TestAccountConnection(c, accountID, req.ModelID, req.Prompt, req.Mode); err != nil {
|
||||||
// Error already sent via SSE, just log
|
// Error already sent via SSE, just log
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -183,6 +183,17 @@ func (s *stubAdminService) GetUserUsageStats(ctx context.Context, userID int64,
|
|||||||
return map[string]any{"user_id": userID}, nil
|
return map[string]any{"user_id": userID}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *stubAdminService) GetUserRPMStatus(ctx context.Context, userID int64) (*service.UserRPMStatus, error) {
|
||||||
|
user, err := s.GetUser(ctx, userID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &service.UserRPMStatus{
|
||||||
|
UserRPMUsed: 0,
|
||||||
|
UserRPMLimit: user.RPMLimit,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *stubAdminService) BindUserAuthIdentity(ctx context.Context, userID int64, input service.AdminBindAuthIdentityInput) (*service.AdminBoundAuthIdentity, error) {
|
func (s *stubAdminService) BindUserAuthIdentity(ctx context.Context, userID int64, input service.AdminBindAuthIdentityInput) (*service.AdminBoundAuthIdentity, error) {
|
||||||
s.boundAuthIdentityFor = userID
|
s.boundAuthIdentityFor = userID
|
||||||
copied := input
|
copied := input
|
||||||
@ -276,6 +287,14 @@ func (s *stubAdminService) BatchSetGroupRateMultipliers(_ context.Context, _ int
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *stubAdminService) ClearGroupRPMOverrides(_ context.Context, _ int64) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *stubAdminService) BatchSetGroupRPMOverrides(_ context.Context, _ int64, _ []service.GroupRPMOverrideInput) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *stubAdminService) ListAccounts(ctx context.Context, page, pageSize int, platform, accountType, status, search string, groupID int64, privacyMode string, sortBy, sortOrder string) ([]service.Account, int64, error) {
|
func (s *stubAdminService) ListAccounts(ctx context.Context, page, pageSize int, platform, accountType, status, search string, groupID int64, privacyMode string, sortBy, sortOrder string) ([]service.Account, int64, error) {
|
||||||
s.lastListAccounts.platform = platform
|
s.lastListAccounts.platform = platform
|
||||||
s.lastListAccounts.accountType = accountType
|
s.lastListAccounts.accountType = accountType
|
||||||
|
|||||||
183
backend/internal/handler/admin/affiliate_handler.go
Normal file
183
backend/internal/handler/admin/affiliate_handler.go
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
package admin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/pkg/response"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AffiliateHandler handles admin affiliate (邀请返利) management:
|
||||||
|
// listing users with custom settings, updating per-user invite codes
|
||||||
|
// and exclusive rebate rates, and batch operations.
|
||||||
|
type AffiliateHandler struct {
|
||||||
|
affiliateService *service.AffiliateService
|
||||||
|
adminService service.AdminService
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewAffiliateHandler creates a new admin affiliate handler.
|
||||||
|
func NewAffiliateHandler(affiliateService *service.AffiliateService, adminService service.AdminService) *AffiliateHandler {
|
||||||
|
return &AffiliateHandler{
|
||||||
|
affiliateService: affiliateService,
|
||||||
|
adminService: adminService,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListUsers returns paginated users with custom affiliate settings.
|
||||||
|
// GET /api/v1/admin/affiliates/users
|
||||||
|
func (h *AffiliateHandler) ListUsers(c *gin.Context) {
|
||||||
|
page, pageSize := response.ParsePagination(c)
|
||||||
|
search := c.Query("search")
|
||||||
|
|
||||||
|
entries, total, err := h.affiliateService.AdminListCustomUsers(c.Request.Context(), service.AffiliateAdminFilter{
|
||||||
|
Search: search,
|
||||||
|
Page: page,
|
||||||
|
PageSize: pageSize,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Paginated(c, entries, total, page, pageSize)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateUserSettings updates a user's affiliate settings.
|
||||||
|
// PUT /api/v1/admin/affiliates/users/:user_id
|
||||||
|
//
|
||||||
|
// Both fields are optional and applied independently.
|
||||||
|
type UpdateAffiliateUserRequest struct {
|
||||||
|
AffCode *string `json:"aff_code"`
|
||||||
|
AffRebateRatePercent *float64 `json:"aff_rebate_rate_percent"`
|
||||||
|
// ClearRebateRate explicitly clears the per-user rate (sets it to NULL).
|
||||||
|
// Used to disambiguate from "field not provided".
|
||||||
|
ClearRebateRate bool `json:"clear_rebate_rate"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *AffiliateHandler) UpdateUserSettings(c *gin.Context) {
|
||||||
|
userID, err := strconv.ParseInt(c.Param("user_id"), 10, 64)
|
||||||
|
if err != nil || userID <= 0 {
|
||||||
|
response.BadRequest(c, "Invalid user_id")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var req UpdateAffiliateUserRequest
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
response.BadRequest(c, "Invalid request: "+err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.AffCode != nil {
|
||||||
|
if err := h.affiliateService.AdminUpdateUserAffCode(c.Request.Context(), userID, *req.AffCode); err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.ClearRebateRate {
|
||||||
|
if err := h.affiliateService.AdminSetUserRebateRate(c.Request.Context(), userID, nil); err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else if req.AffRebateRatePercent != nil {
|
||||||
|
if err := h.affiliateService.AdminSetUserRebateRate(c.Request.Context(), userID, req.AffRebateRatePercent); err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
response.Success(c, gin.H{"user_id": userID})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearUserSettings removes ALL of a user's custom affiliate settings — clears
|
||||||
|
// the exclusive rebate rate AND regenerates the invite code as a new system
|
||||||
|
// random one. Conceptually this "removes the user from the custom list".
|
||||||
|
//
|
||||||
|
// Both writes happen in this handler; failure of one leaves the other applied,
|
||||||
|
// but the operation is idempotent so the admin can re-run it safely.
|
||||||
|
// DELETE /api/v1/admin/affiliates/users/:user_id
|
||||||
|
func (h *AffiliateHandler) ClearUserSettings(c *gin.Context) {
|
||||||
|
userID, err := strconv.ParseInt(c.Param("user_id"), 10, 64)
|
||||||
|
if err != nil || userID <= 0 {
|
||||||
|
response.BadRequest(c, "Invalid user_id")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := h.affiliateService.AdminSetUserRebateRate(c.Request.Context(), userID, nil); err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if _, err := h.affiliateService.AdminResetUserAffCode(c.Request.Context(), userID); err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(c, gin.H{"user_id": userID})
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchSetRate applies the same rebate rate (or clears it) to multiple users.
|
||||||
|
//
|
||||||
|
// Protocol: pass `clear: true` to clear rates (aff_rebate_rate_percent is
|
||||||
|
// ignored). Otherwise aff_rebate_rate_percent is required and applied to
|
||||||
|
// every user_id. The explicit `clear` flag exists because Go's JSON unmarshal
|
||||||
|
// can't distinguish a missing field from `null`, and a silent clear from a
|
||||||
|
// frontend that forgot to include the rate would be a footgun.
|
||||||
|
//
|
||||||
|
// POST /api/v1/admin/affiliates/users/batch-rate
|
||||||
|
type BatchSetRateRequest struct {
|
||||||
|
UserIDs []int64 `json:"user_ids" binding:"required"`
|
||||||
|
AffRebateRatePercent *float64 `json:"aff_rebate_rate_percent"`
|
||||||
|
Clear bool `json:"clear"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *AffiliateHandler) BatchSetRate(c *gin.Context) {
|
||||||
|
var req BatchSetRateRequest
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
response.BadRequest(c, "Invalid request: "+err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(req.UserIDs) == 0 {
|
||||||
|
response.BadRequest(c, "user_ids cannot be empty")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !req.Clear && req.AffRebateRatePercent == nil {
|
||||||
|
response.BadRequest(c, "aff_rebate_rate_percent is required unless clear=true")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
rate := req.AffRebateRatePercent
|
||||||
|
if req.Clear {
|
||||||
|
rate = nil
|
||||||
|
}
|
||||||
|
if err := h.affiliateService.AdminBatchSetUserRebateRate(c.Request.Context(), req.UserIDs, rate); err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(c, gin.H{"affected": len(req.UserIDs)})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AffiliateUserSummary is the minimal user shape returned by LookupUsers,
|
||||||
|
// shared with the frontend's add-custom-user picker.
|
||||||
|
type AffiliateUserSummary struct {
|
||||||
|
ID int64 `json:"id"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// LookupUsers searches users by email/username for the "add custom user" modal.
|
||||||
|
// GET /api/v1/admin/affiliates/users/lookup?q=
|
||||||
|
func (h *AffiliateHandler) LookupUsers(c *gin.Context) {
|
||||||
|
keyword := c.Query("q")
|
||||||
|
if keyword == "" {
|
||||||
|
response.Success(c, []AffiliateUserSummary{})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
users, _, err := h.adminService.ListUsers(c.Request.Context(), 1, 20, service.UserListFilters{Search: keyword}, "email", "asc")
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
result := make([]AffiliateUserSummary, len(users))
|
||||||
|
for i, u := range users {
|
||||||
|
result[i] = AffiliateUserSummary{ID: u.ID, Email: u.Email, Username: u.Username}
|
||||||
|
}
|
||||||
|
response.Success(c, result)
|
||||||
|
}
|
||||||
@ -15,8 +15,7 @@ func NewAntigravityOAuthHandler(antigravityOAuthService *service.AntigravityOAut
|
|||||||
}
|
}
|
||||||
|
|
||||||
type AntigravityGenerateAuthURLRequest struct {
|
type AntigravityGenerateAuthURLRequest struct {
|
||||||
ProxyID *int64 `json:"proxy_id"`
|
ProxyID *int64 `json:"proxy_id"`
|
||||||
IsEnterprise bool `json:"is_enterprise"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenerateAuthURL generates Google OAuth authorization URL
|
// GenerateAuthURL generates Google OAuth authorization URL
|
||||||
@ -28,7 +27,7 @@ func (h *AntigravityOAuthHandler) GenerateAuthURL(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := h.antigravityOAuthService.GenerateAuthURL(c.Request.Context(), req.ProxyID, req.IsEnterprise)
|
result, err := h.antigravityOAuthService.GenerateAuthURL(c.Request.Context(), req.ProxyID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.InternalError(c, "生成授权链接失败: "+err.Error())
|
response.InternalError(c, "生成授权链接失败: "+err.Error())
|
||||||
return
|
return
|
||||||
@ -71,7 +70,6 @@ func (h *AntigravityOAuthHandler) ExchangeCode(c *gin.Context) {
|
|||||||
type AntigravityRefreshTokenRequest struct {
|
type AntigravityRefreshTokenRequest struct {
|
||||||
RefreshToken string `json:"refresh_token" binding:"required"`
|
RefreshToken string `json:"refresh_token" binding:"required"`
|
||||||
ProxyID *int64 `json:"proxy_id"`
|
ProxyID *int64 `json:"proxy_id"`
|
||||||
IsEnterprise bool `json:"is_enterprise"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RefreshToken validates an Antigravity refresh token and returns full token info
|
// RefreshToken validates an Antigravity refresh token and returns full token info
|
||||||
@ -83,7 +81,7 @@ func (h *AntigravityOAuthHandler) RefreshToken(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
tokenInfo, err := h.antigravityOAuthService.ValidateRefreshToken(c.Request.Context(), req.RefreshToken, req.ProxyID, req.IsEnterprise)
|
tokenInfo, err := h.antigravityOAuthService.ValidateRefreshToken(c.Request.Context(), req.RefreshToken, req.ProxyID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ErrorFrom(c, err)
|
response.ErrorFrom(c, err)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -158,9 +158,6 @@ func channelToResponse(ch *service.Channel) *channelResponse {
|
|||||||
UpdatedAt: ch.UpdatedAt.Format("2006-01-02T15:04:05Z"),
|
UpdatedAt: ch.UpdatedAt.Format("2006-01-02T15:04:05Z"),
|
||||||
}
|
}
|
||||||
resp.BillingModelSource = ch.BillingModelSource
|
resp.BillingModelSource = ch.BillingModelSource
|
||||||
if resp.BillingModelSource == "" {
|
|
||||||
resp.BillingModelSource = service.BillingModelSourceChannelMapped
|
|
||||||
}
|
|
||||||
if resp.GroupIDs == nil {
|
if resp.GroupIDs == nil {
|
||||||
resp.GroupIDs = []int64{}
|
resp.GroupIDs = []int64{}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -91,7 +91,7 @@ func TestChannelToResponse_EmptyDefaults(t *testing.T) {
|
|||||||
ch := &service.Channel{
|
ch := &service.Channel{
|
||||||
ID: 1,
|
ID: 1,
|
||||||
Name: "ch",
|
Name: "ch",
|
||||||
BillingModelSource: "",
|
BillingModelSource: service.BillingModelSourceChannelMapped,
|
||||||
CreatedAt: now,
|
CreatedAt: now,
|
||||||
UpdatedAt: now,
|
UpdatedAt: now,
|
||||||
GroupIDs: nil,
|
GroupIDs: nil,
|
||||||
@ -105,6 +105,9 @@ func TestChannelToResponse_EmptyDefaults(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handler 层 channelToResponse 现在是纯透传:BillingModelSource 的空值兜底
|
||||||
|
// 已下放到 service 层(Create/GetByID/List/Update/ListAvailable 出口统一处理),
|
||||||
|
// 因此这里构造 fixture 时直接传入归一化后的值。
|
||||||
resp := channelToResponse(ch)
|
resp := channelToResponse(ch)
|
||||||
require.Equal(t, "channel_mapped", resp.BillingModelSource)
|
require.Equal(t, "channel_mapped", resp.BillingModelSource)
|
||||||
require.NotNil(t, resp.GroupIDs)
|
require.NotNil(t, resp.GroupIDs)
|
||||||
@ -117,6 +120,19 @@ func TestChannelToResponse_EmptyDefaults(t *testing.T) {
|
|||||||
require.Equal(t, "token", resp.ModelPricing[0].BillingMode)
|
require.Equal(t, "token", resp.ModelPricing[0].BillingMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestChannelToResponse_BillingModelSourcePassthrough(t *testing.T) {
|
||||||
|
// handler 不再兜底 BillingModelSource:空值应原样透传(由 service 层负责默认回填)。
|
||||||
|
ch := &service.Channel{
|
||||||
|
ID: 1,
|
||||||
|
Name: "ch",
|
||||||
|
BillingModelSource: "",
|
||||||
|
CreatedAt: time.Now(),
|
||||||
|
UpdatedAt: time.Now(),
|
||||||
|
}
|
||||||
|
resp := channelToResponse(ch)
|
||||||
|
require.Equal(t, "", resp.BillingModelSource, "handler 应纯透传,默认值由 service.normalizeBillingModelSource 负责")
|
||||||
|
}
|
||||||
|
|
||||||
func TestChannelToResponse_NilModels(t *testing.T) {
|
func TestChannelToResponse_NilModels(t *testing.T) {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
ch := &service.Channel{
|
ch := &service.Channel{
|
||||||
|
|||||||
427
backend/internal/handler/admin/channel_monitor_handler.go
Normal file
427
backend/internal/handler/admin/channel_monitor_handler.go
Normal file
@ -0,0 +1,427 @@
|
|||||||
|
package admin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/handler/dto"
|
||||||
|
infraerrors "github.com/Wei-Shaw/sub2api/internal/pkg/errors"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/pkg/response"
|
||||||
|
middleware2 "github.com/Wei-Shaw/sub2api/internal/server/middleware"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// monitorMaxPageSize 列表分页上限。
|
||||||
|
monitorMaxPageSize = 100
|
||||||
|
// monitorAPIKeyMaskPrefix 脱敏时保留的明文前缀长度。
|
||||||
|
monitorAPIKeyMaskPrefix = 4
|
||||||
|
// monitorAPIKeyMaskSuffix 脱敏后追加的占位字符串。
|
||||||
|
monitorAPIKeyMaskSuffix = "***"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorHandler 渠道监控管理后台 handler。
|
||||||
|
type ChannelMonitorHandler struct {
|
||||||
|
monitorService *service.ChannelMonitorService
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewChannelMonitorHandler 创建 handler。
|
||||||
|
func NewChannelMonitorHandler(monitorService *service.ChannelMonitorService) *ChannelMonitorHandler {
|
||||||
|
return &ChannelMonitorHandler{monitorService: monitorService}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Request / Response ---
|
||||||
|
|
||||||
|
type channelMonitorCreateRequest struct {
|
||||||
|
Name string `json:"name" binding:"required,max=100"`
|
||||||
|
Provider string `json:"provider" binding:"required,oneof=openai anthropic gemini"`
|
||||||
|
Endpoint string `json:"endpoint" binding:"required,max=500"`
|
||||||
|
APIKey string `json:"api_key" binding:"required,max=2000"`
|
||||||
|
PrimaryModel string `json:"primary_model" binding:"required,max=200"`
|
||||||
|
ExtraModels []string `json:"extra_models"`
|
||||||
|
GroupName string `json:"group_name" binding:"max=100"`
|
||||||
|
Enabled *bool `json:"enabled"`
|
||||||
|
IntervalSeconds int `json:"interval_seconds" binding:"required,min=15,max=3600"`
|
||||||
|
TemplateID *int64 `json:"template_id"`
|
||||||
|
ExtraHeaders map[string]string `json:"extra_headers"`
|
||||||
|
BodyOverrideMode string `json:"body_override_mode" binding:"omitempty,oneof=off merge replace"`
|
||||||
|
BodyOverride map[string]any `json:"body_override"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type channelMonitorUpdateRequest struct {
|
||||||
|
Name *string `json:"name" binding:"omitempty,max=100"`
|
||||||
|
Provider *string `json:"provider" binding:"omitempty,oneof=openai anthropic gemini"`
|
||||||
|
Endpoint *string `json:"endpoint" binding:"omitempty,max=500"`
|
||||||
|
APIKey *string `json:"api_key" binding:"omitempty,max=2000"`
|
||||||
|
PrimaryModel *string `json:"primary_model" binding:"omitempty,max=200"`
|
||||||
|
ExtraModels *[]string `json:"extra_models"`
|
||||||
|
GroupName *string `json:"group_name" binding:"omitempty,max=100"`
|
||||||
|
Enabled *bool `json:"enabled"`
|
||||||
|
IntervalSeconds *int `json:"interval_seconds" binding:"omitempty,min=15,max=3600"`
|
||||||
|
TemplateID *int64 `json:"template_id"`
|
||||||
|
ClearTemplate bool `json:"clear_template"` // true 时把 template_id 置空,忽略 TemplateID
|
||||||
|
ExtraHeaders *map[string]string `json:"extra_headers"`
|
||||||
|
BodyOverrideMode *string `json:"body_override_mode" binding:"omitempty,oneof=off merge replace"`
|
||||||
|
BodyOverride *map[string]any `json:"body_override"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type channelMonitorResponse struct {
|
||||||
|
ID int64 `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Provider string `json:"provider"`
|
||||||
|
Endpoint string `json:"endpoint"`
|
||||||
|
APIKeyMasked string `json:"api_key_masked"`
|
||||||
|
APIKeyDecryptFailed bool `json:"api_key_decrypt_failed"`
|
||||||
|
PrimaryModel string `json:"primary_model"`
|
||||||
|
ExtraModels []string `json:"extra_models"`
|
||||||
|
GroupName string `json:"group_name"`
|
||||||
|
Enabled bool `json:"enabled"`
|
||||||
|
IntervalSeconds int `json:"interval_seconds"`
|
||||||
|
LastCheckedAt *string `json:"last_checked_at"`
|
||||||
|
CreatedBy int64 `json:"created_by"`
|
||||||
|
CreatedAt string `json:"created_at"`
|
||||||
|
UpdatedAt string `json:"updated_at"`
|
||||||
|
PrimaryStatus string `json:"primary_status"`
|
||||||
|
PrimaryLatencyMs *int `json:"primary_latency_ms"`
|
||||||
|
Availability7d float64 `json:"availability_7d"`
|
||||||
|
ExtraModelsStatus []dto.ChannelMonitorExtraModelStatus `json:"extra_models_status"`
|
||||||
|
// 请求自定义快照:前端编辑 / 展示「高级设置」用
|
||||||
|
TemplateID *int64 `json:"template_id"`
|
||||||
|
ExtraHeaders map[string]string `json:"extra_headers"`
|
||||||
|
BodyOverrideMode string `json:"body_override_mode"`
|
||||||
|
BodyOverride map[string]any `json:"body_override"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type channelMonitorCheckResultResponse struct {
|
||||||
|
Model string `json:"model"`
|
||||||
|
Status string `json:"status"`
|
||||||
|
LatencyMs *int `json:"latency_ms"`
|
||||||
|
PingLatencyMs *int `json:"ping_latency_ms"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
CheckedAt string `json:"checked_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type channelMonitorHistoryItemResponse struct {
|
||||||
|
ID int64 `json:"id"`
|
||||||
|
Model string `json:"model"`
|
||||||
|
Status string `json:"status"`
|
||||||
|
LatencyMs *int `json:"latency_ms"`
|
||||||
|
PingLatencyMs *int `json:"ping_latency_ms"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
CheckedAt string `json:"checked_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// maskAPIKey 对 API Key 明文做脱敏:前 4 字符 + "***",长度 ≤ 4 时只显示 "***"。
|
||||||
|
func maskAPIKey(plain string) string {
|
||||||
|
if len(plain) <= monitorAPIKeyMaskPrefix {
|
||||||
|
return monitorAPIKeyMaskSuffix
|
||||||
|
}
|
||||||
|
return plain[:monitorAPIKeyMaskPrefix] + monitorAPIKeyMaskSuffix
|
||||||
|
}
|
||||||
|
|
||||||
|
func channelMonitorToResponse(m *service.ChannelMonitor) *channelMonitorResponse {
|
||||||
|
if m == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
extras := m.ExtraModels
|
||||||
|
if extras == nil {
|
||||||
|
extras = []string{}
|
||||||
|
}
|
||||||
|
headers := m.ExtraHeaders
|
||||||
|
if headers == nil {
|
||||||
|
headers = map[string]string{}
|
||||||
|
}
|
||||||
|
resp := &channelMonitorResponse{
|
||||||
|
ID: m.ID,
|
||||||
|
Name: m.Name,
|
||||||
|
Provider: m.Provider,
|
||||||
|
Endpoint: m.Endpoint,
|
||||||
|
APIKeyMasked: maskAPIKey(m.APIKey),
|
||||||
|
APIKeyDecryptFailed: m.APIKeyDecryptFailed,
|
||||||
|
PrimaryModel: m.PrimaryModel,
|
||||||
|
ExtraModels: extras,
|
||||||
|
GroupName: m.GroupName,
|
||||||
|
Enabled: m.Enabled,
|
||||||
|
IntervalSeconds: m.IntervalSeconds,
|
||||||
|
CreatedBy: m.CreatedBy,
|
||||||
|
CreatedAt: m.CreatedAt.UTC().Format(time.RFC3339),
|
||||||
|
UpdatedAt: m.UpdatedAt.UTC().Format(time.RFC3339),
|
||||||
|
TemplateID: m.TemplateID,
|
||||||
|
ExtraHeaders: headers,
|
||||||
|
BodyOverrideMode: m.BodyOverrideMode,
|
||||||
|
BodyOverride: m.BodyOverride,
|
||||||
|
// PrimaryStatus / PrimaryLatencyMs / Availability7d 由 List handler 在批量聚合后填充。
|
||||||
|
}
|
||||||
|
if m.LastCheckedAt != nil {
|
||||||
|
s := m.LastCheckedAt.UTC().Format(time.RFC3339)
|
||||||
|
resp.LastCheckedAt = &s
|
||||||
|
}
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkResultToResponse(r *service.CheckResult) channelMonitorCheckResultResponse {
|
||||||
|
return channelMonitorCheckResultResponse{
|
||||||
|
Model: r.Model,
|
||||||
|
Status: r.Status,
|
||||||
|
LatencyMs: r.LatencyMs,
|
||||||
|
PingLatencyMs: r.PingLatencyMs,
|
||||||
|
Message: r.Message,
|
||||||
|
CheckedAt: r.CheckedAt.UTC().Format(time.RFC3339),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func historyEntryToResponse(e *service.ChannelMonitorHistoryEntry) channelMonitorHistoryItemResponse {
|
||||||
|
return channelMonitorHistoryItemResponse{
|
||||||
|
ID: e.ID,
|
||||||
|
Model: e.Model,
|
||||||
|
Status: e.Status,
|
||||||
|
LatencyMs: e.LatencyMs,
|
||||||
|
PingLatencyMs: e.PingLatencyMs,
|
||||||
|
Message: e.Message,
|
||||||
|
CheckedAt: e.CheckedAt.UTC().Format(time.RFC3339),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseChannelMonitorID 提取并校验路径参数 :id(admin 与 user handler 共享)。
|
||||||
|
// 校验失败时已写入 4xx 响应,调用方只需 return。
|
||||||
|
func ParseChannelMonitorID(c *gin.Context) (int64, bool) {
|
||||||
|
id, err := strconv.ParseInt(c.Param("id"), 10, 64)
|
||||||
|
if err != nil || id <= 0 {
|
||||||
|
response.ErrorFrom(c, infraerrors.BadRequest("INVALID_MONITOR_ID", "invalid monitor id"))
|
||||||
|
return 0, false
|
||||||
|
}
|
||||||
|
return id, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseListEnabled 解析 enabled query 参数:true/false 转为 *bool,空或非法则返回 nil。
|
||||||
|
func parseListEnabled(raw string) *bool {
|
||||||
|
switch strings.ToLower(strings.TrimSpace(raw)) {
|
||||||
|
case "true", "1", "yes":
|
||||||
|
v := true
|
||||||
|
return &v
|
||||||
|
case "false", "0", "no":
|
||||||
|
v := false
|
||||||
|
return &v
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Handlers ---
|
||||||
|
|
||||||
|
// List GET /api/v1/admin/channel-monitors
|
||||||
|
func (h *ChannelMonitorHandler) List(c *gin.Context) {
|
||||||
|
page, pageSize := response.ParsePagination(c)
|
||||||
|
if pageSize > monitorMaxPageSize {
|
||||||
|
pageSize = monitorMaxPageSize
|
||||||
|
}
|
||||||
|
|
||||||
|
params := service.ChannelMonitorListParams{
|
||||||
|
Page: page,
|
||||||
|
PageSize: pageSize,
|
||||||
|
Provider: strings.TrimSpace(c.Query("provider")),
|
||||||
|
Enabled: parseListEnabled(c.Query("enabled")),
|
||||||
|
Search: strings.TrimSpace(c.Query("search")),
|
||||||
|
}
|
||||||
|
|
||||||
|
items, total, err := h.monitorService.List(c.Request.Context(), params)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
summaries := h.batchSummaryFor(c, items)
|
||||||
|
out := make([]*channelMonitorResponse, 0, len(items))
|
||||||
|
for _, m := range items {
|
||||||
|
out = append(out, buildListItemResponse(m, summaries[m.ID]))
|
||||||
|
}
|
||||||
|
response.Paginated(c, out, total, page, pageSize)
|
||||||
|
}
|
||||||
|
|
||||||
|
// batchSummaryFor 批量聚合 latest + 7d 可用率,避免每行 2 次 SQL(消除 N+1)。
|
||||||
|
func (h *ChannelMonitorHandler) batchSummaryFor(c *gin.Context, items []*service.ChannelMonitor) map[int64]service.MonitorStatusSummary {
|
||||||
|
ids := make([]int64, 0, len(items))
|
||||||
|
primaryByID := make(map[int64]string, len(items))
|
||||||
|
extrasByID := make(map[int64][]string, len(items))
|
||||||
|
for _, m := range items {
|
||||||
|
ids = append(ids, m.ID)
|
||||||
|
primaryByID[m.ID] = m.PrimaryModel
|
||||||
|
extrasByID[m.ID] = m.ExtraModels
|
||||||
|
}
|
||||||
|
return h.monitorService.BatchMonitorStatusSummary(c.Request.Context(), ids, primaryByID, extrasByID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// buildListItemResponse 把 monitor + summary 装成 admin list 的响应行。
|
||||||
|
func buildListItemResponse(m *service.ChannelMonitor, summary service.MonitorStatusSummary) *channelMonitorResponse {
|
||||||
|
resp := channelMonitorToResponse(m)
|
||||||
|
resp.PrimaryStatus = summary.PrimaryStatus
|
||||||
|
resp.PrimaryLatencyMs = summary.PrimaryLatencyMs
|
||||||
|
resp.Availability7d = summary.Availability7d
|
||||||
|
resp.ExtraModelsStatus = make([]dto.ChannelMonitorExtraModelStatus, 0, len(summary.ExtraModels))
|
||||||
|
for _, e := range summary.ExtraModels {
|
||||||
|
resp.ExtraModelsStatus = append(resp.ExtraModelsStatus, dto.ChannelMonitorExtraModelStatus{
|
||||||
|
Model: e.Model,
|
||||||
|
Status: e.Status,
|
||||||
|
LatencyMs: e.LatencyMs,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get GET /api/v1/admin/channel-monitors/:id
|
||||||
|
func (h *ChannelMonitorHandler) Get(c *gin.Context) {
|
||||||
|
id, ok := ParseChannelMonitorID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m, err := h.monitorService.Get(c.Request.Context(), id)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(c, channelMonitorToResponse(m))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create POST /api/v1/admin/channel-monitors
|
||||||
|
func (h *ChannelMonitorHandler) Create(c *gin.Context) {
|
||||||
|
var req channelMonitorCreateRequest
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
response.ErrorFrom(c, infraerrors.BadRequest("VALIDATION_ERROR", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
subject, _ := middleware2.GetAuthSubjectFromContext(c)
|
||||||
|
|
||||||
|
enabled := true
|
||||||
|
if req.Enabled != nil {
|
||||||
|
enabled = *req.Enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
m, err := h.monitorService.Create(c.Request.Context(), service.ChannelMonitorCreateParams{
|
||||||
|
Name: req.Name,
|
||||||
|
Provider: req.Provider,
|
||||||
|
Endpoint: req.Endpoint,
|
||||||
|
APIKey: req.APIKey,
|
||||||
|
PrimaryModel: req.PrimaryModel,
|
||||||
|
ExtraModels: req.ExtraModels,
|
||||||
|
GroupName: req.GroupName,
|
||||||
|
Enabled: enabled,
|
||||||
|
IntervalSeconds: req.IntervalSeconds,
|
||||||
|
CreatedBy: subject.UserID,
|
||||||
|
TemplateID: req.TemplateID,
|
||||||
|
ExtraHeaders: req.ExtraHeaders,
|
||||||
|
BodyOverrideMode: req.BodyOverrideMode,
|
||||||
|
BodyOverride: req.BodyOverride,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Created(c, channelMonitorToResponse(m))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update PUT /api/v1/admin/channel-monitors/:id
|
||||||
|
func (h *ChannelMonitorHandler) Update(c *gin.Context) {
|
||||||
|
id, ok := ParseChannelMonitorID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var req channelMonitorUpdateRequest
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
response.ErrorFrom(c, infraerrors.BadRequest("VALIDATION_ERROR", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
m, err := h.monitorService.Update(c.Request.Context(), id, service.ChannelMonitorUpdateParams{
|
||||||
|
Name: req.Name,
|
||||||
|
Provider: req.Provider,
|
||||||
|
Endpoint: req.Endpoint,
|
||||||
|
APIKey: req.APIKey,
|
||||||
|
PrimaryModel: req.PrimaryModel,
|
||||||
|
ExtraModels: req.ExtraModels,
|
||||||
|
GroupName: req.GroupName,
|
||||||
|
Enabled: req.Enabled,
|
||||||
|
IntervalSeconds: req.IntervalSeconds,
|
||||||
|
TemplateID: req.TemplateID,
|
||||||
|
ClearTemplate: req.ClearTemplate,
|
||||||
|
ExtraHeaders: req.ExtraHeaders,
|
||||||
|
BodyOverrideMode: req.BodyOverrideMode,
|
||||||
|
BodyOverride: req.BodyOverride,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(c, channelMonitorToResponse(m))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete DELETE /api/v1/admin/channel-monitors/:id
|
||||||
|
func (h *ChannelMonitorHandler) Delete(c *gin.Context) {
|
||||||
|
id, ok := ParseChannelMonitorID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := h.monitorService.Delete(c.Request.Context(), id); err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(c, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run POST /api/v1/admin/channel-monitors/:id/run
|
||||||
|
func (h *ChannelMonitorHandler) Run(c *gin.Context) {
|
||||||
|
id, ok := ParseChannelMonitorID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
results, err := h.monitorService.RunCheck(c.Request.Context(), id)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
out := make([]channelMonitorCheckResultResponse, 0, len(results))
|
||||||
|
for _, r := range results {
|
||||||
|
out = append(out, checkResultToResponse(r))
|
||||||
|
}
|
||||||
|
response.Success(c, gin.H{"results": out})
|
||||||
|
}
|
||||||
|
|
||||||
|
// History GET /api/v1/admin/channel-monitors/:id/history
|
||||||
|
func (h *ChannelMonitorHandler) History(c *gin.Context) {
|
||||||
|
id, ok := ParseChannelMonitorID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
limit := parseHistoryLimit(c.Query("limit"))
|
||||||
|
model := strings.TrimSpace(c.Query("model"))
|
||||||
|
|
||||||
|
entries, err := h.monitorService.ListHistory(c.Request.Context(), id, model, limit)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
out := make([]channelMonitorHistoryItemResponse, 0, len(entries))
|
||||||
|
for _, e := range entries {
|
||||||
|
out = append(out, historyEntryToResponse(e))
|
||||||
|
}
|
||||||
|
response.Success(c, gin.H{"items": out})
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseHistoryLimit 解析 history 接口的 limit query。
|
||||||
|
// 使用 service 包的统一上下限常量,避免在 handler 重复定义同名魔法值。
|
||||||
|
func parseHistoryLimit(raw string) int {
|
||||||
|
if strings.TrimSpace(raw) == "" {
|
||||||
|
return service.MonitorHistoryDefaultLimit
|
||||||
|
}
|
||||||
|
v, err := strconv.Atoi(raw)
|
||||||
|
if err != nil || v <= 0 {
|
||||||
|
return service.MonitorHistoryDefaultLimit
|
||||||
|
}
|
||||||
|
if v > service.MonitorHistoryMaxLimit {
|
||||||
|
return service.MonitorHistoryMaxLimit
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
@ -0,0 +1,234 @@
|
|||||||
|
package admin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
infraerrors "github.com/Wei-Shaw/sub2api/internal/pkg/errors"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/pkg/response"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorRequestTemplateHandler 请求模板管理后台 handler。
|
||||||
|
type ChannelMonitorRequestTemplateHandler struct {
|
||||||
|
templateService *service.ChannelMonitorRequestTemplateService
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewChannelMonitorRequestTemplateHandler 创建 handler。
|
||||||
|
func NewChannelMonitorRequestTemplateHandler(templateService *service.ChannelMonitorRequestTemplateService) *ChannelMonitorRequestTemplateHandler {
|
||||||
|
return &ChannelMonitorRequestTemplateHandler{templateService: templateService}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- DTO ---
|
||||||
|
|
||||||
|
type channelMonitorTemplateCreateRequest struct {
|
||||||
|
Name string `json:"name" binding:"required,max=100"`
|
||||||
|
Provider string `json:"provider" binding:"required,oneof=openai anthropic gemini"`
|
||||||
|
Description string `json:"description" binding:"max=500"`
|
||||||
|
ExtraHeaders map[string]string `json:"extra_headers"`
|
||||||
|
BodyOverrideMode string `json:"body_override_mode" binding:"omitempty,oneof=off merge replace"`
|
||||||
|
BodyOverride map[string]any `json:"body_override"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type channelMonitorTemplateUpdateRequest struct {
|
||||||
|
Name *string `json:"name" binding:"omitempty,max=100"`
|
||||||
|
Description *string `json:"description" binding:"omitempty,max=500"`
|
||||||
|
ExtraHeaders *map[string]string `json:"extra_headers"`
|
||||||
|
BodyOverrideMode *string `json:"body_override_mode" binding:"omitempty,oneof=off merge replace"`
|
||||||
|
BodyOverride *map[string]any `json:"body_override"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type channelMonitorTemplateResponse struct {
|
||||||
|
ID int64 `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Provider string `json:"provider"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
ExtraHeaders map[string]string `json:"extra_headers"`
|
||||||
|
BodyOverrideMode string `json:"body_override_mode"`
|
||||||
|
BodyOverride map[string]any `json:"body_override"`
|
||||||
|
CreatedAt string `json:"created_at"`
|
||||||
|
UpdatedAt string `json:"updated_at"`
|
||||||
|
AssociatedMonitors int64 `json:"associated_monitors"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *ChannelMonitorRequestTemplateHandler) toResponse(c *gin.Context, t *service.ChannelMonitorRequestTemplate) *channelMonitorTemplateResponse {
|
||||||
|
if t == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
headers := t.ExtraHeaders
|
||||||
|
if headers == nil {
|
||||||
|
headers = map[string]string{}
|
||||||
|
}
|
||||||
|
count, _ := h.templateService.CountAssociatedMonitors(c.Request.Context(), t.ID)
|
||||||
|
return &channelMonitorTemplateResponse{
|
||||||
|
ID: t.ID,
|
||||||
|
Name: t.Name,
|
||||||
|
Provider: t.Provider,
|
||||||
|
Description: t.Description,
|
||||||
|
ExtraHeaders: headers,
|
||||||
|
BodyOverrideMode: t.BodyOverrideMode,
|
||||||
|
BodyOverride: t.BodyOverride,
|
||||||
|
CreatedAt: t.CreatedAt.UTC().Format(time.RFC3339),
|
||||||
|
UpdatedAt: t.UpdatedAt.UTC().Format(time.RFC3339),
|
||||||
|
AssociatedMonitors: count,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseTemplateID 提取并校验 :id。
|
||||||
|
func parseTemplateID(c *gin.Context) (int64, bool) {
|
||||||
|
id, err := strconv.ParseInt(c.Param("id"), 10, 64)
|
||||||
|
if err != nil || id <= 0 {
|
||||||
|
response.ErrorFrom(c, infraerrors.BadRequest("INVALID_TEMPLATE_ID", "invalid template id"))
|
||||||
|
return 0, false
|
||||||
|
}
|
||||||
|
return id, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Handlers ---
|
||||||
|
|
||||||
|
// List GET /api/v1/admin/channel-monitor-templates?provider=anthropic
|
||||||
|
func (h *ChannelMonitorRequestTemplateHandler) List(c *gin.Context) {
|
||||||
|
items, err := h.templateService.List(c.Request.Context(), service.ChannelMonitorRequestTemplateListParams{
|
||||||
|
Provider: strings.TrimSpace(c.Query("provider")),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
out := make([]*channelMonitorTemplateResponse, 0, len(items))
|
||||||
|
for _, t := range items {
|
||||||
|
out = append(out, h.toResponse(c, t))
|
||||||
|
}
|
||||||
|
response.Success(c, gin.H{"items": out})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get GET /api/v1/admin/channel-monitor-templates/:id
|
||||||
|
func (h *ChannelMonitorRequestTemplateHandler) Get(c *gin.Context) {
|
||||||
|
id, ok := parseTemplateID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t, err := h.templateService.Get(c.Request.Context(), id)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(c, h.toResponse(c, t))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create POST /api/v1/admin/channel-monitor-templates
|
||||||
|
func (h *ChannelMonitorRequestTemplateHandler) Create(c *gin.Context) {
|
||||||
|
var req channelMonitorTemplateCreateRequest
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
response.ErrorFrom(c, infraerrors.BadRequest("VALIDATION_ERROR", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t, err := h.templateService.Create(c.Request.Context(), service.ChannelMonitorRequestTemplateCreateParams{
|
||||||
|
Name: req.Name,
|
||||||
|
Provider: req.Provider,
|
||||||
|
Description: req.Description,
|
||||||
|
ExtraHeaders: req.ExtraHeaders,
|
||||||
|
BodyOverrideMode: req.BodyOverrideMode,
|
||||||
|
BodyOverride: req.BodyOverride,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Created(c, h.toResponse(c, t))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update PUT /api/v1/admin/channel-monitor-templates/:id
|
||||||
|
func (h *ChannelMonitorRequestTemplateHandler) Update(c *gin.Context) {
|
||||||
|
id, ok := parseTemplateID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var req channelMonitorTemplateUpdateRequest
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
response.ErrorFrom(c, infraerrors.BadRequest("VALIDATION_ERROR", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t, err := h.templateService.Update(c.Request.Context(), id, service.ChannelMonitorRequestTemplateUpdateParams{
|
||||||
|
Name: req.Name,
|
||||||
|
Description: req.Description,
|
||||||
|
ExtraHeaders: req.ExtraHeaders,
|
||||||
|
BodyOverrideMode: req.BodyOverrideMode,
|
||||||
|
BodyOverride: req.BodyOverride,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(c, h.toResponse(c, t))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete DELETE /api/v1/admin/channel-monitor-templates/:id
|
||||||
|
func (h *ChannelMonitorRequestTemplateHandler) Delete(c *gin.Context) {
|
||||||
|
id, ok := parseTemplateID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := h.templateService.Delete(c.Request.Context(), id); err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(c, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
type channelMonitorTemplateApplyRequest struct {
|
||||||
|
// MonitorIDs 必填、非空:用户在 picker 里勾选的要被覆盖的监控 ID 列表。
|
||||||
|
// 仅当对应监控当前 template_id == :id 时才会真的被覆盖。
|
||||||
|
MonitorIDs []int64 `json:"monitor_ids" binding:"required,min=1"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply POST /api/v1/admin/channel-monitor-templates/:id/apply
|
||||||
|
// 把模板当前配置覆盖到 monitor_ids 列表里的关联监控(picker 选中的子集)。
|
||||||
|
func (h *ChannelMonitorRequestTemplateHandler) Apply(c *gin.Context) {
|
||||||
|
id, ok := parseTemplateID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var req channelMonitorTemplateApplyRequest
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
response.ErrorFrom(c, infraerrors.BadRequest("VALIDATION_ERROR", err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
affected, err := h.templateService.ApplyToMonitors(c.Request.Context(), id, req.MonitorIDs)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(c, gin.H{"affected": affected})
|
||||||
|
}
|
||||||
|
|
||||||
|
type associatedMonitorBriefResponse struct {
|
||||||
|
ID int64 `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Provider string `json:"provider"`
|
||||||
|
Enabled bool `json:"enabled"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AssociatedMonitors GET /api/v1/admin/channel-monitor-templates/:id/monitors
|
||||||
|
// 列出关联监控(picker 弹窗用)。
|
||||||
|
func (h *ChannelMonitorRequestTemplateHandler) AssociatedMonitors(c *gin.Context) {
|
||||||
|
id, ok := parseTemplateID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
items, err := h.templateService.ListAssociatedMonitors(c.Request.Context(), id)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
out := make([]associatedMonitorBriefResponse, 0, len(items))
|
||||||
|
for _, m := range items {
|
||||||
|
out = append(out, associatedMonitorBriefResponse{
|
||||||
|
ID: m.ID, Name: m.Name, Provider: m.Provider, Enabled: m.Enabled,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
response.Success(c, gin.H{"items": out})
|
||||||
|
}
|
||||||
@ -110,6 +110,8 @@ type CreateGroupRequest struct {
|
|||||||
RequirePrivacySet bool `json:"require_privacy_set"`
|
RequirePrivacySet bool `json:"require_privacy_set"`
|
||||||
DefaultMappedModel string `json:"default_mapped_model"`
|
DefaultMappedModel string `json:"default_mapped_model"`
|
||||||
MessagesDispatchModelConfig service.OpenAIMessagesDispatchModelConfig `json:"messages_dispatch_model_config"`
|
MessagesDispatchModelConfig service.OpenAIMessagesDispatchModelConfig `json:"messages_dispatch_model_config"`
|
||||||
|
// 分组 RPM 上限(0 = 不限制)
|
||||||
|
RPMLimit int `json:"rpm_limit"`
|
||||||
// 从指定分组复制账号(创建后自动绑定)
|
// 从指定分组复制账号(创建后自动绑定)
|
||||||
CopyAccountsFromGroupIDs []int64 `json:"copy_accounts_from_group_ids"`
|
CopyAccountsFromGroupIDs []int64 `json:"copy_accounts_from_group_ids"`
|
||||||
}
|
}
|
||||||
@ -145,6 +147,8 @@ type UpdateGroupRequest struct {
|
|||||||
RequirePrivacySet *bool `json:"require_privacy_set"`
|
RequirePrivacySet *bool `json:"require_privacy_set"`
|
||||||
DefaultMappedModel *string `json:"default_mapped_model"`
|
DefaultMappedModel *string `json:"default_mapped_model"`
|
||||||
MessagesDispatchModelConfig *service.OpenAIMessagesDispatchModelConfig `json:"messages_dispatch_model_config"`
|
MessagesDispatchModelConfig *service.OpenAIMessagesDispatchModelConfig `json:"messages_dispatch_model_config"`
|
||||||
|
// 分组 RPM 上限(0 = 不限制);nil 表示未提供不改动
|
||||||
|
RPMLimit *int `json:"rpm_limit"`
|
||||||
// 从指定分组复制账号(同步操作:先清空当前分组的账号绑定,再绑定源分组的账号)
|
// 从指定分组复制账号(同步操作:先清空当前分组的账号绑定,再绑定源分组的账号)
|
||||||
CopyAccountsFromGroupIDs []int64 `json:"copy_accounts_from_group_ids"`
|
CopyAccountsFromGroupIDs []int64 `json:"copy_accounts_from_group_ids"`
|
||||||
}
|
}
|
||||||
@ -262,6 +266,7 @@ func (h *GroupHandler) Create(c *gin.Context) {
|
|||||||
RequirePrivacySet: req.RequirePrivacySet,
|
RequirePrivacySet: req.RequirePrivacySet,
|
||||||
DefaultMappedModel: req.DefaultMappedModel,
|
DefaultMappedModel: req.DefaultMappedModel,
|
||||||
MessagesDispatchModelConfig: req.MessagesDispatchModelConfig,
|
MessagesDispatchModelConfig: req.MessagesDispatchModelConfig,
|
||||||
|
RPMLimit: req.RPMLimit,
|
||||||
CopyAccountsFromGroupIDs: req.CopyAccountsFromGroupIDs,
|
CopyAccountsFromGroupIDs: req.CopyAccountsFromGroupIDs,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -313,6 +318,7 @@ func (h *GroupHandler) Update(c *gin.Context) {
|
|||||||
RequirePrivacySet: req.RequirePrivacySet,
|
RequirePrivacySet: req.RequirePrivacySet,
|
||||||
DefaultMappedModel: req.DefaultMappedModel,
|
DefaultMappedModel: req.DefaultMappedModel,
|
||||||
MessagesDispatchModelConfig: req.MessagesDispatchModelConfig,
|
MessagesDispatchModelConfig: req.MessagesDispatchModelConfig,
|
||||||
|
RPMLimit: req.RPMLimit,
|
||||||
CopyAccountsFromGroupIDs: req.CopyAccountsFromGroupIDs,
|
CopyAccountsFromGroupIDs: req.CopyAccountsFromGroupIDs,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -477,6 +483,51 @@ func (h *GroupHandler) BatchSetGroupRateMultipliers(c *gin.Context) {
|
|||||||
response.Success(c, gin.H{"message": "Rate multipliers updated successfully"})
|
response.Success(c, gin.H{"message": "Rate multipliers updated successfully"})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BatchSetGroupRPMOverridesRequest represents batch set rpm_override request
|
||||||
|
type BatchSetGroupRPMOverridesRequest struct {
|
||||||
|
Entries []service.GroupRPMOverrideInput `json:"entries" binding:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BatchSetGroupRPMOverrides handles batch setting rpm_override for users in a group
|
||||||
|
// PUT /api/v1/admin/groups/:id/rpm-overrides
|
||||||
|
func (h *GroupHandler) BatchSetGroupRPMOverrides(c *gin.Context) {
|
||||||
|
groupID, err := strconv.ParseInt(c.Param("id"), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
response.BadRequest(c, "Invalid group ID")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var req BatchSetGroupRPMOverridesRequest
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
response.BadRequest(c, "Invalid request: "+err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.adminService.BatchSetGroupRPMOverrides(c.Request.Context(), groupID, req.Entries); err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
response.Success(c, gin.H{"message": "RPM overrides updated successfully"})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearGroupRPMOverrides handles clearing all rpm_override for a group
|
||||||
|
// DELETE /api/v1/admin/groups/:id/rpm-overrides
|
||||||
|
func (h *GroupHandler) ClearGroupRPMOverrides(c *gin.Context) {
|
||||||
|
groupID, err := strconv.ParseInt(c.Param("id"), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
response.BadRequest(c, "Invalid group ID")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.adminService.ClearGroupRPMOverrides(c.Request.Context(), groupID); err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
response.Success(c, gin.H{"message": "RPM overrides cleared successfully"})
|
||||||
|
}
|
||||||
|
|
||||||
// UpdateSortOrderRequest represents the request to update group sort orders
|
// UpdateSortOrderRequest represents the request to update group sort orders
|
||||||
type UpdateSortOrderRequest struct {
|
type UpdateSortOrderRequest struct {
|
||||||
Updates []struct {
|
Updates []struct {
|
||||||
|
|||||||
@ -185,6 +185,8 @@ func (h *SettingHandler) GetSettings(c *gin.Context) {
|
|||||||
CustomEndpoints: dto.ParseCustomEndpoints(settings.CustomEndpoints),
|
CustomEndpoints: dto.ParseCustomEndpoints(settings.CustomEndpoints),
|
||||||
DefaultConcurrency: settings.DefaultConcurrency,
|
DefaultConcurrency: settings.DefaultConcurrency,
|
||||||
DefaultBalance: settings.DefaultBalance,
|
DefaultBalance: settings.DefaultBalance,
|
||||||
|
AffiliateRebateRate: settings.AffiliateRebateRate,
|
||||||
|
DefaultUserRPMLimit: settings.DefaultUserRPMLimit,
|
||||||
DefaultSubscriptions: defaultSubscriptions,
|
DefaultSubscriptions: defaultSubscriptions,
|
||||||
EnableModelFallback: settings.EnableModelFallback,
|
EnableModelFallback: settings.EnableModelFallback,
|
||||||
FallbackModelAnthropic: settings.FallbackModelAnthropic,
|
FallbackModelAnthropic: settings.FallbackModelAnthropic,
|
||||||
@ -235,6 +237,13 @@ func (h *SettingHandler) GetSettings(c *gin.Context) {
|
|||||||
PaymentCancelRateLimitWindow: paymentCfg.CancelRateLimitWindow,
|
PaymentCancelRateLimitWindow: paymentCfg.CancelRateLimitWindow,
|
||||||
PaymentCancelRateLimitUnit: paymentCfg.CancelRateLimitUnit,
|
PaymentCancelRateLimitUnit: paymentCfg.CancelRateLimitUnit,
|
||||||
PaymentCancelRateLimitMode: paymentCfg.CancelRateLimitMode,
|
PaymentCancelRateLimitMode: paymentCfg.CancelRateLimitMode,
|
||||||
|
|
||||||
|
ChannelMonitorEnabled: settings.ChannelMonitorEnabled,
|
||||||
|
ChannelMonitorDefaultIntervalSeconds: settings.ChannelMonitorDefaultIntervalSeconds,
|
||||||
|
|
||||||
|
AvailableChannelsEnabled: settings.AvailableChannelsEnabled,
|
||||||
|
|
||||||
|
AffiliateEnabled: settings.AffiliateEnabled,
|
||||||
}
|
}
|
||||||
response.Success(c, systemSettingsResponseData(payload, authSourceDefaults))
|
response.Success(c, systemSettingsResponseData(payload, authSourceDefaults))
|
||||||
}
|
}
|
||||||
@ -332,6 +341,8 @@ type UpdateSettingsRequest struct {
|
|||||||
// 默认配置
|
// 默认配置
|
||||||
DefaultConcurrency int `json:"default_concurrency"`
|
DefaultConcurrency int `json:"default_concurrency"`
|
||||||
DefaultBalance float64 `json:"default_balance"`
|
DefaultBalance float64 `json:"default_balance"`
|
||||||
|
AffiliateRebateRate *float64 `json:"affiliate_rebate_rate"`
|
||||||
|
DefaultUserRPMLimit int `json:"default_user_rpm_limit"`
|
||||||
DefaultSubscriptions []dto.DefaultSubscriptionSetting `json:"default_subscriptions"`
|
DefaultSubscriptions []dto.DefaultSubscriptionSetting `json:"default_subscriptions"`
|
||||||
AuthSourceDefaultEmailBalance *float64 `json:"auth_source_default_email_balance"`
|
AuthSourceDefaultEmailBalance *float64 `json:"auth_source_default_email_balance"`
|
||||||
AuthSourceDefaultEmailConcurrency *int `json:"auth_source_default_email_concurrency"`
|
AuthSourceDefaultEmailConcurrency *int `json:"auth_source_default_email_concurrency"`
|
||||||
@ -425,6 +436,16 @@ type UpdateSettingsRequest struct {
|
|||||||
PaymentCancelRateLimitWindow *int `json:"payment_cancel_rate_limit_window"`
|
PaymentCancelRateLimitWindow *int `json:"payment_cancel_rate_limit_window"`
|
||||||
PaymentCancelRateLimitUnit *string `json:"payment_cancel_rate_limit_unit"`
|
PaymentCancelRateLimitUnit *string `json:"payment_cancel_rate_limit_unit"`
|
||||||
PaymentCancelRateLimitMode *string `json:"payment_cancel_rate_limit_window_mode"`
|
PaymentCancelRateLimitMode *string `json:"payment_cancel_rate_limit_window_mode"`
|
||||||
|
|
||||||
|
// Channel Monitor feature switch
|
||||||
|
ChannelMonitorEnabled *bool `json:"channel_monitor_enabled"`
|
||||||
|
ChannelMonitorDefaultIntervalSeconds *int `json:"channel_monitor_default_interval_seconds"`
|
||||||
|
|
||||||
|
// Available Channels feature switch (user-facing)
|
||||||
|
AvailableChannelsEnabled *bool `json:"available_channels_enabled"`
|
||||||
|
|
||||||
|
// Affiliate (邀请返利) feature switch
|
||||||
|
AffiliateEnabled *bool `json:"affiliate_enabled"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateSettings 更新系统设置
|
// UpdateSettings 更新系统设置
|
||||||
@ -454,6 +475,16 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) {
|
|||||||
if req.DefaultBalance < 0 {
|
if req.DefaultBalance < 0 {
|
||||||
req.DefaultBalance = 0
|
req.DefaultBalance = 0
|
||||||
}
|
}
|
||||||
|
affiliateRebateRate := previousSettings.AffiliateRebateRate
|
||||||
|
if req.AffiliateRebateRate != nil {
|
||||||
|
affiliateRebateRate = *req.AffiliateRebateRate
|
||||||
|
}
|
||||||
|
if affiliateRebateRate < service.AffiliateRebateRateMin {
|
||||||
|
affiliateRebateRate = service.AffiliateRebateRateMin
|
||||||
|
}
|
||||||
|
if affiliateRebateRate > service.AffiliateRebateRateMax {
|
||||||
|
affiliateRebateRate = service.AffiliateRebateRateMax
|
||||||
|
}
|
||||||
// 通用表格配置:兼容旧客户端未传字段时保留当前值。
|
// 通用表格配置:兼容旧客户端未传字段时保留当前值。
|
||||||
if req.TableDefaultPageSize <= 0 {
|
if req.TableDefaultPageSize <= 0 {
|
||||||
req.TableDefaultPageSize = previousSettings.TableDefaultPageSize
|
req.TableDefaultPageSize = previousSettings.TableDefaultPageSize
|
||||||
@ -1105,6 +1136,8 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) {
|
|||||||
CustomEndpoints: customEndpointsJSON,
|
CustomEndpoints: customEndpointsJSON,
|
||||||
DefaultConcurrency: req.DefaultConcurrency,
|
DefaultConcurrency: req.DefaultConcurrency,
|
||||||
DefaultBalance: req.DefaultBalance,
|
DefaultBalance: req.DefaultBalance,
|
||||||
|
AffiliateRebateRate: affiliateRebateRate,
|
||||||
|
DefaultUserRPMLimit: req.DefaultUserRPMLimit,
|
||||||
DefaultSubscriptions: defaultSubscriptions,
|
DefaultSubscriptions: defaultSubscriptions,
|
||||||
EnableModelFallback: req.EnableModelFallback,
|
EnableModelFallback: req.EnableModelFallback,
|
||||||
FallbackModelAnthropic: req.FallbackModelAnthropic,
|
FallbackModelAnthropic: req.FallbackModelAnthropic,
|
||||||
@ -1219,6 +1252,30 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
return previousSettings.AccountQuotaNotifyEmails
|
return previousSettings.AccountQuotaNotifyEmails
|
||||||
}(),
|
}(),
|
||||||
|
ChannelMonitorEnabled: func() bool {
|
||||||
|
if req.ChannelMonitorEnabled != nil {
|
||||||
|
return *req.ChannelMonitorEnabled
|
||||||
|
}
|
||||||
|
return previousSettings.ChannelMonitorEnabled
|
||||||
|
}(),
|
||||||
|
ChannelMonitorDefaultIntervalSeconds: func() int {
|
||||||
|
if req.ChannelMonitorDefaultIntervalSeconds != nil {
|
||||||
|
return *req.ChannelMonitorDefaultIntervalSeconds
|
||||||
|
}
|
||||||
|
return previousSettings.ChannelMonitorDefaultIntervalSeconds
|
||||||
|
}(),
|
||||||
|
AvailableChannelsEnabled: func() bool {
|
||||||
|
if req.AvailableChannelsEnabled != nil {
|
||||||
|
return *req.AvailableChannelsEnabled
|
||||||
|
}
|
||||||
|
return previousSettings.AvailableChannelsEnabled
|
||||||
|
}(),
|
||||||
|
AffiliateEnabled: func() bool {
|
||||||
|
if req.AffiliateEnabled != nil {
|
||||||
|
return *req.AffiliateEnabled
|
||||||
|
}
|
||||||
|
return previousSettings.AffiliateEnabled
|
||||||
|
}(),
|
||||||
}
|
}
|
||||||
|
|
||||||
authSourceDefaults := &service.AuthSourceDefaultSettings{
|
authSourceDefaults := &service.AuthSourceDefaultSettings{
|
||||||
@ -1400,6 +1457,8 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) {
|
|||||||
CustomEndpoints: dto.ParseCustomEndpoints(updatedSettings.CustomEndpoints),
|
CustomEndpoints: dto.ParseCustomEndpoints(updatedSettings.CustomEndpoints),
|
||||||
DefaultConcurrency: updatedSettings.DefaultConcurrency,
|
DefaultConcurrency: updatedSettings.DefaultConcurrency,
|
||||||
DefaultBalance: updatedSettings.DefaultBalance,
|
DefaultBalance: updatedSettings.DefaultBalance,
|
||||||
|
AffiliateRebateRate: updatedSettings.AffiliateRebateRate,
|
||||||
|
DefaultUserRPMLimit: updatedSettings.DefaultUserRPMLimit,
|
||||||
DefaultSubscriptions: updatedDefaultSubscriptions,
|
DefaultSubscriptions: updatedDefaultSubscriptions,
|
||||||
EnableModelFallback: updatedSettings.EnableModelFallback,
|
EnableModelFallback: updatedSettings.EnableModelFallback,
|
||||||
FallbackModelAnthropic: updatedSettings.FallbackModelAnthropic,
|
FallbackModelAnthropic: updatedSettings.FallbackModelAnthropic,
|
||||||
@ -1449,6 +1508,13 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) {
|
|||||||
PaymentCancelRateLimitWindow: updatedPaymentCfg.CancelRateLimitWindow,
|
PaymentCancelRateLimitWindow: updatedPaymentCfg.CancelRateLimitWindow,
|
||||||
PaymentCancelRateLimitUnit: updatedPaymentCfg.CancelRateLimitUnit,
|
PaymentCancelRateLimitUnit: updatedPaymentCfg.CancelRateLimitUnit,
|
||||||
PaymentCancelRateLimitMode: updatedPaymentCfg.CancelRateLimitMode,
|
PaymentCancelRateLimitMode: updatedPaymentCfg.CancelRateLimitMode,
|
||||||
|
|
||||||
|
ChannelMonitorEnabled: updatedSettings.ChannelMonitorEnabled,
|
||||||
|
ChannelMonitorDefaultIntervalSeconds: updatedSettings.ChannelMonitorDefaultIntervalSeconds,
|
||||||
|
|
||||||
|
AvailableChannelsEnabled: updatedSettings.AvailableChannelsEnabled,
|
||||||
|
|
||||||
|
AffiliateEnabled: updatedSettings.AffiliateEnabled,
|
||||||
}
|
}
|
||||||
response.Success(c, systemSettingsResponseData(payload, updatedAuthSourceDefaults))
|
response.Success(c, systemSettingsResponseData(payload, updatedAuthSourceDefaults))
|
||||||
}
|
}
|
||||||
@ -1699,6 +1765,9 @@ func diffSettings(before *service.SystemSettings, after *service.SystemSettings,
|
|||||||
if before.DefaultBalance != after.DefaultBalance {
|
if before.DefaultBalance != after.DefaultBalance {
|
||||||
changed = append(changed, "default_balance")
|
changed = append(changed, "default_balance")
|
||||||
}
|
}
|
||||||
|
if before.AffiliateRebateRate != after.AffiliateRebateRate {
|
||||||
|
changed = append(changed, "affiliate_rebate_rate")
|
||||||
|
}
|
||||||
if !equalDefaultSubscriptions(before.DefaultSubscriptions, after.DefaultSubscriptions) {
|
if !equalDefaultSubscriptions(before.DefaultSubscriptions, after.DefaultSubscriptions) {
|
||||||
changed = append(changed, "default_subscriptions")
|
changed = append(changed, "default_subscriptions")
|
||||||
}
|
}
|
||||||
@ -1805,6 +1874,18 @@ func diffSettings(before *service.SystemSettings, after *service.SystemSettings,
|
|||||||
if !equalNotifyEmailEntries(before.AccountQuotaNotifyEmails, after.AccountQuotaNotifyEmails) {
|
if !equalNotifyEmailEntries(before.AccountQuotaNotifyEmails, after.AccountQuotaNotifyEmails) {
|
||||||
changed = append(changed, "account_quota_notify_emails")
|
changed = append(changed, "account_quota_notify_emails")
|
||||||
}
|
}
|
||||||
|
if before.ChannelMonitorEnabled != after.ChannelMonitorEnabled {
|
||||||
|
changed = append(changed, "channel_monitor_enabled")
|
||||||
|
}
|
||||||
|
if before.ChannelMonitorDefaultIntervalSeconds != after.ChannelMonitorDefaultIntervalSeconds {
|
||||||
|
changed = append(changed, "channel_monitor_default_interval_seconds")
|
||||||
|
}
|
||||||
|
if before.AvailableChannelsEnabled != after.AvailableChannelsEnabled {
|
||||||
|
changed = append(changed, "available_channels_enabled")
|
||||||
|
}
|
||||||
|
if before.AffiliateEnabled != after.AffiliateEnabled {
|
||||||
|
changed = append(changed, "affiliate_enabled")
|
||||||
|
}
|
||||||
changed = appendAuthSourceDefaultChanges(changed, beforeAuthSourceDefaults, afterAuthSourceDefaults)
|
changed = appendAuthSourceDefaultChanges(changed, beforeAuthSourceDefaults, afterAuthSourceDefaults)
|
||||||
return changed
|
return changed
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,6 +40,7 @@ type CreateUserRequest struct {
|
|||||||
Notes string `json:"notes"`
|
Notes string `json:"notes"`
|
||||||
Balance float64 `json:"balance"`
|
Balance float64 `json:"balance"`
|
||||||
Concurrency int `json:"concurrency"`
|
Concurrency int `json:"concurrency"`
|
||||||
|
RPMLimit int `json:"rpm_limit"`
|
||||||
AllowedGroups []int64 `json:"allowed_groups"`
|
AllowedGroups []int64 `json:"allowed_groups"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,6 +53,7 @@ type UpdateUserRequest struct {
|
|||||||
Notes *string `json:"notes"`
|
Notes *string `json:"notes"`
|
||||||
Balance *float64 `json:"balance"`
|
Balance *float64 `json:"balance"`
|
||||||
Concurrency *int `json:"concurrency"`
|
Concurrency *int `json:"concurrency"`
|
||||||
|
RPMLimit *int `json:"rpm_limit"`
|
||||||
Status string `json:"status" binding:"omitempty,oneof=active disabled"`
|
Status string `json:"status" binding:"omitempty,oneof=active disabled"`
|
||||||
AllowedGroups *[]int64 `json:"allowed_groups"`
|
AllowedGroups *[]int64 `json:"allowed_groups"`
|
||||||
// GroupRates 用户专属分组倍率配置
|
// GroupRates 用户专属分组倍率配置
|
||||||
@ -243,6 +245,7 @@ func (h *UserHandler) Create(c *gin.Context) {
|
|||||||
Notes: req.Notes,
|
Notes: req.Notes,
|
||||||
Balance: req.Balance,
|
Balance: req.Balance,
|
||||||
Concurrency: req.Concurrency,
|
Concurrency: req.Concurrency,
|
||||||
|
RPMLimit: req.RPMLimit,
|
||||||
AllowedGroups: req.AllowedGroups,
|
AllowedGroups: req.AllowedGroups,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -276,6 +279,7 @@ func (h *UserHandler) Update(c *gin.Context) {
|
|||||||
Notes: req.Notes,
|
Notes: req.Notes,
|
||||||
Balance: req.Balance,
|
Balance: req.Balance,
|
||||||
Concurrency: req.Concurrency,
|
Concurrency: req.Concurrency,
|
||||||
|
RPMLimit: req.RPMLimit,
|
||||||
Status: req.Status,
|
Status: req.Status,
|
||||||
AllowedGroups: req.AllowedGroups,
|
AllowedGroups: req.AllowedGroups,
|
||||||
GroupRates: req.GroupRates,
|
GroupRates: req.GroupRates,
|
||||||
@ -455,3 +459,21 @@ func (h *UserHandler) ReplaceGroup(c *gin.Context) {
|
|||||||
"migrated_keys": result.MigratedKeys,
|
"migrated_keys": result.MigratedKeys,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetUserRPMStatus 返回指定用户当前分钟的 RPM 用量
|
||||||
|
// GET /api/v1/admin/users/:id/rpm-status
|
||||||
|
func (h *UserHandler) GetUserRPMStatus(c *gin.Context) {
|
||||||
|
userID, err := strconv.ParseInt(c.Param("id"), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
response.BadRequest(c, "Invalid user ID")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
status, err := h.adminService.GetUserRPMStatus(c.Request.Context(), userID)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
response.Success(c, status)
|
||||||
|
}
|
||||||
|
|||||||
@ -1,267 +0,0 @@
|
|||||||
package handler
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"net/http"
|
|
||||||
"log/slog"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"github.com/Wei-Shaw/sub2api/internal/service"
|
|
||||||
)
|
|
||||||
|
|
||||||
// AntigravityHTTPHandler 处理下游客户端的 HTTP 请求
|
|
||||||
// 内部调用 LanguageServerService,再转发到上游 API
|
|
||||||
type AntigravityHTTPHandler struct {
|
|
||||||
langServerService *service.LanguageServerService
|
|
||||||
logger *slog.Logger
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewAntigravityHTTPHandler(
|
|
||||||
langServerService *service.LanguageServerService,
|
|
||||||
logger *slog.Logger,
|
|
||||||
) *AntigravityHTTPHandler {
|
|
||||||
return &AntigravityHTTPHandler{
|
|
||||||
langServerService: langServerService,
|
|
||||||
logger: logger,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================================================================
|
|
||||||
// Cascade 流程 API
|
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
// StartCascadeRequest HTTP 请求格式
|
|
||||||
type StartCascadeRequest struct {
|
|
||||||
Model string `json:"model"` // 模型名称
|
|
||||||
SystemPrompt string `json:"system_prompt"` // 系统提示
|
|
||||||
Metadata map[string]string `json:"metadata"` // 设备指纹等伪装信息
|
|
||||||
}
|
|
||||||
|
|
||||||
// StartCascadeResponse HTTP 响应格式
|
|
||||||
type StartCascadeResponse struct {
|
|
||||||
CascadeID string `json:"cascade_id"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// POST /api/v1/cascade/start
|
|
||||||
// 启动新的 Cascade Agent 会话
|
|
||||||
func (h *AntigravityHTTPHandler) StartCascade(c *gin.Context) {
|
|
||||||
var req StartCascadeRequest
|
|
||||||
if err := c.ShouldBindJSON(&req); err != nil {
|
|
||||||
h.logger.Error("invalid request", "error", err)
|
|
||||||
c.JSON(http.StatusBadRequest, gin.H{
|
|
||||||
"error": "invalid request: " + err.Error(),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 提取 OAuth token
|
|
||||||
token := c.GetHeader("Authorization")
|
|
||||||
if token == "" {
|
|
||||||
c.JSON(http.StatusUnauthorized, gin.H{
|
|
||||||
"error": "missing authorization header",
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 调用内部 LanguageServerService
|
|
||||||
cascadeID, err := h.langServerService.StartCascade(
|
|
||||||
c.Request.Context(),
|
|
||||||
req.Model,
|
|
||||||
req.SystemPrompt,
|
|
||||||
req.Metadata,
|
|
||||||
token,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
h.logger.Error("start cascade failed", "error", err)
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{
|
|
||||||
"error": err.Error(),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
h.logger.Info("cascade started", "cascade_id", cascadeID, "model", req.Model)
|
|
||||||
|
|
||||||
c.JSON(http.StatusOK, StartCascadeResponse{
|
|
||||||
CascadeID: cascadeID,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
// SendUserMessageRequest HTTP 请求格式
|
|
||||||
type SendUserMessageRequest struct {
|
|
||||||
CascadeID string `json:"cascade_id"` // 会话 ID
|
|
||||||
Message string `json:"message"` // 用户消息
|
|
||||||
Context map[string]string `json:"context"` // 上下文(可选)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CascadeUpdate 流式响应格式(Server-Sent Events)
|
|
||||||
type CascadeUpdate struct {
|
|
||||||
Type string `json:"type"` // "message_delta", "tool_call", etc.
|
|
||||||
Payload string `json:"payload"` // JSON 格式的负载
|
|
||||||
}
|
|
||||||
|
|
||||||
// POST /api/v1/cascade/message (流式)
|
|
||||||
// 发送用户消息,接收流式更新
|
|
||||||
func (h *AntigravityHTTPHandler) SendUserMessage(c *gin.Context) {
|
|
||||||
var req SendUserMessageRequest
|
|
||||||
if err := c.ShouldBindJSON(&req); err != nil {
|
|
||||||
h.logger.Error("invalid request", "error", err)
|
|
||||||
c.JSON(http.StatusBadRequest, gin.H{
|
|
||||||
"error": "invalid request: " + err.Error(),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 提取 OAuth token
|
|
||||||
token := c.GetHeader("Authorization")
|
|
||||||
if token == "" {
|
|
||||||
c.JSON(http.StatusUnauthorized, gin.H{
|
|
||||||
"error": "missing authorization header",
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置 Server-Sent Events 响应头
|
|
||||||
c.Header("Content-Type", "text/event-stream")
|
|
||||||
c.Header("Cache-Control", "no-cache")
|
|
||||||
c.Header("Connection", "keep-alive")
|
|
||||||
|
|
||||||
// 调用内部 LanguageServerService,获取流式响应
|
|
||||||
updateChan, err := h.langServerService.SendUserMessage(
|
|
||||||
c.Request.Context(),
|
|
||||||
req.CascadeID,
|
|
||||||
req.Message,
|
|
||||||
token,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
h.logger.Error("send user message failed", "error", err)
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{
|
|
||||||
"error": err.Error(),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 逐个推送更新到客户端(SSE)
|
|
||||||
for update := range updateChan {
|
|
||||||
data, _ := json.Marshal(update)
|
|
||||||
c.SSEvent("update", string(data))
|
|
||||||
c.Writer.Flush()
|
|
||||||
}
|
|
||||||
|
|
||||||
h.logger.Info("cascade message processed", "cascade_id", req.CascadeID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
// POST /api/v1/cascade/cancel
|
|
||||||
// 取消 Cascade 调用
|
|
||||||
func (h *AntigravityHTTPHandler) CancelCascade(c *gin.Context) {
|
|
||||||
var req struct {
|
|
||||||
CascadeID string `json:"cascade_id"`
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := c.ShouldBindJSON(&req); err != nil {
|
|
||||||
c.JSON(http.StatusBadRequest, gin.H{
|
|
||||||
"error": "invalid request",
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := h.langServerService.CancelCascade(
|
|
||||||
c.Request.Context(),
|
|
||||||
req.CascadeID,
|
|
||||||
); err != nil {
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{
|
|
||||||
"error": err.Error(),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
h.logger.Info("cascade cancelled", "cascade_id", req.CascadeID)
|
|
||||||
c.JSON(http.StatusOK, gin.H{
|
|
||||||
"success": true,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================================================================
|
|
||||||
// 模型配置 API
|
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
// ModelConfig 模型配置
|
|
||||||
type ModelConfig struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
DisplayName string `json:"display_name"`
|
|
||||||
MaxTokens int `json:"max_tokens"`
|
|
||||||
SupportsThinking bool `json:"supports_thinking"`
|
|
||||||
ThinkingBudget int `json:"thinking_budget,omitempty"`
|
|
||||||
SupportsImages bool `json:"supports_images"`
|
|
||||||
Provider string `json:"provider"` // anthropic, google, openai
|
|
||||||
}
|
|
||||||
|
|
||||||
// GET /api/v1/models
|
|
||||||
// 获取可用模型列表
|
|
||||||
func (h *AntigravityHTTPHandler) GetModels(c *gin.Context) {
|
|
||||||
models, err := h.langServerService.GetAvailableModels(c.Request.Context())
|
|
||||||
if err != nil {
|
|
||||||
h.logger.Error("get models failed", "error", err)
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{
|
|
||||||
"error": err.Error(),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.JSON(http.StatusOK, gin.H{
|
|
||||||
"models": models,
|
|
||||||
"default_model": "claude-opus-4-7",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================================================================
|
|
||||||
// 健康检查 API
|
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
// GET /api/v1/health
|
|
||||||
// 健康检查
|
|
||||||
func (h *AntigravityHTTPHandler) Health(c *gin.Context) {
|
|
||||||
status, err := h.langServerService.GetStatus(c.Request.Context())
|
|
||||||
if err != nil {
|
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{
|
|
||||||
"status": "unhealthy",
|
|
||||||
"error": err.Error(),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.JSON(http.StatusOK, gin.H{
|
|
||||||
"status": status,
|
|
||||||
"version": "1.0.0",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
// RegisterRoutes 注册所有 HTTP 路由
|
|
||||||
func (h *AntigravityHTTPHandler) RegisterRoutes(router *gin.Engine) {
|
|
||||||
api := router.Group("/api/v1")
|
|
||||||
|
|
||||||
// Cascade 流程
|
|
||||||
api.POST("/cascade/start", h.StartCascade)
|
|
||||||
api.POST("/cascade/message", h.SendUserMessage)
|
|
||||||
api.POST("/cascade/cancel", h.CancelCascade)
|
|
||||||
|
|
||||||
// 模型列表
|
|
||||||
api.GET("/models", h.GetModels)
|
|
||||||
|
|
||||||
// 健康检查
|
|
||||||
api.GET("/health", h.Health)
|
|
||||||
|
|
||||||
h.logger.Info("antigravity http handler registered",
|
|
||||||
"routes", []string{
|
|
||||||
"/api/v1/cascade/start",
|
|
||||||
"/api/v1/cascade/message",
|
|
||||||
"/api/v1/cascade/cancel",
|
|
||||||
"/api/v1/models",
|
|
||||||
"/api/v1/health",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@ -29,19 +29,19 @@ func TestAuthHandlerGetCurrentUserReturnsProfileCompatibilityFields(t *testing.T
|
|||||||
AvatarURL: "https://cdn.example.com/linuxdo.png",
|
AvatarURL: "https://cdn.example.com/linuxdo.png",
|
||||||
AvatarSource: "remote_url",
|
AvatarSource: "remote_url",
|
||||||
},
|
},
|
||||||
identities: []service.UserAuthIdentityRecord{
|
identities: []service.UserAuthIdentityRecord{
|
||||||
{
|
{
|
||||||
ProviderType: "linuxdo",
|
ProviderType: "linuxdo",
|
||||||
ProviderKey: "linuxdo",
|
ProviderKey: "linuxdo",
|
||||||
ProviderSubject: "linuxdo-subject-31",
|
ProviderSubject: "linuxdo-subject-31",
|
||||||
VerifiedAt: &verifiedAt,
|
VerifiedAt: &verifiedAt,
|
||||||
Metadata: map[string]any{
|
Metadata: map[string]any{
|
||||||
"username": "linuxdo-handle",
|
"username": "linuxdo-handle",
|
||||||
"avatar_url": "https://cdn.example.com/linuxdo.png",
|
"avatar_url": "https://cdn.example.com/linuxdo.png",
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
|
}
|
||||||
|
|
||||||
handler := &AuthHandler{
|
handler := &AuthHandler{
|
||||||
userService: service.NewUserService(repo, nil, nil, nil),
|
userService: service.NewUserService(repo, nil, nil, nil),
|
||||||
|
|||||||
@ -48,6 +48,7 @@ type RegisterRequest struct {
|
|||||||
TurnstileToken string `json:"turnstile_token"`
|
TurnstileToken string `json:"turnstile_token"`
|
||||||
PromoCode string `json:"promo_code"` // 注册优惠码
|
PromoCode string `json:"promo_code"` // 注册优惠码
|
||||||
InvitationCode string `json:"invitation_code"` // 邀请码
|
InvitationCode string `json:"invitation_code"` // 邀请码
|
||||||
|
AffCode string `json:"aff_code"` // 邀请返利码
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendVerifyCodeRequest 发送验证码请求
|
// SendVerifyCodeRequest 发送验证码请求
|
||||||
@ -164,7 +165,15 @@ func (h *AuthHandler) Register(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, user, err := h.authService.RegisterWithVerification(c.Request.Context(), req.Email, req.Password, req.VerifyCode, req.PromoCode, req.InvitationCode)
|
_, user, err := h.authService.RegisterWithVerification(
|
||||||
|
c.Request.Context(),
|
||||||
|
req.Email,
|
||||||
|
req.Password,
|
||||||
|
req.VerifyCode,
|
||||||
|
req.PromoCode,
|
||||||
|
req.InvitationCode,
|
||||||
|
req.AffCode,
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ErrorFrom(c, err)
|
response.ErrorFrom(c, err)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -2210,6 +2210,7 @@ CREATE TABLE IF NOT EXISTS user_avatars (
|
|||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
options.defaultSubAssigner,
|
options.defaultSubAssigner,
|
||||||
|
nil,
|
||||||
)
|
)
|
||||||
userSvc := service.NewUserService(userRepo, nil, nil, nil)
|
userSvc := service.NewUserService(userRepo, nil, nil, nil)
|
||||||
var totpSvc *service.TotpService
|
var totpSvc *service.TotpService
|
||||||
|
|||||||
@ -35,7 +35,7 @@ func TestAuthHandlerRevokeAllSessionsInvalidatesAccessTokens(t *testing.T) {
|
|||||||
ExpireHour: 1,
|
ExpireHour: 1,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
authService := service.NewAuthService(nil, repo, nil, refreshTokenCache, cfg, nil, nil, nil, nil, nil, nil)
|
authService := service.NewAuthService(nil, repo, nil, refreshTokenCache, cfg, nil, nil, nil, nil, nil, nil, nil)
|
||||||
handler := &AuthHandler{authService: authService}
|
handler := &AuthHandler{authService: authService}
|
||||||
|
|
||||||
recorder := httptest.NewRecorder()
|
recorder := httptest.NewRecorder()
|
||||||
|
|||||||
@ -1399,6 +1399,7 @@ func newWeChatOAuthTestHandlerWithSettings(t *testing.T, invitationEnabled bool,
|
|||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
|
nil,
|
||||||
)
|
)
|
||||||
|
|
||||||
return &AuthHandler{
|
return &AuthHandler{
|
||||||
|
|||||||
283
backend/internal/handler/available_channel_handler.go
Normal file
283
backend/internal/handler/available_channel_handler.go
Normal file
@ -0,0 +1,283 @@
|
|||||||
|
package handler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/pkg/response"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/server/middleware"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AvailableChannelHandler 处理用户侧「可用渠道」查询。
|
||||||
|
//
|
||||||
|
// 用户侧接口委托 ChannelService.ListAvailable,并在返回前做三层过滤:
|
||||||
|
// 1. 行过滤:只保留状态为 Active 且与当前用户可访问分组有交集的渠道;
|
||||||
|
// 2. 分组过滤:渠道的 Groups 只保留用户可访问的那些;
|
||||||
|
// 3. 平台过滤:渠道的 SupportedModels 只保留平台在用户可见 Groups 中出现过的模型,
|
||||||
|
// 防止"渠道同时挂在 antigravity / anthropic 两个平台的分组上,用户只访问
|
||||||
|
// antigravity,却看到 anthropic 模型"这类跨平台信息泄漏;
|
||||||
|
// 4. 字段白名单:仅返回用户需要的字段(省略 BillingModelSource / RestrictModels
|
||||||
|
// / 内部 ID / Status 等管理字段)。
|
||||||
|
type AvailableChannelHandler struct {
|
||||||
|
channelService *service.ChannelService
|
||||||
|
apiKeyService *service.APIKeyService
|
||||||
|
settingService *service.SettingService
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewAvailableChannelHandler 创建用户侧可用渠道 handler。
|
||||||
|
func NewAvailableChannelHandler(
|
||||||
|
channelService *service.ChannelService,
|
||||||
|
apiKeyService *service.APIKeyService,
|
||||||
|
settingService *service.SettingService,
|
||||||
|
) *AvailableChannelHandler {
|
||||||
|
return &AvailableChannelHandler{
|
||||||
|
channelService: channelService,
|
||||||
|
apiKeyService: apiKeyService,
|
||||||
|
settingService: settingService,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// featureEnabled 返回 available-channels 开关是否启用。默认关闭(opt-in)。
|
||||||
|
func (h *AvailableChannelHandler) featureEnabled(c *gin.Context) bool {
|
||||||
|
if h.settingService == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return h.settingService.GetAvailableChannelsRuntime(c.Request.Context()).Enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
// userAvailableGroup 用户可见的分组概要(白名单字段)。
|
||||||
|
//
|
||||||
|
// 前端据此区分专属 vs 公开分组(IsExclusive)、订阅 vs 标准分组(SubscriptionType,
|
||||||
|
// 订阅视觉加深),并用 RateMultiplier 作为默认倍率;用户专属倍率前端走
|
||||||
|
// /groups/rates,和 API 密钥页面保持一致。
|
||||||
|
type userAvailableGroup struct {
|
||||||
|
ID int64 `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Platform string `json:"platform"`
|
||||||
|
SubscriptionType string `json:"subscription_type"`
|
||||||
|
RateMultiplier float64 `json:"rate_multiplier"`
|
||||||
|
IsExclusive bool `json:"is_exclusive"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// userSupportedModelPricing 用户可见的定价字段白名单。
|
||||||
|
type userSupportedModelPricing struct {
|
||||||
|
BillingMode string `json:"billing_mode"`
|
||||||
|
InputPrice *float64 `json:"input_price"`
|
||||||
|
OutputPrice *float64 `json:"output_price"`
|
||||||
|
CacheWritePrice *float64 `json:"cache_write_price"`
|
||||||
|
CacheReadPrice *float64 `json:"cache_read_price"`
|
||||||
|
ImageOutputPrice *float64 `json:"image_output_price"`
|
||||||
|
PerRequestPrice *float64 `json:"per_request_price"`
|
||||||
|
Intervals []userPricingIntervalDTO `json:"intervals"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// userPricingIntervalDTO 定价区间白名单(去掉内部 ID、SortOrder 等前端不渲染的字段)。
|
||||||
|
type userPricingIntervalDTO struct {
|
||||||
|
MinTokens int `json:"min_tokens"`
|
||||||
|
MaxTokens *int `json:"max_tokens"`
|
||||||
|
TierLabel string `json:"tier_label,omitempty"`
|
||||||
|
InputPrice *float64 `json:"input_price"`
|
||||||
|
OutputPrice *float64 `json:"output_price"`
|
||||||
|
CacheWritePrice *float64 `json:"cache_write_price"`
|
||||||
|
CacheReadPrice *float64 `json:"cache_read_price"`
|
||||||
|
PerRequestPrice *float64 `json:"per_request_price"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// userSupportedModel 用户可见的支持模型条目。
|
||||||
|
type userSupportedModel struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Platform string `json:"platform"`
|
||||||
|
Pricing *userSupportedModelPricing `json:"pricing"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// userChannelPlatformSection 单渠道内某个平台的子视图:用户可见的分组 + 该平台
|
||||||
|
// 支持的模型。按 platform 聚合后让前端可以把渠道名作为 row-group 一次渲染,
|
||||||
|
// 后面的平台行按 sections 顺序铺开。
|
||||||
|
type userChannelPlatformSection struct {
|
||||||
|
Platform string `json:"platform"`
|
||||||
|
Groups []userAvailableGroup `json:"groups"`
|
||||||
|
SupportedModels []userSupportedModel `json:"supported_models"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// userAvailableChannel 用户可见的渠道条目(白名单字段)。
|
||||||
|
//
|
||||||
|
// 每个渠道聚合为一条记录,内嵌 platforms 子数组:每个 section 对应一个平台,
|
||||||
|
// 包含该平台的 groups 和 supported_models。
|
||||||
|
type userAvailableChannel struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
Platforms []userChannelPlatformSection `json:"platforms"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// List 列出当前用户可见的「可用渠道」。
|
||||||
|
// GET /api/v1/channels/available
|
||||||
|
func (h *AvailableChannelHandler) List(c *gin.Context) {
|
||||||
|
subject, ok := middleware.GetAuthSubjectFromContext(c)
|
||||||
|
if !ok {
|
||||||
|
response.Unauthorized(c, "User not authenticated")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Feature 未启用时返回空数组(不暴露渠道信息)。检查放在认证之后,
|
||||||
|
// 保持与未开关前的 401 行为一致:未登录先 401,登录后再按开关决定。
|
||||||
|
if !h.featureEnabled(c) {
|
||||||
|
response.Success(c, []userAvailableChannel{})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
userGroups, err := h.apiKeyService.GetAvailableGroups(c.Request.Context(), subject.UserID)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
allowedGroupIDs := make(map[int64]struct{}, len(userGroups))
|
||||||
|
for i := range userGroups {
|
||||||
|
allowedGroupIDs[userGroups[i].ID] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
channels, err := h.channelService.ListAvailable(c.Request.Context())
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
out := make([]userAvailableChannel, 0, len(channels))
|
||||||
|
for _, ch := range channels {
|
||||||
|
if ch.Status != service.StatusActive {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
visibleGroups := filterUserVisibleGroups(ch.Groups, allowedGroupIDs)
|
||||||
|
if len(visibleGroups) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
sections := buildPlatformSections(ch, visibleGroups)
|
||||||
|
if len(sections) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
out = append(out, userAvailableChannel{
|
||||||
|
Name: ch.Name,
|
||||||
|
Description: ch.Description,
|
||||||
|
Platforms: sections,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
response.Success(c, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
// buildPlatformSections 把一个渠道按 visibleGroups 的平台集合拆成有序的 section 列表:
|
||||||
|
// 每个 section 对应一个平台,只包含该平台的 groups 和 supported_models。
|
||||||
|
// 输出按 platform 字母序稳定排序,便于前端等效比较与回归测试。
|
||||||
|
func buildPlatformSections(
|
||||||
|
ch service.AvailableChannel,
|
||||||
|
visibleGroups []userAvailableGroup,
|
||||||
|
) []userChannelPlatformSection {
|
||||||
|
groupsByPlatform := make(map[string][]userAvailableGroup, 4)
|
||||||
|
for _, g := range visibleGroups {
|
||||||
|
if g.Platform == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
groupsByPlatform[g.Platform] = append(groupsByPlatform[g.Platform], g)
|
||||||
|
}
|
||||||
|
if len(groupsByPlatform) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
platforms := make([]string, 0, len(groupsByPlatform))
|
||||||
|
for p := range groupsByPlatform {
|
||||||
|
platforms = append(platforms, p)
|
||||||
|
}
|
||||||
|
sort.Strings(platforms)
|
||||||
|
|
||||||
|
sections := make([]userChannelPlatformSection, 0, len(platforms))
|
||||||
|
for _, platform := range platforms {
|
||||||
|
platformSet := map[string]struct{}{platform: {}}
|
||||||
|
sections = append(sections, userChannelPlatformSection{
|
||||||
|
Platform: platform,
|
||||||
|
Groups: groupsByPlatform[platform],
|
||||||
|
SupportedModels: toUserSupportedModels(ch.SupportedModels, platformSet),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return sections
|
||||||
|
}
|
||||||
|
|
||||||
|
// filterUserVisibleGroups 仅保留用户可访问的分组。
|
||||||
|
func filterUserVisibleGroups(
|
||||||
|
groups []service.AvailableGroupRef,
|
||||||
|
allowed map[int64]struct{},
|
||||||
|
) []userAvailableGroup {
|
||||||
|
visible := make([]userAvailableGroup, 0, len(groups))
|
||||||
|
for _, g := range groups {
|
||||||
|
if _, ok := allowed[g.ID]; !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
visible = append(visible, userAvailableGroup{
|
||||||
|
ID: g.ID,
|
||||||
|
Name: g.Name,
|
||||||
|
Platform: g.Platform,
|
||||||
|
SubscriptionType: g.SubscriptionType,
|
||||||
|
RateMultiplier: g.RateMultiplier,
|
||||||
|
IsExclusive: g.IsExclusive,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return visible
|
||||||
|
}
|
||||||
|
|
||||||
|
// toUserSupportedModels 将 service 层支持模型转换为用户 DTO(字段白名单)。
|
||||||
|
// 仅保留平台在 allowedPlatforms 中的条目,防止跨平台模型信息泄漏。
|
||||||
|
// allowedPlatforms 为 nil 时不做平台过滤(保留全部,供测试或明确无过滤场景使用)。
|
||||||
|
func toUserSupportedModels(
|
||||||
|
src []service.SupportedModel,
|
||||||
|
allowedPlatforms map[string]struct{},
|
||||||
|
) []userSupportedModel {
|
||||||
|
out := make([]userSupportedModel, 0, len(src))
|
||||||
|
for i := range src {
|
||||||
|
m := src[i]
|
||||||
|
if allowedPlatforms != nil {
|
||||||
|
if _, ok := allowedPlatforms[m.Platform]; !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out = append(out, userSupportedModel{
|
||||||
|
Name: m.Name,
|
||||||
|
Platform: m.Platform,
|
||||||
|
Pricing: toUserPricing(m.Pricing),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// toUserPricing 将 service 层定价转换为用户 DTO;入参为 nil 时返回 nil。
|
||||||
|
func toUserPricing(p *service.ChannelModelPricing) *userSupportedModelPricing {
|
||||||
|
if p == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
intervals := make([]userPricingIntervalDTO, 0, len(p.Intervals))
|
||||||
|
for _, iv := range p.Intervals {
|
||||||
|
intervals = append(intervals, userPricingIntervalDTO{
|
||||||
|
MinTokens: iv.MinTokens,
|
||||||
|
MaxTokens: iv.MaxTokens,
|
||||||
|
TierLabel: iv.TierLabel,
|
||||||
|
InputPrice: iv.InputPrice,
|
||||||
|
OutputPrice: iv.OutputPrice,
|
||||||
|
CacheWritePrice: iv.CacheWritePrice,
|
||||||
|
CacheReadPrice: iv.CacheReadPrice,
|
||||||
|
PerRequestPrice: iv.PerRequestPrice,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
billingMode := string(p.BillingMode)
|
||||||
|
if billingMode == "" {
|
||||||
|
billingMode = string(service.BillingModeToken)
|
||||||
|
}
|
||||||
|
return &userSupportedModelPricing{
|
||||||
|
BillingMode: billingMode,
|
||||||
|
InputPrice: p.InputPrice,
|
||||||
|
OutputPrice: p.OutputPrice,
|
||||||
|
CacheWritePrice: p.CacheWritePrice,
|
||||||
|
CacheReadPrice: p.CacheReadPrice,
|
||||||
|
ImageOutputPrice: p.ImageOutputPrice,
|
||||||
|
PerRequestPrice: p.PerRequestPrice,
|
||||||
|
Intervals: intervals,
|
||||||
|
}
|
||||||
|
}
|
||||||
157
backend/internal/handler/available_channel_handler_test.go
Normal file
157
backend/internal/handler/available_channel_handler_test.go
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
//go:build unit
|
||||||
|
|
||||||
|
package handler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUserAvailableChannel_Unauthenticated401(t *testing.T) {
|
||||||
|
// 没有 AuthSubject 注入时,handler 应返回 401 且不触达 service 依赖。
|
||||||
|
gin.SetMode(gin.TestMode)
|
||||||
|
h := &AvailableChannelHandler{} // nil services — 401 路径不会调用它们
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
c, _ := gin.CreateTestContext(w)
|
||||||
|
c.Request = httptest.NewRequest(http.MethodGet, "/api/v1/channels/available", nil)
|
||||||
|
|
||||||
|
h.List(c)
|
||||||
|
|
||||||
|
require.Equal(t, http.StatusUnauthorized, w.Code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFilterUserVisibleGroups_IntersectionOnly(t *testing.T) {
|
||||||
|
// 渠道挂在 {g1, g2, g3},用户只允许 {g1, g3} —— 响应必须仅含 g1/g3。
|
||||||
|
groups := []service.AvailableGroupRef{
|
||||||
|
{ID: 1, Name: "g1", Platform: "anthropic"},
|
||||||
|
{ID: 2, Name: "g2", Platform: "anthropic"},
|
||||||
|
{ID: 3, Name: "g3", Platform: "openai"},
|
||||||
|
}
|
||||||
|
allowed := map[int64]struct{}{1: {}, 3: {}}
|
||||||
|
|
||||||
|
visible := filterUserVisibleGroups(groups, allowed)
|
||||||
|
require.Len(t, visible, 2)
|
||||||
|
ids := []int64{visible[0].ID, visible[1].ID}
|
||||||
|
require.ElementsMatch(t, []int64{1, 3}, ids)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestToUserSupportedModels_FiltersByAllowedPlatforms(t *testing.T) {
|
||||||
|
// 用户可访问分组只覆盖 anthropic;anthropic 平台的模型保留,openai 模型被剔除。
|
||||||
|
src := []service.SupportedModel{
|
||||||
|
{Name: "claude-sonnet-4-6", Platform: "anthropic", Pricing: nil},
|
||||||
|
{Name: "gpt-4o", Platform: "openai", Pricing: nil},
|
||||||
|
}
|
||||||
|
allowed := map[string]struct{}{"anthropic": {}}
|
||||||
|
out := toUserSupportedModels(src, allowed)
|
||||||
|
require.Len(t, out, 1)
|
||||||
|
require.Equal(t, "claude-sonnet-4-6", out[0].Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestToUserSupportedModels_NilAllowedPlatformsKeepsAll(t *testing.T) {
|
||||||
|
// 显式传 nil allowedPlatforms 表示不做过滤。
|
||||||
|
src := []service.SupportedModel{
|
||||||
|
{Name: "a", Platform: "anthropic"},
|
||||||
|
{Name: "b", Platform: "openai"},
|
||||||
|
}
|
||||||
|
require.Len(t, toUserSupportedModels(src, nil), 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUserAvailableChannel_FieldWhitelist(t *testing.T) {
|
||||||
|
// 通过序列化 userAvailableChannel 结构体验证响应形状:
|
||||||
|
// 只有 name / description / platforms;不含管理端字段。
|
||||||
|
row := userAvailableChannel{
|
||||||
|
Name: "ch",
|
||||||
|
Description: "d",
|
||||||
|
Platforms: []userChannelPlatformSection{
|
||||||
|
{
|
||||||
|
Platform: "anthropic",
|
||||||
|
Groups: []userAvailableGroup{{ID: 1, Name: "g1", Platform: "anthropic"}},
|
||||||
|
SupportedModels: []userSupportedModel{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
raw, err := json.Marshal(row)
|
||||||
|
require.NoError(t, err)
|
||||||
|
var decoded map[string]any
|
||||||
|
require.NoError(t, json.Unmarshal(raw, &decoded))
|
||||||
|
|
||||||
|
for _, key := range []string{"id", "status", "billing_model_source", "restrict_models"} {
|
||||||
|
_, exists := decoded[key]
|
||||||
|
require.Falsef(t, exists, "user DTO must not expose %q", key)
|
||||||
|
}
|
||||||
|
for _, key := range []string{"name", "description", "platforms"} {
|
||||||
|
_, exists := decoded[key]
|
||||||
|
require.Truef(t, exists, "user DTO must expose %q", key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证 section 的字段(platform / groups / supported_models)。
|
||||||
|
rawSection, err := json.Marshal(row.Platforms[0])
|
||||||
|
require.NoError(t, err)
|
||||||
|
var sectionDecoded map[string]any
|
||||||
|
require.NoError(t, json.Unmarshal(rawSection, §ionDecoded))
|
||||||
|
for _, key := range []string{"platform", "groups", "supported_models"} {
|
||||||
|
_, exists := sectionDecoded[key]
|
||||||
|
require.Truef(t, exists, "platform section must expose %q", key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Group DTO 暴露区分专属/公开、订阅类型、默认倍率所需的字段,
|
||||||
|
// 前端据此渲染 GroupBadge 并与 API 密钥页保持一致的视觉。
|
||||||
|
rawGroup, err := json.Marshal(row.Platforms[0].Groups[0])
|
||||||
|
require.NoError(t, err)
|
||||||
|
var groupDecoded map[string]any
|
||||||
|
require.NoError(t, json.Unmarshal(rawGroup, &groupDecoded))
|
||||||
|
for _, key := range []string{"id", "name", "platform", "subscription_type", "rate_multiplier", "is_exclusive"} {
|
||||||
|
_, exists := groupDecoded[key]
|
||||||
|
require.Truef(t, exists, "group DTO must expose %q", key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// pricing interval 白名单:不应暴露 id / sort_order。
|
||||||
|
pricing := toUserPricing(&service.ChannelModelPricing{
|
||||||
|
BillingMode: service.BillingModeToken,
|
||||||
|
Intervals: []service.PricingInterval{
|
||||||
|
{ID: 7, MinTokens: 0, MaxTokens: nil, SortOrder: 3},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
require.NotNil(t, pricing)
|
||||||
|
require.Len(t, pricing.Intervals, 1)
|
||||||
|
rawIv, err := json.Marshal(pricing.Intervals[0])
|
||||||
|
require.NoError(t, err)
|
||||||
|
var ivDecoded map[string]any
|
||||||
|
require.NoError(t, json.Unmarshal(rawIv, &ivDecoded))
|
||||||
|
for _, key := range []string{"id", "pricing_id", "sort_order"} {
|
||||||
|
_, exists := ivDecoded[key]
|
||||||
|
require.Falsef(t, exists, "user pricing interval must not expose %q", key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBuildPlatformSections_GroupsByPlatform(t *testing.T) {
|
||||||
|
// 一个渠道横跨 anthropic / openai / 空平台:应该生成 2 个 section,
|
||||||
|
// 按 platform 字母序排序,各自 groups 和 supported_models 只含同平台条目。
|
||||||
|
ch := service.AvailableChannel{
|
||||||
|
Name: "ch",
|
||||||
|
SupportedModels: []service.SupportedModel{
|
||||||
|
{Name: "claude-sonnet-4-6", Platform: "anthropic"},
|
||||||
|
{Name: "gpt-4o", Platform: "openai"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
visible := []userAvailableGroup{
|
||||||
|
{ID: 1, Name: "g-openai", Platform: "openai"},
|
||||||
|
{ID: 2, Name: "g-ant", Platform: "anthropic"},
|
||||||
|
{ID: 3, Name: "g-empty", Platform: ""},
|
||||||
|
}
|
||||||
|
sections := buildPlatformSections(ch, visible)
|
||||||
|
require.Len(t, sections, 2)
|
||||||
|
require.Equal(t, "anthropic", sections[0].Platform)
|
||||||
|
require.Equal(t, "openai", sections[1].Platform)
|
||||||
|
require.Len(t, sections[0].Groups, 1)
|
||||||
|
require.Equal(t, int64(2), sections[0].Groups[0].ID)
|
||||||
|
require.Len(t, sections[0].SupportedModels, 1)
|
||||||
|
require.Equal(t, "claude-sonnet-4-6", sections[0].SupportedModels[0].Name)
|
||||||
|
}
|
||||||
176
backend/internal/handler/channel_monitor_user_handler.go
Normal file
176
backend/internal/handler/channel_monitor_user_handler.go
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
package handler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/handler/admin"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/handler/dto"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/pkg/response"
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChannelMonitorUserHandler 渠道监控用户只读 handler。
|
||||||
|
type ChannelMonitorUserHandler struct {
|
||||||
|
monitorService *service.ChannelMonitorService
|
||||||
|
settingService *service.SettingService
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewChannelMonitorUserHandler 创建 handler。
|
||||||
|
// settingService 用于每次请求前读取功能开关;关闭时 List/GetStatus 直接返回空/404。
|
||||||
|
func NewChannelMonitorUserHandler(
|
||||||
|
monitorService *service.ChannelMonitorService,
|
||||||
|
settingService *service.SettingService,
|
||||||
|
) *ChannelMonitorUserHandler {
|
||||||
|
return &ChannelMonitorUserHandler{
|
||||||
|
monitorService: monitorService,
|
||||||
|
settingService: settingService,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// featureEnabled 返回当前渠道监控功能是否开启。
|
||||||
|
// settingService 为 nil(测试场景)视为启用。
|
||||||
|
func (h *ChannelMonitorUserHandler) featureEnabled(c *gin.Context) bool {
|
||||||
|
if h.settingService == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return h.settingService.GetChannelMonitorRuntime(c.Request.Context()).Enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Response ---
|
||||||
|
|
||||||
|
type channelMonitorUserListItem struct {
|
||||||
|
ID int64 `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Provider string `json:"provider"`
|
||||||
|
GroupName string `json:"group_name"`
|
||||||
|
PrimaryModel string `json:"primary_model"`
|
||||||
|
PrimaryStatus string `json:"primary_status"`
|
||||||
|
PrimaryLatencyMs *int `json:"primary_latency_ms"`
|
||||||
|
PrimaryPingLatencyMs *int `json:"primary_ping_latency_ms"`
|
||||||
|
Availability7d float64 `json:"availability_7d"`
|
||||||
|
ExtraModels []dto.ChannelMonitorExtraModelStatus `json:"extra_models"`
|
||||||
|
Timeline []channelMonitorUserTimelinePoint `json:"timeline"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// channelMonitorUserTimelinePoint 主模型最近一次检测的 timeline 点。
|
||||||
|
// 仅用于用户视图 list 响应,admin 视图不使用。
|
||||||
|
type channelMonitorUserTimelinePoint struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
LatencyMs *int `json:"latency_ms"`
|
||||||
|
PingLatencyMs *int `json:"ping_latency_ms"`
|
||||||
|
CheckedAt string `json:"checked_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type channelMonitorUserDetailResponse struct {
|
||||||
|
ID int64 `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Provider string `json:"provider"`
|
||||||
|
GroupName string `json:"group_name"`
|
||||||
|
Models []channelMonitorUserModelStat `json:"models"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type channelMonitorUserModelStat struct {
|
||||||
|
Model string `json:"model"`
|
||||||
|
LatestStatus string `json:"latest_status"`
|
||||||
|
LatestLatencyMs *int `json:"latest_latency_ms"`
|
||||||
|
Availability7d float64 `json:"availability_7d"`
|
||||||
|
Availability15d float64 `json:"availability_15d"`
|
||||||
|
Availability30d float64 `json:"availability_30d"`
|
||||||
|
AvgLatency7dMs *int `json:"avg_latency_7d_ms"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func userMonitorViewToItem(v *service.UserMonitorView) channelMonitorUserListItem {
|
||||||
|
extras := make([]dto.ChannelMonitorExtraModelStatus, 0, len(v.ExtraModels))
|
||||||
|
for _, e := range v.ExtraModels {
|
||||||
|
extras = append(extras, dto.ChannelMonitorExtraModelStatus{
|
||||||
|
Model: e.Model,
|
||||||
|
Status: e.Status,
|
||||||
|
LatencyMs: e.LatencyMs,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
timeline := make([]channelMonitorUserTimelinePoint, 0, len(v.Timeline))
|
||||||
|
for _, p := range v.Timeline {
|
||||||
|
timeline = append(timeline, channelMonitorUserTimelinePoint{
|
||||||
|
Status: p.Status,
|
||||||
|
LatencyMs: p.LatencyMs,
|
||||||
|
PingLatencyMs: p.PingLatencyMs,
|
||||||
|
CheckedAt: p.CheckedAt.UTC().Format(time.RFC3339),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return channelMonitorUserListItem{
|
||||||
|
ID: v.ID,
|
||||||
|
Name: v.Name,
|
||||||
|
Provider: v.Provider,
|
||||||
|
GroupName: v.GroupName,
|
||||||
|
PrimaryModel: v.PrimaryModel,
|
||||||
|
PrimaryStatus: v.PrimaryStatus,
|
||||||
|
PrimaryLatencyMs: v.PrimaryLatencyMs,
|
||||||
|
PrimaryPingLatencyMs: v.PrimaryPingLatencyMs,
|
||||||
|
Availability7d: v.Availability7d,
|
||||||
|
ExtraModels: extras,
|
||||||
|
Timeline: timeline,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func userMonitorDetailToResponse(d *service.UserMonitorDetail) *channelMonitorUserDetailResponse {
|
||||||
|
models := make([]channelMonitorUserModelStat, 0, len(d.Models))
|
||||||
|
for _, m := range d.Models {
|
||||||
|
models = append(models, channelMonitorUserModelStat{
|
||||||
|
Model: m.Model,
|
||||||
|
LatestStatus: m.LatestStatus,
|
||||||
|
LatestLatencyMs: m.LatestLatencyMs,
|
||||||
|
Availability7d: m.Availability7d,
|
||||||
|
Availability15d: m.Availability15d,
|
||||||
|
Availability30d: m.Availability30d,
|
||||||
|
AvgLatency7dMs: m.AvgLatency7dMs,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return &channelMonitorUserDetailResponse{
|
||||||
|
ID: d.ID,
|
||||||
|
Name: d.Name,
|
||||||
|
Provider: d.Provider,
|
||||||
|
GroupName: d.GroupName,
|
||||||
|
Models: models,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Handlers ---
|
||||||
|
|
||||||
|
// List GET /api/v1/channel-monitors
|
||||||
|
func (h *ChannelMonitorUserHandler) List(c *gin.Context) {
|
||||||
|
if !h.featureEnabled(c) {
|
||||||
|
response.Success(c, gin.H{"items": []channelMonitorUserListItem{}})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
views, err := h.monitorService.ListUserView(c.Request.Context())
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
items := make([]channelMonitorUserListItem, 0, len(views))
|
||||||
|
for _, v := range views {
|
||||||
|
items = append(items, userMonitorViewToItem(v))
|
||||||
|
}
|
||||||
|
response.Success(c, gin.H{"items": items})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetStatus GET /api/v1/channel-monitors/:id/status
|
||||||
|
func (h *ChannelMonitorUserHandler) GetStatus(c *gin.Context) {
|
||||||
|
if !h.featureEnabled(c) {
|
||||||
|
response.ErrorFrom(c, service.ErrChannelMonitorNotFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 复用 admin.ParseChannelMonitorID 保持错误码与日志一致。
|
||||||
|
id, ok := admin.ParseChannelMonitorID(c)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
detail, err := h.monitorService.GetUserDetail(c.Request.Context(), id)
|
||||||
|
if err != nil {
|
||||||
|
response.ErrorFrom(c, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(c, userMonitorDetailToResponse(detail))
|
||||||
|
}
|
||||||
10
backend/internal/handler/dto/channel_monitor.go
Normal file
10
backend/internal/handler/dto/channel_monitor.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package dto
|
||||||
|
|
||||||
|
// ChannelMonitorExtraModelStatus 渠道监控附加模型最近一次状态。
|
||||||
|
// 同时被 admin handler(List 响应)与 user handler(List 响应)复用,
|
||||||
|
// 字段必须保持一致以保证前端拿到统一结构。
|
||||||
|
type ChannelMonitorExtraModelStatus struct {
|
||||||
|
Model string `json:"model"`
|
||||||
|
Status string `json:"status"`
|
||||||
|
LatencyMs *int `json:"latency_ms"`
|
||||||
|
}
|
||||||
@ -29,6 +29,7 @@ func UserFromServiceShallow(u *service.User) *User {
|
|||||||
BalanceNotifyThreshold: u.BalanceNotifyThreshold,
|
BalanceNotifyThreshold: u.BalanceNotifyThreshold,
|
||||||
BalanceNotifyExtraEmails: NotifyEmailEntriesFromService(u.BalanceNotifyExtraEmails),
|
BalanceNotifyExtraEmails: NotifyEmailEntriesFromService(u.BalanceNotifyExtraEmails),
|
||||||
TotalRecharged: u.TotalRecharged,
|
TotalRecharged: u.TotalRecharged,
|
||||||
|
RPMLimit: u.RPMLimit,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,6 +185,7 @@ func groupFromServiceBase(g *service.Group) Group {
|
|||||||
AllowMessagesDispatch: g.AllowMessagesDispatch,
|
AllowMessagesDispatch: g.AllowMessagesDispatch,
|
||||||
RequireOAuthOnly: g.RequireOAuthOnly,
|
RequireOAuthOnly: g.RequireOAuthOnly,
|
||||||
RequirePrivacySet: g.RequirePrivacySet,
|
RequirePrivacySet: g.RequirePrivacySet,
|
||||||
|
RPMLimit: g.RPMLimit,
|
||||||
CreatedAt: g.CreatedAt,
|
CreatedAt: g.CreatedAt,
|
||||||
UpdatedAt: g.UpdatedAt,
|
UpdatedAt: g.UpdatedAt,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,70 @@
|
|||||||
|
package dto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TestPublicSettingsInjectionPayload_SchemaDoesNotDrift guarantees the SSR
|
||||||
|
// injection struct exposes every JSON field consumed by the frontend.
|
||||||
|
//
|
||||||
|
// Why this test exists: before we extracted a named PublicSettingsInjectionPayload
|
||||||
|
// type, the inline struct was manually kept in sync with dto.PublicSettings and
|
||||||
|
// drifted — ChannelMonitorEnabled / AvailableChannelsEnabled were missing, which
|
||||||
|
// made the frontend read `undefined` on refresh and hide the "可用渠道" menu
|
||||||
|
// until the async /api/v1/settings/public round-trip finished.
|
||||||
|
//
|
||||||
|
// This test compares the two JSON-tag sets and fails if injection is missing
|
||||||
|
// any field that dto.PublicSettings exposes. Adding a new feature flag with
|
||||||
|
// only a DTO entry will fail this test until the injection struct is updated.
|
||||||
|
//
|
||||||
|
// Intentional exclusions (fields present on dto.PublicSettings that SSR does
|
||||||
|
// not need to inject) are listed in `dtoOnlyFields` below with a reason.
|
||||||
|
func TestPublicSettingsInjectionPayload_SchemaDoesNotDrift(t *testing.T) {
|
||||||
|
injection := jsonTags(reflect.TypeOf(service.PublicSettingsInjectionPayload{}))
|
||||||
|
dtoKeys := jsonTags(reflect.TypeOf(PublicSettings{}))
|
||||||
|
|
||||||
|
// Fields that legitimately live only on the DTO. Keep tiny; document each.
|
||||||
|
dtoOnlyFields := map[string]string{
|
||||||
|
// sora_client_enabled is an upstream-only field the fork does not surface.
|
||||||
|
"sora_client_enabled": "upstream-only field, not used on this fork",
|
||||||
|
// force_email_on_third_party_signup lives on the DTO but is not injected via SSR.
|
||||||
|
"force_email_on_third_party_signup": "auth-source default, not a feature flag",
|
||||||
|
}
|
||||||
|
|
||||||
|
var missing []string
|
||||||
|
for key := range dtoKeys {
|
||||||
|
if _, ok := injection[key]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if _, allowed := dtoOnlyFields[key]; allowed {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
missing = append(missing, key)
|
||||||
|
}
|
||||||
|
if len(missing) > 0 {
|
||||||
|
t.Fatalf("service.PublicSettingsInjectionPayload is missing JSON fields present on dto.PublicSettings: %s\n"+
|
||||||
|
"add the field to PublicSettingsInjectionPayload (and GetPublicSettingsForInjection), or "+
|
||||||
|
"document the exclusion in dtoOnlyFields with a reason.", strings.Join(missing, ", "))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsonTags(t reflect.Type) map[string]struct{} {
|
||||||
|
out := make(map[string]struct{})
|
||||||
|
for i := 0; i < t.NumField(); i++ {
|
||||||
|
f := t.Field(i)
|
||||||
|
tag := f.Tag.Get("json")
|
||||||
|
if tag == "" || tag == "-" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
name := strings.SplitN(tag, ",", 2)[0]
|
||||||
|
if name == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
out[name] = struct{}{}
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
@ -108,6 +108,8 @@ type SystemSettings struct {
|
|||||||
|
|
||||||
DefaultConcurrency int `json:"default_concurrency"`
|
DefaultConcurrency int `json:"default_concurrency"`
|
||||||
DefaultBalance float64 `json:"default_balance"`
|
DefaultBalance float64 `json:"default_balance"`
|
||||||
|
AffiliateRebateRate float64 `json:"affiliate_rebate_rate"`
|
||||||
|
DefaultUserRPMLimit int `json:"default_user_rpm_limit"`
|
||||||
DefaultSubscriptions []DefaultSubscriptionSetting `json:"default_subscriptions"`
|
DefaultSubscriptions []DefaultSubscriptionSetting `json:"default_subscriptions"`
|
||||||
|
|
||||||
// Model fallback configuration
|
// Model fallback configuration
|
||||||
@ -183,6 +185,16 @@ type SystemSettings struct {
|
|||||||
BalanceLowNotifyRechargeURL string `json:"balance_low_notify_recharge_url"`
|
BalanceLowNotifyRechargeURL string `json:"balance_low_notify_recharge_url"`
|
||||||
AccountQuotaNotifyEnabled bool `json:"account_quota_notify_enabled"`
|
AccountQuotaNotifyEnabled bool `json:"account_quota_notify_enabled"`
|
||||||
AccountQuotaNotifyEmails []NotifyEmailEntry `json:"account_quota_notify_emails"`
|
AccountQuotaNotifyEmails []NotifyEmailEntry `json:"account_quota_notify_emails"`
|
||||||
|
|
||||||
|
// Channel Monitor feature switch
|
||||||
|
ChannelMonitorEnabled bool `json:"channel_monitor_enabled"`
|
||||||
|
ChannelMonitorDefaultIntervalSeconds int `json:"channel_monitor_default_interval_seconds"`
|
||||||
|
|
||||||
|
// Available Channels feature switch (user-facing aggregate view)
|
||||||
|
AvailableChannelsEnabled bool `json:"available_channels_enabled"`
|
||||||
|
|
||||||
|
// Affiliate (邀请返利) feature switch
|
||||||
|
AffiliateEnabled bool `json:"affiliate_enabled"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type DefaultSubscriptionSetting struct {
|
type DefaultSubscriptionSetting struct {
|
||||||
@ -230,6 +242,13 @@ type PublicSettings struct {
|
|||||||
AccountQuotaNotifyEnabled bool `json:"account_quota_notify_enabled"`
|
AccountQuotaNotifyEnabled bool `json:"account_quota_notify_enabled"`
|
||||||
BalanceLowNotifyThreshold float64 `json:"balance_low_notify_threshold"`
|
BalanceLowNotifyThreshold float64 `json:"balance_low_notify_threshold"`
|
||||||
BalanceLowNotifyRechargeURL string `json:"balance_low_notify_recharge_url"`
|
BalanceLowNotifyRechargeURL string `json:"balance_low_notify_recharge_url"`
|
||||||
|
|
||||||
|
ChannelMonitorEnabled bool `json:"channel_monitor_enabled"`
|
||||||
|
ChannelMonitorDefaultIntervalSeconds int `json:"channel_monitor_default_interval_seconds"`
|
||||||
|
|
||||||
|
AvailableChannelsEnabled bool `json:"available_channels_enabled"`
|
||||||
|
|
||||||
|
AffiliateEnabled bool `json:"affiliate_enabled"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// OverloadCooldownSettings 529过载冷却配置 DTO
|
// OverloadCooldownSettings 529过载冷却配置 DTO
|
||||||
|
|||||||
@ -26,6 +26,9 @@ type User struct {
|
|||||||
BalanceNotifyExtraEmails []NotifyEmailEntry `json:"balance_notify_extra_emails"`
|
BalanceNotifyExtraEmails []NotifyEmailEntry `json:"balance_notify_extra_emails"`
|
||||||
TotalRecharged float64 `json:"total_recharged"`
|
TotalRecharged float64 `json:"total_recharged"`
|
||||||
|
|
||||||
|
// RPMLimit 用户级每分钟请求数上限(0 = 不限制),仅在所用分组未设置 rpm_limit 时作为兜底生效。
|
||||||
|
RPMLimit int `json:"rpm_limit"`
|
||||||
|
|
||||||
APIKeys []APIKey `json:"api_keys,omitempty"`
|
APIKeys []APIKey `json:"api_keys,omitempty"`
|
||||||
Subscriptions []UserSubscription `json:"subscriptions,omitempty"`
|
Subscriptions []UserSubscription `json:"subscriptions,omitempty"`
|
||||||
}
|
}
|
||||||
@ -108,6 +111,9 @@ type Group struct {
|
|||||||
RequireOAuthOnly bool `json:"require_oauth_only"`
|
RequireOAuthOnly bool `json:"require_oauth_only"`
|
||||||
RequirePrivacySet bool `json:"require_privacy_set"`
|
RequirePrivacySet bool `json:"require_privacy_set"`
|
||||||
|
|
||||||
|
// RPMLimit 分组级每分钟请求数上限(0 = 不限制),设置后覆盖用户级 rpm_limit。
|
||||||
|
RPMLimit int `json:"rpm_limit"`
|
||||||
|
|
||||||
CreatedAt time.Time `json:"created_at"`
|
CreatedAt time.Time `json:"created_at"`
|
||||||
UpdatedAt time.Time `json:"updated_at"`
|
UpdatedAt time.Time `json:"updated_at"`
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user