commit ac6eeff8c93c2b42b30f1d0defe424f547b73094 Author: clear Date: Sat Jul 19 02:03:24 2025 +0800 12 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..599eb6e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/unR2.iml b/.idea/unR2.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/.idea/unR2.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..110c9e4 --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,21 @@ +package main + +import ( + "unR2/internal/config" + "unR2/internal/initialize" + "unR2/internal/pkg/logger" + "unR2/internal/router" +) + +func main() { + config.InitConfig() + logCfg := config.Conf.Log + logger.InitLogger(logCfg.Level, logCfg.Format, logCfg.Output) + initialize.InitDB() + r := router.SetupRouter() + logger.Log.Info("🚀 Server running on :" + config.Conf.Server.Port) + if err := r.Run(":" + config.Conf.Server.Port); err != nil { + logger.Log.Error(err.Error()) + } + +} diff --git a/config/config.yaml b/config/config.yaml new file mode 100644 index 0000000..f777f3e --- /dev/null +++ b/config/config.yaml @@ -0,0 +1,12 @@ +server: + port: 8080 +mysql: + host: 127.0.0.1 + port: 3306 + user: root + password: secret + database: r2_db +log: + level: debug # 支持 debug, info, warn, error + format: console # 或 json + output: stdout # 或 logs/app.log \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..fc50564 --- /dev/null +++ b/go.mod @@ -0,0 +1,67 @@ +module unR2 + +go 1.24 + +require ( + entgo.io/ent v0.14.4 + github.com/cloudflare/cloudflare-go/v4 v4.6.0 + github.com/gin-gonic/gin v1.10.1 + github.com/spf13/viper v1.20.1 +) + +require ( + ariga.io/atlas v0.31.1-0.20250212144724-069be8033e83 // indirect + github.com/agext/levenshtein v1.2.1 // indirect + github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/bmatcuk/doublestar v1.3.4 // indirect + github.com/bytedance/sonic v1.11.6 // indirect + github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect + github.com/fsnotify/fsnotify v1.8.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-openapi/inflect v0.19.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.20.0 // indirect + github.com/go-viper/mapstructure/v2 v2.2.1 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/hashicorp/hcl/v2 v2.13.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.2.7 // indirect + github.com/leodido/go-urn v1.4.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.3 // indirect + github.com/sagikazarmark/locafero v0.7.0 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.12.0 // indirect + github.com/spf13/cast v1.7.1 // indirect + github.com/spf13/pflag v1.0.6 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/tidwall/gjson v1.18.0 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/sjson v1.2.5 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.12 // indirect + github.com/zclconf/go-cty v1.14.4 // indirect + github.com/zclconf/go-cty-yaml v1.1.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.10.0 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/arch v0.8.0 // indirect + golang.org/x/crypto v0.32.0 // indirect + golang.org/x/mod v0.23.0 // indirect + golang.org/x/net v0.33.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/text v0.21.0 // indirect + google.golang.org/protobuf v1.36.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..8ed9fb1 --- /dev/null +++ b/go.sum @@ -0,0 +1,168 @@ +ariga.io/atlas v0.31.1-0.20250212144724-069be8033e83 h1:nX4HXncwIdvQ8/8sIUIf1nyCkK8qdBaHQ7EtzPpuiGE= +ariga.io/atlas v0.31.1-0.20250212144724-069be8033e83/go.mod h1:Oe1xWPuu5q9LzyrWfbZmEZxFYeu4BHTyzfjeW2aZp/w= +entgo.io/ent v0.14.4 h1:/DhDraSLXIkBhyiVoJeSshr4ZYi7femzhj6/TckzZuI= +entgo.io/ent v0.14.4/go.mod h1:aDPE/OziPEu8+OWbzy4UlvWmD2/kbRuWfK2A40hcxJM= +github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= +github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8= +github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= +github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/bmatcuk/doublestar v1.3.4 h1:gPypJ5xD31uhX6Tf54sDPUOBXTqKH4c9aPY66CyQrS0= +github.com/bmatcuk/doublestar v1.3.4/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE= +github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= +github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= +github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/cloudflare/cloudflare-go/v4 v4.6.0 h1:ZaWwXjHFR5NoY8UEf4QFY0g3KTi72kqqEXpajV610/o= +github.com/cloudflare/cloudflare-go/v4 v4.6.0/go.mod h1:XcYpLe7Mf6FN87kXzEWVnJ6z+vskW/k6eUqgqfhFE9k= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= +github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= +github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ= +github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= +github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4= +github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= +github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= +github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= +github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +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/hashicorp/hcl/v2 v2.13.0 h1:0Apadu1w6M11dyGFxWnmhhcMjkbAiKCv7G1r/2QgCNc= +github.com/hashicorp/hcl/v2 v2.13.0/go.mod h1:e4z5nxYlWNPdDSNYX+ph14EvWYMFm3eP0zIUqPc2jr0= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= +github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +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-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 h1:DpOJ2HYzCv8LZP15IdmG+YdwD2luVPHITV96TkirNBM= +github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo= +github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= +github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= +github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= +github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4= +github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8= +github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty-yaml v1.1.0 h1:nP+jp0qPHv2IhUVqmQSzjvqAWcObN0KBkUl2rWBdig0= +github.com/zclconf/go-cty-yaml v1.1.0/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= +golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= +google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/internal/cloudflare/handler.go b/internal/cloudflare/handler.go new file mode 100644 index 0000000..45fcff0 --- /dev/null +++ b/internal/cloudflare/handler.go @@ -0,0 +1,7 @@ +package cloudflare + +import "github.com/gin-gonic/gin" + +func AccountCreate(c *gin.Context) { + +} diff --git a/internal/cloudflare/r2.go b/internal/cloudflare/r2.go new file mode 100644 index 0000000..af5d170 --- /dev/null +++ b/internal/cloudflare/r2.go @@ -0,0 +1,73 @@ +package cloudflare + +import ( + "context" + "fmt" + "github.com/cloudflare/cloudflare-go/v4" + "github.com/cloudflare/cloudflare-go/v4/accounts" + "github.com/cloudflare/cloudflare-go/v4/option" + "github.com/cloudflare/cloudflare-go/v4/r2" + "log" +) + +type CloudflareClient struct { + Client *cloudflare.Client + Ctx context.Context + AccountsID string +} + +func NewCloudflare(apiKey string, ctx context.Context) *CloudflareClient { + client := cloudflare.NewClient(option.WithAPIToken(apiKey)) + resp, err := client.Accounts.List(ctx, accounts.AccountListParams{}) + if err != nil { + log.Fatal(err) + } + return &CloudflareClient{ + Client: client, + Ctx: ctx, + AccountsID: resp.Result[0].ID, + } +} + +func (r *CloudflareClient) Create(bucketName string) { + bucket, err := r.Client.R2.Buckets.New(r.Ctx, r2.BucketNewParams{ + AccountID: cloudflare.F(r.AccountsID), + Name: cloudflare.F(bucketName), + LocationHint: cloudflare.F(r2.BucketNewParamsLocationHintApac), + StorageClass: cloudflare.F(r2.BucketNewParamsStorageClassStandard), + Jurisdiction: cloudflare.F(r2.BucketNewParamsCfR2JurisdictionDefault), + }) + if err != nil { + panic(err) + } + print(bucket.Name) +} + +// GetBuckets 获取指定存储桶 +func (r *CloudflareClient) GetBuckets(bucketsName string) { + bucket, err := r.Client.R2.Buckets.Get(r.Ctx, bucketsName, r2.BucketGetParams{ + AccountID: cloudflare.F(r.AccountsID), + }) + if err != nil { + log.Fatalf("获取存储桶失败: %v", err) + } + metrics, err := r.Client.R2.Buckets.Metrics.List(r.Ctx, r2.BucketMetricListParams{ + AccountID: cloudflare.F(r.AccountsID), + }) + fmt.Printf("📦 存储桶名称: %s\n", bucket.Name) + fmt.Printf("📦 存储桶名称: %s\n", bucket.Location) + fmt.Printf("🔧 默认存储类型: %s\n", bucket.StorageClass) + fmt.Println("总存储量:", metrics.Standard.Uploaded.PayloadSize+metrics.Standard.Uploaded.MetadataSize) +} +func (r *CloudflareClient) GetBucketsList() { + resp, err := r.Client.R2.Buckets.List(r.Ctx, r2.BucketListParams{ + AccountID: cloudflare.F(r.AccountsID), + }) + if err != nil { + log.Fatal(err) + } + for _, bucket := range resp.Buckets { + fmt.Printf("📦 存储桶: %s | 区域: %s | 存储类: %s\n", + bucket.Name, bucket.Location, bucket.StorageClass) + } +} diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..924510b --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,44 @@ +package config + +import ( + "github.com/spf13/viper" + "log" +) + +type ServerConfig struct { + Port string +} +type MySQLConfig struct { + Host string + Port int + User string + Password string + Database string +} +type LogConfig struct { + Level string + Format string + Output string +} + +var Conf struct { + Server ServerConfig + MySQL MySQLConfig + Log LogConfig +} + +func InitConfig() { + viper.SetConfigName("config") + viper.SetConfigType("yaml") + viper.AddConfigPath(".") + + err := viper.ReadInConfig() + if err != nil { + log.Fatalf("读取配置失败: %v", err) + } + + err = viper.Unmarshal(&Conf) + if err != nil { + log.Fatalf("解析配置失败: %v", err) + } +} diff --git a/internal/ent/client.go b/internal/ent/client.go new file mode 100644 index 0000000..003aaeb --- /dev/null +++ b/internal/ent/client.go @@ -0,0 +1,517 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "errors" + "fmt" + "log" + "reflect" + + "unR2/internal/ent/migrate" + + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + + "entgo.io/ent" + "entgo.io/ent/dialect" + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" +) + +// Client is the client that holds all ent builders. +type Client struct { + config + // Schema is the client for creating, migrating and dropping schema. + Schema *migrate.Schema + // CloudflareAccounts is the client for interacting with the CloudflareAccounts builders. + CloudflareAccounts *CloudflareAccountsClient + // CloudflareR2 is the client for interacting with the CloudflareR2 builders. + CloudflareR2 *CloudflareR2Client +} + +// NewClient creates a new client configured with the given options. +func NewClient(opts ...Option) *Client { + client := &Client{config: newConfig(opts...)} + client.init() + return client +} + +func (c *Client) init() { + c.Schema = migrate.NewSchema(c.driver) + c.CloudflareAccounts = NewCloudflareAccountsClient(c.config) + c.CloudflareR2 = NewCloudflareR2Client(c.config) +} + +type ( + // config is the configuration for the client and its builder. + config struct { + // driver used for executing database requests. + driver dialect.Driver + // debug enable a debug logging. + debug bool + // log used for logging on debug mode. + log func(...any) + // hooks to execute on mutations. + hooks *hooks + // interceptors to execute on queries. + inters *inters + } + // Option function to configure the client. + Option func(*config) +) + +// newConfig creates a new config for the client. +func newConfig(opts ...Option) config { + cfg := config{log: log.Println, hooks: &hooks{}, inters: &inters{}} + cfg.options(opts...) + return cfg +} + +// options applies the options on the config object. +func (c *config) options(opts ...Option) { + for _, opt := range opts { + opt(c) + } + if c.debug { + c.driver = dialect.Debug(c.driver, c.log) + } +} + +// Debug enables debug logging on the ent.Driver. +func Debug() Option { + return func(c *config) { + c.debug = true + } +} + +// Log sets the logging function for debug mode. +func Log(fn func(...any)) Option { + return func(c *config) { + c.log = fn + } +} + +// Driver configures the client driver. +func Driver(driver dialect.Driver) Option { + return func(c *config) { + c.driver = driver + } +} + +// Open opens a database/sql.DB specified by the driver name and +// the data source name, and returns a new client attached to it. +// Optional parameters can be added for configuring the client. +func Open(driverName, dataSourceName string, options ...Option) (*Client, error) { + switch driverName { + case dialect.MySQL, dialect.Postgres, dialect.SQLite: + drv, err := sql.Open(driverName, dataSourceName) + if err != nil { + return nil, err + } + return NewClient(append(options, Driver(drv))...), nil + default: + return nil, fmt.Errorf("unsupported driver: %q", driverName) + } +} + +// ErrTxStarted is returned when trying to start a new transaction from a transactional client. +var ErrTxStarted = errors.New("ent: cannot start a transaction within a transaction") + +// Tx returns a new transactional client. The provided context +// is used until the transaction is committed or rolled back. +func (c *Client) Tx(ctx context.Context) (*Tx, error) { + if _, ok := c.driver.(*txDriver); ok { + return nil, ErrTxStarted + } + tx, err := newTx(ctx, c.driver) + if err != nil { + return nil, fmt.Errorf("ent: starting a transaction: %w", err) + } + cfg := c.config + cfg.driver = tx + return &Tx{ + ctx: ctx, + config: cfg, + CloudflareAccounts: NewCloudflareAccountsClient(cfg), + CloudflareR2: NewCloudflareR2Client(cfg), + }, nil +} + +// BeginTx returns a transactional client with specified options. +func (c *Client) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) { + if _, ok := c.driver.(*txDriver); ok { + return nil, errors.New("ent: cannot start a transaction within a transaction") + } + tx, err := c.driver.(interface { + BeginTx(context.Context, *sql.TxOptions) (dialect.Tx, error) + }).BeginTx(ctx, opts) + if err != nil { + return nil, fmt.Errorf("ent: starting a transaction: %w", err) + } + cfg := c.config + cfg.driver = &txDriver{tx: tx, drv: c.driver} + return &Tx{ + ctx: ctx, + config: cfg, + CloudflareAccounts: NewCloudflareAccountsClient(cfg), + CloudflareR2: NewCloudflareR2Client(cfg), + }, nil +} + +// Debug returns a new debug-client. It's used to get verbose logging on specific operations. +// +// client.Debug(). +// CloudflareAccounts. +// Query(). +// Count(ctx) +func (c *Client) Debug() *Client { + if c.debug { + return c + } + cfg := c.config + cfg.driver = dialect.Debug(c.driver, c.log) + client := &Client{config: cfg} + client.init() + return client +} + +// Close closes the database connection and prevents new queries from starting. +func (c *Client) Close() error { + return c.driver.Close() +} + +// Use adds the mutation hooks to all the entity clients. +// In order to add hooks to a specific client, call: `client.Node.Use(...)`. +func (c *Client) Use(hooks ...Hook) { + c.CloudflareAccounts.Use(hooks...) + c.CloudflareR2.Use(hooks...) +} + +// Intercept adds the query interceptors to all the entity clients. +// In order to add interceptors to a specific client, call: `client.Node.Intercept(...)`. +func (c *Client) Intercept(interceptors ...Interceptor) { + c.CloudflareAccounts.Intercept(interceptors...) + c.CloudflareR2.Intercept(interceptors...) +} + +// Mutate implements the ent.Mutator interface. +func (c *Client) Mutate(ctx context.Context, m Mutation) (Value, error) { + switch m := m.(type) { + case *CloudflareAccountsMutation: + return c.CloudflareAccounts.mutate(ctx, m) + case *CloudflareR2Mutation: + return c.CloudflareR2.mutate(ctx, m) + default: + return nil, fmt.Errorf("ent: unknown mutation type %T", m) + } +} + +// CloudflareAccountsClient is a client for the CloudflareAccounts schema. +type CloudflareAccountsClient struct { + config +} + +// NewCloudflareAccountsClient returns a client for the CloudflareAccounts from the given config. +func NewCloudflareAccountsClient(c config) *CloudflareAccountsClient { + return &CloudflareAccountsClient{config: c} +} + +// Use adds a list of mutation hooks to the hooks stack. +// A call to `Use(f, g, h)` equals to `cloudflareaccounts.Hooks(f(g(h())))`. +func (c *CloudflareAccountsClient) Use(hooks ...Hook) { + c.hooks.CloudflareAccounts = append(c.hooks.CloudflareAccounts, hooks...) +} + +// Intercept adds a list of query interceptors to the interceptors stack. +// A call to `Intercept(f, g, h)` equals to `cloudflareaccounts.Intercept(f(g(h())))`. +func (c *CloudflareAccountsClient) Intercept(interceptors ...Interceptor) { + c.inters.CloudflareAccounts = append(c.inters.CloudflareAccounts, interceptors...) +} + +// Create returns a builder for creating a CloudflareAccounts entity. +func (c *CloudflareAccountsClient) Create() *CloudflareAccountsCreate { + mutation := newCloudflareAccountsMutation(c.config, OpCreate) + return &CloudflareAccountsCreate{config: c.config, hooks: c.Hooks(), mutation: mutation} +} + +// CreateBulk returns a builder for creating a bulk of CloudflareAccounts entities. +func (c *CloudflareAccountsClient) CreateBulk(builders ...*CloudflareAccountsCreate) *CloudflareAccountsCreateBulk { + return &CloudflareAccountsCreateBulk{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 *CloudflareAccountsClient) MapCreateBulk(slice any, setFunc func(*CloudflareAccountsCreate, int)) *CloudflareAccountsCreateBulk { + rv := reflect.ValueOf(slice) + if rv.Kind() != reflect.Slice { + return &CloudflareAccountsCreateBulk{err: fmt.Errorf("calling to CloudflareAccountsClient.MapCreateBulk with wrong type %T, need slice", slice)} + } + builders := make([]*CloudflareAccountsCreate, rv.Len()) + for i := 0; i < rv.Len(); i++ { + builders[i] = c.Create() + setFunc(builders[i], i) + } + return &CloudflareAccountsCreateBulk{config: c.config, builders: builders} +} + +// Update returns an update builder for CloudflareAccounts. +func (c *CloudflareAccountsClient) Update() *CloudflareAccountsUpdate { + mutation := newCloudflareAccountsMutation(c.config, OpUpdate) + return &CloudflareAccountsUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation} +} + +// UpdateOne returns an update builder for the given entity. +func (c *CloudflareAccountsClient) UpdateOne(ca *CloudflareAccounts) *CloudflareAccountsUpdateOne { + mutation := newCloudflareAccountsMutation(c.config, OpUpdateOne, withCloudflareAccounts(ca)) + return &CloudflareAccountsUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation} +} + +// UpdateOneID returns an update builder for the given id. +func (c *CloudflareAccountsClient) UpdateOneID(id int) *CloudflareAccountsUpdateOne { + mutation := newCloudflareAccountsMutation(c.config, OpUpdateOne, withCloudflareAccountsID(id)) + return &CloudflareAccountsUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation} +} + +// Delete returns a delete builder for CloudflareAccounts. +func (c *CloudflareAccountsClient) Delete() *CloudflareAccountsDelete { + mutation := newCloudflareAccountsMutation(c.config, OpDelete) + return &CloudflareAccountsDelete{config: c.config, hooks: c.Hooks(), mutation: mutation} +} + +// DeleteOne returns a builder for deleting the given entity. +func (c *CloudflareAccountsClient) DeleteOne(ca *CloudflareAccounts) *CloudflareAccountsDeleteOne { + return c.DeleteOneID(ca.ID) +} + +// DeleteOneID returns a builder for deleting the given entity by its id. +func (c *CloudflareAccountsClient) DeleteOneID(id int) *CloudflareAccountsDeleteOne { + builder := c.Delete().Where(cloudflareaccounts.ID(id)) + builder.mutation.id = &id + builder.mutation.op = OpDeleteOne + return &CloudflareAccountsDeleteOne{builder} +} + +// Query returns a query builder for CloudflareAccounts. +func (c *CloudflareAccountsClient) Query() *CloudflareAccountsQuery { + return &CloudflareAccountsQuery{ + config: c.config, + ctx: &QueryContext{Type: TypeCloudflareAccounts}, + inters: c.Interceptors(), + } +} + +// Get returns a CloudflareAccounts entity by its id. +func (c *CloudflareAccountsClient) Get(ctx context.Context, id int) (*CloudflareAccounts, error) { + return c.Query().Where(cloudflareaccounts.ID(id)).Only(ctx) +} + +// GetX is like Get, but panics if an error occurs. +func (c *CloudflareAccountsClient) GetX(ctx context.Context, id int) *CloudflareAccounts { + obj, err := c.Get(ctx, id) + if err != nil { + panic(err) + } + return obj +} + +// QueryCloudflareBuckets queries the cloudflare_buckets edge of a CloudflareAccounts. +func (c *CloudflareAccountsClient) QueryCloudflareBuckets(ca *CloudflareAccounts) *CloudflareR2Query { + query := (&CloudflareR2Client{config: c.config}).Query() + query.path = func(context.Context) (fromV *sql.Selector, _ error) { + id := ca.ID + step := sqlgraph.NewStep( + sqlgraph.From(cloudflareaccounts.Table, cloudflareaccounts.FieldID, id), + sqlgraph.To(cloudflarer2.Table, cloudflarer2.FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, cloudflareaccounts.CloudflareBucketsTable, cloudflareaccounts.CloudflareBucketsColumn), + ) + fromV = sqlgraph.Neighbors(ca.driver.Dialect(), step) + return fromV, nil + } + return query +} + +// Hooks returns the client hooks. +func (c *CloudflareAccountsClient) Hooks() []Hook { + return c.hooks.CloudflareAccounts +} + +// Interceptors returns the client interceptors. +func (c *CloudflareAccountsClient) Interceptors() []Interceptor { + return c.inters.CloudflareAccounts +} + +func (c *CloudflareAccountsClient) mutate(ctx context.Context, m *CloudflareAccountsMutation) (Value, error) { + switch m.Op() { + case OpCreate: + return (&CloudflareAccountsCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx) + case OpUpdate: + return (&CloudflareAccountsUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx) + case OpUpdateOne: + return (&CloudflareAccountsUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx) + case OpDelete, OpDeleteOne: + return (&CloudflareAccountsDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx) + default: + return nil, fmt.Errorf("ent: unknown CloudflareAccounts mutation op: %q", m.Op()) + } +} + +// CloudflareR2Client is a client for the CloudflareR2 schema. +type CloudflareR2Client struct { + config +} + +// NewCloudflareR2Client returns a client for the CloudflareR2 from the given config. +func NewCloudflareR2Client(c config) *CloudflareR2Client { + return &CloudflareR2Client{config: c} +} + +// Use adds a list of mutation hooks to the hooks stack. +// A call to `Use(f, g, h)` equals to `cloudflarer2.Hooks(f(g(h())))`. +func (c *CloudflareR2Client) Use(hooks ...Hook) { + c.hooks.CloudflareR2 = append(c.hooks.CloudflareR2, hooks...) +} + +// Intercept adds a list of query interceptors to the interceptors stack. +// A call to `Intercept(f, g, h)` equals to `cloudflarer2.Intercept(f(g(h())))`. +func (c *CloudflareR2Client) Intercept(interceptors ...Interceptor) { + c.inters.CloudflareR2 = append(c.inters.CloudflareR2, interceptors...) +} + +// Create returns a builder for creating a CloudflareR2 entity. +func (c *CloudflareR2Client) Create() *CloudflareR2Create { + mutation := newCloudflareR2Mutation(c.config, OpCreate) + return &CloudflareR2Create{config: c.config, hooks: c.Hooks(), mutation: mutation} +} + +// CreateBulk returns a builder for creating a bulk of CloudflareR2 entities. +func (c *CloudflareR2Client) CreateBulk(builders ...*CloudflareR2Create) *CloudflareR2CreateBulk { + return &CloudflareR2CreateBulk{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 *CloudflareR2Client) MapCreateBulk(slice any, setFunc func(*CloudflareR2Create, int)) *CloudflareR2CreateBulk { + rv := reflect.ValueOf(slice) + if rv.Kind() != reflect.Slice { + return &CloudflareR2CreateBulk{err: fmt.Errorf("calling to CloudflareR2Client.MapCreateBulk with wrong type %T, need slice", slice)} + } + builders := make([]*CloudflareR2Create, rv.Len()) + for i := 0; i < rv.Len(); i++ { + builders[i] = c.Create() + setFunc(builders[i], i) + } + return &CloudflareR2CreateBulk{config: c.config, builders: builders} +} + +// Update returns an update builder for CloudflareR2. +func (c *CloudflareR2Client) Update() *CloudflareR2Update { + mutation := newCloudflareR2Mutation(c.config, OpUpdate) + return &CloudflareR2Update{config: c.config, hooks: c.Hooks(), mutation: mutation} +} + +// UpdateOne returns an update builder for the given entity. +func (c *CloudflareR2Client) UpdateOne(cl *CloudflareR2) *CloudflareR2UpdateOne { + mutation := newCloudflareR2Mutation(c.config, OpUpdateOne, withCloudflareR2(cl)) + return &CloudflareR2UpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation} +} + +// UpdateOneID returns an update builder for the given id. +func (c *CloudflareR2Client) UpdateOneID(id int) *CloudflareR2UpdateOne { + mutation := newCloudflareR2Mutation(c.config, OpUpdateOne, withCloudflareR2ID(id)) + return &CloudflareR2UpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation} +} + +// Delete returns a delete builder for CloudflareR2. +func (c *CloudflareR2Client) Delete() *CloudflareR2Delete { + mutation := newCloudflareR2Mutation(c.config, OpDelete) + return &CloudflareR2Delete{config: c.config, hooks: c.Hooks(), mutation: mutation} +} + +// DeleteOne returns a builder for deleting the given entity. +func (c *CloudflareR2Client) DeleteOne(cl *CloudflareR2) *CloudflareR2DeleteOne { + return c.DeleteOneID(cl.ID) +} + +// DeleteOneID returns a builder for deleting the given entity by its id. +func (c *CloudflareR2Client) DeleteOneID(id int) *CloudflareR2DeleteOne { + builder := c.Delete().Where(cloudflarer2.ID(id)) + builder.mutation.id = &id + builder.mutation.op = OpDeleteOne + return &CloudflareR2DeleteOne{builder} +} + +// Query returns a query builder for CloudflareR2. +func (c *CloudflareR2Client) Query() *CloudflareR2Query { + return &CloudflareR2Query{ + config: c.config, + ctx: &QueryContext{Type: TypeCloudflareR2}, + inters: c.Interceptors(), + } +} + +// Get returns a CloudflareR2 entity by its id. +func (c *CloudflareR2Client) Get(ctx context.Context, id int) (*CloudflareR2, error) { + return c.Query().Where(cloudflarer2.ID(id)).Only(ctx) +} + +// GetX is like Get, but panics if an error occurs. +func (c *CloudflareR2Client) GetX(ctx context.Context, id int) *CloudflareR2 { + obj, err := c.Get(ctx, id) + if err != nil { + panic(err) + } + return obj +} + +// QueryCloudflareAccount queries the cloudflare_account edge of a CloudflareR2. +func (c *CloudflareR2Client) QueryCloudflareAccount(cl *CloudflareR2) *CloudflareAccountsQuery { + query := (&CloudflareAccountsClient{config: c.config}).Query() + query.path = func(context.Context) (fromV *sql.Selector, _ error) { + id := cl.ID + step := sqlgraph.NewStep( + sqlgraph.From(cloudflarer2.Table, cloudflarer2.FieldID, id), + sqlgraph.To(cloudflareaccounts.Table, cloudflareaccounts.FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, cloudflarer2.CloudflareAccountTable, cloudflarer2.CloudflareAccountColumn), + ) + fromV = sqlgraph.Neighbors(cl.driver.Dialect(), step) + return fromV, nil + } + return query +} + +// Hooks returns the client hooks. +func (c *CloudflareR2Client) Hooks() []Hook { + return c.hooks.CloudflareR2 +} + +// Interceptors returns the client interceptors. +func (c *CloudflareR2Client) Interceptors() []Interceptor { + return c.inters.CloudflareR2 +} + +func (c *CloudflareR2Client) mutate(ctx context.Context, m *CloudflareR2Mutation) (Value, error) { + switch m.Op() { + case OpCreate: + return (&CloudflareR2Create{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx) + case OpUpdate: + return (&CloudflareR2Update{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx) + case OpUpdateOne: + return (&CloudflareR2UpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx) + case OpDelete, OpDeleteOne: + return (&CloudflareR2Delete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx) + default: + return nil, fmt.Errorf("ent: unknown CloudflareR2 mutation op: %q", m.Op()) + } +} + +// hooks and interceptors per client, for fast access. +type ( + hooks struct { + CloudflareAccounts, CloudflareR2 []ent.Hook + } + inters struct { + CloudflareAccounts, CloudflareR2 []ent.Interceptor + } +) diff --git a/internal/ent/cloudflareaccounts.go b/internal/ent/cloudflareaccounts.go new file mode 100644 index 0000000..c02cb50 --- /dev/null +++ b/internal/ent/cloudflareaccounts.go @@ -0,0 +1,208 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "fmt" + "strings" + "time" + "unR2/internal/ent/cloudflareaccounts" + + "entgo.io/ent" + "entgo.io/ent/dialect/sql" +) + +// CloudflareAccounts is the model entity for the CloudflareAccounts schema. +type CloudflareAccounts struct { + config `json:"-"` + // ID of the ent. + ID int `json:"id,omitempty"` + // 账户名称 + Name string `json:"name,omitempty"` + // Cloudflare Account ID + AccountID string `json:"account_id,omitempty"` + // Cloudflare API Token + APIToken string `json:"-"` + // Cloudflare 邮箱(可选) + Email string `json:"email,omitempty"` + // 状态 1=启用, 0=禁用 + Status int8 `json:"status,omitempty"` + // 备注 + Remark string `json:"remark,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"` + // Edges holds the relations/edges for other nodes in the graph. + // The values are being populated by the CloudflareAccountsQuery when eager-loading is set. + Edges CloudflareAccountsEdges `json:"edges"` + selectValues sql.SelectValues +} + +// CloudflareAccountsEdges holds the relations/edges for other nodes in the graph. +type CloudflareAccountsEdges struct { + // CloudflareBuckets holds the value of the cloudflare_buckets edge. + CloudflareBuckets []*CloudflareR2 `json:"cloudflare_buckets,omitempty"` + // loadedTypes holds the information for reporting if a + // type was loaded (or requested) in eager-loading or not. + loadedTypes [1]bool +} + +// CloudflareBucketsOrErr returns the CloudflareBuckets value or an error if the edge +// was not loaded in eager-loading. +func (e CloudflareAccountsEdges) CloudflareBucketsOrErr() ([]*CloudflareR2, error) { + if e.loadedTypes[0] { + return e.CloudflareBuckets, nil + } + return nil, &NotLoadedError{edge: "cloudflare_buckets"} +} + +// scanValues returns the types for scanning values from sql.Rows. +func (*CloudflareAccounts) scanValues(columns []string) ([]any, error) { + values := make([]any, len(columns)) + for i := range columns { + switch columns[i] { + case cloudflareaccounts.FieldID, cloudflareaccounts.FieldStatus: + values[i] = new(sql.NullInt64) + case cloudflareaccounts.FieldName, cloudflareaccounts.FieldAccountID, cloudflareaccounts.FieldAPIToken, cloudflareaccounts.FieldEmail, cloudflareaccounts.FieldRemark: + values[i] = new(sql.NullString) + case cloudflareaccounts.FieldCreatedAt, cloudflareaccounts.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 CloudflareAccounts fields. +func (ca *CloudflareAccounts) 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 cloudflareaccounts.FieldID: + value, ok := values[i].(*sql.NullInt64) + if !ok { + return fmt.Errorf("unexpected type %T for field id", value) + } + ca.ID = int(value.Int64) + case cloudflareaccounts.FieldName: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field name", values[i]) + } else if value.Valid { + ca.Name = value.String + } + case cloudflareaccounts.FieldAccountID: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field account_id", values[i]) + } else if value.Valid { + ca.AccountID = value.String + } + case cloudflareaccounts.FieldAPIToken: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field api_token", values[i]) + } else if value.Valid { + ca.APIToken = value.String + } + case cloudflareaccounts.FieldEmail: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field email", values[i]) + } else if value.Valid { + ca.Email = value.String + } + case cloudflareaccounts.FieldStatus: + if value, ok := values[i].(*sql.NullInt64); !ok { + return fmt.Errorf("unexpected type %T for field status", values[i]) + } else if value.Valid { + ca.Status = int8(value.Int64) + } + case cloudflareaccounts.FieldRemark: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field remark", values[i]) + } else if value.Valid { + ca.Remark = value.String + } + case cloudflareaccounts.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 { + ca.CreatedAt = value.Time + } + case cloudflareaccounts.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 { + ca.UpdatedAt = value.Time + } + default: + ca.selectValues.Set(columns[i], values[i]) + } + } + return nil +} + +// Value returns the ent.Value that was dynamically selected and assigned to the CloudflareAccounts. +// This includes values selected through modifiers, order, etc. +func (ca *CloudflareAccounts) Value(name string) (ent.Value, error) { + return ca.selectValues.Get(name) +} + +// QueryCloudflareBuckets queries the "cloudflare_buckets" edge of the CloudflareAccounts entity. +func (ca *CloudflareAccounts) QueryCloudflareBuckets() *CloudflareR2Query { + return NewCloudflareAccountsClient(ca.config).QueryCloudflareBuckets(ca) +} + +// Update returns a builder for updating this CloudflareAccounts. +// Note that you need to call CloudflareAccounts.Unwrap() before calling this method if this CloudflareAccounts +// was returned from a transaction, and the transaction was committed or rolled back. +func (ca *CloudflareAccounts) Update() *CloudflareAccountsUpdateOne { + return NewCloudflareAccountsClient(ca.config).UpdateOne(ca) +} + +// Unwrap unwraps the CloudflareAccounts 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 (ca *CloudflareAccounts) Unwrap() *CloudflareAccounts { + _tx, ok := ca.config.driver.(*txDriver) + if !ok { + panic("ent: CloudflareAccounts is not a transactional entity") + } + ca.config.driver = _tx.drv + return ca +} + +// String implements the fmt.Stringer. +func (ca *CloudflareAccounts) String() string { + var builder strings.Builder + builder.WriteString("CloudflareAccounts(") + builder.WriteString(fmt.Sprintf("id=%v, ", ca.ID)) + builder.WriteString("name=") + builder.WriteString(ca.Name) + builder.WriteString(", ") + builder.WriteString("account_id=") + builder.WriteString(ca.AccountID) + builder.WriteString(", ") + builder.WriteString("api_token=") + builder.WriteString(", ") + builder.WriteString("email=") + builder.WriteString(ca.Email) + builder.WriteString(", ") + builder.WriteString("status=") + builder.WriteString(fmt.Sprintf("%v", ca.Status)) + builder.WriteString(", ") + builder.WriteString("remark=") + builder.WriteString(ca.Remark) + builder.WriteString(", ") + builder.WriteString("created_at=") + builder.WriteString(ca.CreatedAt.Format(time.ANSIC)) + builder.WriteString(", ") + builder.WriteString("updated_at=") + builder.WriteString(ca.UpdatedAt.Format(time.ANSIC)) + builder.WriteByte(')') + return builder.String() +} + +// CloudflareAccountsSlice is a parsable slice of CloudflareAccounts. +type CloudflareAccountsSlice []*CloudflareAccounts diff --git a/internal/ent/cloudflareaccounts/cloudflareaccounts.go b/internal/ent/cloudflareaccounts/cloudflareaccounts.go new file mode 100644 index 0000000..7c8fb6c --- /dev/null +++ b/internal/ent/cloudflareaccounts/cloudflareaccounts.go @@ -0,0 +1,151 @@ +// Code generated by ent, DO NOT EDIT. + +package cloudflareaccounts + +import ( + "time" + + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" +) + +const ( + // Label holds the string label denoting the cloudflareaccounts type in the database. + Label = "cloudflare_accounts" + // FieldID holds the string denoting the id field in the database. + FieldID = "id" + // FieldName holds the string denoting the name field in the database. + FieldName = "name" + // FieldAccountID holds the string denoting the account_id field in the database. + FieldAccountID = "account_id" + // FieldAPIToken holds the string denoting the api_token field in the database. + FieldAPIToken = "api_token" + // FieldEmail holds the string denoting the email field in the database. + FieldEmail = "email" + // FieldStatus holds the string denoting the status field in the database. + FieldStatus = "status" + // FieldRemark holds the string denoting the remark field in the database. + FieldRemark = "remark" + // 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" + // EdgeCloudflareBuckets holds the string denoting the cloudflare_buckets edge name in mutations. + EdgeCloudflareBuckets = "cloudflare_buckets" + // Table holds the table name of the cloudflareaccounts in the database. + Table = "cloudflare_accounts" + // CloudflareBucketsTable is the table that holds the cloudflare_buckets relation/edge. + CloudflareBucketsTable = "cloudflare_r2s" + // CloudflareBucketsInverseTable is the table name for the CloudflareR2 entity. + // It exists in this package in order to avoid circular dependency with the "cloudflarer2" package. + CloudflareBucketsInverseTable = "cloudflare_r2s" + // CloudflareBucketsColumn is the table column denoting the cloudflare_buckets relation/edge. + CloudflareBucketsColumn = "cloudflare_accounts_cloudflare_buckets" +) + +// Columns holds all SQL columns for cloudflareaccounts fields. +var Columns = []string{ + FieldID, + FieldName, + FieldAccountID, + FieldAPIToken, + FieldEmail, + FieldStatus, + FieldRemark, + FieldCreatedAt, + FieldUpdatedAt, +} + +// 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 ( + // NameValidator is a validator for the "name" field. It is called by the builders before save. + NameValidator func(string) error + // AccountIDValidator is a validator for the "account_id" field. It is called by the builders before save. + AccountIDValidator func(string) error + // DefaultStatus holds the default value on creation for the "status" field. + DefaultStatus int8 + // 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 +) + +// OrderOption defines the ordering options for the CloudflareAccounts 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() +} + +// ByName orders the results by the name field. +func ByName(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldName, opts...).ToFunc() +} + +// ByAccountID orders the results by the account_id field. +func ByAccountID(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldAccountID, opts...).ToFunc() +} + +// ByAPIToken orders the results by the api_token field. +func ByAPIToken(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldAPIToken, opts...).ToFunc() +} + +// ByEmail orders the results by the email field. +func ByEmail(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldEmail, opts...).ToFunc() +} + +// ByStatus orders the results by the status field. +func ByStatus(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldStatus, opts...).ToFunc() +} + +// ByRemark orders the results by the remark field. +func ByRemark(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldRemark, 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() +} + +// ByCloudflareBucketsCount orders the results by cloudflare_buckets count. +func ByCloudflareBucketsCount(opts ...sql.OrderTermOption) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborsCount(s, newCloudflareBucketsStep(), opts...) + } +} + +// ByCloudflareBuckets orders the results by cloudflare_buckets terms. +func ByCloudflareBuckets(term sql.OrderTerm, terms ...sql.OrderTerm) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborTerms(s, newCloudflareBucketsStep(), append([]sql.OrderTerm{term}, terms...)...) + } +} +func newCloudflareBucketsStep() *sqlgraph.Step { + return sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.To(CloudflareBucketsInverseTable, FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, CloudflareBucketsTable, CloudflareBucketsColumn), + ) +} diff --git a/internal/ent/cloudflareaccounts/where.go b/internal/ent/cloudflareaccounts/where.go new file mode 100644 index 0000000..9fcda9b --- /dev/null +++ b/internal/ent/cloudflareaccounts/where.go @@ -0,0 +1,599 @@ +// Code generated by ent, DO NOT EDIT. + +package cloudflareaccounts + +import ( + "time" + "unR2/internal/ent/predicate" + + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" +) + +// ID filters vertices based on their ID field. +func ID(id int) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldID, id)) +} + +// IDEQ applies the EQ predicate on the ID field. +func IDEQ(id int) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldID, id)) +} + +// IDNEQ applies the NEQ predicate on the ID field. +func IDNEQ(id int) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNEQ(FieldID, id)) +} + +// IDIn applies the In predicate on the ID field. +func IDIn(ids ...int) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIn(FieldID, ids...)) +} + +// IDNotIn applies the NotIn predicate on the ID field. +func IDNotIn(ids ...int) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotIn(FieldID, ids...)) +} + +// IDGT applies the GT predicate on the ID field. +func IDGT(id int) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGT(FieldID, id)) +} + +// IDGTE applies the GTE predicate on the ID field. +func IDGTE(id int) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGTE(FieldID, id)) +} + +// IDLT applies the LT predicate on the ID field. +func IDLT(id int) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLT(FieldID, id)) +} + +// IDLTE applies the LTE predicate on the ID field. +func IDLTE(id int) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLTE(FieldID, id)) +} + +// Name applies equality check predicate on the "name" field. It's identical to NameEQ. +func Name(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldName, v)) +} + +// AccountID applies equality check predicate on the "account_id" field. It's identical to AccountIDEQ. +func AccountID(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldAccountID, v)) +} + +// APIToken applies equality check predicate on the "api_token" field. It's identical to APITokenEQ. +func APIToken(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldAPIToken, v)) +} + +// Email applies equality check predicate on the "email" field. It's identical to EmailEQ. +func Email(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldEmail, v)) +} + +// Status applies equality check predicate on the "status" field. It's identical to StatusEQ. +func Status(v int8) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldStatus, v)) +} + +// Remark applies equality check predicate on the "remark" field. It's identical to RemarkEQ. +func Remark(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldRemark, v)) +} + +// CreatedAt applies equality check predicate on the "created_at" field. It's identical to CreatedAtEQ. +func CreatedAt(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(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.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldUpdatedAt, v)) +} + +// NameEQ applies the EQ predicate on the "name" field. +func NameEQ(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldName, v)) +} + +// NameNEQ applies the NEQ predicate on the "name" field. +func NameNEQ(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNEQ(FieldName, v)) +} + +// NameIn applies the In predicate on the "name" field. +func NameIn(vs ...string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIn(FieldName, vs...)) +} + +// NameNotIn applies the NotIn predicate on the "name" field. +func NameNotIn(vs ...string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotIn(FieldName, vs...)) +} + +// NameGT applies the GT predicate on the "name" field. +func NameGT(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGT(FieldName, v)) +} + +// NameGTE applies the GTE predicate on the "name" field. +func NameGTE(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGTE(FieldName, v)) +} + +// NameLT applies the LT predicate on the "name" field. +func NameLT(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLT(FieldName, v)) +} + +// NameLTE applies the LTE predicate on the "name" field. +func NameLTE(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLTE(FieldName, v)) +} + +// NameContains applies the Contains predicate on the "name" field. +func NameContains(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldContains(FieldName, v)) +} + +// NameHasPrefix applies the HasPrefix predicate on the "name" field. +func NameHasPrefix(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldHasPrefix(FieldName, v)) +} + +// NameHasSuffix applies the HasSuffix predicate on the "name" field. +func NameHasSuffix(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldHasSuffix(FieldName, v)) +} + +// NameEqualFold applies the EqualFold predicate on the "name" field. +func NameEqualFold(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEqualFold(FieldName, v)) +} + +// NameContainsFold applies the ContainsFold predicate on the "name" field. +func NameContainsFold(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldContainsFold(FieldName, v)) +} + +// AccountIDEQ applies the EQ predicate on the "account_id" field. +func AccountIDEQ(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldAccountID, v)) +} + +// AccountIDNEQ applies the NEQ predicate on the "account_id" field. +func AccountIDNEQ(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNEQ(FieldAccountID, v)) +} + +// AccountIDIn applies the In predicate on the "account_id" field. +func AccountIDIn(vs ...string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIn(FieldAccountID, vs...)) +} + +// AccountIDNotIn applies the NotIn predicate on the "account_id" field. +func AccountIDNotIn(vs ...string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotIn(FieldAccountID, vs...)) +} + +// AccountIDGT applies the GT predicate on the "account_id" field. +func AccountIDGT(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGT(FieldAccountID, v)) +} + +// AccountIDGTE applies the GTE predicate on the "account_id" field. +func AccountIDGTE(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGTE(FieldAccountID, v)) +} + +// AccountIDLT applies the LT predicate on the "account_id" field. +func AccountIDLT(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLT(FieldAccountID, v)) +} + +// AccountIDLTE applies the LTE predicate on the "account_id" field. +func AccountIDLTE(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLTE(FieldAccountID, v)) +} + +// AccountIDContains applies the Contains predicate on the "account_id" field. +func AccountIDContains(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldContains(FieldAccountID, v)) +} + +// AccountIDHasPrefix applies the HasPrefix predicate on the "account_id" field. +func AccountIDHasPrefix(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldHasPrefix(FieldAccountID, v)) +} + +// AccountIDHasSuffix applies the HasSuffix predicate on the "account_id" field. +func AccountIDHasSuffix(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldHasSuffix(FieldAccountID, v)) +} + +// AccountIDEqualFold applies the EqualFold predicate on the "account_id" field. +func AccountIDEqualFold(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEqualFold(FieldAccountID, v)) +} + +// AccountIDContainsFold applies the ContainsFold predicate on the "account_id" field. +func AccountIDContainsFold(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldContainsFold(FieldAccountID, v)) +} + +// APITokenEQ applies the EQ predicate on the "api_token" field. +func APITokenEQ(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldAPIToken, v)) +} + +// APITokenNEQ applies the NEQ predicate on the "api_token" field. +func APITokenNEQ(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNEQ(FieldAPIToken, v)) +} + +// APITokenIn applies the In predicate on the "api_token" field. +func APITokenIn(vs ...string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIn(FieldAPIToken, vs...)) +} + +// APITokenNotIn applies the NotIn predicate on the "api_token" field. +func APITokenNotIn(vs ...string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotIn(FieldAPIToken, vs...)) +} + +// APITokenGT applies the GT predicate on the "api_token" field. +func APITokenGT(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGT(FieldAPIToken, v)) +} + +// APITokenGTE applies the GTE predicate on the "api_token" field. +func APITokenGTE(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGTE(FieldAPIToken, v)) +} + +// APITokenLT applies the LT predicate on the "api_token" field. +func APITokenLT(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLT(FieldAPIToken, v)) +} + +// APITokenLTE applies the LTE predicate on the "api_token" field. +func APITokenLTE(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLTE(FieldAPIToken, v)) +} + +// APITokenContains applies the Contains predicate on the "api_token" field. +func APITokenContains(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldContains(FieldAPIToken, v)) +} + +// APITokenHasPrefix applies the HasPrefix predicate on the "api_token" field. +func APITokenHasPrefix(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldHasPrefix(FieldAPIToken, v)) +} + +// APITokenHasSuffix applies the HasSuffix predicate on the "api_token" field. +func APITokenHasSuffix(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldHasSuffix(FieldAPIToken, v)) +} + +// APITokenEqualFold applies the EqualFold predicate on the "api_token" field. +func APITokenEqualFold(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEqualFold(FieldAPIToken, v)) +} + +// APITokenContainsFold applies the ContainsFold predicate on the "api_token" field. +func APITokenContainsFold(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldContainsFold(FieldAPIToken, v)) +} + +// EmailEQ applies the EQ predicate on the "email" field. +func EmailEQ(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldEmail, v)) +} + +// EmailNEQ applies the NEQ predicate on the "email" field. +func EmailNEQ(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNEQ(FieldEmail, v)) +} + +// EmailIn applies the In predicate on the "email" field. +func EmailIn(vs ...string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIn(FieldEmail, vs...)) +} + +// EmailNotIn applies the NotIn predicate on the "email" field. +func EmailNotIn(vs ...string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotIn(FieldEmail, vs...)) +} + +// EmailGT applies the GT predicate on the "email" field. +func EmailGT(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGT(FieldEmail, v)) +} + +// EmailGTE applies the GTE predicate on the "email" field. +func EmailGTE(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGTE(FieldEmail, v)) +} + +// EmailLT applies the LT predicate on the "email" field. +func EmailLT(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLT(FieldEmail, v)) +} + +// EmailLTE applies the LTE predicate on the "email" field. +func EmailLTE(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLTE(FieldEmail, v)) +} + +// EmailContains applies the Contains predicate on the "email" field. +func EmailContains(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldContains(FieldEmail, v)) +} + +// EmailHasPrefix applies the HasPrefix predicate on the "email" field. +func EmailHasPrefix(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldHasPrefix(FieldEmail, v)) +} + +// EmailHasSuffix applies the HasSuffix predicate on the "email" field. +func EmailHasSuffix(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldHasSuffix(FieldEmail, v)) +} + +// EmailIsNil applies the IsNil predicate on the "email" field. +func EmailIsNil() predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIsNull(FieldEmail)) +} + +// EmailNotNil applies the NotNil predicate on the "email" field. +func EmailNotNil() predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotNull(FieldEmail)) +} + +// EmailEqualFold applies the EqualFold predicate on the "email" field. +func EmailEqualFold(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEqualFold(FieldEmail, v)) +} + +// EmailContainsFold applies the ContainsFold predicate on the "email" field. +func EmailContainsFold(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldContainsFold(FieldEmail, v)) +} + +// StatusEQ applies the EQ predicate on the "status" field. +func StatusEQ(v int8) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldStatus, v)) +} + +// StatusNEQ applies the NEQ predicate on the "status" field. +func StatusNEQ(v int8) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNEQ(FieldStatus, v)) +} + +// StatusIn applies the In predicate on the "status" field. +func StatusIn(vs ...int8) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIn(FieldStatus, vs...)) +} + +// StatusNotIn applies the NotIn predicate on the "status" field. +func StatusNotIn(vs ...int8) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotIn(FieldStatus, vs...)) +} + +// StatusGT applies the GT predicate on the "status" field. +func StatusGT(v int8) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGT(FieldStatus, v)) +} + +// StatusGTE applies the GTE predicate on the "status" field. +func StatusGTE(v int8) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGTE(FieldStatus, v)) +} + +// StatusLT applies the LT predicate on the "status" field. +func StatusLT(v int8) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLT(FieldStatus, v)) +} + +// StatusLTE applies the LTE predicate on the "status" field. +func StatusLTE(v int8) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLTE(FieldStatus, v)) +} + +// RemarkEQ applies the EQ predicate on the "remark" field. +func RemarkEQ(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldRemark, v)) +} + +// RemarkNEQ applies the NEQ predicate on the "remark" field. +func RemarkNEQ(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNEQ(FieldRemark, v)) +} + +// RemarkIn applies the In predicate on the "remark" field. +func RemarkIn(vs ...string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIn(FieldRemark, vs...)) +} + +// RemarkNotIn applies the NotIn predicate on the "remark" field. +func RemarkNotIn(vs ...string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotIn(FieldRemark, vs...)) +} + +// RemarkGT applies the GT predicate on the "remark" field. +func RemarkGT(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGT(FieldRemark, v)) +} + +// RemarkGTE applies the GTE predicate on the "remark" field. +func RemarkGTE(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGTE(FieldRemark, v)) +} + +// RemarkLT applies the LT predicate on the "remark" field. +func RemarkLT(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLT(FieldRemark, v)) +} + +// RemarkLTE applies the LTE predicate on the "remark" field. +func RemarkLTE(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLTE(FieldRemark, v)) +} + +// RemarkContains applies the Contains predicate on the "remark" field. +func RemarkContains(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldContains(FieldRemark, v)) +} + +// RemarkHasPrefix applies the HasPrefix predicate on the "remark" field. +func RemarkHasPrefix(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldHasPrefix(FieldRemark, v)) +} + +// RemarkHasSuffix applies the HasSuffix predicate on the "remark" field. +func RemarkHasSuffix(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldHasSuffix(FieldRemark, v)) +} + +// RemarkIsNil applies the IsNil predicate on the "remark" field. +func RemarkIsNil() predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIsNull(FieldRemark)) +} + +// RemarkNotNil applies the NotNil predicate on the "remark" field. +func RemarkNotNil() predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotNull(FieldRemark)) +} + +// RemarkEqualFold applies the EqualFold predicate on the "remark" field. +func RemarkEqualFold(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEqualFold(FieldRemark, v)) +} + +// RemarkContainsFold applies the ContainsFold predicate on the "remark" field. +func RemarkContainsFold(v string) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldContainsFold(FieldRemark, v)) +} + +// CreatedAtEQ applies the EQ predicate on the "created_at" field. +func CreatedAtEQ(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldCreatedAt, v)) +} + +// CreatedAtNEQ applies the NEQ predicate on the "created_at" field. +func CreatedAtNEQ(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNEQ(FieldCreatedAt, v)) +} + +// CreatedAtIn applies the In predicate on the "created_at" field. +func CreatedAtIn(vs ...time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIn(FieldCreatedAt, vs...)) +} + +// CreatedAtNotIn applies the NotIn predicate on the "created_at" field. +func CreatedAtNotIn(vs ...time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotIn(FieldCreatedAt, vs...)) +} + +// CreatedAtGT applies the GT predicate on the "created_at" field. +func CreatedAtGT(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGT(FieldCreatedAt, v)) +} + +// CreatedAtGTE applies the GTE predicate on the "created_at" field. +func CreatedAtGTE(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGTE(FieldCreatedAt, v)) +} + +// CreatedAtLT applies the LT predicate on the "created_at" field. +func CreatedAtLT(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLT(FieldCreatedAt, v)) +} + +// CreatedAtLTE applies the LTE predicate on the "created_at" field. +func CreatedAtLTE(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLTE(FieldCreatedAt, v)) +} + +// UpdatedAtEQ applies the EQ predicate on the "updated_at" field. +func UpdatedAtEQ(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldEQ(FieldUpdatedAt, v)) +} + +// UpdatedAtNEQ applies the NEQ predicate on the "updated_at" field. +func UpdatedAtNEQ(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNEQ(FieldUpdatedAt, v)) +} + +// UpdatedAtIn applies the In predicate on the "updated_at" field. +func UpdatedAtIn(vs ...time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldIn(FieldUpdatedAt, vs...)) +} + +// UpdatedAtNotIn applies the NotIn predicate on the "updated_at" field. +func UpdatedAtNotIn(vs ...time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldNotIn(FieldUpdatedAt, vs...)) +} + +// UpdatedAtGT applies the GT predicate on the "updated_at" field. +func UpdatedAtGT(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGT(FieldUpdatedAt, v)) +} + +// UpdatedAtGTE applies the GTE predicate on the "updated_at" field. +func UpdatedAtGTE(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldGTE(FieldUpdatedAt, v)) +} + +// UpdatedAtLT applies the LT predicate on the "updated_at" field. +func UpdatedAtLT(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLT(FieldUpdatedAt, v)) +} + +// UpdatedAtLTE applies the LTE predicate on the "updated_at" field. +func UpdatedAtLTE(v time.Time) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.FieldLTE(FieldUpdatedAt, v)) +} + +// HasCloudflareBuckets applies the HasEdge predicate on the "cloudflare_buckets" edge. +func HasCloudflareBuckets() predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(func(s *sql.Selector) { + step := sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, CloudflareBucketsTable, CloudflareBucketsColumn), + ) + sqlgraph.HasNeighbors(s, step) + }) +} + +// HasCloudflareBucketsWith applies the HasEdge predicate on the "cloudflare_buckets" edge with a given conditions (other predicates). +func HasCloudflareBucketsWith(preds ...predicate.CloudflareR2) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(func(s *sql.Selector) { + step := newCloudflareBucketsStep() + 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.CloudflareAccounts) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.AndPredicates(predicates...)) +} + +// Or groups predicates with the OR operator between them. +func Or(predicates ...predicate.CloudflareAccounts) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.OrPredicates(predicates...)) +} + +// Not applies the not operator on the given predicate. +func Not(p predicate.CloudflareAccounts) predicate.CloudflareAccounts { + return predicate.CloudflareAccounts(sql.NotPredicates(p)) +} diff --git a/internal/ent/cloudflareaccounts_create.go b/internal/ent/cloudflareaccounts_create.go new file mode 100644 index 0000000..9f41b80 --- /dev/null +++ b/internal/ent/cloudflareaccounts_create.go @@ -0,0 +1,369 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "errors" + "fmt" + "time" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + + "entgo.io/ent/dialect/sql/sqlgraph" + "entgo.io/ent/schema/field" +) + +// CloudflareAccountsCreate is the builder for creating a CloudflareAccounts entity. +type CloudflareAccountsCreate struct { + config + mutation *CloudflareAccountsMutation + hooks []Hook +} + +// SetName sets the "name" field. +func (cac *CloudflareAccountsCreate) SetName(s string) *CloudflareAccountsCreate { + cac.mutation.SetName(s) + return cac +} + +// SetAccountID sets the "account_id" field. +func (cac *CloudflareAccountsCreate) SetAccountID(s string) *CloudflareAccountsCreate { + cac.mutation.SetAccountID(s) + return cac +} + +// SetAPIToken sets the "api_token" field. +func (cac *CloudflareAccountsCreate) SetAPIToken(s string) *CloudflareAccountsCreate { + cac.mutation.SetAPIToken(s) + return cac +} + +// SetEmail sets the "email" field. +func (cac *CloudflareAccountsCreate) SetEmail(s string) *CloudflareAccountsCreate { + cac.mutation.SetEmail(s) + return cac +} + +// SetNillableEmail sets the "email" field if the given value is not nil. +func (cac *CloudflareAccountsCreate) SetNillableEmail(s *string) *CloudflareAccountsCreate { + if s != nil { + cac.SetEmail(*s) + } + return cac +} + +// SetStatus sets the "status" field. +func (cac *CloudflareAccountsCreate) SetStatus(i int8) *CloudflareAccountsCreate { + cac.mutation.SetStatus(i) + return cac +} + +// SetNillableStatus sets the "status" field if the given value is not nil. +func (cac *CloudflareAccountsCreate) SetNillableStatus(i *int8) *CloudflareAccountsCreate { + if i != nil { + cac.SetStatus(*i) + } + return cac +} + +// SetRemark sets the "remark" field. +func (cac *CloudflareAccountsCreate) SetRemark(s string) *CloudflareAccountsCreate { + cac.mutation.SetRemark(s) + return cac +} + +// SetNillableRemark sets the "remark" field if the given value is not nil. +func (cac *CloudflareAccountsCreate) SetNillableRemark(s *string) *CloudflareAccountsCreate { + if s != nil { + cac.SetRemark(*s) + } + return cac +} + +// SetCreatedAt sets the "created_at" field. +func (cac *CloudflareAccountsCreate) SetCreatedAt(t time.Time) *CloudflareAccountsCreate { + cac.mutation.SetCreatedAt(t) + return cac +} + +// SetNillableCreatedAt sets the "created_at" field if the given value is not nil. +func (cac *CloudflareAccountsCreate) SetNillableCreatedAt(t *time.Time) *CloudflareAccountsCreate { + if t != nil { + cac.SetCreatedAt(*t) + } + return cac +} + +// SetUpdatedAt sets the "updated_at" field. +func (cac *CloudflareAccountsCreate) SetUpdatedAt(t time.Time) *CloudflareAccountsCreate { + cac.mutation.SetUpdatedAt(t) + return cac +} + +// SetNillableUpdatedAt sets the "updated_at" field if the given value is not nil. +func (cac *CloudflareAccountsCreate) SetNillableUpdatedAt(t *time.Time) *CloudflareAccountsCreate { + if t != nil { + cac.SetUpdatedAt(*t) + } + return cac +} + +// AddCloudflareBucketIDs adds the "cloudflare_buckets" edge to the CloudflareR2 entity by IDs. +func (cac *CloudflareAccountsCreate) AddCloudflareBucketIDs(ids ...int) *CloudflareAccountsCreate { + cac.mutation.AddCloudflareBucketIDs(ids...) + return cac +} + +// AddCloudflareBuckets adds the "cloudflare_buckets" edges to the CloudflareR2 entity. +func (cac *CloudflareAccountsCreate) AddCloudflareBuckets(c ...*CloudflareR2) *CloudflareAccountsCreate { + ids := make([]int, len(c)) + for i := range c { + ids[i] = c[i].ID + } + return cac.AddCloudflareBucketIDs(ids...) +} + +// Mutation returns the CloudflareAccountsMutation object of the builder. +func (cac *CloudflareAccountsCreate) Mutation() *CloudflareAccountsMutation { + return cac.mutation +} + +// Save creates the CloudflareAccounts in the database. +func (cac *CloudflareAccountsCreate) Save(ctx context.Context) (*CloudflareAccounts, error) { + cac.defaults() + return withHooks(ctx, cac.sqlSave, cac.mutation, cac.hooks) +} + +// SaveX calls Save and panics if Save returns an error. +func (cac *CloudflareAccountsCreate) SaveX(ctx context.Context) *CloudflareAccounts { + v, err := cac.Save(ctx) + if err != nil { + panic(err) + } + return v +} + +// Exec executes the query. +func (cac *CloudflareAccountsCreate) Exec(ctx context.Context) error { + _, err := cac.Save(ctx) + return err +} + +// ExecX is like Exec, but panics if an error occurs. +func (cac *CloudflareAccountsCreate) ExecX(ctx context.Context) { + if err := cac.Exec(ctx); err != nil { + panic(err) + } +} + +// defaults sets the default values of the builder before save. +func (cac *CloudflareAccountsCreate) defaults() { + if _, ok := cac.mutation.Status(); !ok { + v := cloudflareaccounts.DefaultStatus + cac.mutation.SetStatus(v) + } + if _, ok := cac.mutation.CreatedAt(); !ok { + v := cloudflareaccounts.DefaultCreatedAt() + cac.mutation.SetCreatedAt(v) + } + if _, ok := cac.mutation.UpdatedAt(); !ok { + v := cloudflareaccounts.DefaultUpdatedAt() + cac.mutation.SetUpdatedAt(v) + } +} + +// check runs all checks and user-defined validators on the builder. +func (cac *CloudflareAccountsCreate) check() error { + if _, ok := cac.mutation.Name(); !ok { + return &ValidationError{Name: "name", err: errors.New(`ent: missing required field "CloudflareAccounts.name"`)} + } + if v, ok := cac.mutation.Name(); ok { + if err := cloudflareaccounts.NameValidator(v); err != nil { + return &ValidationError{Name: "name", err: fmt.Errorf(`ent: validator failed for field "CloudflareAccounts.name": %w`, err)} + } + } + if _, ok := cac.mutation.AccountID(); !ok { + return &ValidationError{Name: "account_id", err: errors.New(`ent: missing required field "CloudflareAccounts.account_id"`)} + } + if v, ok := cac.mutation.AccountID(); ok { + if err := cloudflareaccounts.AccountIDValidator(v); err != nil { + return &ValidationError{Name: "account_id", err: fmt.Errorf(`ent: validator failed for field "CloudflareAccounts.account_id": %w`, err)} + } + } + if _, ok := cac.mutation.APIToken(); !ok { + return &ValidationError{Name: "api_token", err: errors.New(`ent: missing required field "CloudflareAccounts.api_token"`)} + } + if _, ok := cac.mutation.Status(); !ok { + return &ValidationError{Name: "status", err: errors.New(`ent: missing required field "CloudflareAccounts.status"`)} + } + if _, ok := cac.mutation.CreatedAt(); !ok { + return &ValidationError{Name: "created_at", err: errors.New(`ent: missing required field "CloudflareAccounts.created_at"`)} + } + if _, ok := cac.mutation.UpdatedAt(); !ok { + return &ValidationError{Name: "updated_at", err: errors.New(`ent: missing required field "CloudflareAccounts.updated_at"`)} + } + return nil +} + +func (cac *CloudflareAccountsCreate) sqlSave(ctx context.Context) (*CloudflareAccounts, error) { + if err := cac.check(); err != nil { + return nil, err + } + _node, _spec := cac.createSpec() + if err := sqlgraph.CreateNode(ctx, cac.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 = int(id) + cac.mutation.id = &_node.ID + cac.mutation.done = true + return _node, nil +} + +func (cac *CloudflareAccountsCreate) createSpec() (*CloudflareAccounts, *sqlgraph.CreateSpec) { + var ( + _node = &CloudflareAccounts{config: cac.config} + _spec = sqlgraph.NewCreateSpec(cloudflareaccounts.Table, sqlgraph.NewFieldSpec(cloudflareaccounts.FieldID, field.TypeInt)) + ) + if value, ok := cac.mutation.Name(); ok { + _spec.SetField(cloudflareaccounts.FieldName, field.TypeString, value) + _node.Name = value + } + if value, ok := cac.mutation.AccountID(); ok { + _spec.SetField(cloudflareaccounts.FieldAccountID, field.TypeString, value) + _node.AccountID = value + } + if value, ok := cac.mutation.APIToken(); ok { + _spec.SetField(cloudflareaccounts.FieldAPIToken, field.TypeString, value) + _node.APIToken = value + } + if value, ok := cac.mutation.Email(); ok { + _spec.SetField(cloudflareaccounts.FieldEmail, field.TypeString, value) + _node.Email = value + } + if value, ok := cac.mutation.Status(); ok { + _spec.SetField(cloudflareaccounts.FieldStatus, field.TypeInt8, value) + _node.Status = value + } + if value, ok := cac.mutation.Remark(); ok { + _spec.SetField(cloudflareaccounts.FieldRemark, field.TypeString, value) + _node.Remark = value + } + if value, ok := cac.mutation.CreatedAt(); ok { + _spec.SetField(cloudflareaccounts.FieldCreatedAt, field.TypeTime, value) + _node.CreatedAt = value + } + if value, ok := cac.mutation.UpdatedAt(); ok { + _spec.SetField(cloudflareaccounts.FieldUpdatedAt, field.TypeTime, value) + _node.UpdatedAt = value + } + if nodes := cac.mutation.CloudflareBucketsIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: cloudflareaccounts.CloudflareBucketsTable, + Columns: []string{cloudflareaccounts.CloudflareBucketsColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges = append(_spec.Edges, edge) + } + return _node, _spec +} + +// CloudflareAccountsCreateBulk is the builder for creating many CloudflareAccounts entities in bulk. +type CloudflareAccountsCreateBulk struct { + config + err error + builders []*CloudflareAccountsCreate +} + +// Save creates the CloudflareAccounts entities in the database. +func (cacb *CloudflareAccountsCreateBulk) Save(ctx context.Context) ([]*CloudflareAccounts, error) { + if cacb.err != nil { + return nil, cacb.err + } + specs := make([]*sqlgraph.CreateSpec, len(cacb.builders)) + nodes := make([]*CloudflareAccounts, len(cacb.builders)) + mutators := make([]Mutator, len(cacb.builders)) + for i := range cacb.builders { + func(i int, root context.Context) { + builder := cacb.builders[i] + builder.defaults() + var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) { + mutation, ok := m.(*CloudflareAccountsMutation) + 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, cacb.builders[i+1].mutation) + } else { + spec := &sqlgraph.BatchCreateSpec{Nodes: specs} + // Invoke the actual operation on the latest mutation in the chain. + if err = sqlgraph.BatchCreate(ctx, cacb.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 = int(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, cacb.builders[0].mutation); err != nil { + return nil, err + } + } + return nodes, nil +} + +// SaveX is like Save, but panics if an error occurs. +func (cacb *CloudflareAccountsCreateBulk) SaveX(ctx context.Context) []*CloudflareAccounts { + v, err := cacb.Save(ctx) + if err != nil { + panic(err) + } + return v +} + +// Exec executes the query. +func (cacb *CloudflareAccountsCreateBulk) Exec(ctx context.Context) error { + _, err := cacb.Save(ctx) + return err +} + +// ExecX is like Exec, but panics if an error occurs. +func (cacb *CloudflareAccountsCreateBulk) ExecX(ctx context.Context) { + if err := cacb.Exec(ctx); err != nil { + panic(err) + } +} diff --git a/internal/ent/cloudflareaccounts_delete.go b/internal/ent/cloudflareaccounts_delete.go new file mode 100644 index 0000000..276dbb3 --- /dev/null +++ b/internal/ent/cloudflareaccounts_delete.go @@ -0,0 +1,88 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/predicate" + + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" + "entgo.io/ent/schema/field" +) + +// CloudflareAccountsDelete is the builder for deleting a CloudflareAccounts entity. +type CloudflareAccountsDelete struct { + config + hooks []Hook + mutation *CloudflareAccountsMutation +} + +// Where appends a list predicates to the CloudflareAccountsDelete builder. +func (cad *CloudflareAccountsDelete) Where(ps ...predicate.CloudflareAccounts) *CloudflareAccountsDelete { + cad.mutation.Where(ps...) + return cad +} + +// Exec executes the deletion query and returns how many vertices were deleted. +func (cad *CloudflareAccountsDelete) Exec(ctx context.Context) (int, error) { + return withHooks(ctx, cad.sqlExec, cad.mutation, cad.hooks) +} + +// ExecX is like Exec, but panics if an error occurs. +func (cad *CloudflareAccountsDelete) ExecX(ctx context.Context) int { + n, err := cad.Exec(ctx) + if err != nil { + panic(err) + } + return n +} + +func (cad *CloudflareAccountsDelete) sqlExec(ctx context.Context) (int, error) { + _spec := sqlgraph.NewDeleteSpec(cloudflareaccounts.Table, sqlgraph.NewFieldSpec(cloudflareaccounts.FieldID, field.TypeInt)) + if ps := cad.mutation.predicates; len(ps) > 0 { + _spec.Predicate = func(selector *sql.Selector) { + for i := range ps { + ps[i](selector) + } + } + } + affected, err := sqlgraph.DeleteNodes(ctx, cad.driver, _spec) + if err != nil && sqlgraph.IsConstraintError(err) { + err = &ConstraintError{msg: err.Error(), wrap: err} + } + cad.mutation.done = true + return affected, err +} + +// CloudflareAccountsDeleteOne is the builder for deleting a single CloudflareAccounts entity. +type CloudflareAccountsDeleteOne struct { + cad *CloudflareAccountsDelete +} + +// Where appends a list predicates to the CloudflareAccountsDelete builder. +func (cado *CloudflareAccountsDeleteOne) Where(ps ...predicate.CloudflareAccounts) *CloudflareAccountsDeleteOne { + cado.cad.mutation.Where(ps...) + return cado +} + +// Exec executes the deletion query. +func (cado *CloudflareAccountsDeleteOne) Exec(ctx context.Context) error { + n, err := cado.cad.Exec(ctx) + switch { + case err != nil: + return err + case n == 0: + return &NotFoundError{cloudflareaccounts.Label} + default: + return nil + } +} + +// ExecX is like Exec, but panics if an error occurs. +func (cado *CloudflareAccountsDeleteOne) ExecX(ctx context.Context) { + if err := cado.Exec(ctx); err != nil { + panic(err) + } +} diff --git a/internal/ent/cloudflareaccounts_query.go b/internal/ent/cloudflareaccounts_query.go new file mode 100644 index 0000000..9d57787 --- /dev/null +++ b/internal/ent/cloudflareaccounts_query.go @@ -0,0 +1,609 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "database/sql/driver" + "fmt" + "math" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + "unR2/internal/ent/predicate" + + "entgo.io/ent" + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" + "entgo.io/ent/schema/field" +) + +// CloudflareAccountsQuery is the builder for querying CloudflareAccounts entities. +type CloudflareAccountsQuery struct { + config + ctx *QueryContext + order []cloudflareaccounts.OrderOption + inters []Interceptor + predicates []predicate.CloudflareAccounts + withCloudflareBuckets *CloudflareR2Query + // intermediate query (i.e. traversal path). + sql *sql.Selector + path func(context.Context) (*sql.Selector, error) +} + +// Where adds a new predicate for the CloudflareAccountsQuery builder. +func (caq *CloudflareAccountsQuery) Where(ps ...predicate.CloudflareAccounts) *CloudflareAccountsQuery { + caq.predicates = append(caq.predicates, ps...) + return caq +} + +// Limit the number of records to be returned by this query. +func (caq *CloudflareAccountsQuery) Limit(limit int) *CloudflareAccountsQuery { + caq.ctx.Limit = &limit + return caq +} + +// Offset to start from. +func (caq *CloudflareAccountsQuery) Offset(offset int) *CloudflareAccountsQuery { + caq.ctx.Offset = &offset + return caq +} + +// 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 (caq *CloudflareAccountsQuery) Unique(unique bool) *CloudflareAccountsQuery { + caq.ctx.Unique = &unique + return caq +} + +// Order specifies how the records should be ordered. +func (caq *CloudflareAccountsQuery) Order(o ...cloudflareaccounts.OrderOption) *CloudflareAccountsQuery { + caq.order = append(caq.order, o...) + return caq +} + +// QueryCloudflareBuckets chains the current query on the "cloudflare_buckets" edge. +func (caq *CloudflareAccountsQuery) QueryCloudflareBuckets() *CloudflareR2Query { + query := (&CloudflareR2Client{config: caq.config}).Query() + query.path = func(ctx context.Context) (fromU *sql.Selector, err error) { + if err := caq.prepareQuery(ctx); err != nil { + return nil, err + } + selector := caq.sqlQuery(ctx) + if err := selector.Err(); err != nil { + return nil, err + } + step := sqlgraph.NewStep( + sqlgraph.From(cloudflareaccounts.Table, cloudflareaccounts.FieldID, selector), + sqlgraph.To(cloudflarer2.Table, cloudflarer2.FieldID), + sqlgraph.Edge(sqlgraph.O2M, false, cloudflareaccounts.CloudflareBucketsTable, cloudflareaccounts.CloudflareBucketsColumn), + ) + fromU = sqlgraph.SetNeighbors(caq.driver.Dialect(), step) + return fromU, nil + } + return query +} + +// First returns the first CloudflareAccounts entity from the query. +// Returns a *NotFoundError when no CloudflareAccounts was found. +func (caq *CloudflareAccountsQuery) First(ctx context.Context) (*CloudflareAccounts, error) { + nodes, err := caq.Limit(1).All(setContextOp(ctx, caq.ctx, ent.OpQueryFirst)) + if err != nil { + return nil, err + } + if len(nodes) == 0 { + return nil, &NotFoundError{cloudflareaccounts.Label} + } + return nodes[0], nil +} + +// FirstX is like First, but panics if an error occurs. +func (caq *CloudflareAccountsQuery) FirstX(ctx context.Context) *CloudflareAccounts { + node, err := caq.First(ctx) + if err != nil && !IsNotFound(err) { + panic(err) + } + return node +} + +// FirstID returns the first CloudflareAccounts ID from the query. +// Returns a *NotFoundError when no CloudflareAccounts ID was found. +func (caq *CloudflareAccountsQuery) FirstID(ctx context.Context) (id int, err error) { + var ids []int + if ids, err = caq.Limit(1).IDs(setContextOp(ctx, caq.ctx, ent.OpQueryFirstID)); err != nil { + return + } + if len(ids) == 0 { + err = &NotFoundError{cloudflareaccounts.Label} + return + } + return ids[0], nil +} + +// FirstIDX is like FirstID, but panics if an error occurs. +func (caq *CloudflareAccountsQuery) FirstIDX(ctx context.Context) int { + id, err := caq.FirstID(ctx) + if err != nil && !IsNotFound(err) { + panic(err) + } + return id +} + +// Only returns a single CloudflareAccounts entity found by the query, ensuring it only returns one. +// Returns a *NotSingularError when more than one CloudflareAccounts entity is found. +// Returns a *NotFoundError when no CloudflareAccounts entities are found. +func (caq *CloudflareAccountsQuery) Only(ctx context.Context) (*CloudflareAccounts, error) { + nodes, err := caq.Limit(2).All(setContextOp(ctx, caq.ctx, ent.OpQueryOnly)) + if err != nil { + return nil, err + } + switch len(nodes) { + case 1: + return nodes[0], nil + case 0: + return nil, &NotFoundError{cloudflareaccounts.Label} + default: + return nil, &NotSingularError{cloudflareaccounts.Label} + } +} + +// OnlyX is like Only, but panics if an error occurs. +func (caq *CloudflareAccountsQuery) OnlyX(ctx context.Context) *CloudflareAccounts { + node, err := caq.Only(ctx) + if err != nil { + panic(err) + } + return node +} + +// OnlyID is like Only, but returns the only CloudflareAccounts ID in the query. +// Returns a *NotSingularError when more than one CloudflareAccounts ID is found. +// Returns a *NotFoundError when no entities are found. +func (caq *CloudflareAccountsQuery) OnlyID(ctx context.Context) (id int, err error) { + var ids []int + if ids, err = caq.Limit(2).IDs(setContextOp(ctx, caq.ctx, ent.OpQueryOnlyID)); err != nil { + return + } + switch len(ids) { + case 1: + id = ids[0] + case 0: + err = &NotFoundError{cloudflareaccounts.Label} + default: + err = &NotSingularError{cloudflareaccounts.Label} + } + return +} + +// OnlyIDX is like OnlyID, but panics if an error occurs. +func (caq *CloudflareAccountsQuery) OnlyIDX(ctx context.Context) int { + id, err := caq.OnlyID(ctx) + if err != nil { + panic(err) + } + return id +} + +// All executes the query and returns a list of CloudflareAccountsSlice. +func (caq *CloudflareAccountsQuery) All(ctx context.Context) ([]*CloudflareAccounts, error) { + ctx = setContextOp(ctx, caq.ctx, ent.OpQueryAll) + if err := caq.prepareQuery(ctx); err != nil { + return nil, err + } + qr := querierAll[[]*CloudflareAccounts, *CloudflareAccountsQuery]() + return withInterceptors[[]*CloudflareAccounts](ctx, caq, qr, caq.inters) +} + +// AllX is like All, but panics if an error occurs. +func (caq *CloudflareAccountsQuery) AllX(ctx context.Context) []*CloudflareAccounts { + nodes, err := caq.All(ctx) + if err != nil { + panic(err) + } + return nodes +} + +// IDs executes the query and returns a list of CloudflareAccounts IDs. +func (caq *CloudflareAccountsQuery) IDs(ctx context.Context) (ids []int, err error) { + if caq.ctx.Unique == nil && caq.path != nil { + caq.Unique(true) + } + ctx = setContextOp(ctx, caq.ctx, ent.OpQueryIDs) + if err = caq.Select(cloudflareaccounts.FieldID).Scan(ctx, &ids); err != nil { + return nil, err + } + return ids, nil +} + +// IDsX is like IDs, but panics if an error occurs. +func (caq *CloudflareAccountsQuery) IDsX(ctx context.Context) []int { + ids, err := caq.IDs(ctx) + if err != nil { + panic(err) + } + return ids +} + +// Count returns the count of the given query. +func (caq *CloudflareAccountsQuery) Count(ctx context.Context) (int, error) { + ctx = setContextOp(ctx, caq.ctx, ent.OpQueryCount) + if err := caq.prepareQuery(ctx); err != nil { + return 0, err + } + return withInterceptors[int](ctx, caq, querierCount[*CloudflareAccountsQuery](), caq.inters) +} + +// CountX is like Count, but panics if an error occurs. +func (caq *CloudflareAccountsQuery) CountX(ctx context.Context) int { + count, err := caq.Count(ctx) + if err != nil { + panic(err) + } + return count +} + +// Exist returns true if the query has elements in the graph. +func (caq *CloudflareAccountsQuery) Exist(ctx context.Context) (bool, error) { + ctx = setContextOp(ctx, caq.ctx, ent.OpQueryExist) + switch _, err := caq.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 (caq *CloudflareAccountsQuery) ExistX(ctx context.Context) bool { + exist, err := caq.Exist(ctx) + if err != nil { + panic(err) + } + return exist +} + +// Clone returns a duplicate of the CloudflareAccountsQuery builder, including all associated steps. It can be +// used to prepare common query builders and use them differently after the clone is made. +func (caq *CloudflareAccountsQuery) Clone() *CloudflareAccountsQuery { + if caq == nil { + return nil + } + return &CloudflareAccountsQuery{ + config: caq.config, + ctx: caq.ctx.Clone(), + order: append([]cloudflareaccounts.OrderOption{}, caq.order...), + inters: append([]Interceptor{}, caq.inters...), + predicates: append([]predicate.CloudflareAccounts{}, caq.predicates...), + withCloudflareBuckets: caq.withCloudflareBuckets.Clone(), + // clone intermediate query. + sql: caq.sql.Clone(), + path: caq.path, + } +} + +// WithCloudflareBuckets tells the query-builder to eager-load the nodes that are connected to +// the "cloudflare_buckets" edge. The optional arguments are used to configure the query builder of the edge. +func (caq *CloudflareAccountsQuery) WithCloudflareBuckets(opts ...func(*CloudflareR2Query)) *CloudflareAccountsQuery { + query := (&CloudflareR2Client{config: caq.config}).Query() + for _, opt := range opts { + opt(query) + } + caq.withCloudflareBuckets = query + return caq +} + +// 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 { +// Name string `json:"name,omitempty"` +// Count int `json:"count,omitempty"` +// } +// +// client.CloudflareAccounts.Query(). +// GroupBy(cloudflareaccounts.FieldName). +// Aggregate(ent.Count()). +// Scan(ctx, &v) +func (caq *CloudflareAccountsQuery) GroupBy(field string, fields ...string) *CloudflareAccountsGroupBy { + caq.ctx.Fields = append([]string{field}, fields...) + grbuild := &CloudflareAccountsGroupBy{build: caq} + grbuild.flds = &caq.ctx.Fields + grbuild.label = cloudflareaccounts.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 { +// Name string `json:"name,omitempty"` +// } +// +// client.CloudflareAccounts.Query(). +// Select(cloudflareaccounts.FieldName). +// Scan(ctx, &v) +func (caq *CloudflareAccountsQuery) Select(fields ...string) *CloudflareAccountsSelect { + caq.ctx.Fields = append(caq.ctx.Fields, fields...) + sbuild := &CloudflareAccountsSelect{CloudflareAccountsQuery: caq} + sbuild.label = cloudflareaccounts.Label + sbuild.flds, sbuild.scan = &caq.ctx.Fields, sbuild.Scan + return sbuild +} + +// Aggregate returns a CloudflareAccountsSelect configured with the given aggregations. +func (caq *CloudflareAccountsQuery) Aggregate(fns ...AggregateFunc) *CloudflareAccountsSelect { + return caq.Select().Aggregate(fns...) +} + +func (caq *CloudflareAccountsQuery) prepareQuery(ctx context.Context) error { + for _, inter := range caq.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, caq); err != nil { + return err + } + } + } + for _, f := range caq.ctx.Fields { + if !cloudflareaccounts.ValidColumn(f) { + return &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)} + } + } + if caq.path != nil { + prev, err := caq.path(ctx) + if err != nil { + return err + } + caq.sql = prev + } + return nil +} + +func (caq *CloudflareAccountsQuery) sqlAll(ctx context.Context, hooks ...queryHook) ([]*CloudflareAccounts, error) { + var ( + nodes = []*CloudflareAccounts{} + _spec = caq.querySpec() + loadedTypes = [1]bool{ + caq.withCloudflareBuckets != nil, + } + ) + _spec.ScanValues = func(columns []string) ([]any, error) { + return (*CloudflareAccounts).scanValues(nil, columns) + } + _spec.Assign = func(columns []string, values []any) error { + node := &CloudflareAccounts{config: caq.config} + nodes = append(nodes, node) + node.Edges.loadedTypes = loadedTypes + return node.assignValues(columns, values) + } + for i := range hooks { + hooks[i](ctx, _spec) + } + if err := sqlgraph.QueryNodes(ctx, caq.driver, _spec); err != nil { + return nil, err + } + if len(nodes) == 0 { + return nodes, nil + } + if query := caq.withCloudflareBuckets; query != nil { + if err := caq.loadCloudflareBuckets(ctx, query, nodes, + func(n *CloudflareAccounts) { n.Edges.CloudflareBuckets = []*CloudflareR2{} }, + func(n *CloudflareAccounts, e *CloudflareR2) { + n.Edges.CloudflareBuckets = append(n.Edges.CloudflareBuckets, e) + }); err != nil { + return nil, err + } + } + return nodes, nil +} + +func (caq *CloudflareAccountsQuery) loadCloudflareBuckets(ctx context.Context, query *CloudflareR2Query, nodes []*CloudflareAccounts, init func(*CloudflareAccounts), assign func(*CloudflareAccounts, *CloudflareR2)) error { + fks := make([]driver.Value, 0, len(nodes)) + nodeids := make(map[int]*CloudflareAccounts) + for i := range nodes { + fks = append(fks, nodes[i].ID) + nodeids[nodes[i].ID] = nodes[i] + if init != nil { + init(nodes[i]) + } + } + query.withFKs = true + query.Where(predicate.CloudflareR2(func(s *sql.Selector) { + s.Where(sql.InValues(s.C(cloudflareaccounts.CloudflareBucketsColumn), fks...)) + })) + neighbors, err := query.All(ctx) + if err != nil { + return err + } + for _, n := range neighbors { + fk := n.cloudflare_accounts_cloudflare_buckets + if fk == nil { + return fmt.Errorf(`foreign-key "cloudflare_accounts_cloudflare_buckets" is nil for node %v`, n.ID) + } + node, ok := nodeids[*fk] + if !ok { + return fmt.Errorf(`unexpected referenced foreign-key "cloudflare_accounts_cloudflare_buckets" returned %v for node %v`, *fk, n.ID) + } + assign(node, n) + } + return nil +} + +func (caq *CloudflareAccountsQuery) sqlCount(ctx context.Context) (int, error) { + _spec := caq.querySpec() + _spec.Node.Columns = caq.ctx.Fields + if len(caq.ctx.Fields) > 0 { + _spec.Unique = caq.ctx.Unique != nil && *caq.ctx.Unique + } + return sqlgraph.CountNodes(ctx, caq.driver, _spec) +} + +func (caq *CloudflareAccountsQuery) querySpec() *sqlgraph.QuerySpec { + _spec := sqlgraph.NewQuerySpec(cloudflareaccounts.Table, cloudflareaccounts.Columns, sqlgraph.NewFieldSpec(cloudflareaccounts.FieldID, field.TypeInt)) + _spec.From = caq.sql + if unique := caq.ctx.Unique; unique != nil { + _spec.Unique = *unique + } else if caq.path != nil { + _spec.Unique = true + } + if fields := caq.ctx.Fields; len(fields) > 0 { + _spec.Node.Columns = make([]string, 0, len(fields)) + _spec.Node.Columns = append(_spec.Node.Columns, cloudflareaccounts.FieldID) + for i := range fields { + if fields[i] != cloudflareaccounts.FieldID { + _spec.Node.Columns = append(_spec.Node.Columns, fields[i]) + } + } + } + if ps := caq.predicates; len(ps) > 0 { + _spec.Predicate = func(selector *sql.Selector) { + for i := range ps { + ps[i](selector) + } + } + } + if limit := caq.ctx.Limit; limit != nil { + _spec.Limit = *limit + } + if offset := caq.ctx.Offset; offset != nil { + _spec.Offset = *offset + } + if ps := caq.order; len(ps) > 0 { + _spec.Order = func(selector *sql.Selector) { + for i := range ps { + ps[i](selector) + } + } + } + return _spec +} + +func (caq *CloudflareAccountsQuery) sqlQuery(ctx context.Context) *sql.Selector { + builder := sql.Dialect(caq.driver.Dialect()) + t1 := builder.Table(cloudflareaccounts.Table) + columns := caq.ctx.Fields + if len(columns) == 0 { + columns = cloudflareaccounts.Columns + } + selector := builder.Select(t1.Columns(columns...)...).From(t1) + if caq.sql != nil { + selector = caq.sql + selector.Select(selector.Columns(columns...)...) + } + if caq.ctx.Unique != nil && *caq.ctx.Unique { + selector.Distinct() + } + for _, p := range caq.predicates { + p(selector) + } + for _, p := range caq.order { + p(selector) + } + if offset := caq.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 := caq.ctx.Limit; limit != nil { + selector.Limit(*limit) + } + return selector +} + +// CloudflareAccountsGroupBy is the group-by builder for CloudflareAccounts entities. +type CloudflareAccountsGroupBy struct { + selector + build *CloudflareAccountsQuery +} + +// Aggregate adds the given aggregation functions to the group-by query. +func (cagb *CloudflareAccountsGroupBy) Aggregate(fns ...AggregateFunc) *CloudflareAccountsGroupBy { + cagb.fns = append(cagb.fns, fns...) + return cagb +} + +// Scan applies the selector query and scans the result into the given value. +func (cagb *CloudflareAccountsGroupBy) Scan(ctx context.Context, v any) error { + ctx = setContextOp(ctx, cagb.build.ctx, ent.OpQueryGroupBy) + if err := cagb.build.prepareQuery(ctx); err != nil { + return err + } + return scanWithInterceptors[*CloudflareAccountsQuery, *CloudflareAccountsGroupBy](ctx, cagb.build, cagb, cagb.build.inters, v) +} + +func (cagb *CloudflareAccountsGroupBy) sqlScan(ctx context.Context, root *CloudflareAccountsQuery, v any) error { + selector := root.sqlQuery(ctx).Select() + aggregation := make([]string, 0, len(cagb.fns)) + for _, fn := range cagb.fns { + aggregation = append(aggregation, fn(selector)) + } + if len(selector.SelectedColumns()) == 0 { + columns := make([]string, 0, len(*cagb.flds)+len(cagb.fns)) + for _, f := range *cagb.flds { + columns = append(columns, selector.C(f)) + } + columns = append(columns, aggregation...) + selector.Select(columns...) + } + selector.GroupBy(selector.Columns(*cagb.flds...)...) + if err := selector.Err(); err != nil { + return err + } + rows := &sql.Rows{} + query, args := selector.Query() + if err := cagb.build.driver.Query(ctx, query, args, rows); err != nil { + return err + } + defer rows.Close() + return sql.ScanSlice(rows, v) +} + +// CloudflareAccountsSelect is the builder for selecting fields of CloudflareAccounts entities. +type CloudflareAccountsSelect struct { + *CloudflareAccountsQuery + selector +} + +// Aggregate adds the given aggregation functions to the selector query. +func (cas *CloudflareAccountsSelect) Aggregate(fns ...AggregateFunc) *CloudflareAccountsSelect { + cas.fns = append(cas.fns, fns...) + return cas +} + +// Scan applies the selector query and scans the result into the given value. +func (cas *CloudflareAccountsSelect) Scan(ctx context.Context, v any) error { + ctx = setContextOp(ctx, cas.ctx, ent.OpQuerySelect) + if err := cas.prepareQuery(ctx); err != nil { + return err + } + return scanWithInterceptors[*CloudflareAccountsQuery, *CloudflareAccountsSelect](ctx, cas.CloudflareAccountsQuery, cas, cas.inters, v) +} + +func (cas *CloudflareAccountsSelect) sqlScan(ctx context.Context, root *CloudflareAccountsQuery, v any) error { + selector := root.sqlQuery(ctx) + aggregation := make([]string, 0, len(cas.fns)) + for _, fn := range cas.fns { + aggregation = append(aggregation, fn(selector)) + } + switch n := len(*cas.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 := cas.driver.Query(ctx, query, args, rows); err != nil { + return err + } + defer rows.Close() + return sql.ScanSlice(rows, v) +} diff --git a/internal/ent/cloudflareaccounts_update.go b/internal/ent/cloudflareaccounts_update.go new file mode 100644 index 0000000..46f536d --- /dev/null +++ b/internal/ent/cloudflareaccounts_update.go @@ -0,0 +1,671 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "errors" + "fmt" + "time" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + "unR2/internal/ent/predicate" + + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" + "entgo.io/ent/schema/field" +) + +// CloudflareAccountsUpdate is the builder for updating CloudflareAccounts entities. +type CloudflareAccountsUpdate struct { + config + hooks []Hook + mutation *CloudflareAccountsMutation +} + +// Where appends a list predicates to the CloudflareAccountsUpdate builder. +func (cau *CloudflareAccountsUpdate) Where(ps ...predicate.CloudflareAccounts) *CloudflareAccountsUpdate { + cau.mutation.Where(ps...) + return cau +} + +// SetName sets the "name" field. +func (cau *CloudflareAccountsUpdate) SetName(s string) *CloudflareAccountsUpdate { + cau.mutation.SetName(s) + return cau +} + +// SetNillableName sets the "name" field if the given value is not nil. +func (cau *CloudflareAccountsUpdate) SetNillableName(s *string) *CloudflareAccountsUpdate { + if s != nil { + cau.SetName(*s) + } + return cau +} + +// SetAccountID sets the "account_id" field. +func (cau *CloudflareAccountsUpdate) SetAccountID(s string) *CloudflareAccountsUpdate { + cau.mutation.SetAccountID(s) + return cau +} + +// SetNillableAccountID sets the "account_id" field if the given value is not nil. +func (cau *CloudflareAccountsUpdate) SetNillableAccountID(s *string) *CloudflareAccountsUpdate { + if s != nil { + cau.SetAccountID(*s) + } + return cau +} + +// SetAPIToken sets the "api_token" field. +func (cau *CloudflareAccountsUpdate) SetAPIToken(s string) *CloudflareAccountsUpdate { + cau.mutation.SetAPIToken(s) + return cau +} + +// SetNillableAPIToken sets the "api_token" field if the given value is not nil. +func (cau *CloudflareAccountsUpdate) SetNillableAPIToken(s *string) *CloudflareAccountsUpdate { + if s != nil { + cau.SetAPIToken(*s) + } + return cau +} + +// SetEmail sets the "email" field. +func (cau *CloudflareAccountsUpdate) SetEmail(s string) *CloudflareAccountsUpdate { + cau.mutation.SetEmail(s) + return cau +} + +// SetNillableEmail sets the "email" field if the given value is not nil. +func (cau *CloudflareAccountsUpdate) SetNillableEmail(s *string) *CloudflareAccountsUpdate { + if s != nil { + cau.SetEmail(*s) + } + return cau +} + +// ClearEmail clears the value of the "email" field. +func (cau *CloudflareAccountsUpdate) ClearEmail() *CloudflareAccountsUpdate { + cau.mutation.ClearEmail() + return cau +} + +// SetStatus sets the "status" field. +func (cau *CloudflareAccountsUpdate) SetStatus(i int8) *CloudflareAccountsUpdate { + cau.mutation.ResetStatus() + cau.mutation.SetStatus(i) + return cau +} + +// SetNillableStatus sets the "status" field if the given value is not nil. +func (cau *CloudflareAccountsUpdate) SetNillableStatus(i *int8) *CloudflareAccountsUpdate { + if i != nil { + cau.SetStatus(*i) + } + return cau +} + +// AddStatus adds i to the "status" field. +func (cau *CloudflareAccountsUpdate) AddStatus(i int8) *CloudflareAccountsUpdate { + cau.mutation.AddStatus(i) + return cau +} + +// SetRemark sets the "remark" field. +func (cau *CloudflareAccountsUpdate) SetRemark(s string) *CloudflareAccountsUpdate { + cau.mutation.SetRemark(s) + return cau +} + +// SetNillableRemark sets the "remark" field if the given value is not nil. +func (cau *CloudflareAccountsUpdate) SetNillableRemark(s *string) *CloudflareAccountsUpdate { + if s != nil { + cau.SetRemark(*s) + } + return cau +} + +// ClearRemark clears the value of the "remark" field. +func (cau *CloudflareAccountsUpdate) ClearRemark() *CloudflareAccountsUpdate { + cau.mutation.ClearRemark() + return cau +} + +// SetUpdatedAt sets the "updated_at" field. +func (cau *CloudflareAccountsUpdate) SetUpdatedAt(t time.Time) *CloudflareAccountsUpdate { + cau.mutation.SetUpdatedAt(t) + return cau +} + +// AddCloudflareBucketIDs adds the "cloudflare_buckets" edge to the CloudflareR2 entity by IDs. +func (cau *CloudflareAccountsUpdate) AddCloudflareBucketIDs(ids ...int) *CloudflareAccountsUpdate { + cau.mutation.AddCloudflareBucketIDs(ids...) + return cau +} + +// AddCloudflareBuckets adds the "cloudflare_buckets" edges to the CloudflareR2 entity. +func (cau *CloudflareAccountsUpdate) AddCloudflareBuckets(c ...*CloudflareR2) *CloudflareAccountsUpdate { + ids := make([]int, len(c)) + for i := range c { + ids[i] = c[i].ID + } + return cau.AddCloudflareBucketIDs(ids...) +} + +// Mutation returns the CloudflareAccountsMutation object of the builder. +func (cau *CloudflareAccountsUpdate) Mutation() *CloudflareAccountsMutation { + return cau.mutation +} + +// ClearCloudflareBuckets clears all "cloudflare_buckets" edges to the CloudflareR2 entity. +func (cau *CloudflareAccountsUpdate) ClearCloudflareBuckets() *CloudflareAccountsUpdate { + cau.mutation.ClearCloudflareBuckets() + return cau +} + +// RemoveCloudflareBucketIDs removes the "cloudflare_buckets" edge to CloudflareR2 entities by IDs. +func (cau *CloudflareAccountsUpdate) RemoveCloudflareBucketIDs(ids ...int) *CloudflareAccountsUpdate { + cau.mutation.RemoveCloudflareBucketIDs(ids...) + return cau +} + +// RemoveCloudflareBuckets removes "cloudflare_buckets" edges to CloudflareR2 entities. +func (cau *CloudflareAccountsUpdate) RemoveCloudflareBuckets(c ...*CloudflareR2) *CloudflareAccountsUpdate { + ids := make([]int, len(c)) + for i := range c { + ids[i] = c[i].ID + } + return cau.RemoveCloudflareBucketIDs(ids...) +} + +// Save executes the query and returns the number of nodes affected by the update operation. +func (cau *CloudflareAccountsUpdate) Save(ctx context.Context) (int, error) { + cau.defaults() + return withHooks(ctx, cau.sqlSave, cau.mutation, cau.hooks) +} + +// SaveX is like Save, but panics if an error occurs. +func (cau *CloudflareAccountsUpdate) SaveX(ctx context.Context) int { + affected, err := cau.Save(ctx) + if err != nil { + panic(err) + } + return affected +} + +// Exec executes the query. +func (cau *CloudflareAccountsUpdate) Exec(ctx context.Context) error { + _, err := cau.Save(ctx) + return err +} + +// ExecX is like Exec, but panics if an error occurs. +func (cau *CloudflareAccountsUpdate) ExecX(ctx context.Context) { + if err := cau.Exec(ctx); err != nil { + panic(err) + } +} + +// defaults sets the default values of the builder before save. +func (cau *CloudflareAccountsUpdate) defaults() { + if _, ok := cau.mutation.UpdatedAt(); !ok { + v := cloudflareaccounts.UpdateDefaultUpdatedAt() + cau.mutation.SetUpdatedAt(v) + } +} + +// check runs all checks and user-defined validators on the builder. +func (cau *CloudflareAccountsUpdate) check() error { + if v, ok := cau.mutation.Name(); ok { + if err := cloudflareaccounts.NameValidator(v); err != nil { + return &ValidationError{Name: "name", err: fmt.Errorf(`ent: validator failed for field "CloudflareAccounts.name": %w`, err)} + } + } + if v, ok := cau.mutation.AccountID(); ok { + if err := cloudflareaccounts.AccountIDValidator(v); err != nil { + return &ValidationError{Name: "account_id", err: fmt.Errorf(`ent: validator failed for field "CloudflareAccounts.account_id": %w`, err)} + } + } + return nil +} + +func (cau *CloudflareAccountsUpdate) sqlSave(ctx context.Context) (n int, err error) { + if err := cau.check(); err != nil { + return n, err + } + _spec := sqlgraph.NewUpdateSpec(cloudflareaccounts.Table, cloudflareaccounts.Columns, sqlgraph.NewFieldSpec(cloudflareaccounts.FieldID, field.TypeInt)) + if ps := cau.mutation.predicates; len(ps) > 0 { + _spec.Predicate = func(selector *sql.Selector) { + for i := range ps { + ps[i](selector) + } + } + } + if value, ok := cau.mutation.Name(); ok { + _spec.SetField(cloudflareaccounts.FieldName, field.TypeString, value) + } + if value, ok := cau.mutation.AccountID(); ok { + _spec.SetField(cloudflareaccounts.FieldAccountID, field.TypeString, value) + } + if value, ok := cau.mutation.APIToken(); ok { + _spec.SetField(cloudflareaccounts.FieldAPIToken, field.TypeString, value) + } + if value, ok := cau.mutation.Email(); ok { + _spec.SetField(cloudflareaccounts.FieldEmail, field.TypeString, value) + } + if cau.mutation.EmailCleared() { + _spec.ClearField(cloudflareaccounts.FieldEmail, field.TypeString) + } + if value, ok := cau.mutation.Status(); ok { + _spec.SetField(cloudflareaccounts.FieldStatus, field.TypeInt8, value) + } + if value, ok := cau.mutation.AddedStatus(); ok { + _spec.AddField(cloudflareaccounts.FieldStatus, field.TypeInt8, value) + } + if value, ok := cau.mutation.Remark(); ok { + _spec.SetField(cloudflareaccounts.FieldRemark, field.TypeString, value) + } + if cau.mutation.RemarkCleared() { + _spec.ClearField(cloudflareaccounts.FieldRemark, field.TypeString) + } + if value, ok := cau.mutation.UpdatedAt(); ok { + _spec.SetField(cloudflareaccounts.FieldUpdatedAt, field.TypeTime, value) + } + if cau.mutation.CloudflareBucketsCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: cloudflareaccounts.CloudflareBucketsTable, + Columns: []string{cloudflareaccounts.CloudflareBucketsColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := cau.mutation.RemovedCloudflareBucketsIDs(); len(nodes) > 0 && !cau.mutation.CloudflareBucketsCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: cloudflareaccounts.CloudflareBucketsTable, + Columns: []string{cloudflareaccounts.CloudflareBucketsColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := cau.mutation.CloudflareBucketsIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: cloudflareaccounts.CloudflareBucketsTable, + Columns: []string{cloudflareaccounts.CloudflareBucketsColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } + if n, err = sqlgraph.UpdateNodes(ctx, cau.driver, _spec); err != nil { + if _, ok := err.(*sqlgraph.NotFoundError); ok { + err = &NotFoundError{cloudflareaccounts.Label} + } else if sqlgraph.IsConstraintError(err) { + err = &ConstraintError{msg: err.Error(), wrap: err} + } + return 0, err + } + cau.mutation.done = true + return n, nil +} + +// CloudflareAccountsUpdateOne is the builder for updating a single CloudflareAccounts entity. +type CloudflareAccountsUpdateOne struct { + config + fields []string + hooks []Hook + mutation *CloudflareAccountsMutation +} + +// SetName sets the "name" field. +func (cauo *CloudflareAccountsUpdateOne) SetName(s string) *CloudflareAccountsUpdateOne { + cauo.mutation.SetName(s) + return cauo +} + +// SetNillableName sets the "name" field if the given value is not nil. +func (cauo *CloudflareAccountsUpdateOne) SetNillableName(s *string) *CloudflareAccountsUpdateOne { + if s != nil { + cauo.SetName(*s) + } + return cauo +} + +// SetAccountID sets the "account_id" field. +func (cauo *CloudflareAccountsUpdateOne) SetAccountID(s string) *CloudflareAccountsUpdateOne { + cauo.mutation.SetAccountID(s) + return cauo +} + +// SetNillableAccountID sets the "account_id" field if the given value is not nil. +func (cauo *CloudflareAccountsUpdateOne) SetNillableAccountID(s *string) *CloudflareAccountsUpdateOne { + if s != nil { + cauo.SetAccountID(*s) + } + return cauo +} + +// SetAPIToken sets the "api_token" field. +func (cauo *CloudflareAccountsUpdateOne) SetAPIToken(s string) *CloudflareAccountsUpdateOne { + cauo.mutation.SetAPIToken(s) + return cauo +} + +// SetNillableAPIToken sets the "api_token" field if the given value is not nil. +func (cauo *CloudflareAccountsUpdateOne) SetNillableAPIToken(s *string) *CloudflareAccountsUpdateOne { + if s != nil { + cauo.SetAPIToken(*s) + } + return cauo +} + +// SetEmail sets the "email" field. +func (cauo *CloudflareAccountsUpdateOne) SetEmail(s string) *CloudflareAccountsUpdateOne { + cauo.mutation.SetEmail(s) + return cauo +} + +// SetNillableEmail sets the "email" field if the given value is not nil. +func (cauo *CloudflareAccountsUpdateOne) SetNillableEmail(s *string) *CloudflareAccountsUpdateOne { + if s != nil { + cauo.SetEmail(*s) + } + return cauo +} + +// ClearEmail clears the value of the "email" field. +func (cauo *CloudflareAccountsUpdateOne) ClearEmail() *CloudflareAccountsUpdateOne { + cauo.mutation.ClearEmail() + return cauo +} + +// SetStatus sets the "status" field. +func (cauo *CloudflareAccountsUpdateOne) SetStatus(i int8) *CloudflareAccountsUpdateOne { + cauo.mutation.ResetStatus() + cauo.mutation.SetStatus(i) + return cauo +} + +// SetNillableStatus sets the "status" field if the given value is not nil. +func (cauo *CloudflareAccountsUpdateOne) SetNillableStatus(i *int8) *CloudflareAccountsUpdateOne { + if i != nil { + cauo.SetStatus(*i) + } + return cauo +} + +// AddStatus adds i to the "status" field. +func (cauo *CloudflareAccountsUpdateOne) AddStatus(i int8) *CloudflareAccountsUpdateOne { + cauo.mutation.AddStatus(i) + return cauo +} + +// SetRemark sets the "remark" field. +func (cauo *CloudflareAccountsUpdateOne) SetRemark(s string) *CloudflareAccountsUpdateOne { + cauo.mutation.SetRemark(s) + return cauo +} + +// SetNillableRemark sets the "remark" field if the given value is not nil. +func (cauo *CloudflareAccountsUpdateOne) SetNillableRemark(s *string) *CloudflareAccountsUpdateOne { + if s != nil { + cauo.SetRemark(*s) + } + return cauo +} + +// ClearRemark clears the value of the "remark" field. +func (cauo *CloudflareAccountsUpdateOne) ClearRemark() *CloudflareAccountsUpdateOne { + cauo.mutation.ClearRemark() + return cauo +} + +// SetUpdatedAt sets the "updated_at" field. +func (cauo *CloudflareAccountsUpdateOne) SetUpdatedAt(t time.Time) *CloudflareAccountsUpdateOne { + cauo.mutation.SetUpdatedAt(t) + return cauo +} + +// AddCloudflareBucketIDs adds the "cloudflare_buckets" edge to the CloudflareR2 entity by IDs. +func (cauo *CloudflareAccountsUpdateOne) AddCloudflareBucketIDs(ids ...int) *CloudflareAccountsUpdateOne { + cauo.mutation.AddCloudflareBucketIDs(ids...) + return cauo +} + +// AddCloudflareBuckets adds the "cloudflare_buckets" edges to the CloudflareR2 entity. +func (cauo *CloudflareAccountsUpdateOne) AddCloudflareBuckets(c ...*CloudflareR2) *CloudflareAccountsUpdateOne { + ids := make([]int, len(c)) + for i := range c { + ids[i] = c[i].ID + } + return cauo.AddCloudflareBucketIDs(ids...) +} + +// Mutation returns the CloudflareAccountsMutation object of the builder. +func (cauo *CloudflareAccountsUpdateOne) Mutation() *CloudflareAccountsMutation { + return cauo.mutation +} + +// ClearCloudflareBuckets clears all "cloudflare_buckets" edges to the CloudflareR2 entity. +func (cauo *CloudflareAccountsUpdateOne) ClearCloudflareBuckets() *CloudflareAccountsUpdateOne { + cauo.mutation.ClearCloudflareBuckets() + return cauo +} + +// RemoveCloudflareBucketIDs removes the "cloudflare_buckets" edge to CloudflareR2 entities by IDs. +func (cauo *CloudflareAccountsUpdateOne) RemoveCloudflareBucketIDs(ids ...int) *CloudflareAccountsUpdateOne { + cauo.mutation.RemoveCloudflareBucketIDs(ids...) + return cauo +} + +// RemoveCloudflareBuckets removes "cloudflare_buckets" edges to CloudflareR2 entities. +func (cauo *CloudflareAccountsUpdateOne) RemoveCloudflareBuckets(c ...*CloudflareR2) *CloudflareAccountsUpdateOne { + ids := make([]int, len(c)) + for i := range c { + ids[i] = c[i].ID + } + return cauo.RemoveCloudflareBucketIDs(ids...) +} + +// Where appends a list predicates to the CloudflareAccountsUpdate builder. +func (cauo *CloudflareAccountsUpdateOne) Where(ps ...predicate.CloudflareAccounts) *CloudflareAccountsUpdateOne { + cauo.mutation.Where(ps...) + return cauo +} + +// Select allows selecting one or more fields (columns) of the returned entity. +// The default is selecting all fields defined in the entity schema. +func (cauo *CloudflareAccountsUpdateOne) Select(field string, fields ...string) *CloudflareAccountsUpdateOne { + cauo.fields = append([]string{field}, fields...) + return cauo +} + +// Save executes the query and returns the updated CloudflareAccounts entity. +func (cauo *CloudflareAccountsUpdateOne) Save(ctx context.Context) (*CloudflareAccounts, error) { + cauo.defaults() + return withHooks(ctx, cauo.sqlSave, cauo.mutation, cauo.hooks) +} + +// SaveX is like Save, but panics if an error occurs. +func (cauo *CloudflareAccountsUpdateOne) SaveX(ctx context.Context) *CloudflareAccounts { + node, err := cauo.Save(ctx) + if err != nil { + panic(err) + } + return node +} + +// Exec executes the query on the entity. +func (cauo *CloudflareAccountsUpdateOne) Exec(ctx context.Context) error { + _, err := cauo.Save(ctx) + return err +} + +// ExecX is like Exec, but panics if an error occurs. +func (cauo *CloudflareAccountsUpdateOne) ExecX(ctx context.Context) { + if err := cauo.Exec(ctx); err != nil { + panic(err) + } +} + +// defaults sets the default values of the builder before save. +func (cauo *CloudflareAccountsUpdateOne) defaults() { + if _, ok := cauo.mutation.UpdatedAt(); !ok { + v := cloudflareaccounts.UpdateDefaultUpdatedAt() + cauo.mutation.SetUpdatedAt(v) + } +} + +// check runs all checks and user-defined validators on the builder. +func (cauo *CloudflareAccountsUpdateOne) check() error { + if v, ok := cauo.mutation.Name(); ok { + if err := cloudflareaccounts.NameValidator(v); err != nil { + return &ValidationError{Name: "name", err: fmt.Errorf(`ent: validator failed for field "CloudflareAccounts.name": %w`, err)} + } + } + if v, ok := cauo.mutation.AccountID(); ok { + if err := cloudflareaccounts.AccountIDValidator(v); err != nil { + return &ValidationError{Name: "account_id", err: fmt.Errorf(`ent: validator failed for field "CloudflareAccounts.account_id": %w`, err)} + } + } + return nil +} + +func (cauo *CloudflareAccountsUpdateOne) sqlSave(ctx context.Context) (_node *CloudflareAccounts, err error) { + if err := cauo.check(); err != nil { + return _node, err + } + _spec := sqlgraph.NewUpdateSpec(cloudflareaccounts.Table, cloudflareaccounts.Columns, sqlgraph.NewFieldSpec(cloudflareaccounts.FieldID, field.TypeInt)) + id, ok := cauo.mutation.ID() + if !ok { + return nil, &ValidationError{Name: "id", err: errors.New(`ent: missing "CloudflareAccounts.id" for update`)} + } + _spec.Node.ID.Value = id + if fields := cauo.fields; len(fields) > 0 { + _spec.Node.Columns = make([]string, 0, len(fields)) + _spec.Node.Columns = append(_spec.Node.Columns, cloudflareaccounts.FieldID) + for _, f := range fields { + if !cloudflareaccounts.ValidColumn(f) { + return nil, &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)} + } + if f != cloudflareaccounts.FieldID { + _spec.Node.Columns = append(_spec.Node.Columns, f) + } + } + } + if ps := cauo.mutation.predicates; len(ps) > 0 { + _spec.Predicate = func(selector *sql.Selector) { + for i := range ps { + ps[i](selector) + } + } + } + if value, ok := cauo.mutation.Name(); ok { + _spec.SetField(cloudflareaccounts.FieldName, field.TypeString, value) + } + if value, ok := cauo.mutation.AccountID(); ok { + _spec.SetField(cloudflareaccounts.FieldAccountID, field.TypeString, value) + } + if value, ok := cauo.mutation.APIToken(); ok { + _spec.SetField(cloudflareaccounts.FieldAPIToken, field.TypeString, value) + } + if value, ok := cauo.mutation.Email(); ok { + _spec.SetField(cloudflareaccounts.FieldEmail, field.TypeString, value) + } + if cauo.mutation.EmailCleared() { + _spec.ClearField(cloudflareaccounts.FieldEmail, field.TypeString) + } + if value, ok := cauo.mutation.Status(); ok { + _spec.SetField(cloudflareaccounts.FieldStatus, field.TypeInt8, value) + } + if value, ok := cauo.mutation.AddedStatus(); ok { + _spec.AddField(cloudflareaccounts.FieldStatus, field.TypeInt8, value) + } + if value, ok := cauo.mutation.Remark(); ok { + _spec.SetField(cloudflareaccounts.FieldRemark, field.TypeString, value) + } + if cauo.mutation.RemarkCleared() { + _spec.ClearField(cloudflareaccounts.FieldRemark, field.TypeString) + } + if value, ok := cauo.mutation.UpdatedAt(); ok { + _spec.SetField(cloudflareaccounts.FieldUpdatedAt, field.TypeTime, value) + } + if cauo.mutation.CloudflareBucketsCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: cloudflareaccounts.CloudflareBucketsTable, + Columns: []string{cloudflareaccounts.CloudflareBucketsColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := cauo.mutation.RemovedCloudflareBucketsIDs(); len(nodes) > 0 && !cauo.mutation.CloudflareBucketsCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: cloudflareaccounts.CloudflareBucketsTable, + Columns: []string{cloudflareaccounts.CloudflareBucketsColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := cauo.mutation.CloudflareBucketsIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.O2M, + Inverse: false, + Table: cloudflareaccounts.CloudflareBucketsTable, + Columns: []string{cloudflareaccounts.CloudflareBucketsColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } + _node = &CloudflareAccounts{config: cauo.config} + _spec.Assign = _node.assignValues + _spec.ScanValues = _node.scanValues + if err = sqlgraph.UpdateNode(ctx, cauo.driver, _spec); err != nil { + if _, ok := err.(*sqlgraph.NotFoundError); ok { + err = &NotFoundError{cloudflareaccounts.Label} + } else if sqlgraph.IsConstraintError(err) { + err = &ConstraintError{msg: err.Error(), wrap: err} + } + return nil, err + } + cauo.mutation.done = true + return _node, nil +} diff --git a/internal/ent/cloudflarer2.go b/internal/ent/cloudflarer2.go new file mode 100644 index 0000000..682a94b --- /dev/null +++ b/internal/ent/cloudflarer2.go @@ -0,0 +1,255 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "fmt" + "strings" + "time" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + + "entgo.io/ent" + "entgo.io/ent/dialect/sql" +) + +// CloudflareR2 is the model entity for the CloudflareR2 schema. +type CloudflareR2 struct { + config `json:"-"` + // ID of the ent. + ID int `json:"id,omitempty"` + // 业务归属标识 + OwnerID string `json:"owner_id,omitempty"` + // 桶名称(唯一) + Name string `json:"name,omitempty"` + // 桶区域,如 apac、eea、us + Location string `json:"location,omitempty"` + // 存储类型,如 standard、infrequent-access + StorageClass string `json:"storage_class,omitempty"` + // 状态:1=启用,0=禁用 + Status int8 `json:"status,omitempty"` + // 对象数据体积(payloadSize),单位字节 + PayloadSize int64 `json:"payload_size,omitempty"` + // 对象元数据大小(metadataSize),单位字节 + MetadataSize int64 `json:"metadata_size,omitempty"` + // 存储桶内对象总数 + ObjectCount int `json:"object_count,omitempty"` + // 备注 + Remark string `json:"remark,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"` + // Edges holds the relations/edges for other nodes in the graph. + // The values are being populated by the CloudflareR2Query when eager-loading is set. + Edges CloudflareR2Edges `json:"edges"` + cloudflare_accounts_cloudflare_buckets *int + selectValues sql.SelectValues +} + +// CloudflareR2Edges holds the relations/edges for other nodes in the graph. +type CloudflareR2Edges struct { + // 所属 Cloudflare 账户 + CloudflareAccount *CloudflareAccounts `json:"cloudflare_account,omitempty"` + // loadedTypes holds the information for reporting if a + // type was loaded (or requested) in eager-loading or not. + loadedTypes [1]bool +} + +// CloudflareAccountOrErr returns the CloudflareAccount value or an error if the edge +// was not loaded in eager-loading, or loaded but was not found. +func (e CloudflareR2Edges) CloudflareAccountOrErr() (*CloudflareAccounts, error) { + if e.CloudflareAccount != nil { + return e.CloudflareAccount, nil + } else if e.loadedTypes[0] { + return nil, &NotFoundError{label: cloudflareaccounts.Label} + } + return nil, &NotLoadedError{edge: "cloudflare_account"} +} + +// scanValues returns the types for scanning values from sql.Rows. +func (*CloudflareR2) scanValues(columns []string) ([]any, error) { + values := make([]any, len(columns)) + for i := range columns { + switch columns[i] { + case cloudflarer2.FieldID, cloudflarer2.FieldStatus, cloudflarer2.FieldPayloadSize, cloudflarer2.FieldMetadataSize, cloudflarer2.FieldObjectCount: + values[i] = new(sql.NullInt64) + case cloudflarer2.FieldOwnerID, cloudflarer2.FieldName, cloudflarer2.FieldLocation, cloudflarer2.FieldStorageClass, cloudflarer2.FieldRemark: + values[i] = new(sql.NullString) + case cloudflarer2.FieldCreatedAt, cloudflarer2.FieldUpdatedAt: + values[i] = new(sql.NullTime) + case cloudflarer2.ForeignKeys[0]: // cloudflare_accounts_cloudflare_buckets + values[i] = new(sql.NullInt64) + default: + values[i] = new(sql.UnknownType) + } + } + return values, nil +} + +// assignValues assigns the values that were returned from sql.Rows (after scanning) +// to the CloudflareR2 fields. +func (c *CloudflareR2) 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 cloudflarer2.FieldID: + value, ok := values[i].(*sql.NullInt64) + if !ok { + return fmt.Errorf("unexpected type %T for field id", value) + } + c.ID = int(value.Int64) + case cloudflarer2.FieldOwnerID: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field owner_id", values[i]) + } else if value.Valid { + c.OwnerID = value.String + } + case cloudflarer2.FieldName: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field name", values[i]) + } else if value.Valid { + c.Name = value.String + } + case cloudflarer2.FieldLocation: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field location", values[i]) + } else if value.Valid { + c.Location = value.String + } + case cloudflarer2.FieldStorageClass: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field storage_class", values[i]) + } else if value.Valid { + c.StorageClass = value.String + } + case cloudflarer2.FieldStatus: + if value, ok := values[i].(*sql.NullInt64); !ok { + return fmt.Errorf("unexpected type %T for field status", values[i]) + } else if value.Valid { + c.Status = int8(value.Int64) + } + case cloudflarer2.FieldPayloadSize: + if value, ok := values[i].(*sql.NullInt64); !ok { + return fmt.Errorf("unexpected type %T for field payload_size", values[i]) + } else if value.Valid { + c.PayloadSize = value.Int64 + } + case cloudflarer2.FieldMetadataSize: + if value, ok := values[i].(*sql.NullInt64); !ok { + return fmt.Errorf("unexpected type %T for field metadata_size", values[i]) + } else if value.Valid { + c.MetadataSize = value.Int64 + } + case cloudflarer2.FieldObjectCount: + if value, ok := values[i].(*sql.NullInt64); !ok { + return fmt.Errorf("unexpected type %T for field object_count", values[i]) + } else if value.Valid { + c.ObjectCount = int(value.Int64) + } + case cloudflarer2.FieldRemark: + if value, ok := values[i].(*sql.NullString); !ok { + return fmt.Errorf("unexpected type %T for field remark", values[i]) + } else if value.Valid { + c.Remark = value.String + } + case cloudflarer2.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 { + c.CreatedAt = value.Time + } + case cloudflarer2.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 { + c.UpdatedAt = value.Time + } + case cloudflarer2.ForeignKeys[0]: + if value, ok := values[i].(*sql.NullInt64); !ok { + return fmt.Errorf("unexpected type %T for edge-field cloudflare_accounts_cloudflare_buckets", value) + } else if value.Valid { + c.cloudflare_accounts_cloudflare_buckets = new(int) + *c.cloudflare_accounts_cloudflare_buckets = int(value.Int64) + } + default: + c.selectValues.Set(columns[i], values[i]) + } + } + return nil +} + +// Value returns the ent.Value that was dynamically selected and assigned to the CloudflareR2. +// This includes values selected through modifiers, order, etc. +func (c *CloudflareR2) Value(name string) (ent.Value, error) { + return c.selectValues.Get(name) +} + +// QueryCloudflareAccount queries the "cloudflare_account" edge of the CloudflareR2 entity. +func (c *CloudflareR2) QueryCloudflareAccount() *CloudflareAccountsQuery { + return NewCloudflareR2Client(c.config).QueryCloudflareAccount(c) +} + +// Update returns a builder for updating this CloudflareR2. +// Note that you need to call CloudflareR2.Unwrap() before calling this method if this CloudflareR2 +// was returned from a transaction, and the transaction was committed or rolled back. +func (c *CloudflareR2) Update() *CloudflareR2UpdateOne { + return NewCloudflareR2Client(c.config).UpdateOne(c) +} + +// Unwrap unwraps the CloudflareR2 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 (c *CloudflareR2) Unwrap() *CloudflareR2 { + _tx, ok := c.config.driver.(*txDriver) + if !ok { + panic("ent: CloudflareR2 is not a transactional entity") + } + c.config.driver = _tx.drv + return c +} + +// String implements the fmt.Stringer. +func (c *CloudflareR2) String() string { + var builder strings.Builder + builder.WriteString("CloudflareR2(") + builder.WriteString(fmt.Sprintf("id=%v, ", c.ID)) + builder.WriteString("owner_id=") + builder.WriteString(c.OwnerID) + builder.WriteString(", ") + builder.WriteString("name=") + builder.WriteString(c.Name) + builder.WriteString(", ") + builder.WriteString("location=") + builder.WriteString(c.Location) + builder.WriteString(", ") + builder.WriteString("storage_class=") + builder.WriteString(c.StorageClass) + builder.WriteString(", ") + builder.WriteString("status=") + builder.WriteString(fmt.Sprintf("%v", c.Status)) + builder.WriteString(", ") + builder.WriteString("payload_size=") + builder.WriteString(fmt.Sprintf("%v", c.PayloadSize)) + builder.WriteString(", ") + builder.WriteString("metadata_size=") + builder.WriteString(fmt.Sprintf("%v", c.MetadataSize)) + builder.WriteString(", ") + builder.WriteString("object_count=") + builder.WriteString(fmt.Sprintf("%v", c.ObjectCount)) + builder.WriteString(", ") + builder.WriteString("remark=") + builder.WriteString(c.Remark) + builder.WriteString(", ") + builder.WriteString("created_at=") + builder.WriteString(c.CreatedAt.Format(time.ANSIC)) + builder.WriteString(", ") + builder.WriteString("updated_at=") + builder.WriteString(c.UpdatedAt.Format(time.ANSIC)) + builder.WriteByte(')') + return builder.String() +} + +// CloudflareR2s is a parsable slice of CloudflareR2. +type CloudflareR2s []*CloudflareR2 diff --git a/internal/ent/cloudflarer2/cloudflarer2.go b/internal/ent/cloudflarer2/cloudflarer2.go new file mode 100644 index 0000000..97090eb --- /dev/null +++ b/internal/ent/cloudflarer2/cloudflarer2.go @@ -0,0 +1,187 @@ +// Code generated by ent, DO NOT EDIT. + +package cloudflarer2 + +import ( + "time" + + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" +) + +const ( + // Label holds the string label denoting the cloudflarer2 type in the database. + Label = "cloudflare_r2" + // FieldID holds the string denoting the id field in the database. + FieldID = "id" + // FieldOwnerID holds the string denoting the owner_id field in the database. + FieldOwnerID = "owner_id" + // FieldName holds the string denoting the name field in the database. + FieldName = "name" + // FieldLocation holds the string denoting the location field in the database. + FieldLocation = "location" + // FieldStorageClass holds the string denoting the storage_class field in the database. + FieldStorageClass = "storage_class" + // FieldStatus holds the string denoting the status field in the database. + FieldStatus = "status" + // FieldPayloadSize holds the string denoting the payload_size field in the database. + FieldPayloadSize = "payload_size" + // FieldMetadataSize holds the string denoting the metadata_size field in the database. + FieldMetadataSize = "metadata_size" + // FieldObjectCount holds the string denoting the object_count field in the database. + FieldObjectCount = "object_count" + // FieldRemark holds the string denoting the remark field in the database. + FieldRemark = "remark" + // 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" + // EdgeCloudflareAccount holds the string denoting the cloudflare_account edge name in mutations. + EdgeCloudflareAccount = "cloudflare_account" + // Table holds the table name of the cloudflarer2 in the database. + Table = "cloudflare_r2s" + // CloudflareAccountTable is the table that holds the cloudflare_account relation/edge. + CloudflareAccountTable = "cloudflare_r2s" + // CloudflareAccountInverseTable is the table name for the CloudflareAccounts entity. + // It exists in this package in order to avoid circular dependency with the "cloudflareaccounts" package. + CloudflareAccountInverseTable = "cloudflare_accounts" + // CloudflareAccountColumn is the table column denoting the cloudflare_account relation/edge. + CloudflareAccountColumn = "cloudflare_accounts_cloudflare_buckets" +) + +// Columns holds all SQL columns for cloudflarer2 fields. +var Columns = []string{ + FieldID, + FieldOwnerID, + FieldName, + FieldLocation, + FieldStorageClass, + FieldStatus, + FieldPayloadSize, + FieldMetadataSize, + FieldObjectCount, + FieldRemark, + FieldCreatedAt, + FieldUpdatedAt, +} + +// ForeignKeys holds the SQL foreign-keys that are owned by the "cloudflare_r2s" +// table and are not defined as standalone fields in the schema. +var ForeignKeys = []string{ + "cloudflare_accounts_cloudflare_buckets", +} + +// 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 + } + } + for i := range ForeignKeys { + if column == ForeignKeys[i] { + return true + } + } + return false +} + +var ( + // NameValidator is a validator for the "name" field. It is called by the builders before save. + NameValidator func(string) error + // LocationValidator is a validator for the "location" field. It is called by the builders before save. + LocationValidator func(string) error + // StorageClassValidator is a validator for the "storage_class" field. It is called by the builders before save. + StorageClassValidator func(string) error + // DefaultStatus holds the default value on creation for the "status" field. + DefaultStatus int8 + // DefaultPayloadSize holds the default value on creation for the "payload_size" field. + DefaultPayloadSize int64 + // DefaultMetadataSize holds the default value on creation for the "metadata_size" field. + DefaultMetadataSize int64 + // DefaultObjectCount holds the default value on creation for the "object_count" field. + DefaultObjectCount int + // 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 +) + +// OrderOption defines the ordering options for the CloudflareR2 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() +} + +// ByOwnerID orders the results by the owner_id field. +func ByOwnerID(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldOwnerID, opts...).ToFunc() +} + +// ByName orders the results by the name field. +func ByName(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldName, opts...).ToFunc() +} + +// ByLocation orders the results by the location field. +func ByLocation(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldLocation, opts...).ToFunc() +} + +// ByStorageClass orders the results by the storage_class field. +func ByStorageClass(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldStorageClass, opts...).ToFunc() +} + +// ByStatus orders the results by the status field. +func ByStatus(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldStatus, opts...).ToFunc() +} + +// ByPayloadSize orders the results by the payload_size field. +func ByPayloadSize(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldPayloadSize, opts...).ToFunc() +} + +// ByMetadataSize orders the results by the metadata_size field. +func ByMetadataSize(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldMetadataSize, opts...).ToFunc() +} + +// ByObjectCount orders the results by the object_count field. +func ByObjectCount(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldObjectCount, opts...).ToFunc() +} + +// ByRemark orders the results by the remark field. +func ByRemark(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldRemark, 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() +} + +// ByCloudflareAccountField orders the results by cloudflare_account field. +func ByCloudflareAccountField(field string, opts ...sql.OrderTermOption) OrderOption { + return func(s *sql.Selector) { + sqlgraph.OrderByNeighborTerms(s, newCloudflareAccountStep(), sql.OrderByField(field, opts...)) + } +} +func newCloudflareAccountStep() *sqlgraph.Step { + return sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.To(CloudflareAccountInverseTable, FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, CloudflareAccountTable, CloudflareAccountColumn), + ) +} diff --git a/internal/ent/cloudflarer2/where.go b/internal/ent/cloudflarer2/where.go new file mode 100644 index 0000000..821e8d9 --- /dev/null +++ b/internal/ent/cloudflarer2/where.go @@ -0,0 +1,724 @@ +// Code generated by ent, DO NOT EDIT. + +package cloudflarer2 + +import ( + "time" + "unR2/internal/ent/predicate" + + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" +) + +// ID filters vertices based on their ID field. +func ID(id int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldID, id)) +} + +// IDEQ applies the EQ predicate on the ID field. +func IDEQ(id int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldID, id)) +} + +// IDNEQ applies the NEQ predicate on the ID field. +func IDNEQ(id int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldID, id)) +} + +// IDIn applies the In predicate on the ID field. +func IDIn(ids ...int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldID, ids...)) +} + +// IDNotIn applies the NotIn predicate on the ID field. +func IDNotIn(ids ...int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldID, ids...)) +} + +// IDGT applies the GT predicate on the ID field. +func IDGT(id int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldID, id)) +} + +// IDGTE applies the GTE predicate on the ID field. +func IDGTE(id int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldID, id)) +} + +// IDLT applies the LT predicate on the ID field. +func IDLT(id int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldID, id)) +} + +// IDLTE applies the LTE predicate on the ID field. +func IDLTE(id int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldID, id)) +} + +// OwnerID applies equality check predicate on the "owner_id" field. It's identical to OwnerIDEQ. +func OwnerID(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldOwnerID, v)) +} + +// Name applies equality check predicate on the "name" field. It's identical to NameEQ. +func Name(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldName, v)) +} + +// Location applies equality check predicate on the "location" field. It's identical to LocationEQ. +func Location(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldLocation, v)) +} + +// StorageClass applies equality check predicate on the "storage_class" field. It's identical to StorageClassEQ. +func StorageClass(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldStorageClass, v)) +} + +// Status applies equality check predicate on the "status" field. It's identical to StatusEQ. +func Status(v int8) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldStatus, v)) +} + +// PayloadSize applies equality check predicate on the "payload_size" field. It's identical to PayloadSizeEQ. +func PayloadSize(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldPayloadSize, v)) +} + +// MetadataSize applies equality check predicate on the "metadata_size" field. It's identical to MetadataSizeEQ. +func MetadataSize(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldMetadataSize, v)) +} + +// ObjectCount applies equality check predicate on the "object_count" field. It's identical to ObjectCountEQ. +func ObjectCount(v int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldObjectCount, v)) +} + +// Remark applies equality check predicate on the "remark" field. It's identical to RemarkEQ. +func Remark(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldRemark, v)) +} + +// CreatedAt applies equality check predicate on the "created_at" field. It's identical to CreatedAtEQ. +func CreatedAt(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(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.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldUpdatedAt, v)) +} + +// OwnerIDEQ applies the EQ predicate on the "owner_id" field. +func OwnerIDEQ(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldOwnerID, v)) +} + +// OwnerIDNEQ applies the NEQ predicate on the "owner_id" field. +func OwnerIDNEQ(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldOwnerID, v)) +} + +// OwnerIDIn applies the In predicate on the "owner_id" field. +func OwnerIDIn(vs ...string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldOwnerID, vs...)) +} + +// OwnerIDNotIn applies the NotIn predicate on the "owner_id" field. +func OwnerIDNotIn(vs ...string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldOwnerID, vs...)) +} + +// OwnerIDGT applies the GT predicate on the "owner_id" field. +func OwnerIDGT(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldOwnerID, v)) +} + +// OwnerIDGTE applies the GTE predicate on the "owner_id" field. +func OwnerIDGTE(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldOwnerID, v)) +} + +// OwnerIDLT applies the LT predicate on the "owner_id" field. +func OwnerIDLT(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldOwnerID, v)) +} + +// OwnerIDLTE applies the LTE predicate on the "owner_id" field. +func OwnerIDLTE(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldOwnerID, v)) +} + +// OwnerIDContains applies the Contains predicate on the "owner_id" field. +func OwnerIDContains(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldContains(FieldOwnerID, v)) +} + +// OwnerIDHasPrefix applies the HasPrefix predicate on the "owner_id" field. +func OwnerIDHasPrefix(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldHasPrefix(FieldOwnerID, v)) +} + +// OwnerIDHasSuffix applies the HasSuffix predicate on the "owner_id" field. +func OwnerIDHasSuffix(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldHasSuffix(FieldOwnerID, v)) +} + +// OwnerIDEqualFold applies the EqualFold predicate on the "owner_id" field. +func OwnerIDEqualFold(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEqualFold(FieldOwnerID, v)) +} + +// OwnerIDContainsFold applies the ContainsFold predicate on the "owner_id" field. +func OwnerIDContainsFold(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldContainsFold(FieldOwnerID, v)) +} + +// NameEQ applies the EQ predicate on the "name" field. +func NameEQ(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldName, v)) +} + +// NameNEQ applies the NEQ predicate on the "name" field. +func NameNEQ(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldName, v)) +} + +// NameIn applies the In predicate on the "name" field. +func NameIn(vs ...string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldName, vs...)) +} + +// NameNotIn applies the NotIn predicate on the "name" field. +func NameNotIn(vs ...string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldName, vs...)) +} + +// NameGT applies the GT predicate on the "name" field. +func NameGT(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldName, v)) +} + +// NameGTE applies the GTE predicate on the "name" field. +func NameGTE(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldName, v)) +} + +// NameLT applies the LT predicate on the "name" field. +func NameLT(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldName, v)) +} + +// NameLTE applies the LTE predicate on the "name" field. +func NameLTE(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldName, v)) +} + +// NameContains applies the Contains predicate on the "name" field. +func NameContains(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldContains(FieldName, v)) +} + +// NameHasPrefix applies the HasPrefix predicate on the "name" field. +func NameHasPrefix(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldHasPrefix(FieldName, v)) +} + +// NameHasSuffix applies the HasSuffix predicate on the "name" field. +func NameHasSuffix(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldHasSuffix(FieldName, v)) +} + +// NameEqualFold applies the EqualFold predicate on the "name" field. +func NameEqualFold(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEqualFold(FieldName, v)) +} + +// NameContainsFold applies the ContainsFold predicate on the "name" field. +func NameContainsFold(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldContainsFold(FieldName, v)) +} + +// LocationEQ applies the EQ predicate on the "location" field. +func LocationEQ(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldLocation, v)) +} + +// LocationNEQ applies the NEQ predicate on the "location" field. +func LocationNEQ(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldLocation, v)) +} + +// LocationIn applies the In predicate on the "location" field. +func LocationIn(vs ...string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldLocation, vs...)) +} + +// LocationNotIn applies the NotIn predicate on the "location" field. +func LocationNotIn(vs ...string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldLocation, vs...)) +} + +// LocationGT applies the GT predicate on the "location" field. +func LocationGT(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldLocation, v)) +} + +// LocationGTE applies the GTE predicate on the "location" field. +func LocationGTE(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldLocation, v)) +} + +// LocationLT applies the LT predicate on the "location" field. +func LocationLT(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldLocation, v)) +} + +// LocationLTE applies the LTE predicate on the "location" field. +func LocationLTE(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldLocation, v)) +} + +// LocationContains applies the Contains predicate on the "location" field. +func LocationContains(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldContains(FieldLocation, v)) +} + +// LocationHasPrefix applies the HasPrefix predicate on the "location" field. +func LocationHasPrefix(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldHasPrefix(FieldLocation, v)) +} + +// LocationHasSuffix applies the HasSuffix predicate on the "location" field. +func LocationHasSuffix(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldHasSuffix(FieldLocation, v)) +} + +// LocationEqualFold applies the EqualFold predicate on the "location" field. +func LocationEqualFold(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEqualFold(FieldLocation, v)) +} + +// LocationContainsFold applies the ContainsFold predicate on the "location" field. +func LocationContainsFold(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldContainsFold(FieldLocation, v)) +} + +// StorageClassEQ applies the EQ predicate on the "storage_class" field. +func StorageClassEQ(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldStorageClass, v)) +} + +// StorageClassNEQ applies the NEQ predicate on the "storage_class" field. +func StorageClassNEQ(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldStorageClass, v)) +} + +// StorageClassIn applies the In predicate on the "storage_class" field. +func StorageClassIn(vs ...string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldStorageClass, vs...)) +} + +// StorageClassNotIn applies the NotIn predicate on the "storage_class" field. +func StorageClassNotIn(vs ...string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldStorageClass, vs...)) +} + +// StorageClassGT applies the GT predicate on the "storage_class" field. +func StorageClassGT(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldStorageClass, v)) +} + +// StorageClassGTE applies the GTE predicate on the "storage_class" field. +func StorageClassGTE(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldStorageClass, v)) +} + +// StorageClassLT applies the LT predicate on the "storage_class" field. +func StorageClassLT(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldStorageClass, v)) +} + +// StorageClassLTE applies the LTE predicate on the "storage_class" field. +func StorageClassLTE(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldStorageClass, v)) +} + +// StorageClassContains applies the Contains predicate on the "storage_class" field. +func StorageClassContains(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldContains(FieldStorageClass, v)) +} + +// StorageClassHasPrefix applies the HasPrefix predicate on the "storage_class" field. +func StorageClassHasPrefix(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldHasPrefix(FieldStorageClass, v)) +} + +// StorageClassHasSuffix applies the HasSuffix predicate on the "storage_class" field. +func StorageClassHasSuffix(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldHasSuffix(FieldStorageClass, v)) +} + +// StorageClassEqualFold applies the EqualFold predicate on the "storage_class" field. +func StorageClassEqualFold(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEqualFold(FieldStorageClass, v)) +} + +// StorageClassContainsFold applies the ContainsFold predicate on the "storage_class" field. +func StorageClassContainsFold(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldContainsFold(FieldStorageClass, v)) +} + +// StatusEQ applies the EQ predicate on the "status" field. +func StatusEQ(v int8) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldStatus, v)) +} + +// StatusNEQ applies the NEQ predicate on the "status" field. +func StatusNEQ(v int8) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldStatus, v)) +} + +// StatusIn applies the In predicate on the "status" field. +func StatusIn(vs ...int8) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldStatus, vs...)) +} + +// StatusNotIn applies the NotIn predicate on the "status" field. +func StatusNotIn(vs ...int8) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldStatus, vs...)) +} + +// StatusGT applies the GT predicate on the "status" field. +func StatusGT(v int8) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldStatus, v)) +} + +// StatusGTE applies the GTE predicate on the "status" field. +func StatusGTE(v int8) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldStatus, v)) +} + +// StatusLT applies the LT predicate on the "status" field. +func StatusLT(v int8) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldStatus, v)) +} + +// StatusLTE applies the LTE predicate on the "status" field. +func StatusLTE(v int8) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldStatus, v)) +} + +// PayloadSizeEQ applies the EQ predicate on the "payload_size" field. +func PayloadSizeEQ(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldPayloadSize, v)) +} + +// PayloadSizeNEQ applies the NEQ predicate on the "payload_size" field. +func PayloadSizeNEQ(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldPayloadSize, v)) +} + +// PayloadSizeIn applies the In predicate on the "payload_size" field. +func PayloadSizeIn(vs ...int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldPayloadSize, vs...)) +} + +// PayloadSizeNotIn applies the NotIn predicate on the "payload_size" field. +func PayloadSizeNotIn(vs ...int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldPayloadSize, vs...)) +} + +// PayloadSizeGT applies the GT predicate on the "payload_size" field. +func PayloadSizeGT(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldPayloadSize, v)) +} + +// PayloadSizeGTE applies the GTE predicate on the "payload_size" field. +func PayloadSizeGTE(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldPayloadSize, v)) +} + +// PayloadSizeLT applies the LT predicate on the "payload_size" field. +func PayloadSizeLT(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldPayloadSize, v)) +} + +// PayloadSizeLTE applies the LTE predicate on the "payload_size" field. +func PayloadSizeLTE(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldPayloadSize, v)) +} + +// MetadataSizeEQ applies the EQ predicate on the "metadata_size" field. +func MetadataSizeEQ(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldMetadataSize, v)) +} + +// MetadataSizeNEQ applies the NEQ predicate on the "metadata_size" field. +func MetadataSizeNEQ(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldMetadataSize, v)) +} + +// MetadataSizeIn applies the In predicate on the "metadata_size" field. +func MetadataSizeIn(vs ...int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldMetadataSize, vs...)) +} + +// MetadataSizeNotIn applies the NotIn predicate on the "metadata_size" field. +func MetadataSizeNotIn(vs ...int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldMetadataSize, vs...)) +} + +// MetadataSizeGT applies the GT predicate on the "metadata_size" field. +func MetadataSizeGT(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldMetadataSize, v)) +} + +// MetadataSizeGTE applies the GTE predicate on the "metadata_size" field. +func MetadataSizeGTE(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldMetadataSize, v)) +} + +// MetadataSizeLT applies the LT predicate on the "metadata_size" field. +func MetadataSizeLT(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldMetadataSize, v)) +} + +// MetadataSizeLTE applies the LTE predicate on the "metadata_size" field. +func MetadataSizeLTE(v int64) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldMetadataSize, v)) +} + +// ObjectCountEQ applies the EQ predicate on the "object_count" field. +func ObjectCountEQ(v int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldObjectCount, v)) +} + +// ObjectCountNEQ applies the NEQ predicate on the "object_count" field. +func ObjectCountNEQ(v int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldObjectCount, v)) +} + +// ObjectCountIn applies the In predicate on the "object_count" field. +func ObjectCountIn(vs ...int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldObjectCount, vs...)) +} + +// ObjectCountNotIn applies the NotIn predicate on the "object_count" field. +func ObjectCountNotIn(vs ...int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldObjectCount, vs...)) +} + +// ObjectCountGT applies the GT predicate on the "object_count" field. +func ObjectCountGT(v int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldObjectCount, v)) +} + +// ObjectCountGTE applies the GTE predicate on the "object_count" field. +func ObjectCountGTE(v int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldObjectCount, v)) +} + +// ObjectCountLT applies the LT predicate on the "object_count" field. +func ObjectCountLT(v int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldObjectCount, v)) +} + +// ObjectCountLTE applies the LTE predicate on the "object_count" field. +func ObjectCountLTE(v int) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldObjectCount, v)) +} + +// RemarkEQ applies the EQ predicate on the "remark" field. +func RemarkEQ(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldRemark, v)) +} + +// RemarkNEQ applies the NEQ predicate on the "remark" field. +func RemarkNEQ(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldRemark, v)) +} + +// RemarkIn applies the In predicate on the "remark" field. +func RemarkIn(vs ...string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldRemark, vs...)) +} + +// RemarkNotIn applies the NotIn predicate on the "remark" field. +func RemarkNotIn(vs ...string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldRemark, vs...)) +} + +// RemarkGT applies the GT predicate on the "remark" field. +func RemarkGT(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldRemark, v)) +} + +// RemarkGTE applies the GTE predicate on the "remark" field. +func RemarkGTE(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldRemark, v)) +} + +// RemarkLT applies the LT predicate on the "remark" field. +func RemarkLT(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldRemark, v)) +} + +// RemarkLTE applies the LTE predicate on the "remark" field. +func RemarkLTE(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldRemark, v)) +} + +// RemarkContains applies the Contains predicate on the "remark" field. +func RemarkContains(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldContains(FieldRemark, v)) +} + +// RemarkHasPrefix applies the HasPrefix predicate on the "remark" field. +func RemarkHasPrefix(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldHasPrefix(FieldRemark, v)) +} + +// RemarkHasSuffix applies the HasSuffix predicate on the "remark" field. +func RemarkHasSuffix(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldHasSuffix(FieldRemark, v)) +} + +// RemarkIsNil applies the IsNil predicate on the "remark" field. +func RemarkIsNil() predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIsNull(FieldRemark)) +} + +// RemarkNotNil applies the NotNil predicate on the "remark" field. +func RemarkNotNil() predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotNull(FieldRemark)) +} + +// RemarkEqualFold applies the EqualFold predicate on the "remark" field. +func RemarkEqualFold(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEqualFold(FieldRemark, v)) +} + +// RemarkContainsFold applies the ContainsFold predicate on the "remark" field. +func RemarkContainsFold(v string) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldContainsFold(FieldRemark, v)) +} + +// CreatedAtEQ applies the EQ predicate on the "created_at" field. +func CreatedAtEQ(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldCreatedAt, v)) +} + +// CreatedAtNEQ applies the NEQ predicate on the "created_at" field. +func CreatedAtNEQ(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldCreatedAt, v)) +} + +// CreatedAtIn applies the In predicate on the "created_at" field. +func CreatedAtIn(vs ...time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldCreatedAt, vs...)) +} + +// CreatedAtNotIn applies the NotIn predicate on the "created_at" field. +func CreatedAtNotIn(vs ...time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldCreatedAt, vs...)) +} + +// CreatedAtGT applies the GT predicate on the "created_at" field. +func CreatedAtGT(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldCreatedAt, v)) +} + +// CreatedAtGTE applies the GTE predicate on the "created_at" field. +func CreatedAtGTE(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldCreatedAt, v)) +} + +// CreatedAtLT applies the LT predicate on the "created_at" field. +func CreatedAtLT(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldCreatedAt, v)) +} + +// CreatedAtLTE applies the LTE predicate on the "created_at" field. +func CreatedAtLTE(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldCreatedAt, v)) +} + +// UpdatedAtEQ applies the EQ predicate on the "updated_at" field. +func UpdatedAtEQ(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldEQ(FieldUpdatedAt, v)) +} + +// UpdatedAtNEQ applies the NEQ predicate on the "updated_at" field. +func UpdatedAtNEQ(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNEQ(FieldUpdatedAt, v)) +} + +// UpdatedAtIn applies the In predicate on the "updated_at" field. +func UpdatedAtIn(vs ...time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldIn(FieldUpdatedAt, vs...)) +} + +// UpdatedAtNotIn applies the NotIn predicate on the "updated_at" field. +func UpdatedAtNotIn(vs ...time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldNotIn(FieldUpdatedAt, vs...)) +} + +// UpdatedAtGT applies the GT predicate on the "updated_at" field. +func UpdatedAtGT(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGT(FieldUpdatedAt, v)) +} + +// UpdatedAtGTE applies the GTE predicate on the "updated_at" field. +func UpdatedAtGTE(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldGTE(FieldUpdatedAt, v)) +} + +// UpdatedAtLT applies the LT predicate on the "updated_at" field. +func UpdatedAtLT(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLT(FieldUpdatedAt, v)) +} + +// UpdatedAtLTE applies the LTE predicate on the "updated_at" field. +func UpdatedAtLTE(v time.Time) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.FieldLTE(FieldUpdatedAt, v)) +} + +// HasCloudflareAccount applies the HasEdge predicate on the "cloudflare_account" edge. +func HasCloudflareAccount() predicate.CloudflareR2 { + return predicate.CloudflareR2(func(s *sql.Selector) { + step := sqlgraph.NewStep( + sqlgraph.From(Table, FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, CloudflareAccountTable, CloudflareAccountColumn), + ) + sqlgraph.HasNeighbors(s, step) + }) +} + +// HasCloudflareAccountWith applies the HasEdge predicate on the "cloudflare_account" edge with a given conditions (other predicates). +func HasCloudflareAccountWith(preds ...predicate.CloudflareAccounts) predicate.CloudflareR2 { + return predicate.CloudflareR2(func(s *sql.Selector) { + step := newCloudflareAccountStep() + 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.CloudflareR2) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.AndPredicates(predicates...)) +} + +// Or groups predicates with the OR operator between them. +func Or(predicates ...predicate.CloudflareR2) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.OrPredicates(predicates...)) +} + +// Not applies the not operator on the given predicate. +func Not(p predicate.CloudflareR2) predicate.CloudflareR2 { + return predicate.CloudflareR2(sql.NotPredicates(p)) +} diff --git a/internal/ent/cloudflarer2_create.go b/internal/ent/cloudflarer2_create.go new file mode 100644 index 0000000..ec75a1d --- /dev/null +++ b/internal/ent/cloudflarer2_create.go @@ -0,0 +1,444 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "errors" + "fmt" + "time" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + + "entgo.io/ent/dialect/sql/sqlgraph" + "entgo.io/ent/schema/field" +) + +// CloudflareR2Create is the builder for creating a CloudflareR2 entity. +type CloudflareR2Create struct { + config + mutation *CloudflareR2Mutation + hooks []Hook +} + +// SetOwnerID sets the "owner_id" field. +func (cr *CloudflareR2Create) SetOwnerID(s string) *CloudflareR2Create { + cr.mutation.SetOwnerID(s) + return cr +} + +// SetName sets the "name" field. +func (cr *CloudflareR2Create) SetName(s string) *CloudflareR2Create { + cr.mutation.SetName(s) + return cr +} + +// SetLocation sets the "location" field. +func (cr *CloudflareR2Create) SetLocation(s string) *CloudflareR2Create { + cr.mutation.SetLocation(s) + return cr +} + +// SetStorageClass sets the "storage_class" field. +func (cr *CloudflareR2Create) SetStorageClass(s string) *CloudflareR2Create { + cr.mutation.SetStorageClass(s) + return cr +} + +// SetStatus sets the "status" field. +func (cr *CloudflareR2Create) SetStatus(i int8) *CloudflareR2Create { + cr.mutation.SetStatus(i) + return cr +} + +// SetNillableStatus sets the "status" field if the given value is not nil. +func (cr *CloudflareR2Create) SetNillableStatus(i *int8) *CloudflareR2Create { + if i != nil { + cr.SetStatus(*i) + } + return cr +} + +// SetPayloadSize sets the "payload_size" field. +func (cr *CloudflareR2Create) SetPayloadSize(i int64) *CloudflareR2Create { + cr.mutation.SetPayloadSize(i) + return cr +} + +// SetNillablePayloadSize sets the "payload_size" field if the given value is not nil. +func (cr *CloudflareR2Create) SetNillablePayloadSize(i *int64) *CloudflareR2Create { + if i != nil { + cr.SetPayloadSize(*i) + } + return cr +} + +// SetMetadataSize sets the "metadata_size" field. +func (cr *CloudflareR2Create) SetMetadataSize(i int64) *CloudflareR2Create { + cr.mutation.SetMetadataSize(i) + return cr +} + +// SetNillableMetadataSize sets the "metadata_size" field if the given value is not nil. +func (cr *CloudflareR2Create) SetNillableMetadataSize(i *int64) *CloudflareR2Create { + if i != nil { + cr.SetMetadataSize(*i) + } + return cr +} + +// SetObjectCount sets the "object_count" field. +func (cr *CloudflareR2Create) SetObjectCount(i int) *CloudflareR2Create { + cr.mutation.SetObjectCount(i) + return cr +} + +// SetNillableObjectCount sets the "object_count" field if the given value is not nil. +func (cr *CloudflareR2Create) SetNillableObjectCount(i *int) *CloudflareR2Create { + if i != nil { + cr.SetObjectCount(*i) + } + return cr +} + +// SetRemark sets the "remark" field. +func (cr *CloudflareR2Create) SetRemark(s string) *CloudflareR2Create { + cr.mutation.SetRemark(s) + return cr +} + +// SetNillableRemark sets the "remark" field if the given value is not nil. +func (cr *CloudflareR2Create) SetNillableRemark(s *string) *CloudflareR2Create { + if s != nil { + cr.SetRemark(*s) + } + return cr +} + +// SetCreatedAt sets the "created_at" field. +func (cr *CloudflareR2Create) SetCreatedAt(t time.Time) *CloudflareR2Create { + cr.mutation.SetCreatedAt(t) + return cr +} + +// SetNillableCreatedAt sets the "created_at" field if the given value is not nil. +func (cr *CloudflareR2Create) SetNillableCreatedAt(t *time.Time) *CloudflareR2Create { + if t != nil { + cr.SetCreatedAt(*t) + } + return cr +} + +// SetUpdatedAt sets the "updated_at" field. +func (cr *CloudflareR2Create) SetUpdatedAt(t time.Time) *CloudflareR2Create { + cr.mutation.SetUpdatedAt(t) + return cr +} + +// SetNillableUpdatedAt sets the "updated_at" field if the given value is not nil. +func (cr *CloudflareR2Create) SetNillableUpdatedAt(t *time.Time) *CloudflareR2Create { + if t != nil { + cr.SetUpdatedAt(*t) + } + return cr +} + +// SetCloudflareAccountID sets the "cloudflare_account" edge to the CloudflareAccounts entity by ID. +func (cr *CloudflareR2Create) SetCloudflareAccountID(id int) *CloudflareR2Create { + cr.mutation.SetCloudflareAccountID(id) + return cr +} + +// SetCloudflareAccount sets the "cloudflare_account" edge to the CloudflareAccounts entity. +func (cr *CloudflareR2Create) SetCloudflareAccount(c *CloudflareAccounts) *CloudflareR2Create { + return cr.SetCloudflareAccountID(c.ID) +} + +// Mutation returns the CloudflareR2Mutation object of the builder. +func (cr *CloudflareR2Create) Mutation() *CloudflareR2Mutation { + return cr.mutation +} + +// Save creates the CloudflareR2 in the database. +func (cr *CloudflareR2Create) Save(ctx context.Context) (*CloudflareR2, error) { + cr.defaults() + return withHooks(ctx, cr.sqlSave, cr.mutation, cr.hooks) +} + +// SaveX calls Save and panics if Save returns an error. +func (cr *CloudflareR2Create) SaveX(ctx context.Context) *CloudflareR2 { + v, err := cr.Save(ctx) + if err != nil { + panic(err) + } + return v +} + +// Exec executes the query. +func (cr *CloudflareR2Create) Exec(ctx context.Context) error { + _, err := cr.Save(ctx) + return err +} + +// ExecX is like Exec, but panics if an error occurs. +func (cr *CloudflareR2Create) ExecX(ctx context.Context) { + if err := cr.Exec(ctx); err != nil { + panic(err) + } +} + +// defaults sets the default values of the builder before save. +func (cr *CloudflareR2Create) defaults() { + if _, ok := cr.mutation.Status(); !ok { + v := cloudflarer2.DefaultStatus + cr.mutation.SetStatus(v) + } + if _, ok := cr.mutation.PayloadSize(); !ok { + v := cloudflarer2.DefaultPayloadSize + cr.mutation.SetPayloadSize(v) + } + if _, ok := cr.mutation.MetadataSize(); !ok { + v := cloudflarer2.DefaultMetadataSize + cr.mutation.SetMetadataSize(v) + } + if _, ok := cr.mutation.ObjectCount(); !ok { + v := cloudflarer2.DefaultObjectCount + cr.mutation.SetObjectCount(v) + } + if _, ok := cr.mutation.CreatedAt(); !ok { + v := cloudflarer2.DefaultCreatedAt() + cr.mutation.SetCreatedAt(v) + } + if _, ok := cr.mutation.UpdatedAt(); !ok { + v := cloudflarer2.DefaultUpdatedAt() + cr.mutation.SetUpdatedAt(v) + } +} + +// check runs all checks and user-defined validators on the builder. +func (cr *CloudflareR2Create) check() error { + if _, ok := cr.mutation.OwnerID(); !ok { + return &ValidationError{Name: "owner_id", err: errors.New(`ent: missing required field "CloudflareR2.owner_id"`)} + } + if _, ok := cr.mutation.Name(); !ok { + return &ValidationError{Name: "name", err: errors.New(`ent: missing required field "CloudflareR2.name"`)} + } + if v, ok := cr.mutation.Name(); ok { + if err := cloudflarer2.NameValidator(v); err != nil { + return &ValidationError{Name: "name", err: fmt.Errorf(`ent: validator failed for field "CloudflareR2.name": %w`, err)} + } + } + if _, ok := cr.mutation.Location(); !ok { + return &ValidationError{Name: "location", err: errors.New(`ent: missing required field "CloudflareR2.location"`)} + } + if v, ok := cr.mutation.Location(); ok { + if err := cloudflarer2.LocationValidator(v); err != nil { + return &ValidationError{Name: "location", err: fmt.Errorf(`ent: validator failed for field "CloudflareR2.location": %w`, err)} + } + } + if _, ok := cr.mutation.StorageClass(); !ok { + return &ValidationError{Name: "storage_class", err: errors.New(`ent: missing required field "CloudflareR2.storage_class"`)} + } + if v, ok := cr.mutation.StorageClass(); ok { + if err := cloudflarer2.StorageClassValidator(v); err != nil { + return &ValidationError{Name: "storage_class", err: fmt.Errorf(`ent: validator failed for field "CloudflareR2.storage_class": %w`, err)} + } + } + if _, ok := cr.mutation.Status(); !ok { + return &ValidationError{Name: "status", err: errors.New(`ent: missing required field "CloudflareR2.status"`)} + } + if _, ok := cr.mutation.PayloadSize(); !ok { + return &ValidationError{Name: "payload_size", err: errors.New(`ent: missing required field "CloudflareR2.payload_size"`)} + } + if _, ok := cr.mutation.MetadataSize(); !ok { + return &ValidationError{Name: "metadata_size", err: errors.New(`ent: missing required field "CloudflareR2.metadata_size"`)} + } + if _, ok := cr.mutation.ObjectCount(); !ok { + return &ValidationError{Name: "object_count", err: errors.New(`ent: missing required field "CloudflareR2.object_count"`)} + } + if _, ok := cr.mutation.CreatedAt(); !ok { + return &ValidationError{Name: "created_at", err: errors.New(`ent: missing required field "CloudflareR2.created_at"`)} + } + if _, ok := cr.mutation.UpdatedAt(); !ok { + return &ValidationError{Name: "updated_at", err: errors.New(`ent: missing required field "CloudflareR2.updated_at"`)} + } + if len(cr.mutation.CloudflareAccountIDs()) == 0 { + return &ValidationError{Name: "cloudflare_account", err: errors.New(`ent: missing required edge "CloudflareR2.cloudflare_account"`)} + } + return nil +} + +func (cr *CloudflareR2Create) sqlSave(ctx context.Context) (*CloudflareR2, error) { + if err := cr.check(); err != nil { + return nil, err + } + _node, _spec := cr.createSpec() + if err := sqlgraph.CreateNode(ctx, cr.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 = int(id) + cr.mutation.id = &_node.ID + cr.mutation.done = true + return _node, nil +} + +func (cr *CloudflareR2Create) createSpec() (*CloudflareR2, *sqlgraph.CreateSpec) { + var ( + _node = &CloudflareR2{config: cr.config} + _spec = sqlgraph.NewCreateSpec(cloudflarer2.Table, sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt)) + ) + if value, ok := cr.mutation.OwnerID(); ok { + _spec.SetField(cloudflarer2.FieldOwnerID, field.TypeString, value) + _node.OwnerID = value + } + if value, ok := cr.mutation.Name(); ok { + _spec.SetField(cloudflarer2.FieldName, field.TypeString, value) + _node.Name = value + } + if value, ok := cr.mutation.Location(); ok { + _spec.SetField(cloudflarer2.FieldLocation, field.TypeString, value) + _node.Location = value + } + if value, ok := cr.mutation.StorageClass(); ok { + _spec.SetField(cloudflarer2.FieldStorageClass, field.TypeString, value) + _node.StorageClass = value + } + if value, ok := cr.mutation.Status(); ok { + _spec.SetField(cloudflarer2.FieldStatus, field.TypeInt8, value) + _node.Status = value + } + if value, ok := cr.mutation.PayloadSize(); ok { + _spec.SetField(cloudflarer2.FieldPayloadSize, field.TypeInt64, value) + _node.PayloadSize = value + } + if value, ok := cr.mutation.MetadataSize(); ok { + _spec.SetField(cloudflarer2.FieldMetadataSize, field.TypeInt64, value) + _node.MetadataSize = value + } + if value, ok := cr.mutation.ObjectCount(); ok { + _spec.SetField(cloudflarer2.FieldObjectCount, field.TypeInt, value) + _node.ObjectCount = value + } + if value, ok := cr.mutation.Remark(); ok { + _spec.SetField(cloudflarer2.FieldRemark, field.TypeString, value) + _node.Remark = value + } + if value, ok := cr.mutation.CreatedAt(); ok { + _spec.SetField(cloudflarer2.FieldCreatedAt, field.TypeTime, value) + _node.CreatedAt = value + } + if value, ok := cr.mutation.UpdatedAt(); ok { + _spec.SetField(cloudflarer2.FieldUpdatedAt, field.TypeTime, value) + _node.UpdatedAt = value + } + if nodes := cr.mutation.CloudflareAccountIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: cloudflarer2.CloudflareAccountTable, + Columns: []string{cloudflarer2.CloudflareAccountColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflareaccounts.FieldID, field.TypeInt), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _node.cloudflare_accounts_cloudflare_buckets = &nodes[0] + _spec.Edges = append(_spec.Edges, edge) + } + return _node, _spec +} + +// CloudflareR2CreateBulk is the builder for creating many CloudflareR2 entities in bulk. +type CloudflareR2CreateBulk struct { + config + err error + builders []*CloudflareR2Create +} + +// Save creates the CloudflareR2 entities in the database. +func (crb *CloudflareR2CreateBulk) Save(ctx context.Context) ([]*CloudflareR2, error) { + if crb.err != nil { + return nil, crb.err + } + specs := make([]*sqlgraph.CreateSpec, len(crb.builders)) + nodes := make([]*CloudflareR2, len(crb.builders)) + mutators := make([]Mutator, len(crb.builders)) + for i := range crb.builders { + func(i int, root context.Context) { + builder := crb.builders[i] + builder.defaults() + var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) { + mutation, ok := m.(*CloudflareR2Mutation) + 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, crb.builders[i+1].mutation) + } else { + spec := &sqlgraph.BatchCreateSpec{Nodes: specs} + // Invoke the actual operation on the latest mutation in the chain. + if err = sqlgraph.BatchCreate(ctx, crb.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 = int(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, crb.builders[0].mutation); err != nil { + return nil, err + } + } + return nodes, nil +} + +// SaveX is like Save, but panics if an error occurs. +func (crb *CloudflareR2CreateBulk) SaveX(ctx context.Context) []*CloudflareR2 { + v, err := crb.Save(ctx) + if err != nil { + panic(err) + } + return v +} + +// Exec executes the query. +func (crb *CloudflareR2CreateBulk) Exec(ctx context.Context) error { + _, err := crb.Save(ctx) + return err +} + +// ExecX is like Exec, but panics if an error occurs. +func (crb *CloudflareR2CreateBulk) ExecX(ctx context.Context) { + if err := crb.Exec(ctx); err != nil { + panic(err) + } +} diff --git a/internal/ent/cloudflarer2_delete.go b/internal/ent/cloudflarer2_delete.go new file mode 100644 index 0000000..c33b1a1 --- /dev/null +++ b/internal/ent/cloudflarer2_delete.go @@ -0,0 +1,88 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "unR2/internal/ent/cloudflarer2" + "unR2/internal/ent/predicate" + + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" + "entgo.io/ent/schema/field" +) + +// CloudflareR2Delete is the builder for deleting a CloudflareR2 entity. +type CloudflareR2Delete struct { + config + hooks []Hook + mutation *CloudflareR2Mutation +} + +// Where appends a list predicates to the CloudflareR2Delete builder. +func (cr *CloudflareR2Delete) Where(ps ...predicate.CloudflareR2) *CloudflareR2Delete { + cr.mutation.Where(ps...) + return cr +} + +// Exec executes the deletion query and returns how many vertices were deleted. +func (cr *CloudflareR2Delete) Exec(ctx context.Context) (int, error) { + return withHooks(ctx, cr.sqlExec, cr.mutation, cr.hooks) +} + +// ExecX is like Exec, but panics if an error occurs. +func (cr *CloudflareR2Delete) ExecX(ctx context.Context) int { + n, err := cr.Exec(ctx) + if err != nil { + panic(err) + } + return n +} + +func (cr *CloudflareR2Delete) sqlExec(ctx context.Context) (int, error) { + _spec := sqlgraph.NewDeleteSpec(cloudflarer2.Table, sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt)) + if ps := cr.mutation.predicates; len(ps) > 0 { + _spec.Predicate = func(selector *sql.Selector) { + for i := range ps { + ps[i](selector) + } + } + } + affected, err := sqlgraph.DeleteNodes(ctx, cr.driver, _spec) + if err != nil && sqlgraph.IsConstraintError(err) { + err = &ConstraintError{msg: err.Error(), wrap: err} + } + cr.mutation.done = true + return affected, err +} + +// CloudflareR2DeleteOne is the builder for deleting a single CloudflareR2 entity. +type CloudflareR2DeleteOne struct { + cr *CloudflareR2Delete +} + +// Where appends a list predicates to the CloudflareR2Delete builder. +func (cro *CloudflareR2DeleteOne) Where(ps ...predicate.CloudflareR2) *CloudflareR2DeleteOne { + cro.cr.mutation.Where(ps...) + return cro +} + +// Exec executes the deletion query. +func (cro *CloudflareR2DeleteOne) Exec(ctx context.Context) error { + n, err := cro.cr.Exec(ctx) + switch { + case err != nil: + return err + case n == 0: + return &NotFoundError{cloudflarer2.Label} + default: + return nil + } +} + +// ExecX is like Exec, but panics if an error occurs. +func (cro *CloudflareR2DeleteOne) ExecX(ctx context.Context) { + if err := cro.Exec(ctx); err != nil { + panic(err) + } +} diff --git a/internal/ent/cloudflarer2_query.go b/internal/ent/cloudflarer2_query.go new file mode 100644 index 0000000..1802f71 --- /dev/null +++ b/internal/ent/cloudflarer2_query.go @@ -0,0 +1,614 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "fmt" + "math" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + "unR2/internal/ent/predicate" + + "entgo.io/ent" + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" + "entgo.io/ent/schema/field" +) + +// CloudflareR2Query is the builder for querying CloudflareR2 entities. +type CloudflareR2Query struct { + config + ctx *QueryContext + order []cloudflarer2.OrderOption + inters []Interceptor + predicates []predicate.CloudflareR2 + withCloudflareAccount *CloudflareAccountsQuery + withFKs bool + // intermediate query (i.e. traversal path). + sql *sql.Selector + path func(context.Context) (*sql.Selector, error) +} + +// Where adds a new predicate for the CloudflareR2Query builder. +func (cr *CloudflareR2Query) Where(ps ...predicate.CloudflareR2) *CloudflareR2Query { + cr.predicates = append(cr.predicates, ps...) + return cr +} + +// Limit the number of records to be returned by this query. +func (cr *CloudflareR2Query) Limit(limit int) *CloudflareR2Query { + cr.ctx.Limit = &limit + return cr +} + +// Offset to start from. +func (cr *CloudflareR2Query) Offset(offset int) *CloudflareR2Query { + cr.ctx.Offset = &offset + return cr +} + +// 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 (cr *CloudflareR2Query) Unique(unique bool) *CloudflareR2Query { + cr.ctx.Unique = &unique + return cr +} + +// Order specifies how the records should be ordered. +func (cr *CloudflareR2Query) Order(o ...cloudflarer2.OrderOption) *CloudflareR2Query { + cr.order = append(cr.order, o...) + return cr +} + +// QueryCloudflareAccount chains the current query on the "cloudflare_account" edge. +func (cr *CloudflareR2Query) QueryCloudflareAccount() *CloudflareAccountsQuery { + query := (&CloudflareAccountsClient{config: cr.config}).Query() + query.path = func(ctx context.Context) (fromU *sql.Selector, err error) { + if err := cr.prepareQuery(ctx); err != nil { + return nil, err + } + selector := cr.sqlQuery(ctx) + if err := selector.Err(); err != nil { + return nil, err + } + step := sqlgraph.NewStep( + sqlgraph.From(cloudflarer2.Table, cloudflarer2.FieldID, selector), + sqlgraph.To(cloudflareaccounts.Table, cloudflareaccounts.FieldID), + sqlgraph.Edge(sqlgraph.M2O, true, cloudflarer2.CloudflareAccountTable, cloudflarer2.CloudflareAccountColumn), + ) + fromU = sqlgraph.SetNeighbors(cr.driver.Dialect(), step) + return fromU, nil + } + return query +} + +// First returns the first CloudflareR2 entity from the query. +// Returns a *NotFoundError when no CloudflareR2 was found. +func (cr *CloudflareR2Query) First(ctx context.Context) (*CloudflareR2, error) { + nodes, err := cr.Limit(1).All(setContextOp(ctx, cr.ctx, ent.OpQueryFirst)) + if err != nil { + return nil, err + } + if len(nodes) == 0 { + return nil, &NotFoundError{cloudflarer2.Label} + } + return nodes[0], nil +} + +// FirstX is like First, but panics if an error occurs. +func (cr *CloudflareR2Query) FirstX(ctx context.Context) *CloudflareR2 { + node, err := cr.First(ctx) + if err != nil && !IsNotFound(err) { + panic(err) + } + return node +} + +// FirstID returns the first CloudflareR2 ID from the query. +// Returns a *NotFoundError when no CloudflareR2 ID was found. +func (cr *CloudflareR2Query) FirstID(ctx context.Context) (id int, err error) { + var ids []int + if ids, err = cr.Limit(1).IDs(setContextOp(ctx, cr.ctx, ent.OpQueryFirstID)); err != nil { + return + } + if len(ids) == 0 { + err = &NotFoundError{cloudflarer2.Label} + return + } + return ids[0], nil +} + +// FirstIDX is like FirstID, but panics if an error occurs. +func (cr *CloudflareR2Query) FirstIDX(ctx context.Context) int { + id, err := cr.FirstID(ctx) + if err != nil && !IsNotFound(err) { + panic(err) + } + return id +} + +// Only returns a single CloudflareR2 entity found by the query, ensuring it only returns one. +// Returns a *NotSingularError when more than one CloudflareR2 entity is found. +// Returns a *NotFoundError when no CloudflareR2 entities are found. +func (cr *CloudflareR2Query) Only(ctx context.Context) (*CloudflareR2, error) { + nodes, err := cr.Limit(2).All(setContextOp(ctx, cr.ctx, ent.OpQueryOnly)) + if err != nil { + return nil, err + } + switch len(nodes) { + case 1: + return nodes[0], nil + case 0: + return nil, &NotFoundError{cloudflarer2.Label} + default: + return nil, &NotSingularError{cloudflarer2.Label} + } +} + +// OnlyX is like Only, but panics if an error occurs. +func (cr *CloudflareR2Query) OnlyX(ctx context.Context) *CloudflareR2 { + node, err := cr.Only(ctx) + if err != nil { + panic(err) + } + return node +} + +// OnlyID is like Only, but returns the only CloudflareR2 ID in the query. +// Returns a *NotSingularError when more than one CloudflareR2 ID is found. +// Returns a *NotFoundError when no entities are found. +func (cr *CloudflareR2Query) OnlyID(ctx context.Context) (id int, err error) { + var ids []int + if ids, err = cr.Limit(2).IDs(setContextOp(ctx, cr.ctx, ent.OpQueryOnlyID)); err != nil { + return + } + switch len(ids) { + case 1: + id = ids[0] + case 0: + err = &NotFoundError{cloudflarer2.Label} + default: + err = &NotSingularError{cloudflarer2.Label} + } + return +} + +// OnlyIDX is like OnlyID, but panics if an error occurs. +func (cr *CloudflareR2Query) OnlyIDX(ctx context.Context) int { + id, err := cr.OnlyID(ctx) + if err != nil { + panic(err) + } + return id +} + +// All executes the query and returns a list of CloudflareR2s. +func (cr *CloudflareR2Query) All(ctx context.Context) ([]*CloudflareR2, error) { + ctx = setContextOp(ctx, cr.ctx, ent.OpQueryAll) + if err := cr.prepareQuery(ctx); err != nil { + return nil, err + } + qr := querierAll[[]*CloudflareR2, *CloudflareR2Query]() + return withInterceptors[[]*CloudflareR2](ctx, cr, qr, cr.inters) +} + +// AllX is like All, but panics if an error occurs. +func (cr *CloudflareR2Query) AllX(ctx context.Context) []*CloudflareR2 { + nodes, err := cr.All(ctx) + if err != nil { + panic(err) + } + return nodes +} + +// IDs executes the query and returns a list of CloudflareR2 IDs. +func (cr *CloudflareR2Query) IDs(ctx context.Context) (ids []int, err error) { + if cr.ctx.Unique == nil && cr.path != nil { + cr.Unique(true) + } + ctx = setContextOp(ctx, cr.ctx, ent.OpQueryIDs) + if err = cr.Select(cloudflarer2.FieldID).Scan(ctx, &ids); err != nil { + return nil, err + } + return ids, nil +} + +// IDsX is like IDs, but panics if an error occurs. +func (cr *CloudflareR2Query) IDsX(ctx context.Context) []int { + ids, err := cr.IDs(ctx) + if err != nil { + panic(err) + } + return ids +} + +// Count returns the count of the given query. +func (cr *CloudflareR2Query) Count(ctx context.Context) (int, error) { + ctx = setContextOp(ctx, cr.ctx, ent.OpQueryCount) + if err := cr.prepareQuery(ctx); err != nil { + return 0, err + } + return withInterceptors[int](ctx, cr, querierCount[*CloudflareR2Query](), cr.inters) +} + +// CountX is like Count, but panics if an error occurs. +func (cr *CloudflareR2Query) CountX(ctx context.Context) int { + count, err := cr.Count(ctx) + if err != nil { + panic(err) + } + return count +} + +// Exist returns true if the query has elements in the graph. +func (cr *CloudflareR2Query) Exist(ctx context.Context) (bool, error) { + ctx = setContextOp(ctx, cr.ctx, ent.OpQueryExist) + switch _, err := cr.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 (cr *CloudflareR2Query) ExistX(ctx context.Context) bool { + exist, err := cr.Exist(ctx) + if err != nil { + panic(err) + } + return exist +} + +// Clone returns a duplicate of the CloudflareR2Query builder, including all associated steps. It can be +// used to prepare common query builders and use them differently after the clone is made. +func (cr *CloudflareR2Query) Clone() *CloudflareR2Query { + if cr == nil { + return nil + } + return &CloudflareR2Query{ + config: cr.config, + ctx: cr.ctx.Clone(), + order: append([]cloudflarer2.OrderOption{}, cr.order...), + inters: append([]Interceptor{}, cr.inters...), + predicates: append([]predicate.CloudflareR2{}, cr.predicates...), + withCloudflareAccount: cr.withCloudflareAccount.Clone(), + // clone intermediate query. + sql: cr.sql.Clone(), + path: cr.path, + } +} + +// WithCloudflareAccount tells the query-builder to eager-load the nodes that are connected to +// the "cloudflare_account" edge. The optional arguments are used to configure the query builder of the edge. +func (cr *CloudflareR2Query) WithCloudflareAccount(opts ...func(*CloudflareAccountsQuery)) *CloudflareR2Query { + query := (&CloudflareAccountsClient{config: cr.config}).Query() + for _, opt := range opts { + opt(query) + } + cr.withCloudflareAccount = query + return cr +} + +// 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 { +// OwnerID string `json:"owner_id,omitempty"` +// Count int `json:"count,omitempty"` +// } +// +// client.CloudflareR2.Query(). +// GroupBy(cloudflarer2.FieldOwnerID). +// Aggregate(ent.Count()). +// Scan(ctx, &v) +func (cr *CloudflareR2Query) GroupBy(field string, fields ...string) *CloudflareR2GroupBy { + cr.ctx.Fields = append([]string{field}, fields...) + grbuild := &CloudflareR2GroupBy{build: cr} + grbuild.flds = &cr.ctx.Fields + grbuild.label = cloudflarer2.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 { +// OwnerID string `json:"owner_id,omitempty"` +// } +// +// client.CloudflareR2.Query(). +// Select(cloudflarer2.FieldOwnerID). +// Scan(ctx, &v) +func (cr *CloudflareR2Query) Select(fields ...string) *CloudflareR2Select { + cr.ctx.Fields = append(cr.ctx.Fields, fields...) + sbuild := &CloudflareR2Select{CloudflareR2Query: cr} + sbuild.label = cloudflarer2.Label + sbuild.flds, sbuild.scan = &cr.ctx.Fields, sbuild.Scan + return sbuild +} + +// Aggregate returns a CloudflareR2Select configured with the given aggregations. +func (cr *CloudflareR2Query) Aggregate(fns ...AggregateFunc) *CloudflareR2Select { + return cr.Select().Aggregate(fns...) +} + +func (cr *CloudflareR2Query) prepareQuery(ctx context.Context) error { + for _, inter := range cr.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, cr); err != nil { + return err + } + } + } + for _, f := range cr.ctx.Fields { + if !cloudflarer2.ValidColumn(f) { + return &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)} + } + } + if cr.path != nil { + prev, err := cr.path(ctx) + if err != nil { + return err + } + cr.sql = prev + } + return nil +} + +func (cr *CloudflareR2Query) sqlAll(ctx context.Context, hooks ...queryHook) ([]*CloudflareR2, error) { + var ( + nodes = []*CloudflareR2{} + withFKs = cr.withFKs + _spec = cr.querySpec() + loadedTypes = [1]bool{ + cr.withCloudflareAccount != nil, + } + ) + if cr.withCloudflareAccount != nil { + withFKs = true + } + if withFKs { + _spec.Node.Columns = append(_spec.Node.Columns, cloudflarer2.ForeignKeys...) + } + _spec.ScanValues = func(columns []string) ([]any, error) { + return (*CloudflareR2).scanValues(nil, columns) + } + _spec.Assign = func(columns []string, values []any) error { + node := &CloudflareR2{config: cr.config} + nodes = append(nodes, node) + node.Edges.loadedTypes = loadedTypes + return node.assignValues(columns, values) + } + for i := range hooks { + hooks[i](ctx, _spec) + } + if err := sqlgraph.QueryNodes(ctx, cr.driver, _spec); err != nil { + return nil, err + } + if len(nodes) == 0 { + return nodes, nil + } + if query := cr.withCloudflareAccount; query != nil { + if err := cr.loadCloudflareAccount(ctx, query, nodes, nil, + func(n *CloudflareR2, e *CloudflareAccounts) { n.Edges.CloudflareAccount = e }); err != nil { + return nil, err + } + } + return nodes, nil +} + +func (cr *CloudflareR2Query) loadCloudflareAccount(ctx context.Context, query *CloudflareAccountsQuery, nodes []*CloudflareR2, init func(*CloudflareR2), assign func(*CloudflareR2, *CloudflareAccounts)) error { + ids := make([]int, 0, len(nodes)) + nodeids := make(map[int][]*CloudflareR2) + for i := range nodes { + if nodes[i].cloudflare_accounts_cloudflare_buckets == nil { + continue + } + fk := *nodes[i].cloudflare_accounts_cloudflare_buckets + if _, ok := nodeids[fk]; !ok { + ids = append(ids, fk) + } + nodeids[fk] = append(nodeids[fk], nodes[i]) + } + if len(ids) == 0 { + return nil + } + query.Where(cloudflareaccounts.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 "cloudflare_accounts_cloudflare_buckets" returned %v`, n.ID) + } + for i := range nodes { + assign(nodes[i], n) + } + } + return nil +} + +func (cr *CloudflareR2Query) sqlCount(ctx context.Context) (int, error) { + _spec := cr.querySpec() + _spec.Node.Columns = cr.ctx.Fields + if len(cr.ctx.Fields) > 0 { + _spec.Unique = cr.ctx.Unique != nil && *cr.ctx.Unique + } + return sqlgraph.CountNodes(ctx, cr.driver, _spec) +} + +func (cr *CloudflareR2Query) querySpec() *sqlgraph.QuerySpec { + _spec := sqlgraph.NewQuerySpec(cloudflarer2.Table, cloudflarer2.Columns, sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt)) + _spec.From = cr.sql + if unique := cr.ctx.Unique; unique != nil { + _spec.Unique = *unique + } else if cr.path != nil { + _spec.Unique = true + } + if fields := cr.ctx.Fields; len(fields) > 0 { + _spec.Node.Columns = make([]string, 0, len(fields)) + _spec.Node.Columns = append(_spec.Node.Columns, cloudflarer2.FieldID) + for i := range fields { + if fields[i] != cloudflarer2.FieldID { + _spec.Node.Columns = append(_spec.Node.Columns, fields[i]) + } + } + } + if ps := cr.predicates; len(ps) > 0 { + _spec.Predicate = func(selector *sql.Selector) { + for i := range ps { + ps[i](selector) + } + } + } + if limit := cr.ctx.Limit; limit != nil { + _spec.Limit = *limit + } + if offset := cr.ctx.Offset; offset != nil { + _spec.Offset = *offset + } + if ps := cr.order; len(ps) > 0 { + _spec.Order = func(selector *sql.Selector) { + for i := range ps { + ps[i](selector) + } + } + } + return _spec +} + +func (cr *CloudflareR2Query) sqlQuery(ctx context.Context) *sql.Selector { + builder := sql.Dialect(cr.driver.Dialect()) + t1 := builder.Table(cloudflarer2.Table) + columns := cr.ctx.Fields + if len(columns) == 0 { + columns = cloudflarer2.Columns + } + selector := builder.Select(t1.Columns(columns...)...).From(t1) + if cr.sql != nil { + selector = cr.sql + selector.Select(selector.Columns(columns...)...) + } + if cr.ctx.Unique != nil && *cr.ctx.Unique { + selector.Distinct() + } + for _, p := range cr.predicates { + p(selector) + } + for _, p := range cr.order { + p(selector) + } + if offset := cr.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 := cr.ctx.Limit; limit != nil { + selector.Limit(*limit) + } + return selector +} + +// CloudflareR2GroupBy is the group-by builder for CloudflareR2 entities. +type CloudflareR2GroupBy struct { + selector + build *CloudflareR2Query +} + +// Aggregate adds the given aggregation functions to the group-by query. +func (crb *CloudflareR2GroupBy) Aggregate(fns ...AggregateFunc) *CloudflareR2GroupBy { + crb.fns = append(crb.fns, fns...) + return crb +} + +// Scan applies the selector query and scans the result into the given value. +func (crb *CloudflareR2GroupBy) Scan(ctx context.Context, v any) error { + ctx = setContextOp(ctx, crb.build.ctx, ent.OpQueryGroupBy) + if err := crb.build.prepareQuery(ctx); err != nil { + return err + } + return scanWithInterceptors[*CloudflareR2Query, *CloudflareR2GroupBy](ctx, crb.build, crb, crb.build.inters, v) +} + +func (crb *CloudflareR2GroupBy) sqlScan(ctx context.Context, root *CloudflareR2Query, v any) error { + selector := root.sqlQuery(ctx).Select() + aggregation := make([]string, 0, len(crb.fns)) + for _, fn := range crb.fns { + aggregation = append(aggregation, fn(selector)) + } + if len(selector.SelectedColumns()) == 0 { + columns := make([]string, 0, len(*crb.flds)+len(crb.fns)) + for _, f := range *crb.flds { + columns = append(columns, selector.C(f)) + } + columns = append(columns, aggregation...) + selector.Select(columns...) + } + selector.GroupBy(selector.Columns(*crb.flds...)...) + if err := selector.Err(); err != nil { + return err + } + rows := &sql.Rows{} + query, args := selector.Query() + if err := crb.build.driver.Query(ctx, query, args, rows); err != nil { + return err + } + defer rows.Close() + return sql.ScanSlice(rows, v) +} + +// CloudflareR2Select is the builder for selecting fields of CloudflareR2 entities. +type CloudflareR2Select struct { + *CloudflareR2Query + selector +} + +// Aggregate adds the given aggregation functions to the selector query. +func (cr *CloudflareR2Select) Aggregate(fns ...AggregateFunc) *CloudflareR2Select { + cr.fns = append(cr.fns, fns...) + return cr +} + +// Scan applies the selector query and scans the result into the given value. +func (cr *CloudflareR2Select) Scan(ctx context.Context, v any) error { + ctx = setContextOp(ctx, cr.ctx, ent.OpQuerySelect) + if err := cr.prepareQuery(ctx); err != nil { + return err + } + return scanWithInterceptors[*CloudflareR2Query, *CloudflareR2Select](ctx, cr.CloudflareR2Query, cr, cr.inters, v) +} + +func (cr *CloudflareR2Select) sqlScan(ctx context.Context, root *CloudflareR2Query, v any) error { + selector := root.sqlQuery(ctx) + aggregation := make([]string, 0, len(cr.fns)) + for _, fn := range cr.fns { + aggregation = append(aggregation, fn(selector)) + } + switch n := len(*cr.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 := cr.driver.Query(ctx, query, args, rows); err != nil { + return err + } + defer rows.Close() + return sql.ScanSlice(rows, v) +} diff --git a/internal/ent/cloudflarer2_update.go b/internal/ent/cloudflarer2_update.go new file mode 100644 index 0000000..9edf059 --- /dev/null +++ b/internal/ent/cloudflarer2_update.go @@ -0,0 +1,761 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "errors" + "fmt" + "time" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + "unR2/internal/ent/predicate" + + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" + "entgo.io/ent/schema/field" +) + +// CloudflareR2Update is the builder for updating CloudflareR2 entities. +type CloudflareR2Update struct { + config + hooks []Hook + mutation *CloudflareR2Mutation +} + +// Where appends a list predicates to the CloudflareR2Update builder. +func (cr *CloudflareR2Update) Where(ps ...predicate.CloudflareR2) *CloudflareR2Update { + cr.mutation.Where(ps...) + return cr +} + +// SetOwnerID sets the "owner_id" field. +func (cr *CloudflareR2Update) SetOwnerID(s string) *CloudflareR2Update { + cr.mutation.SetOwnerID(s) + return cr +} + +// SetNillableOwnerID sets the "owner_id" field if the given value is not nil. +func (cr *CloudflareR2Update) SetNillableOwnerID(s *string) *CloudflareR2Update { + if s != nil { + cr.SetOwnerID(*s) + } + return cr +} + +// SetName sets the "name" field. +func (cr *CloudflareR2Update) SetName(s string) *CloudflareR2Update { + cr.mutation.SetName(s) + return cr +} + +// SetNillableName sets the "name" field if the given value is not nil. +func (cr *CloudflareR2Update) SetNillableName(s *string) *CloudflareR2Update { + if s != nil { + cr.SetName(*s) + } + return cr +} + +// SetLocation sets the "location" field. +func (cr *CloudflareR2Update) SetLocation(s string) *CloudflareR2Update { + cr.mutation.SetLocation(s) + return cr +} + +// SetNillableLocation sets the "location" field if the given value is not nil. +func (cr *CloudflareR2Update) SetNillableLocation(s *string) *CloudflareR2Update { + if s != nil { + cr.SetLocation(*s) + } + return cr +} + +// SetStorageClass sets the "storage_class" field. +func (cr *CloudflareR2Update) SetStorageClass(s string) *CloudflareR2Update { + cr.mutation.SetStorageClass(s) + return cr +} + +// SetNillableStorageClass sets the "storage_class" field if the given value is not nil. +func (cr *CloudflareR2Update) SetNillableStorageClass(s *string) *CloudflareR2Update { + if s != nil { + cr.SetStorageClass(*s) + } + return cr +} + +// SetStatus sets the "status" field. +func (cr *CloudflareR2Update) SetStatus(i int8) *CloudflareR2Update { + cr.mutation.ResetStatus() + cr.mutation.SetStatus(i) + return cr +} + +// SetNillableStatus sets the "status" field if the given value is not nil. +func (cr *CloudflareR2Update) SetNillableStatus(i *int8) *CloudflareR2Update { + if i != nil { + cr.SetStatus(*i) + } + return cr +} + +// AddStatus adds i to the "status" field. +func (cr *CloudflareR2Update) AddStatus(i int8) *CloudflareR2Update { + cr.mutation.AddStatus(i) + return cr +} + +// SetPayloadSize sets the "payload_size" field. +func (cr *CloudflareR2Update) SetPayloadSize(i int64) *CloudflareR2Update { + cr.mutation.ResetPayloadSize() + cr.mutation.SetPayloadSize(i) + return cr +} + +// SetNillablePayloadSize sets the "payload_size" field if the given value is not nil. +func (cr *CloudflareR2Update) SetNillablePayloadSize(i *int64) *CloudflareR2Update { + if i != nil { + cr.SetPayloadSize(*i) + } + return cr +} + +// AddPayloadSize adds i to the "payload_size" field. +func (cr *CloudflareR2Update) AddPayloadSize(i int64) *CloudflareR2Update { + cr.mutation.AddPayloadSize(i) + return cr +} + +// SetMetadataSize sets the "metadata_size" field. +func (cr *CloudflareR2Update) SetMetadataSize(i int64) *CloudflareR2Update { + cr.mutation.ResetMetadataSize() + cr.mutation.SetMetadataSize(i) + return cr +} + +// SetNillableMetadataSize sets the "metadata_size" field if the given value is not nil. +func (cr *CloudflareR2Update) SetNillableMetadataSize(i *int64) *CloudflareR2Update { + if i != nil { + cr.SetMetadataSize(*i) + } + return cr +} + +// AddMetadataSize adds i to the "metadata_size" field. +func (cr *CloudflareR2Update) AddMetadataSize(i int64) *CloudflareR2Update { + cr.mutation.AddMetadataSize(i) + return cr +} + +// SetObjectCount sets the "object_count" field. +func (cr *CloudflareR2Update) SetObjectCount(i int) *CloudflareR2Update { + cr.mutation.ResetObjectCount() + cr.mutation.SetObjectCount(i) + return cr +} + +// SetNillableObjectCount sets the "object_count" field if the given value is not nil. +func (cr *CloudflareR2Update) SetNillableObjectCount(i *int) *CloudflareR2Update { + if i != nil { + cr.SetObjectCount(*i) + } + return cr +} + +// AddObjectCount adds i to the "object_count" field. +func (cr *CloudflareR2Update) AddObjectCount(i int) *CloudflareR2Update { + cr.mutation.AddObjectCount(i) + return cr +} + +// SetRemark sets the "remark" field. +func (cr *CloudflareR2Update) SetRemark(s string) *CloudflareR2Update { + cr.mutation.SetRemark(s) + return cr +} + +// SetNillableRemark sets the "remark" field if the given value is not nil. +func (cr *CloudflareR2Update) SetNillableRemark(s *string) *CloudflareR2Update { + if s != nil { + cr.SetRemark(*s) + } + return cr +} + +// ClearRemark clears the value of the "remark" field. +func (cr *CloudflareR2Update) ClearRemark() *CloudflareR2Update { + cr.mutation.ClearRemark() + return cr +} + +// SetUpdatedAt sets the "updated_at" field. +func (cr *CloudflareR2Update) SetUpdatedAt(t time.Time) *CloudflareR2Update { + cr.mutation.SetUpdatedAt(t) + return cr +} + +// SetCloudflareAccountID sets the "cloudflare_account" edge to the CloudflareAccounts entity by ID. +func (cr *CloudflareR2Update) SetCloudflareAccountID(id int) *CloudflareR2Update { + cr.mutation.SetCloudflareAccountID(id) + return cr +} + +// SetCloudflareAccount sets the "cloudflare_account" edge to the CloudflareAccounts entity. +func (cr *CloudflareR2Update) SetCloudflareAccount(c *CloudflareAccounts) *CloudflareR2Update { + return cr.SetCloudflareAccountID(c.ID) +} + +// Mutation returns the CloudflareR2Mutation object of the builder. +func (cr *CloudflareR2Update) Mutation() *CloudflareR2Mutation { + return cr.mutation +} + +// ClearCloudflareAccount clears the "cloudflare_account" edge to the CloudflareAccounts entity. +func (cr *CloudflareR2Update) ClearCloudflareAccount() *CloudflareR2Update { + cr.mutation.ClearCloudflareAccount() + return cr +} + +// Save executes the query and returns the number of nodes affected by the update operation. +func (cr *CloudflareR2Update) Save(ctx context.Context) (int, error) { + cr.defaults() + return withHooks(ctx, cr.sqlSave, cr.mutation, cr.hooks) +} + +// SaveX is like Save, but panics if an error occurs. +func (cr *CloudflareR2Update) SaveX(ctx context.Context) int { + affected, err := cr.Save(ctx) + if err != nil { + panic(err) + } + return affected +} + +// Exec executes the query. +func (cr *CloudflareR2Update) Exec(ctx context.Context) error { + _, err := cr.Save(ctx) + return err +} + +// ExecX is like Exec, but panics if an error occurs. +func (cr *CloudflareR2Update) ExecX(ctx context.Context) { + if err := cr.Exec(ctx); err != nil { + panic(err) + } +} + +// defaults sets the default values of the builder before save. +func (cr *CloudflareR2Update) defaults() { + if _, ok := cr.mutation.UpdatedAt(); !ok { + v := cloudflarer2.UpdateDefaultUpdatedAt() + cr.mutation.SetUpdatedAt(v) + } +} + +// check runs all checks and user-defined validators on the builder. +func (cr *CloudflareR2Update) check() error { + if v, ok := cr.mutation.Name(); ok { + if err := cloudflarer2.NameValidator(v); err != nil { + return &ValidationError{Name: "name", err: fmt.Errorf(`ent: validator failed for field "CloudflareR2.name": %w`, err)} + } + } + if v, ok := cr.mutation.Location(); ok { + if err := cloudflarer2.LocationValidator(v); err != nil { + return &ValidationError{Name: "location", err: fmt.Errorf(`ent: validator failed for field "CloudflareR2.location": %w`, err)} + } + } + if v, ok := cr.mutation.StorageClass(); ok { + if err := cloudflarer2.StorageClassValidator(v); err != nil { + return &ValidationError{Name: "storage_class", err: fmt.Errorf(`ent: validator failed for field "CloudflareR2.storage_class": %w`, err)} + } + } + if cr.mutation.CloudflareAccountCleared() && len(cr.mutation.CloudflareAccountIDs()) > 0 { + return errors.New(`ent: clearing a required unique edge "CloudflareR2.cloudflare_account"`) + } + return nil +} + +func (cr *CloudflareR2Update) sqlSave(ctx context.Context) (n int, err error) { + if err := cr.check(); err != nil { + return n, err + } + _spec := sqlgraph.NewUpdateSpec(cloudflarer2.Table, cloudflarer2.Columns, sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt)) + if ps := cr.mutation.predicates; len(ps) > 0 { + _spec.Predicate = func(selector *sql.Selector) { + for i := range ps { + ps[i](selector) + } + } + } + if value, ok := cr.mutation.OwnerID(); ok { + _spec.SetField(cloudflarer2.FieldOwnerID, field.TypeString, value) + } + if value, ok := cr.mutation.Name(); ok { + _spec.SetField(cloudflarer2.FieldName, field.TypeString, value) + } + if value, ok := cr.mutation.Location(); ok { + _spec.SetField(cloudflarer2.FieldLocation, field.TypeString, value) + } + if value, ok := cr.mutation.StorageClass(); ok { + _spec.SetField(cloudflarer2.FieldStorageClass, field.TypeString, value) + } + if value, ok := cr.mutation.Status(); ok { + _spec.SetField(cloudflarer2.FieldStatus, field.TypeInt8, value) + } + if value, ok := cr.mutation.AddedStatus(); ok { + _spec.AddField(cloudflarer2.FieldStatus, field.TypeInt8, value) + } + if value, ok := cr.mutation.PayloadSize(); ok { + _spec.SetField(cloudflarer2.FieldPayloadSize, field.TypeInt64, value) + } + if value, ok := cr.mutation.AddedPayloadSize(); ok { + _spec.AddField(cloudflarer2.FieldPayloadSize, field.TypeInt64, value) + } + if value, ok := cr.mutation.MetadataSize(); ok { + _spec.SetField(cloudflarer2.FieldMetadataSize, field.TypeInt64, value) + } + if value, ok := cr.mutation.AddedMetadataSize(); ok { + _spec.AddField(cloudflarer2.FieldMetadataSize, field.TypeInt64, value) + } + if value, ok := cr.mutation.ObjectCount(); ok { + _spec.SetField(cloudflarer2.FieldObjectCount, field.TypeInt, value) + } + if value, ok := cr.mutation.AddedObjectCount(); ok { + _spec.AddField(cloudflarer2.FieldObjectCount, field.TypeInt, value) + } + if value, ok := cr.mutation.Remark(); ok { + _spec.SetField(cloudflarer2.FieldRemark, field.TypeString, value) + } + if cr.mutation.RemarkCleared() { + _spec.ClearField(cloudflarer2.FieldRemark, field.TypeString) + } + if value, ok := cr.mutation.UpdatedAt(); ok { + _spec.SetField(cloudflarer2.FieldUpdatedAt, field.TypeTime, value) + } + if cr.mutation.CloudflareAccountCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: cloudflarer2.CloudflareAccountTable, + Columns: []string{cloudflarer2.CloudflareAccountColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflareaccounts.FieldID, field.TypeInt), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := cr.mutation.CloudflareAccountIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: cloudflarer2.CloudflareAccountTable, + Columns: []string{cloudflarer2.CloudflareAccountColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflareaccounts.FieldID, field.TypeInt), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } + if n, err = sqlgraph.UpdateNodes(ctx, cr.driver, _spec); err != nil { + if _, ok := err.(*sqlgraph.NotFoundError); ok { + err = &NotFoundError{cloudflarer2.Label} + } else if sqlgraph.IsConstraintError(err) { + err = &ConstraintError{msg: err.Error(), wrap: err} + } + return 0, err + } + cr.mutation.done = true + return n, nil +} + +// CloudflareR2UpdateOne is the builder for updating a single CloudflareR2 entity. +type CloudflareR2UpdateOne struct { + config + fields []string + hooks []Hook + mutation *CloudflareR2Mutation +} + +// SetOwnerID sets the "owner_id" field. +func (cro *CloudflareR2UpdateOne) SetOwnerID(s string) *CloudflareR2UpdateOne { + cro.mutation.SetOwnerID(s) + return cro +} + +// SetNillableOwnerID sets the "owner_id" field if the given value is not nil. +func (cro *CloudflareR2UpdateOne) SetNillableOwnerID(s *string) *CloudflareR2UpdateOne { + if s != nil { + cro.SetOwnerID(*s) + } + return cro +} + +// SetName sets the "name" field. +func (cro *CloudflareR2UpdateOne) SetName(s string) *CloudflareR2UpdateOne { + cro.mutation.SetName(s) + return cro +} + +// SetNillableName sets the "name" field if the given value is not nil. +func (cro *CloudflareR2UpdateOne) SetNillableName(s *string) *CloudflareR2UpdateOne { + if s != nil { + cro.SetName(*s) + } + return cro +} + +// SetLocation sets the "location" field. +func (cro *CloudflareR2UpdateOne) SetLocation(s string) *CloudflareR2UpdateOne { + cro.mutation.SetLocation(s) + return cro +} + +// SetNillableLocation sets the "location" field if the given value is not nil. +func (cro *CloudflareR2UpdateOne) SetNillableLocation(s *string) *CloudflareR2UpdateOne { + if s != nil { + cro.SetLocation(*s) + } + return cro +} + +// SetStorageClass sets the "storage_class" field. +func (cro *CloudflareR2UpdateOne) SetStorageClass(s string) *CloudflareR2UpdateOne { + cro.mutation.SetStorageClass(s) + return cro +} + +// SetNillableStorageClass sets the "storage_class" field if the given value is not nil. +func (cro *CloudflareR2UpdateOne) SetNillableStorageClass(s *string) *CloudflareR2UpdateOne { + if s != nil { + cro.SetStorageClass(*s) + } + return cro +} + +// SetStatus sets the "status" field. +func (cro *CloudflareR2UpdateOne) SetStatus(i int8) *CloudflareR2UpdateOne { + cro.mutation.ResetStatus() + cro.mutation.SetStatus(i) + return cro +} + +// SetNillableStatus sets the "status" field if the given value is not nil. +func (cro *CloudflareR2UpdateOne) SetNillableStatus(i *int8) *CloudflareR2UpdateOne { + if i != nil { + cro.SetStatus(*i) + } + return cro +} + +// AddStatus adds i to the "status" field. +func (cro *CloudflareR2UpdateOne) AddStatus(i int8) *CloudflareR2UpdateOne { + cro.mutation.AddStatus(i) + return cro +} + +// SetPayloadSize sets the "payload_size" field. +func (cro *CloudflareR2UpdateOne) SetPayloadSize(i int64) *CloudflareR2UpdateOne { + cro.mutation.ResetPayloadSize() + cro.mutation.SetPayloadSize(i) + return cro +} + +// SetNillablePayloadSize sets the "payload_size" field if the given value is not nil. +func (cro *CloudflareR2UpdateOne) SetNillablePayloadSize(i *int64) *CloudflareR2UpdateOne { + if i != nil { + cro.SetPayloadSize(*i) + } + return cro +} + +// AddPayloadSize adds i to the "payload_size" field. +func (cro *CloudflareR2UpdateOne) AddPayloadSize(i int64) *CloudflareR2UpdateOne { + cro.mutation.AddPayloadSize(i) + return cro +} + +// SetMetadataSize sets the "metadata_size" field. +func (cro *CloudflareR2UpdateOne) SetMetadataSize(i int64) *CloudflareR2UpdateOne { + cro.mutation.ResetMetadataSize() + cro.mutation.SetMetadataSize(i) + return cro +} + +// SetNillableMetadataSize sets the "metadata_size" field if the given value is not nil. +func (cro *CloudflareR2UpdateOne) SetNillableMetadataSize(i *int64) *CloudflareR2UpdateOne { + if i != nil { + cro.SetMetadataSize(*i) + } + return cro +} + +// AddMetadataSize adds i to the "metadata_size" field. +func (cro *CloudflareR2UpdateOne) AddMetadataSize(i int64) *CloudflareR2UpdateOne { + cro.mutation.AddMetadataSize(i) + return cro +} + +// SetObjectCount sets the "object_count" field. +func (cro *CloudflareR2UpdateOne) SetObjectCount(i int) *CloudflareR2UpdateOne { + cro.mutation.ResetObjectCount() + cro.mutation.SetObjectCount(i) + return cro +} + +// SetNillableObjectCount sets the "object_count" field if the given value is not nil. +func (cro *CloudflareR2UpdateOne) SetNillableObjectCount(i *int) *CloudflareR2UpdateOne { + if i != nil { + cro.SetObjectCount(*i) + } + return cro +} + +// AddObjectCount adds i to the "object_count" field. +func (cro *CloudflareR2UpdateOne) AddObjectCount(i int) *CloudflareR2UpdateOne { + cro.mutation.AddObjectCount(i) + return cro +} + +// SetRemark sets the "remark" field. +func (cro *CloudflareR2UpdateOne) SetRemark(s string) *CloudflareR2UpdateOne { + cro.mutation.SetRemark(s) + return cro +} + +// SetNillableRemark sets the "remark" field if the given value is not nil. +func (cro *CloudflareR2UpdateOne) SetNillableRemark(s *string) *CloudflareR2UpdateOne { + if s != nil { + cro.SetRemark(*s) + } + return cro +} + +// ClearRemark clears the value of the "remark" field. +func (cro *CloudflareR2UpdateOne) ClearRemark() *CloudflareR2UpdateOne { + cro.mutation.ClearRemark() + return cro +} + +// SetUpdatedAt sets the "updated_at" field. +func (cro *CloudflareR2UpdateOne) SetUpdatedAt(t time.Time) *CloudflareR2UpdateOne { + cro.mutation.SetUpdatedAt(t) + return cro +} + +// SetCloudflareAccountID sets the "cloudflare_account" edge to the CloudflareAccounts entity by ID. +func (cro *CloudflareR2UpdateOne) SetCloudflareAccountID(id int) *CloudflareR2UpdateOne { + cro.mutation.SetCloudflareAccountID(id) + return cro +} + +// SetCloudflareAccount sets the "cloudflare_account" edge to the CloudflareAccounts entity. +func (cro *CloudflareR2UpdateOne) SetCloudflareAccount(c *CloudflareAccounts) *CloudflareR2UpdateOne { + return cro.SetCloudflareAccountID(c.ID) +} + +// Mutation returns the CloudflareR2Mutation object of the builder. +func (cro *CloudflareR2UpdateOne) Mutation() *CloudflareR2Mutation { + return cro.mutation +} + +// ClearCloudflareAccount clears the "cloudflare_account" edge to the CloudflareAccounts entity. +func (cro *CloudflareR2UpdateOne) ClearCloudflareAccount() *CloudflareR2UpdateOne { + cro.mutation.ClearCloudflareAccount() + return cro +} + +// Where appends a list predicates to the CloudflareR2Update builder. +func (cro *CloudflareR2UpdateOne) Where(ps ...predicate.CloudflareR2) *CloudflareR2UpdateOne { + cro.mutation.Where(ps...) + return cro +} + +// Select allows selecting one or more fields (columns) of the returned entity. +// The default is selecting all fields defined in the entity schema. +func (cro *CloudflareR2UpdateOne) Select(field string, fields ...string) *CloudflareR2UpdateOne { + cro.fields = append([]string{field}, fields...) + return cro +} + +// Save executes the query and returns the updated CloudflareR2 entity. +func (cro *CloudflareR2UpdateOne) Save(ctx context.Context) (*CloudflareR2, error) { + cro.defaults() + return withHooks(ctx, cro.sqlSave, cro.mutation, cro.hooks) +} + +// SaveX is like Save, but panics if an error occurs. +func (cro *CloudflareR2UpdateOne) SaveX(ctx context.Context) *CloudflareR2 { + node, err := cro.Save(ctx) + if err != nil { + panic(err) + } + return node +} + +// Exec executes the query on the entity. +func (cro *CloudflareR2UpdateOne) Exec(ctx context.Context) error { + _, err := cro.Save(ctx) + return err +} + +// ExecX is like Exec, but panics if an error occurs. +func (cro *CloudflareR2UpdateOne) ExecX(ctx context.Context) { + if err := cro.Exec(ctx); err != nil { + panic(err) + } +} + +// defaults sets the default values of the builder before save. +func (cro *CloudflareR2UpdateOne) defaults() { + if _, ok := cro.mutation.UpdatedAt(); !ok { + v := cloudflarer2.UpdateDefaultUpdatedAt() + cro.mutation.SetUpdatedAt(v) + } +} + +// check runs all checks and user-defined validators on the builder. +func (cro *CloudflareR2UpdateOne) check() error { + if v, ok := cro.mutation.Name(); ok { + if err := cloudflarer2.NameValidator(v); err != nil { + return &ValidationError{Name: "name", err: fmt.Errorf(`ent: validator failed for field "CloudflareR2.name": %w`, err)} + } + } + if v, ok := cro.mutation.Location(); ok { + if err := cloudflarer2.LocationValidator(v); err != nil { + return &ValidationError{Name: "location", err: fmt.Errorf(`ent: validator failed for field "CloudflareR2.location": %w`, err)} + } + } + if v, ok := cro.mutation.StorageClass(); ok { + if err := cloudflarer2.StorageClassValidator(v); err != nil { + return &ValidationError{Name: "storage_class", err: fmt.Errorf(`ent: validator failed for field "CloudflareR2.storage_class": %w`, err)} + } + } + if cro.mutation.CloudflareAccountCleared() && len(cro.mutation.CloudflareAccountIDs()) > 0 { + return errors.New(`ent: clearing a required unique edge "CloudflareR2.cloudflare_account"`) + } + return nil +} + +func (cro *CloudflareR2UpdateOne) sqlSave(ctx context.Context) (_node *CloudflareR2, err error) { + if err := cro.check(); err != nil { + return _node, err + } + _spec := sqlgraph.NewUpdateSpec(cloudflarer2.Table, cloudflarer2.Columns, sqlgraph.NewFieldSpec(cloudflarer2.FieldID, field.TypeInt)) + id, ok := cro.mutation.ID() + if !ok { + return nil, &ValidationError{Name: "id", err: errors.New(`ent: missing "CloudflareR2.id" for update`)} + } + _spec.Node.ID.Value = id + if fields := cro.fields; len(fields) > 0 { + _spec.Node.Columns = make([]string, 0, len(fields)) + _spec.Node.Columns = append(_spec.Node.Columns, cloudflarer2.FieldID) + for _, f := range fields { + if !cloudflarer2.ValidColumn(f) { + return nil, &ValidationError{Name: f, err: fmt.Errorf("ent: invalid field %q for query", f)} + } + if f != cloudflarer2.FieldID { + _spec.Node.Columns = append(_spec.Node.Columns, f) + } + } + } + if ps := cro.mutation.predicates; len(ps) > 0 { + _spec.Predicate = func(selector *sql.Selector) { + for i := range ps { + ps[i](selector) + } + } + } + if value, ok := cro.mutation.OwnerID(); ok { + _spec.SetField(cloudflarer2.FieldOwnerID, field.TypeString, value) + } + if value, ok := cro.mutation.Name(); ok { + _spec.SetField(cloudflarer2.FieldName, field.TypeString, value) + } + if value, ok := cro.mutation.Location(); ok { + _spec.SetField(cloudflarer2.FieldLocation, field.TypeString, value) + } + if value, ok := cro.mutation.StorageClass(); ok { + _spec.SetField(cloudflarer2.FieldStorageClass, field.TypeString, value) + } + if value, ok := cro.mutation.Status(); ok { + _spec.SetField(cloudflarer2.FieldStatus, field.TypeInt8, value) + } + if value, ok := cro.mutation.AddedStatus(); ok { + _spec.AddField(cloudflarer2.FieldStatus, field.TypeInt8, value) + } + if value, ok := cro.mutation.PayloadSize(); ok { + _spec.SetField(cloudflarer2.FieldPayloadSize, field.TypeInt64, value) + } + if value, ok := cro.mutation.AddedPayloadSize(); ok { + _spec.AddField(cloudflarer2.FieldPayloadSize, field.TypeInt64, value) + } + if value, ok := cro.mutation.MetadataSize(); ok { + _spec.SetField(cloudflarer2.FieldMetadataSize, field.TypeInt64, value) + } + if value, ok := cro.mutation.AddedMetadataSize(); ok { + _spec.AddField(cloudflarer2.FieldMetadataSize, field.TypeInt64, value) + } + if value, ok := cro.mutation.ObjectCount(); ok { + _spec.SetField(cloudflarer2.FieldObjectCount, field.TypeInt, value) + } + if value, ok := cro.mutation.AddedObjectCount(); ok { + _spec.AddField(cloudflarer2.FieldObjectCount, field.TypeInt, value) + } + if value, ok := cro.mutation.Remark(); ok { + _spec.SetField(cloudflarer2.FieldRemark, field.TypeString, value) + } + if cro.mutation.RemarkCleared() { + _spec.ClearField(cloudflarer2.FieldRemark, field.TypeString) + } + if value, ok := cro.mutation.UpdatedAt(); ok { + _spec.SetField(cloudflarer2.FieldUpdatedAt, field.TypeTime, value) + } + if cro.mutation.CloudflareAccountCleared() { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: cloudflarer2.CloudflareAccountTable, + Columns: []string{cloudflarer2.CloudflareAccountColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflareaccounts.FieldID, field.TypeInt), + }, + } + _spec.Edges.Clear = append(_spec.Edges.Clear, edge) + } + if nodes := cro.mutation.CloudflareAccountIDs(); len(nodes) > 0 { + edge := &sqlgraph.EdgeSpec{ + Rel: sqlgraph.M2O, + Inverse: true, + Table: cloudflarer2.CloudflareAccountTable, + Columns: []string{cloudflarer2.CloudflareAccountColumn}, + Bidi: false, + Target: &sqlgraph.EdgeTarget{ + IDSpec: sqlgraph.NewFieldSpec(cloudflareaccounts.FieldID, field.TypeInt), + }, + } + for _, k := range nodes { + edge.Target.Nodes = append(edge.Target.Nodes, k) + } + _spec.Edges.Add = append(_spec.Edges.Add, edge) + } + _node = &CloudflareR2{config: cro.config} + _spec.Assign = _node.assignValues + _spec.ScanValues = _node.scanValues + if err = sqlgraph.UpdateNode(ctx, cro.driver, _spec); err != nil { + if _, ok := err.(*sqlgraph.NotFoundError); ok { + err = &NotFoundError{cloudflarer2.Label} + } else if sqlgraph.IsConstraintError(err) { + err = &ConstraintError{msg: err.Error(), wrap: err} + } + return nil, err + } + cro.mutation.done = true + return _node, nil +} diff --git a/internal/ent/ent.go b/internal/ent/ent.go new file mode 100644 index 0000000..a91e087 --- /dev/null +++ b/internal/ent/ent.go @@ -0,0 +1,610 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "errors" + "fmt" + "reflect" + "sync" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + + "entgo.io/ent" + "entgo.io/ent/dialect/sql" + "entgo.io/ent/dialect/sql/sqlgraph" +) + +// ent aliases to avoid import conflicts in user's code. +type ( + Op = ent.Op + Hook = ent.Hook + Value = ent.Value + Query = ent.Query + QueryContext = ent.QueryContext + Querier = ent.Querier + QuerierFunc = ent.QuerierFunc + Interceptor = ent.Interceptor + InterceptFunc = ent.InterceptFunc + Traverser = ent.Traverser + TraverseFunc = ent.TraverseFunc + Policy = ent.Policy + Mutator = ent.Mutator + Mutation = ent.Mutation + MutateFunc = ent.MutateFunc +) + +type clientCtxKey struct{} + +// FromContext returns a Client stored inside a context, or nil if there isn't one. +func FromContext(ctx context.Context) *Client { + c, _ := ctx.Value(clientCtxKey{}).(*Client) + return c +} + +// NewContext returns a new context with the given Client attached. +func NewContext(parent context.Context, c *Client) context.Context { + return context.WithValue(parent, clientCtxKey{}, c) +} + +type txCtxKey struct{} + +// TxFromContext returns a Tx stored inside a context, or nil if there isn't one. +func TxFromContext(ctx context.Context) *Tx { + tx, _ := ctx.Value(txCtxKey{}).(*Tx) + return tx +} + +// NewTxContext returns a new context with the given Tx attached. +func NewTxContext(parent context.Context, tx *Tx) context.Context { + return context.WithValue(parent, txCtxKey{}, tx) +} + +// OrderFunc applies an ordering on the sql selector. +// Deprecated: Use Asc/Desc functions or the package builders instead. +type OrderFunc func(*sql.Selector) + +var ( + initCheck sync.Once + columnCheck sql.ColumnCheck +) + +// checkColumn checks if the column exists in the given table. +func checkColumn(table, column string) error { + initCheck.Do(func() { + columnCheck = sql.NewColumnCheck(map[string]func(string) bool{ + cloudflareaccounts.Table: cloudflareaccounts.ValidColumn, + cloudflarer2.Table: cloudflarer2.ValidColumn, + }) + }) + return columnCheck(table, column) +} + +// Asc applies the given fields in ASC order. +func Asc(fields ...string) func(*sql.Selector) { + return func(s *sql.Selector) { + for _, f := range fields { + if err := checkColumn(s.TableName(), f); err != nil { + s.AddError(&ValidationError{Name: f, err: fmt.Errorf("ent: %w", err)}) + } + s.OrderBy(sql.Asc(s.C(f))) + } + } +} + +// Desc applies the given fields in DESC order. +func Desc(fields ...string) func(*sql.Selector) { + return func(s *sql.Selector) { + for _, f := range fields { + if err := checkColumn(s.TableName(), f); err != nil { + s.AddError(&ValidationError{Name: f, err: fmt.Errorf("ent: %w", err)}) + } + s.OrderBy(sql.Desc(s.C(f))) + } + } +} + +// AggregateFunc applies an aggregation step on the group-by traversal/selector. +type AggregateFunc func(*sql.Selector) string + +// As is a pseudo aggregation function for renaming another other functions with custom names. For example: +// +// GroupBy(field1, field2). +// Aggregate(ent.As(ent.Sum(field1), "sum_field1"), (ent.As(ent.Sum(field2), "sum_field2")). +// Scan(ctx, &v) +func As(fn AggregateFunc, end string) AggregateFunc { + return func(s *sql.Selector) string { + return sql.As(fn(s), end) + } +} + +// Count applies the "count" aggregation function on each group. +func Count() AggregateFunc { + return func(s *sql.Selector) string { + return sql.Count("*") + } +} + +// Max applies the "max" aggregation function on the given field of each group. +func Max(field string) AggregateFunc { + return func(s *sql.Selector) string { + if err := checkColumn(s.TableName(), field); err != nil { + s.AddError(&ValidationError{Name: field, err: fmt.Errorf("ent: %w", err)}) + return "" + } + return sql.Max(s.C(field)) + } +} + +// Mean applies the "mean" aggregation function on the given field of each group. +func Mean(field string) AggregateFunc { + return func(s *sql.Selector) string { + if err := checkColumn(s.TableName(), field); err != nil { + s.AddError(&ValidationError{Name: field, err: fmt.Errorf("ent: %w", err)}) + return "" + } + return sql.Avg(s.C(field)) + } +} + +// Min applies the "min" aggregation function on the given field of each group. +func Min(field string) AggregateFunc { + return func(s *sql.Selector) string { + if err := checkColumn(s.TableName(), field); err != nil { + s.AddError(&ValidationError{Name: field, err: fmt.Errorf("ent: %w", err)}) + return "" + } + return sql.Min(s.C(field)) + } +} + +// Sum applies the "sum" aggregation function on the given field of each group. +func Sum(field string) AggregateFunc { + return func(s *sql.Selector) string { + if err := checkColumn(s.TableName(), field); err != nil { + s.AddError(&ValidationError{Name: field, err: fmt.Errorf("ent: %w", err)}) + return "" + } + return sql.Sum(s.C(field)) + } +} + +// ValidationError returns when validating a field or edge fails. +type ValidationError struct { + Name string // Field or edge name. + err error +} + +// Error implements the error interface. +func (e *ValidationError) Error() string { + return e.err.Error() +} + +// Unwrap implements the errors.Wrapper interface. +func (e *ValidationError) Unwrap() error { + return e.err +} + +// IsValidationError returns a boolean indicating whether the error is a validation error. +func IsValidationError(err error) bool { + if err == nil { + return false + } + var e *ValidationError + return errors.As(err, &e) +} + +// NotFoundError returns when trying to fetch a specific entity and it was not found in the database. +type NotFoundError struct { + label string +} + +// Error implements the error interface. +func (e *NotFoundError) Error() string { + return "ent: " + e.label + " not found" +} + +// IsNotFound returns a boolean indicating whether the error is a not found error. +func IsNotFound(err error) bool { + if err == nil { + return false + } + var e *NotFoundError + return errors.As(err, &e) +} + +// MaskNotFound masks not found error. +func MaskNotFound(err error) error { + if IsNotFound(err) { + return nil + } + return err +} + +// NotSingularError returns when trying to fetch a singular entity and more then one was found in the database. +type NotSingularError struct { + label string +} + +// Error implements the error interface. +func (e *NotSingularError) Error() string { + return "ent: " + e.label + " not singular" +} + +// IsNotSingular returns a boolean indicating whether the error is a not singular error. +func IsNotSingular(err error) bool { + if err == nil { + return false + } + var e *NotSingularError + return errors.As(err, &e) +} + +// NotLoadedError returns when trying to get a node that was not loaded by the query. +type NotLoadedError struct { + edge string +} + +// Error implements the error interface. +func (e *NotLoadedError) Error() string { + return "ent: " + e.edge + " edge was not loaded" +} + +// IsNotLoaded returns a boolean indicating whether the error is a not loaded error. +func IsNotLoaded(err error) bool { + if err == nil { + return false + } + var e *NotLoadedError + return errors.As(err, &e) +} + +// ConstraintError returns when trying to create/update one or more entities and +// one or more of their constraints failed. For example, violation of edge or +// field uniqueness. +type ConstraintError struct { + msg string + wrap error +} + +// Error implements the error interface. +func (e ConstraintError) Error() string { + return "ent: constraint failed: " + e.msg +} + +// Unwrap implements the errors.Wrapper interface. +func (e *ConstraintError) Unwrap() error { + return e.wrap +} + +// IsConstraintError returns a boolean indicating whether the error is a constraint failure. +func IsConstraintError(err error) bool { + if err == nil { + return false + } + var e *ConstraintError + return errors.As(err, &e) +} + +// selector embedded by the different Select/GroupBy builders. +type selector struct { + label string + flds *[]string + fns []AggregateFunc + scan func(context.Context, any) error +} + +// ScanX is like Scan, but panics if an error occurs. +func (s *selector) ScanX(ctx context.Context, v any) { + if err := s.scan(ctx, v); err != nil { + panic(err) + } +} + +// Strings returns list of strings from a selector. It is only allowed when selecting one field. +func (s *selector) Strings(ctx context.Context) ([]string, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Strings is not achievable when selecting more than 1 field") + } + var v []string + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// StringsX is like Strings, but panics if an error occurs. +func (s *selector) StringsX(ctx context.Context) []string { + v, err := s.Strings(ctx) + if err != nil { + panic(err) + } + return v +} + +// String returns a single string from a selector. It is only allowed when selecting one field. +func (s *selector) String(ctx context.Context) (_ string, err error) { + var v []string + if v, err = s.Strings(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Strings returned %d results when one was expected", len(v)) + } + return +} + +// StringX is like String, but panics if an error occurs. +func (s *selector) StringX(ctx context.Context) string { + v, err := s.String(ctx) + if err != nil { + panic(err) + } + return v +} + +// Ints returns list of ints from a selector. It is only allowed when selecting one field. +func (s *selector) Ints(ctx context.Context) ([]int, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Ints is not achievable when selecting more than 1 field") + } + var v []int + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// IntsX is like Ints, but panics if an error occurs. +func (s *selector) IntsX(ctx context.Context) []int { + v, err := s.Ints(ctx) + if err != nil { + panic(err) + } + return v +} + +// Int returns a single int from a selector. It is only allowed when selecting one field. +func (s *selector) Int(ctx context.Context) (_ int, err error) { + var v []int + if v, err = s.Ints(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Ints returned %d results when one was expected", len(v)) + } + return +} + +// IntX is like Int, but panics if an error occurs. +func (s *selector) IntX(ctx context.Context) int { + v, err := s.Int(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64s returns list of float64s from a selector. It is only allowed when selecting one field. +func (s *selector) Float64s(ctx context.Context) ([]float64, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Float64s is not achievable when selecting more than 1 field") + } + var v []float64 + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// Float64sX is like Float64s, but panics if an error occurs. +func (s *selector) Float64sX(ctx context.Context) []float64 { + v, err := s.Float64s(ctx) + if err != nil { + panic(err) + } + return v +} + +// Float64 returns a single float64 from a selector. It is only allowed when selecting one field. +func (s *selector) Float64(ctx context.Context) (_ float64, err error) { + var v []float64 + if v, err = s.Float64s(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Float64s returned %d results when one was expected", len(v)) + } + return +} + +// Float64X is like Float64, but panics if an error occurs. +func (s *selector) Float64X(ctx context.Context) float64 { + v, err := s.Float64(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bools returns list of bools from a selector. It is only allowed when selecting one field. +func (s *selector) Bools(ctx context.Context) ([]bool, error) { + if len(*s.flds) > 1 { + return nil, errors.New("ent: Bools is not achievable when selecting more than 1 field") + } + var v []bool + if err := s.scan(ctx, &v); err != nil { + return nil, err + } + return v, nil +} + +// BoolsX is like Bools, but panics if an error occurs. +func (s *selector) BoolsX(ctx context.Context) []bool { + v, err := s.Bools(ctx) + if err != nil { + panic(err) + } + return v +} + +// Bool returns a single bool from a selector. It is only allowed when selecting one field. +func (s *selector) Bool(ctx context.Context) (_ bool, err error) { + var v []bool + if v, err = s.Bools(ctx); err != nil { + return + } + switch len(v) { + case 1: + return v[0], nil + case 0: + err = &NotFoundError{s.label} + default: + err = fmt.Errorf("ent: Bools returned %d results when one was expected", len(v)) + } + return +} + +// BoolX is like Bool, but panics if an error occurs. +func (s *selector) BoolX(ctx context.Context) bool { + v, err := s.Bool(ctx) + if err != nil { + panic(err) + } + return v +} + +// withHooks invokes the builder operation with the given hooks, if any. +func withHooks[V Value, M any, PM interface { + *M + Mutation +}](ctx context.Context, exec func(context.Context) (V, error), mutation PM, hooks []Hook) (value V, err error) { + if len(hooks) == 0 { + return exec(ctx) + } + var mut Mutator = MutateFunc(func(ctx context.Context, m Mutation) (Value, error) { + mutationT, ok := any(m).(PM) + if !ok { + return nil, fmt.Errorf("unexpected mutation type %T", m) + } + // Set the mutation to the builder. + *mutation = *mutationT + return exec(ctx) + }) + for i := len(hooks) - 1; i >= 0; i-- { + if hooks[i] == nil { + return value, fmt.Errorf("ent: uninitialized hook (forgotten import ent/runtime?)") + } + mut = hooks[i](mut) + } + v, err := mut.Mutate(ctx, mutation) + if err != nil { + return value, err + } + nv, ok := v.(V) + if !ok { + return value, fmt.Errorf("unexpected node type %T returned from %T", v, mutation) + } + return nv, nil +} + +// setContextOp returns a new context with the given QueryContext attached (including its op) in case it does not exist. +func setContextOp(ctx context.Context, qc *QueryContext, op string) context.Context { + if ent.QueryFromContext(ctx) == nil { + qc.Op = op + ctx = ent.NewQueryContext(ctx, qc) + } + return ctx +} + +func querierAll[V Value, Q interface { + sqlAll(context.Context, ...queryHook) (V, error) +}]() Querier { + return QuerierFunc(func(ctx context.Context, q Query) (Value, error) { + query, ok := q.(Q) + if !ok { + return nil, fmt.Errorf("unexpected query type %T", q) + } + return query.sqlAll(ctx) + }) +} + +func querierCount[Q interface { + sqlCount(context.Context) (int, error) +}]() Querier { + return QuerierFunc(func(ctx context.Context, q Query) (Value, error) { + query, ok := q.(Q) + if !ok { + return nil, fmt.Errorf("unexpected query type %T", q) + } + return query.sqlCount(ctx) + }) +} + +func withInterceptors[V Value](ctx context.Context, q Query, qr Querier, inters []Interceptor) (v V, err error) { + for i := len(inters) - 1; i >= 0; i-- { + qr = inters[i].Intercept(qr) + } + rv, err := qr.Query(ctx, q) + if err != nil { + return v, err + } + vt, ok := rv.(V) + if !ok { + return v, fmt.Errorf("unexpected type %T returned from %T. expected type: %T", vt, q, v) + } + return vt, nil +} + +func scanWithInterceptors[Q1 ent.Query, Q2 interface { + sqlScan(context.Context, Q1, any) error +}](ctx context.Context, rootQuery Q1, selectOrGroup Q2, inters []Interceptor, v any) error { + rv := reflect.ValueOf(v) + var qr Querier = QuerierFunc(func(ctx context.Context, q Query) (Value, error) { + query, ok := q.(Q1) + if !ok { + return nil, fmt.Errorf("unexpected query type %T", q) + } + if err := selectOrGroup.sqlScan(ctx, query, v); err != nil { + return nil, err + } + if k := rv.Kind(); k == reflect.Pointer && rv.Elem().CanInterface() { + return rv.Elem().Interface(), nil + } + return v, nil + }) + for i := len(inters) - 1; i >= 0; i-- { + qr = inters[i].Intercept(qr) + } + vv, err := qr.Query(ctx, rootQuery) + if err != nil { + return err + } + switch rv2 := reflect.ValueOf(vv); { + case rv.IsNil(), rv2.IsNil(), rv.Kind() != reflect.Pointer: + case rv.Type() == rv2.Type(): + rv.Elem().Set(rv2.Elem()) + case rv.Elem().Type() == rv2.Type(): + rv.Elem().Set(rv2) + } + return nil +} + +// queryHook describes an internal hook for the different sqlAll methods. +type queryHook func(context.Context, *sqlgraph.QuerySpec) diff --git a/internal/ent/enttest/enttest.go b/internal/ent/enttest/enttest.go new file mode 100644 index 0000000..1551445 --- /dev/null +++ b/internal/ent/enttest/enttest.go @@ -0,0 +1,85 @@ +// Code generated by ent, DO NOT EDIT. + +package enttest + +import ( + "context" + + "unR2/internal/ent" + // required by schema hooks. + _ "unR2/internal/ent/runtime" + + "unR2/internal/ent/migrate" + + "entgo.io/ent/dialect/sql/schema" +) + +type ( + // TestingT is the interface that is shared between + // testing.T and testing.B and used by enttest. + TestingT interface { + FailNow() + Error(...any) + } + + // Option configures client creation. + Option func(*options) + + options struct { + opts []ent.Option + migrateOpts []schema.MigrateOption + } +) + +// WithOptions forwards options to client creation. +func WithOptions(opts ...ent.Option) Option { + return func(o *options) { + o.opts = append(o.opts, opts...) + } +} + +// WithMigrateOptions forwards options to auto migration. +func WithMigrateOptions(opts ...schema.MigrateOption) Option { + return func(o *options) { + o.migrateOpts = append(o.migrateOpts, opts...) + } +} + +func newOptions(opts []Option) *options { + o := &options{} + for _, opt := range opts { + opt(o) + } + return o +} + +// Open calls ent.Open and auto-run migration. +func Open(t TestingT, driverName, dataSourceName string, opts ...Option) *ent.Client { + o := newOptions(opts) + c, err := ent.Open(driverName, dataSourceName, o.opts...) + if err != nil { + t.Error(err) + t.FailNow() + } + migrateSchema(t, c, o) + return c +} + +// NewClient calls ent.NewClient and auto-run migration. +func NewClient(t TestingT, opts ...Option) *ent.Client { + o := newOptions(opts) + c := ent.NewClient(o.opts...) + migrateSchema(t, c, o) + return c +} +func migrateSchema(t TestingT, c *ent.Client, o *options) { + tables, err := schema.CopyTables(migrate.Tables) + if err != nil { + t.Error(err) + t.FailNow() + } + if err := migrate.Create(context.Background(), c.Schema, tables, o.migrateOpts...); err != nil { + t.Error(err) + t.FailNow() + } +} diff --git a/internal/ent/generate.go b/internal/ent/generate.go new file mode 100644 index 0000000..8d3fdfd --- /dev/null +++ b/internal/ent/generate.go @@ -0,0 +1,3 @@ +package ent + +//go:generate go run -mod=mod entgo.io/ent/cmd/ent generate ./schema diff --git a/internal/ent/hook/hook.go b/internal/ent/hook/hook.go new file mode 100644 index 0000000..cdb1f94 --- /dev/null +++ b/internal/ent/hook/hook.go @@ -0,0 +1,210 @@ +// Code generated by ent, DO NOT EDIT. + +package hook + +import ( + "context" + "fmt" + "unR2/internal/ent" +) + +// The CloudflareAccountsFunc type is an adapter to allow the use of ordinary +// function as CloudflareAccounts mutator. +type CloudflareAccountsFunc func(context.Context, *ent.CloudflareAccountsMutation) (ent.Value, error) + +// Mutate calls f(ctx, m). +func (f CloudflareAccountsFunc) Mutate(ctx context.Context, m ent.Mutation) (ent.Value, error) { + if mv, ok := m.(*ent.CloudflareAccountsMutation); ok { + return f(ctx, mv) + } + return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.CloudflareAccountsMutation", m) +} + +// The CloudflareR2Func type is an adapter to allow the use of ordinary +// function as CloudflareR2 mutator. +type CloudflareR2Func func(context.Context, *ent.CloudflareR2Mutation) (ent.Value, error) + +// Mutate calls f(ctx, m). +func (f CloudflareR2Func) Mutate(ctx context.Context, m ent.Mutation) (ent.Value, error) { + if mv, ok := m.(*ent.CloudflareR2Mutation); ok { + return f(ctx, mv) + } + return nil, fmt.Errorf("unexpected mutation type %T. expect *ent.CloudflareR2Mutation", m) +} + +// Condition is a hook condition function. +type Condition func(context.Context, ent.Mutation) bool + +// And groups conditions with the AND operator. +func And(first, second Condition, rest ...Condition) Condition { + return func(ctx context.Context, m ent.Mutation) bool { + if !first(ctx, m) || !second(ctx, m) { + return false + } + for _, cond := range rest { + if !cond(ctx, m) { + return false + } + } + return true + } +} + +// Or groups conditions with the OR operator. +func Or(first, second Condition, rest ...Condition) Condition { + return func(ctx context.Context, m ent.Mutation) bool { + if first(ctx, m) || second(ctx, m) { + return true + } + for _, cond := range rest { + if cond(ctx, m) { + return true + } + } + return false + } +} + +// Not negates a given condition. +func Not(cond Condition) Condition { + return func(ctx context.Context, m ent.Mutation) bool { + return !cond(ctx, m) + } +} + +// HasOp is a condition testing mutation operation. +func HasOp(op ent.Op) Condition { + return func(_ context.Context, m ent.Mutation) bool { + return m.Op().Is(op) + } +} + +// HasAddedFields is a condition validating `.AddedField` on fields. +func HasAddedFields(field string, fields ...string) Condition { + return func(_ context.Context, m ent.Mutation) bool { + if _, exists := m.AddedField(field); !exists { + return false + } + for _, field := range fields { + if _, exists := m.AddedField(field); !exists { + return false + } + } + return true + } +} + +// HasClearedFields is a condition validating `.FieldCleared` on fields. +func HasClearedFields(field string, fields ...string) Condition { + return func(_ context.Context, m ent.Mutation) bool { + if exists := m.FieldCleared(field); !exists { + return false + } + for _, field := range fields { + if exists := m.FieldCleared(field); !exists { + return false + } + } + return true + } +} + +// HasFields is a condition validating `.Field` on fields. +func HasFields(field string, fields ...string) Condition { + return func(_ context.Context, m ent.Mutation) bool { + if _, exists := m.Field(field); !exists { + return false + } + for _, field := range fields { + if _, exists := m.Field(field); !exists { + return false + } + } + return true + } +} + +// If executes the given hook under condition. +// +// hook.If(ComputeAverage, And(HasFields(...), HasAddedFields(...))) +func If(hk ent.Hook, cond Condition) ent.Hook { + return func(next ent.Mutator) ent.Mutator { + return ent.MutateFunc(func(ctx context.Context, m ent.Mutation) (ent.Value, error) { + if cond(ctx, m) { + return hk(next).Mutate(ctx, m) + } + return next.Mutate(ctx, m) + }) + } +} + +// On executes the given hook only for the given operation. +// +// hook.On(Log, ent.Delete|ent.Create) +func On(hk ent.Hook, op ent.Op) ent.Hook { + return If(hk, HasOp(op)) +} + +// Unless skips the given hook only for the given operation. +// +// hook.Unless(Log, ent.Update|ent.UpdateOne) +func Unless(hk ent.Hook, op ent.Op) ent.Hook { + return If(hk, Not(HasOp(op))) +} + +// FixedError is a hook returning a fixed error. +func FixedError(err error) ent.Hook { + return func(ent.Mutator) ent.Mutator { + return ent.MutateFunc(func(context.Context, ent.Mutation) (ent.Value, error) { + return nil, err + }) + } +} + +// Reject returns a hook that rejects all operations that match op. +// +// func (T) Hooks() []ent.Hook { +// return []ent.Hook{ +// Reject(ent.Delete|ent.Update), +// } +// } +func Reject(op ent.Op) ent.Hook { + hk := FixedError(fmt.Errorf("%s operation is not allowed", op)) + return On(hk, op) +} + +// Chain acts as a list of hooks and is effectively immutable. +// Once created, it will always hold the same set of hooks in the same order. +type Chain struct { + hooks []ent.Hook +} + +// NewChain creates a new chain of hooks. +func NewChain(hooks ...ent.Hook) Chain { + return Chain{append([]ent.Hook(nil), hooks...)} +} + +// Hook chains the list of hooks and returns the final hook. +func (c Chain) Hook() ent.Hook { + return func(mutator ent.Mutator) ent.Mutator { + for i := len(c.hooks) - 1; i >= 0; i-- { + mutator = c.hooks[i](mutator) + } + return mutator + } +} + +// Append extends a chain, adding the specified hook +// as the last ones in the mutation flow. +func (c Chain) Append(hooks ...ent.Hook) Chain { + newHooks := make([]ent.Hook, 0, len(c.hooks)+len(hooks)) + newHooks = append(newHooks, c.hooks...) + newHooks = append(newHooks, hooks...) + return Chain{newHooks} +} + +// Extend extends a chain, adding the specified chain +// as the last ones in the mutation flow. +func (c Chain) Extend(chain Chain) Chain { + return c.Append(chain.hooks...) +} diff --git a/internal/ent/migrate/migrate.go b/internal/ent/migrate/migrate.go new file mode 100644 index 0000000..1956a6b --- /dev/null +++ b/internal/ent/migrate/migrate.go @@ -0,0 +1,64 @@ +// Code generated by ent, DO NOT EDIT. + +package migrate + +import ( + "context" + "fmt" + "io" + + "entgo.io/ent/dialect" + "entgo.io/ent/dialect/sql/schema" +) + +var ( + // WithGlobalUniqueID sets the universal ids options to the migration. + // If this option is enabled, ent migration will allocate a 1<<32 range + // for the ids of each entity (table). + // Note that this option cannot be applied on tables that already exist. + WithGlobalUniqueID = schema.WithGlobalUniqueID + // WithDropColumn sets the drop column option to the migration. + // If this option is enabled, ent migration will drop old columns + // that were used for both fields and edges. This defaults to false. + WithDropColumn = schema.WithDropColumn + // WithDropIndex sets the drop index option to the migration. + // If this option is enabled, ent migration will drop old indexes + // that were defined in the schema. This defaults to false. + // Note that unique constraints are defined using `UNIQUE INDEX`, + // and therefore, it's recommended to enable this option to get more + // flexibility in the schema changes. + WithDropIndex = schema.WithDropIndex + // WithForeignKeys enables creating foreign-key in schema DDL. This defaults to true. + WithForeignKeys = schema.WithForeignKeys +) + +// Schema is the API for creating, migrating and dropping a schema. +type Schema struct { + drv dialect.Driver +} + +// NewSchema creates a new schema client. +func NewSchema(drv dialect.Driver) *Schema { return &Schema{drv: drv} } + +// Create creates all schema resources. +func (s *Schema) Create(ctx context.Context, opts ...schema.MigrateOption) error { + return Create(ctx, s, Tables, opts...) +} + +// Create creates all table resources using the given schema driver. +func Create(ctx context.Context, s *Schema, tables []*schema.Table, opts ...schema.MigrateOption) error { + migrate, err := schema.NewMigrate(s.drv, opts...) + if err != nil { + return fmt.Errorf("ent/migrate: %w", err) + } + return migrate.Create(ctx, tables...) +} + +// WriteTo writes the schema changes to w instead of running them against the database. +// +// if err := client.Schema.WriteTo(context.Background(), os.Stdout); err != nil { +// log.Fatal(err) +// } +func (s *Schema) WriteTo(ctx context.Context, w io.Writer, opts ...schema.MigrateOption) error { + return Create(ctx, &Schema{drv: &schema.WriteDriver{Writer: w, Driver: s.drv}}, Tables, opts...) +} diff --git a/internal/ent/migrate/schema.go b/internal/ent/migrate/schema.go new file mode 100644 index 0000000..319ec37 --- /dev/null +++ b/internal/ent/migrate/schema.go @@ -0,0 +1,68 @@ +// Code generated by ent, DO NOT EDIT. + +package migrate + +import ( + "entgo.io/ent/dialect/sql/schema" + "entgo.io/ent/schema/field" +) + +var ( + // CloudflareAccountsColumns holds the columns for the "cloudflare_accounts" table. + CloudflareAccountsColumns = []*schema.Column{ + {Name: "id", Type: field.TypeInt, Increment: true}, + {Name: "name", Type: field.TypeString}, + {Name: "account_id", Type: field.TypeString}, + {Name: "api_token", Type: field.TypeString, Size: 2147483647}, + {Name: "email", Type: field.TypeString, Nullable: true}, + {Name: "status", Type: field.TypeInt8, Default: 1}, + {Name: "remark", Type: field.TypeString, Nullable: true, Size: 2147483647}, + {Name: "created_at", Type: field.TypeTime}, + {Name: "updated_at", Type: field.TypeTime}, + } + // CloudflareAccountsTable holds the schema information for the "cloudflare_accounts" table. + CloudflareAccountsTable = &schema.Table{ + Name: "cloudflare_accounts", + Columns: CloudflareAccountsColumns, + PrimaryKey: []*schema.Column{CloudflareAccountsColumns[0]}, + } + // CloudflareR2sColumns holds the columns for the "cloudflare_r2s" table. + CloudflareR2sColumns = []*schema.Column{ + {Name: "id", Type: field.TypeInt, Increment: true}, + {Name: "owner_id", Type: field.TypeString}, + {Name: "name", Type: field.TypeString}, + {Name: "location", Type: field.TypeString}, + {Name: "storage_class", Type: field.TypeString}, + {Name: "status", Type: field.TypeInt8, Default: 1}, + {Name: "payload_size", Type: field.TypeInt64, Default: 0}, + {Name: "metadata_size", Type: field.TypeInt64, Default: 0}, + {Name: "object_count", Type: field.TypeInt, Default: 0}, + {Name: "remark", Type: field.TypeString, Nullable: true, Size: 2147483647}, + {Name: "created_at", Type: field.TypeTime}, + {Name: "updated_at", Type: field.TypeTime}, + {Name: "cloudflare_accounts_cloudflare_buckets", Type: field.TypeInt}, + } + // CloudflareR2sTable holds the schema information for the "cloudflare_r2s" table. + CloudflareR2sTable = &schema.Table{ + Name: "cloudflare_r2s", + Columns: CloudflareR2sColumns, + PrimaryKey: []*schema.Column{CloudflareR2sColumns[0]}, + ForeignKeys: []*schema.ForeignKey{ + { + Symbol: "cloudflare_r2s_cloudflare_accounts_cloudflare_buckets", + Columns: []*schema.Column{CloudflareR2sColumns[12]}, + RefColumns: []*schema.Column{CloudflareAccountsColumns[0]}, + OnDelete: schema.NoAction, + }, + }, + } + // Tables holds all the tables in the schema. + Tables = []*schema.Table{ + CloudflareAccountsTable, + CloudflareR2sTable, + } +) + +func init() { + CloudflareR2sTable.ForeignKeys[0].RefTable = CloudflareAccountsTable +} diff --git a/internal/ent/mutation.go b/internal/ent/mutation.go new file mode 100644 index 0000000..e22bfa6 --- /dev/null +++ b/internal/ent/mutation.go @@ -0,0 +1,1994 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "errors" + "fmt" + "sync" + "time" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + "unR2/internal/ent/predicate" + + "entgo.io/ent" + "entgo.io/ent/dialect/sql" +) + +const ( + // Operation types. + OpCreate = ent.OpCreate + OpDelete = ent.OpDelete + OpDeleteOne = ent.OpDeleteOne + OpUpdate = ent.OpUpdate + OpUpdateOne = ent.OpUpdateOne + + // Node types. + TypeCloudflareAccounts = "CloudflareAccounts" + TypeCloudflareR2 = "CloudflareR2" +) + +// CloudflareAccountsMutation represents an operation that mutates the CloudflareAccounts nodes in the graph. +type CloudflareAccountsMutation struct { + config + op Op + typ string + id *int + name *string + account_id *string + api_token *string + email *string + status *int8 + addstatus *int8 + remark *string + created_at *time.Time + updated_at *time.Time + clearedFields map[string]struct{} + cloudflare_buckets map[int]struct{} + removedcloudflare_buckets map[int]struct{} + clearedcloudflare_buckets bool + done bool + oldValue func(context.Context) (*CloudflareAccounts, error) + predicates []predicate.CloudflareAccounts +} + +var _ ent.Mutation = (*CloudflareAccountsMutation)(nil) + +// cloudflareaccountsOption allows management of the mutation configuration using functional options. +type cloudflareaccountsOption func(*CloudflareAccountsMutation) + +// newCloudflareAccountsMutation creates new mutation for the CloudflareAccounts entity. +func newCloudflareAccountsMutation(c config, op Op, opts ...cloudflareaccountsOption) *CloudflareAccountsMutation { + m := &CloudflareAccountsMutation{ + config: c, + op: op, + typ: TypeCloudflareAccounts, + clearedFields: make(map[string]struct{}), + } + for _, opt := range opts { + opt(m) + } + return m +} + +// withCloudflareAccountsID sets the ID field of the mutation. +func withCloudflareAccountsID(id int) cloudflareaccountsOption { + return func(m *CloudflareAccountsMutation) { + var ( + err error + once sync.Once + value *CloudflareAccounts + ) + m.oldValue = func(ctx context.Context) (*CloudflareAccounts, error) { + once.Do(func() { + if m.done { + err = errors.New("querying old values post mutation is not allowed") + } else { + value, err = m.Client().CloudflareAccounts.Get(ctx, id) + } + }) + return value, err + } + m.id = &id + } +} + +// withCloudflareAccounts sets the old CloudflareAccounts of the mutation. +func withCloudflareAccounts(node *CloudflareAccounts) cloudflareaccountsOption { + return func(m *CloudflareAccountsMutation) { + m.oldValue = func(context.Context) (*CloudflareAccounts, error) { + return node, nil + } + m.id = &node.ID + } +} + +// Client returns a new `ent.Client` from the mutation. If the mutation was +// executed in a transaction (ent.Tx), a transactional client is returned. +func (m CloudflareAccountsMutation) Client() *Client { + client := &Client{config: m.config} + client.init() + return client +} + +// Tx returns an `ent.Tx` for mutations that were executed in transactions; +// it returns an error otherwise. +func (m CloudflareAccountsMutation) Tx() (*Tx, error) { + if _, ok := m.driver.(*txDriver); !ok { + return nil, errors.New("ent: mutation is not running in a transaction") + } + tx := &Tx{config: m.config} + tx.init() + return tx, nil +} + +// ID returns the ID value in the mutation. Note that the ID is only available +// if it was provided to the builder or after it was returned from the database. +func (m *CloudflareAccountsMutation) ID() (id int, exists bool) { + if m.id == nil { + return + } + return *m.id, true +} + +// IDs queries the database and returns the entity ids that match the mutation's predicate. +// That means, if the mutation is applied within a transaction with an isolation level such +// as sql.LevelSerializable, the returned ids match the ids of the rows that will be updated +// or updated by the mutation. +func (m *CloudflareAccountsMutation) IDs(ctx context.Context) ([]int, error) { + switch { + case m.op.Is(OpUpdateOne | OpDeleteOne): + id, exists := m.ID() + if exists { + return []int{id}, nil + } + fallthrough + case m.op.Is(OpUpdate | OpDelete): + return m.Client().CloudflareAccounts.Query().Where(m.predicates...).IDs(ctx) + default: + return nil, fmt.Errorf("IDs is not allowed on %s operations", m.op) + } +} + +// SetName sets the "name" field. +func (m *CloudflareAccountsMutation) SetName(s string) { + m.name = &s +} + +// Name returns the value of the "name" field in the mutation. +func (m *CloudflareAccountsMutation) Name() (r string, exists bool) { + v := m.name + if v == nil { + return + } + return *v, true +} + +// OldName returns the old "name" field's value of the CloudflareAccounts entity. +// If the CloudflareAccounts object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareAccountsMutation) OldName(ctx context.Context) (v string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldName is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldName requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldName: %w", err) + } + return oldValue.Name, nil +} + +// ResetName resets all changes to the "name" field. +func (m *CloudflareAccountsMutation) ResetName() { + m.name = nil +} + +// SetAccountID sets the "account_id" field. +func (m *CloudflareAccountsMutation) SetAccountID(s string) { + m.account_id = &s +} + +// AccountID returns the value of the "account_id" field in the mutation. +func (m *CloudflareAccountsMutation) AccountID() (r string, exists bool) { + v := m.account_id + if v == nil { + return + } + return *v, true +} + +// OldAccountID returns the old "account_id" field's value of the CloudflareAccounts entity. +// If the CloudflareAccounts object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareAccountsMutation) OldAccountID(ctx context.Context) (v string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldAccountID is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldAccountID requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldAccountID: %w", err) + } + return oldValue.AccountID, nil +} + +// ResetAccountID resets all changes to the "account_id" field. +func (m *CloudflareAccountsMutation) ResetAccountID() { + m.account_id = nil +} + +// SetAPIToken sets the "api_token" field. +func (m *CloudflareAccountsMutation) SetAPIToken(s string) { + m.api_token = &s +} + +// APIToken returns the value of the "api_token" field in the mutation. +func (m *CloudflareAccountsMutation) APIToken() (r string, exists bool) { + v := m.api_token + if v == nil { + return + } + return *v, true +} + +// OldAPIToken returns the old "api_token" field's value of the CloudflareAccounts entity. +// If the CloudflareAccounts object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareAccountsMutation) OldAPIToken(ctx context.Context) (v string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldAPIToken is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldAPIToken requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldAPIToken: %w", err) + } + return oldValue.APIToken, nil +} + +// ResetAPIToken resets all changes to the "api_token" field. +func (m *CloudflareAccountsMutation) ResetAPIToken() { + m.api_token = nil +} + +// SetEmail sets the "email" field. +func (m *CloudflareAccountsMutation) SetEmail(s string) { + m.email = &s +} + +// Email returns the value of the "email" field in the mutation. +func (m *CloudflareAccountsMutation) Email() (r string, exists bool) { + v := m.email + if v == nil { + return + } + return *v, true +} + +// OldEmail returns the old "email" field's value of the CloudflareAccounts entity. +// If the CloudflareAccounts object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareAccountsMutation) OldEmail(ctx context.Context) (v string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldEmail is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldEmail requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldEmail: %w", err) + } + return oldValue.Email, nil +} + +// ClearEmail clears the value of the "email" field. +func (m *CloudflareAccountsMutation) ClearEmail() { + m.email = nil + m.clearedFields[cloudflareaccounts.FieldEmail] = struct{}{} +} + +// EmailCleared returns if the "email" field was cleared in this mutation. +func (m *CloudflareAccountsMutation) EmailCleared() bool { + _, ok := m.clearedFields[cloudflareaccounts.FieldEmail] + return ok +} + +// ResetEmail resets all changes to the "email" field. +func (m *CloudflareAccountsMutation) ResetEmail() { + m.email = nil + delete(m.clearedFields, cloudflareaccounts.FieldEmail) +} + +// SetStatus sets the "status" field. +func (m *CloudflareAccountsMutation) SetStatus(i int8) { + m.status = &i + m.addstatus = nil +} + +// Status returns the value of the "status" field in the mutation. +func (m *CloudflareAccountsMutation) Status() (r int8, exists bool) { + v := m.status + if v == nil { + return + } + return *v, true +} + +// OldStatus returns the old "status" field's value of the CloudflareAccounts entity. +// If the CloudflareAccounts object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareAccountsMutation) OldStatus(ctx context.Context) (v int8, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldStatus is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldStatus requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldStatus: %w", err) + } + return oldValue.Status, nil +} + +// AddStatus adds i to the "status" field. +func (m *CloudflareAccountsMutation) AddStatus(i int8) { + if m.addstatus != nil { + *m.addstatus += i + } else { + m.addstatus = &i + } +} + +// AddedStatus returns the value that was added to the "status" field in this mutation. +func (m *CloudflareAccountsMutation) AddedStatus() (r int8, exists bool) { + v := m.addstatus + if v == nil { + return + } + return *v, true +} + +// ResetStatus resets all changes to the "status" field. +func (m *CloudflareAccountsMutation) ResetStatus() { + m.status = nil + m.addstatus = nil +} + +// SetRemark sets the "remark" field. +func (m *CloudflareAccountsMutation) SetRemark(s string) { + m.remark = &s +} + +// Remark returns the value of the "remark" field in the mutation. +func (m *CloudflareAccountsMutation) Remark() (r string, exists bool) { + v := m.remark + if v == nil { + return + } + return *v, true +} + +// OldRemark returns the old "remark" field's value of the CloudflareAccounts entity. +// If the CloudflareAccounts object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareAccountsMutation) OldRemark(ctx context.Context) (v string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldRemark is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldRemark requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldRemark: %w", err) + } + return oldValue.Remark, nil +} + +// ClearRemark clears the value of the "remark" field. +func (m *CloudflareAccountsMutation) ClearRemark() { + m.remark = nil + m.clearedFields[cloudflareaccounts.FieldRemark] = struct{}{} +} + +// RemarkCleared returns if the "remark" field was cleared in this mutation. +func (m *CloudflareAccountsMutation) RemarkCleared() bool { + _, ok := m.clearedFields[cloudflareaccounts.FieldRemark] + return ok +} + +// ResetRemark resets all changes to the "remark" field. +func (m *CloudflareAccountsMutation) ResetRemark() { + m.remark = nil + delete(m.clearedFields, cloudflareaccounts.FieldRemark) +} + +// SetCreatedAt sets the "created_at" field. +func (m *CloudflareAccountsMutation) SetCreatedAt(t time.Time) { + m.created_at = &t +} + +// CreatedAt returns the value of the "created_at" field in the mutation. +func (m *CloudflareAccountsMutation) CreatedAt() (r time.Time, exists bool) { + v := m.created_at + if v == nil { + return + } + return *v, true +} + +// OldCreatedAt returns the old "created_at" field's value of the CloudflareAccounts entity. +// If the CloudflareAccounts object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareAccountsMutation) OldCreatedAt(ctx context.Context) (v time.Time, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldCreatedAt is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldCreatedAt requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldCreatedAt: %w", err) + } + return oldValue.CreatedAt, nil +} + +// ResetCreatedAt resets all changes to the "created_at" field. +func (m *CloudflareAccountsMutation) ResetCreatedAt() { + m.created_at = nil +} + +// SetUpdatedAt sets the "updated_at" field. +func (m *CloudflareAccountsMutation) SetUpdatedAt(t time.Time) { + m.updated_at = &t +} + +// UpdatedAt returns the value of the "updated_at" field in the mutation. +func (m *CloudflareAccountsMutation) UpdatedAt() (r time.Time, exists bool) { + v := m.updated_at + if v == nil { + return + } + return *v, true +} + +// OldUpdatedAt returns the old "updated_at" field's value of the CloudflareAccounts entity. +// If the CloudflareAccounts object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareAccountsMutation) OldUpdatedAt(ctx context.Context) (v time.Time, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldUpdatedAt is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldUpdatedAt requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldUpdatedAt: %w", err) + } + return oldValue.UpdatedAt, nil +} + +// ResetUpdatedAt resets all changes to the "updated_at" field. +func (m *CloudflareAccountsMutation) ResetUpdatedAt() { + m.updated_at = nil +} + +// AddCloudflareBucketIDs adds the "cloudflare_buckets" edge to the CloudflareR2 entity by ids. +func (m *CloudflareAccountsMutation) AddCloudflareBucketIDs(ids ...int) { + if m.cloudflare_buckets == nil { + m.cloudflare_buckets = make(map[int]struct{}) + } + for i := range ids { + m.cloudflare_buckets[ids[i]] = struct{}{} + } +} + +// ClearCloudflareBuckets clears the "cloudflare_buckets" edge to the CloudflareR2 entity. +func (m *CloudflareAccountsMutation) ClearCloudflareBuckets() { + m.clearedcloudflare_buckets = true +} + +// CloudflareBucketsCleared reports if the "cloudflare_buckets" edge to the CloudflareR2 entity was cleared. +func (m *CloudflareAccountsMutation) CloudflareBucketsCleared() bool { + return m.clearedcloudflare_buckets +} + +// RemoveCloudflareBucketIDs removes the "cloudflare_buckets" edge to the CloudflareR2 entity by IDs. +func (m *CloudflareAccountsMutation) RemoveCloudflareBucketIDs(ids ...int) { + if m.removedcloudflare_buckets == nil { + m.removedcloudflare_buckets = make(map[int]struct{}) + } + for i := range ids { + delete(m.cloudflare_buckets, ids[i]) + m.removedcloudflare_buckets[ids[i]] = struct{}{} + } +} + +// RemovedCloudflareBuckets returns the removed IDs of the "cloudflare_buckets" edge to the CloudflareR2 entity. +func (m *CloudflareAccountsMutation) RemovedCloudflareBucketsIDs() (ids []int) { + for id := range m.removedcloudflare_buckets { + ids = append(ids, id) + } + return +} + +// CloudflareBucketsIDs returns the "cloudflare_buckets" edge IDs in the mutation. +func (m *CloudflareAccountsMutation) CloudflareBucketsIDs() (ids []int) { + for id := range m.cloudflare_buckets { + ids = append(ids, id) + } + return +} + +// ResetCloudflareBuckets resets all changes to the "cloudflare_buckets" edge. +func (m *CloudflareAccountsMutation) ResetCloudflareBuckets() { + m.cloudflare_buckets = nil + m.clearedcloudflare_buckets = false + m.removedcloudflare_buckets = nil +} + +// Where appends a list predicates to the CloudflareAccountsMutation builder. +func (m *CloudflareAccountsMutation) Where(ps ...predicate.CloudflareAccounts) { + m.predicates = append(m.predicates, ps...) +} + +// WhereP appends storage-level predicates to the CloudflareAccountsMutation builder. Using this method, +// users can use type-assertion to append predicates that do not depend on any generated package. +func (m *CloudflareAccountsMutation) WhereP(ps ...func(*sql.Selector)) { + p := make([]predicate.CloudflareAccounts, len(ps)) + for i := range ps { + p[i] = ps[i] + } + m.Where(p...) +} + +// Op returns the operation name. +func (m *CloudflareAccountsMutation) Op() Op { + return m.op +} + +// SetOp allows setting the mutation operation. +func (m *CloudflareAccountsMutation) SetOp(op Op) { + m.op = op +} + +// Type returns the node type of this mutation (CloudflareAccounts). +func (m *CloudflareAccountsMutation) Type() string { + return m.typ +} + +// Fields returns all fields that were changed during this mutation. Note that in +// order to get all numeric fields that were incremented/decremented, call +// AddedFields(). +func (m *CloudflareAccountsMutation) Fields() []string { + fields := make([]string, 0, 8) + if m.name != nil { + fields = append(fields, cloudflareaccounts.FieldName) + } + if m.account_id != nil { + fields = append(fields, cloudflareaccounts.FieldAccountID) + } + if m.api_token != nil { + fields = append(fields, cloudflareaccounts.FieldAPIToken) + } + if m.email != nil { + fields = append(fields, cloudflareaccounts.FieldEmail) + } + if m.status != nil { + fields = append(fields, cloudflareaccounts.FieldStatus) + } + if m.remark != nil { + fields = append(fields, cloudflareaccounts.FieldRemark) + } + if m.created_at != nil { + fields = append(fields, cloudflareaccounts.FieldCreatedAt) + } + if m.updated_at != nil { + fields = append(fields, cloudflareaccounts.FieldUpdatedAt) + } + return fields +} + +// Field returns the value of a field with the given name. The second boolean +// return value indicates that this field was not set, or was not defined in the +// schema. +func (m *CloudflareAccountsMutation) Field(name string) (ent.Value, bool) { + switch name { + case cloudflareaccounts.FieldName: + return m.Name() + case cloudflareaccounts.FieldAccountID: + return m.AccountID() + case cloudflareaccounts.FieldAPIToken: + return m.APIToken() + case cloudflareaccounts.FieldEmail: + return m.Email() + case cloudflareaccounts.FieldStatus: + return m.Status() + case cloudflareaccounts.FieldRemark: + return m.Remark() + case cloudflareaccounts.FieldCreatedAt: + return m.CreatedAt() + case cloudflareaccounts.FieldUpdatedAt: + return m.UpdatedAt() + } + return nil, false +} + +// OldField returns the old value of the field from the database. An error is +// returned if the mutation operation is not UpdateOne, or the query to the +// database failed. +func (m *CloudflareAccountsMutation) OldField(ctx context.Context, name string) (ent.Value, error) { + switch name { + case cloudflareaccounts.FieldName: + return m.OldName(ctx) + case cloudflareaccounts.FieldAccountID: + return m.OldAccountID(ctx) + case cloudflareaccounts.FieldAPIToken: + return m.OldAPIToken(ctx) + case cloudflareaccounts.FieldEmail: + return m.OldEmail(ctx) + case cloudflareaccounts.FieldStatus: + return m.OldStatus(ctx) + case cloudflareaccounts.FieldRemark: + return m.OldRemark(ctx) + case cloudflareaccounts.FieldCreatedAt: + return m.OldCreatedAt(ctx) + case cloudflareaccounts.FieldUpdatedAt: + return m.OldUpdatedAt(ctx) + } + return nil, fmt.Errorf("unknown CloudflareAccounts field %s", name) +} + +// SetField sets the value of a field with the given name. It returns an error if +// the field is not defined in the schema, or if the type mismatched the field +// type. +func (m *CloudflareAccountsMutation) SetField(name string, value ent.Value) error { + switch name { + case cloudflareaccounts.FieldName: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetName(v) + return nil + case cloudflareaccounts.FieldAccountID: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetAccountID(v) + return nil + case cloudflareaccounts.FieldAPIToken: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetAPIToken(v) + return nil + case cloudflareaccounts.FieldEmail: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetEmail(v) + return nil + case cloudflareaccounts.FieldStatus: + v, ok := value.(int8) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetStatus(v) + return nil + case cloudflareaccounts.FieldRemark: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetRemark(v) + return nil + case cloudflareaccounts.FieldCreatedAt: + v, ok := value.(time.Time) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetCreatedAt(v) + return nil + case cloudflareaccounts.FieldUpdatedAt: + v, ok := value.(time.Time) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetUpdatedAt(v) + return nil + } + return fmt.Errorf("unknown CloudflareAccounts field %s", name) +} + +// AddedFields returns all numeric fields that were incremented/decremented during +// this mutation. +func (m *CloudflareAccountsMutation) AddedFields() []string { + var fields []string + if m.addstatus != nil { + fields = append(fields, cloudflareaccounts.FieldStatus) + } + return fields +} + +// AddedField returns the numeric value that was incremented/decremented on a field +// with the given name. The second boolean return value indicates that this field +// was not set, or was not defined in the schema. +func (m *CloudflareAccountsMutation) AddedField(name string) (ent.Value, bool) { + switch name { + case cloudflareaccounts.FieldStatus: + return m.AddedStatus() + } + return nil, false +} + +// AddField adds the value to the field with the given name. It returns an error if +// the field is not defined in the schema, or if the type mismatched the field +// type. +func (m *CloudflareAccountsMutation) AddField(name string, value ent.Value) error { + switch name { + case cloudflareaccounts.FieldStatus: + v, ok := value.(int8) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.AddStatus(v) + return nil + } + return fmt.Errorf("unknown CloudflareAccounts numeric field %s", name) +} + +// ClearedFields returns all nullable fields that were cleared during this +// mutation. +func (m *CloudflareAccountsMutation) ClearedFields() []string { + var fields []string + if m.FieldCleared(cloudflareaccounts.FieldEmail) { + fields = append(fields, cloudflareaccounts.FieldEmail) + } + if m.FieldCleared(cloudflareaccounts.FieldRemark) { + fields = append(fields, cloudflareaccounts.FieldRemark) + } + return fields +} + +// FieldCleared returns a boolean indicating if a field with the given name was +// cleared in this mutation. +func (m *CloudflareAccountsMutation) FieldCleared(name string) bool { + _, ok := m.clearedFields[name] + return ok +} + +// ClearField clears the value of the field with the given name. It returns an +// error if the field is not defined in the schema. +func (m *CloudflareAccountsMutation) ClearField(name string) error { + switch name { + case cloudflareaccounts.FieldEmail: + m.ClearEmail() + return nil + case cloudflareaccounts.FieldRemark: + m.ClearRemark() + return nil + } + return fmt.Errorf("unknown CloudflareAccounts nullable field %s", name) +} + +// ResetField resets all changes in the mutation for the field with the given name. +// It returns an error if the field is not defined in the schema. +func (m *CloudflareAccountsMutation) ResetField(name string) error { + switch name { + case cloudflareaccounts.FieldName: + m.ResetName() + return nil + case cloudflareaccounts.FieldAccountID: + m.ResetAccountID() + return nil + case cloudflareaccounts.FieldAPIToken: + m.ResetAPIToken() + return nil + case cloudflareaccounts.FieldEmail: + m.ResetEmail() + return nil + case cloudflareaccounts.FieldStatus: + m.ResetStatus() + return nil + case cloudflareaccounts.FieldRemark: + m.ResetRemark() + return nil + case cloudflareaccounts.FieldCreatedAt: + m.ResetCreatedAt() + return nil + case cloudflareaccounts.FieldUpdatedAt: + m.ResetUpdatedAt() + return nil + } + return fmt.Errorf("unknown CloudflareAccounts field %s", name) +} + +// AddedEdges returns all edge names that were set/added in this mutation. +func (m *CloudflareAccountsMutation) AddedEdges() []string { + edges := make([]string, 0, 1) + if m.cloudflare_buckets != nil { + edges = append(edges, cloudflareaccounts.EdgeCloudflareBuckets) + } + return edges +} + +// AddedIDs returns all IDs (to other nodes) that were added for the given edge +// name in this mutation. +func (m *CloudflareAccountsMutation) AddedIDs(name string) []ent.Value { + switch name { + case cloudflareaccounts.EdgeCloudflareBuckets: + ids := make([]ent.Value, 0, len(m.cloudflare_buckets)) + for id := range m.cloudflare_buckets { + ids = append(ids, id) + } + return ids + } + return nil +} + +// RemovedEdges returns all edge names that were removed in this mutation. +func (m *CloudflareAccountsMutation) RemovedEdges() []string { + edges := make([]string, 0, 1) + if m.removedcloudflare_buckets != nil { + edges = append(edges, cloudflareaccounts.EdgeCloudflareBuckets) + } + return edges +} + +// RemovedIDs returns all IDs (to other nodes) that were removed for the edge with +// the given name in this mutation. +func (m *CloudflareAccountsMutation) RemovedIDs(name string) []ent.Value { + switch name { + case cloudflareaccounts.EdgeCloudflareBuckets: + ids := make([]ent.Value, 0, len(m.removedcloudflare_buckets)) + for id := range m.removedcloudflare_buckets { + ids = append(ids, id) + } + return ids + } + return nil +} + +// ClearedEdges returns all edge names that were cleared in this mutation. +func (m *CloudflareAccountsMutation) ClearedEdges() []string { + edges := make([]string, 0, 1) + if m.clearedcloudflare_buckets { + edges = append(edges, cloudflareaccounts.EdgeCloudflareBuckets) + } + return edges +} + +// EdgeCleared returns a boolean which indicates if the edge with the given name +// was cleared in this mutation. +func (m *CloudflareAccountsMutation) EdgeCleared(name string) bool { + switch name { + case cloudflareaccounts.EdgeCloudflareBuckets: + return m.clearedcloudflare_buckets + } + return false +} + +// ClearEdge clears the value of the edge with the given name. It returns an error +// if that edge is not defined in the schema. +func (m *CloudflareAccountsMutation) ClearEdge(name string) error { + switch name { + } + return fmt.Errorf("unknown CloudflareAccounts unique edge %s", name) +} + +// ResetEdge resets all changes to the edge with the given name in this mutation. +// It returns an error if the edge is not defined in the schema. +func (m *CloudflareAccountsMutation) ResetEdge(name string) error { + switch name { + case cloudflareaccounts.EdgeCloudflareBuckets: + m.ResetCloudflareBuckets() + return nil + } + return fmt.Errorf("unknown CloudflareAccounts edge %s", name) +} + +// CloudflareR2Mutation represents an operation that mutates the CloudflareR2 nodes in the graph. +type CloudflareR2Mutation struct { + config + op Op + typ string + id *int + owner_id *string + name *string + location *string + storage_class *string + status *int8 + addstatus *int8 + payload_size *int64 + addpayload_size *int64 + metadata_size *int64 + addmetadata_size *int64 + object_count *int + addobject_count *int + remark *string + created_at *time.Time + updated_at *time.Time + clearedFields map[string]struct{} + cloudflare_account *int + clearedcloudflare_account bool + done bool + oldValue func(context.Context) (*CloudflareR2, error) + predicates []predicate.CloudflareR2 +} + +var _ ent.Mutation = (*CloudflareR2Mutation)(nil) + +// cloudflarer2Option allows management of the mutation configuration using functional options. +type cloudflarer2Option func(*CloudflareR2Mutation) + +// newCloudflareR2Mutation creates new mutation for the CloudflareR2 entity. +func newCloudflareR2Mutation(c config, op Op, opts ...cloudflarer2Option) *CloudflareR2Mutation { + m := &CloudflareR2Mutation{ + config: c, + op: op, + typ: TypeCloudflareR2, + clearedFields: make(map[string]struct{}), + } + for _, opt := range opts { + opt(m) + } + return m +} + +// withCloudflareR2ID sets the ID field of the mutation. +func withCloudflareR2ID(id int) cloudflarer2Option { + return func(m *CloudflareR2Mutation) { + var ( + err error + once sync.Once + value *CloudflareR2 + ) + m.oldValue = func(ctx context.Context) (*CloudflareR2, error) { + once.Do(func() { + if m.done { + err = errors.New("querying old values post mutation is not allowed") + } else { + value, err = m.Client().CloudflareR2.Get(ctx, id) + } + }) + return value, err + } + m.id = &id + } +} + +// withCloudflareR2 sets the old CloudflareR2 of the mutation. +func withCloudflareR2(node *CloudflareR2) cloudflarer2Option { + return func(m *CloudflareR2Mutation) { + m.oldValue = func(context.Context) (*CloudflareR2, error) { + return node, nil + } + m.id = &node.ID + } +} + +// Client returns a new `ent.Client` from the mutation. If the mutation was +// executed in a transaction (ent.Tx), a transactional client is returned. +func (m CloudflareR2Mutation) Client() *Client { + client := &Client{config: m.config} + client.init() + return client +} + +// Tx returns an `ent.Tx` for mutations that were executed in transactions; +// it returns an error otherwise. +func (m CloudflareR2Mutation) Tx() (*Tx, error) { + if _, ok := m.driver.(*txDriver); !ok { + return nil, errors.New("ent: mutation is not running in a transaction") + } + tx := &Tx{config: m.config} + tx.init() + return tx, nil +} + +// ID returns the ID value in the mutation. Note that the ID is only available +// if it was provided to the builder or after it was returned from the database. +func (m *CloudflareR2Mutation) ID() (id int, exists bool) { + if m.id == nil { + return + } + return *m.id, true +} + +// IDs queries the database and returns the entity ids that match the mutation's predicate. +// That means, if the mutation is applied within a transaction with an isolation level such +// as sql.LevelSerializable, the returned ids match the ids of the rows that will be updated +// or updated by the mutation. +func (m *CloudflareR2Mutation) IDs(ctx context.Context) ([]int, error) { + switch { + case m.op.Is(OpUpdateOne | OpDeleteOne): + id, exists := m.ID() + if exists { + return []int{id}, nil + } + fallthrough + case m.op.Is(OpUpdate | OpDelete): + return m.Client().CloudflareR2.Query().Where(m.predicates...).IDs(ctx) + default: + return nil, fmt.Errorf("IDs is not allowed on %s operations", m.op) + } +} + +// SetOwnerID sets the "owner_id" field. +func (m *CloudflareR2Mutation) SetOwnerID(s string) { + m.owner_id = &s +} + +// OwnerID returns the value of the "owner_id" field in the mutation. +func (m *CloudflareR2Mutation) OwnerID() (r string, exists bool) { + v := m.owner_id + if v == nil { + return + } + return *v, true +} + +// OldOwnerID returns the old "owner_id" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldOwnerID(ctx context.Context) (v string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldOwnerID is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldOwnerID requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldOwnerID: %w", err) + } + return oldValue.OwnerID, nil +} + +// ResetOwnerID resets all changes to the "owner_id" field. +func (m *CloudflareR2Mutation) ResetOwnerID() { + m.owner_id = nil +} + +// SetName sets the "name" field. +func (m *CloudflareR2Mutation) SetName(s string) { + m.name = &s +} + +// Name returns the value of the "name" field in the mutation. +func (m *CloudflareR2Mutation) Name() (r string, exists bool) { + v := m.name + if v == nil { + return + } + return *v, true +} + +// OldName returns the old "name" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldName(ctx context.Context) (v string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldName is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldName requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldName: %w", err) + } + return oldValue.Name, nil +} + +// ResetName resets all changes to the "name" field. +func (m *CloudflareR2Mutation) ResetName() { + m.name = nil +} + +// SetLocation sets the "location" field. +func (m *CloudflareR2Mutation) SetLocation(s string) { + m.location = &s +} + +// Location returns the value of the "location" field in the mutation. +func (m *CloudflareR2Mutation) Location() (r string, exists bool) { + v := m.location + if v == nil { + return + } + return *v, true +} + +// OldLocation returns the old "location" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldLocation(ctx context.Context) (v string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldLocation is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldLocation requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldLocation: %w", err) + } + return oldValue.Location, nil +} + +// ResetLocation resets all changes to the "location" field. +func (m *CloudflareR2Mutation) ResetLocation() { + m.location = nil +} + +// SetStorageClass sets the "storage_class" field. +func (m *CloudflareR2Mutation) SetStorageClass(s string) { + m.storage_class = &s +} + +// StorageClass returns the value of the "storage_class" field in the mutation. +func (m *CloudflareR2Mutation) StorageClass() (r string, exists bool) { + v := m.storage_class + if v == nil { + return + } + return *v, true +} + +// OldStorageClass returns the old "storage_class" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldStorageClass(ctx context.Context) (v string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldStorageClass is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldStorageClass requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldStorageClass: %w", err) + } + return oldValue.StorageClass, nil +} + +// ResetStorageClass resets all changes to the "storage_class" field. +func (m *CloudflareR2Mutation) ResetStorageClass() { + m.storage_class = nil +} + +// SetStatus sets the "status" field. +func (m *CloudflareR2Mutation) SetStatus(i int8) { + m.status = &i + m.addstatus = nil +} + +// Status returns the value of the "status" field in the mutation. +func (m *CloudflareR2Mutation) Status() (r int8, exists bool) { + v := m.status + if v == nil { + return + } + return *v, true +} + +// OldStatus returns the old "status" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldStatus(ctx context.Context) (v int8, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldStatus is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldStatus requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldStatus: %w", err) + } + return oldValue.Status, nil +} + +// AddStatus adds i to the "status" field. +func (m *CloudflareR2Mutation) AddStatus(i int8) { + if m.addstatus != nil { + *m.addstatus += i + } else { + m.addstatus = &i + } +} + +// AddedStatus returns the value that was added to the "status" field in this mutation. +func (m *CloudflareR2Mutation) AddedStatus() (r int8, exists bool) { + v := m.addstatus + if v == nil { + return + } + return *v, true +} + +// ResetStatus resets all changes to the "status" field. +func (m *CloudflareR2Mutation) ResetStatus() { + m.status = nil + m.addstatus = nil +} + +// SetPayloadSize sets the "payload_size" field. +func (m *CloudflareR2Mutation) SetPayloadSize(i int64) { + m.payload_size = &i + m.addpayload_size = nil +} + +// PayloadSize returns the value of the "payload_size" field in the mutation. +func (m *CloudflareR2Mutation) PayloadSize() (r int64, exists bool) { + v := m.payload_size + if v == nil { + return + } + return *v, true +} + +// OldPayloadSize returns the old "payload_size" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldPayloadSize(ctx context.Context) (v int64, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldPayloadSize is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldPayloadSize requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldPayloadSize: %w", err) + } + return oldValue.PayloadSize, nil +} + +// AddPayloadSize adds i to the "payload_size" field. +func (m *CloudflareR2Mutation) AddPayloadSize(i int64) { + if m.addpayload_size != nil { + *m.addpayload_size += i + } else { + m.addpayload_size = &i + } +} + +// AddedPayloadSize returns the value that was added to the "payload_size" field in this mutation. +func (m *CloudflareR2Mutation) AddedPayloadSize() (r int64, exists bool) { + v := m.addpayload_size + if v == nil { + return + } + return *v, true +} + +// ResetPayloadSize resets all changes to the "payload_size" field. +func (m *CloudflareR2Mutation) ResetPayloadSize() { + m.payload_size = nil + m.addpayload_size = nil +} + +// SetMetadataSize sets the "metadata_size" field. +func (m *CloudflareR2Mutation) SetMetadataSize(i int64) { + m.metadata_size = &i + m.addmetadata_size = nil +} + +// MetadataSize returns the value of the "metadata_size" field in the mutation. +func (m *CloudflareR2Mutation) MetadataSize() (r int64, exists bool) { + v := m.metadata_size + if v == nil { + return + } + return *v, true +} + +// OldMetadataSize returns the old "metadata_size" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldMetadataSize(ctx context.Context) (v int64, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldMetadataSize is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldMetadataSize requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldMetadataSize: %w", err) + } + return oldValue.MetadataSize, nil +} + +// AddMetadataSize adds i to the "metadata_size" field. +func (m *CloudflareR2Mutation) AddMetadataSize(i int64) { + if m.addmetadata_size != nil { + *m.addmetadata_size += i + } else { + m.addmetadata_size = &i + } +} + +// AddedMetadataSize returns the value that was added to the "metadata_size" field in this mutation. +func (m *CloudflareR2Mutation) AddedMetadataSize() (r int64, exists bool) { + v := m.addmetadata_size + if v == nil { + return + } + return *v, true +} + +// ResetMetadataSize resets all changes to the "metadata_size" field. +func (m *CloudflareR2Mutation) ResetMetadataSize() { + m.metadata_size = nil + m.addmetadata_size = nil +} + +// SetObjectCount sets the "object_count" field. +func (m *CloudflareR2Mutation) SetObjectCount(i int) { + m.object_count = &i + m.addobject_count = nil +} + +// ObjectCount returns the value of the "object_count" field in the mutation. +func (m *CloudflareR2Mutation) ObjectCount() (r int, exists bool) { + v := m.object_count + if v == nil { + return + } + return *v, true +} + +// OldObjectCount returns the old "object_count" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldObjectCount(ctx context.Context) (v int, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldObjectCount is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldObjectCount requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldObjectCount: %w", err) + } + return oldValue.ObjectCount, nil +} + +// AddObjectCount adds i to the "object_count" field. +func (m *CloudflareR2Mutation) AddObjectCount(i int) { + if m.addobject_count != nil { + *m.addobject_count += i + } else { + m.addobject_count = &i + } +} + +// AddedObjectCount returns the value that was added to the "object_count" field in this mutation. +func (m *CloudflareR2Mutation) AddedObjectCount() (r int, exists bool) { + v := m.addobject_count + if v == nil { + return + } + return *v, true +} + +// ResetObjectCount resets all changes to the "object_count" field. +func (m *CloudflareR2Mutation) ResetObjectCount() { + m.object_count = nil + m.addobject_count = nil +} + +// SetRemark sets the "remark" field. +func (m *CloudflareR2Mutation) SetRemark(s string) { + m.remark = &s +} + +// Remark returns the value of the "remark" field in the mutation. +func (m *CloudflareR2Mutation) Remark() (r string, exists bool) { + v := m.remark + if v == nil { + return + } + return *v, true +} + +// OldRemark returns the old "remark" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldRemark(ctx context.Context) (v string, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldRemark is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldRemark requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldRemark: %w", err) + } + return oldValue.Remark, nil +} + +// ClearRemark clears the value of the "remark" field. +func (m *CloudflareR2Mutation) ClearRemark() { + m.remark = nil + m.clearedFields[cloudflarer2.FieldRemark] = struct{}{} +} + +// RemarkCleared returns if the "remark" field was cleared in this mutation. +func (m *CloudflareR2Mutation) RemarkCleared() bool { + _, ok := m.clearedFields[cloudflarer2.FieldRemark] + return ok +} + +// ResetRemark resets all changes to the "remark" field. +func (m *CloudflareR2Mutation) ResetRemark() { + m.remark = nil + delete(m.clearedFields, cloudflarer2.FieldRemark) +} + +// SetCreatedAt sets the "created_at" field. +func (m *CloudflareR2Mutation) SetCreatedAt(t time.Time) { + m.created_at = &t +} + +// CreatedAt returns the value of the "created_at" field in the mutation. +func (m *CloudflareR2Mutation) CreatedAt() (r time.Time, exists bool) { + v := m.created_at + if v == nil { + return + } + return *v, true +} + +// OldCreatedAt returns the old "created_at" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldCreatedAt(ctx context.Context) (v time.Time, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldCreatedAt is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldCreatedAt requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldCreatedAt: %w", err) + } + return oldValue.CreatedAt, nil +} + +// ResetCreatedAt resets all changes to the "created_at" field. +func (m *CloudflareR2Mutation) ResetCreatedAt() { + m.created_at = nil +} + +// SetUpdatedAt sets the "updated_at" field. +func (m *CloudflareR2Mutation) SetUpdatedAt(t time.Time) { + m.updated_at = &t +} + +// UpdatedAt returns the value of the "updated_at" field in the mutation. +func (m *CloudflareR2Mutation) UpdatedAt() (r time.Time, exists bool) { + v := m.updated_at + if v == nil { + return + } + return *v, true +} + +// OldUpdatedAt returns the old "updated_at" field's value of the CloudflareR2 entity. +// If the CloudflareR2 object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *CloudflareR2Mutation) OldUpdatedAt(ctx context.Context) (v time.Time, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldUpdatedAt is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldUpdatedAt requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldUpdatedAt: %w", err) + } + return oldValue.UpdatedAt, nil +} + +// ResetUpdatedAt resets all changes to the "updated_at" field. +func (m *CloudflareR2Mutation) ResetUpdatedAt() { + m.updated_at = nil +} + +// SetCloudflareAccountID sets the "cloudflare_account" edge to the CloudflareAccounts entity by id. +func (m *CloudflareR2Mutation) SetCloudflareAccountID(id int) { + m.cloudflare_account = &id +} + +// ClearCloudflareAccount clears the "cloudflare_account" edge to the CloudflareAccounts entity. +func (m *CloudflareR2Mutation) ClearCloudflareAccount() { + m.clearedcloudflare_account = true +} + +// CloudflareAccountCleared reports if the "cloudflare_account" edge to the CloudflareAccounts entity was cleared. +func (m *CloudflareR2Mutation) CloudflareAccountCleared() bool { + return m.clearedcloudflare_account +} + +// CloudflareAccountID returns the "cloudflare_account" edge ID in the mutation. +func (m *CloudflareR2Mutation) CloudflareAccountID() (id int, exists bool) { + if m.cloudflare_account != nil { + return *m.cloudflare_account, true + } + return +} + +// CloudflareAccountIDs returns the "cloudflare_account" edge IDs in the mutation. +// Note that IDs always returns len(IDs) <= 1 for unique edges, and you should use +// CloudflareAccountID instead. It exists only for internal usage by the builders. +func (m *CloudflareR2Mutation) CloudflareAccountIDs() (ids []int) { + if id := m.cloudflare_account; id != nil { + ids = append(ids, *id) + } + return +} + +// ResetCloudflareAccount resets all changes to the "cloudflare_account" edge. +func (m *CloudflareR2Mutation) ResetCloudflareAccount() { + m.cloudflare_account = nil + m.clearedcloudflare_account = false +} + +// Where appends a list predicates to the CloudflareR2Mutation builder. +func (m *CloudflareR2Mutation) Where(ps ...predicate.CloudflareR2) { + m.predicates = append(m.predicates, ps...) +} + +// WhereP appends storage-level predicates to the CloudflareR2Mutation builder. Using this method, +// users can use type-assertion to append predicates that do not depend on any generated package. +func (m *CloudflareR2Mutation) WhereP(ps ...func(*sql.Selector)) { + p := make([]predicate.CloudflareR2, len(ps)) + for i := range ps { + p[i] = ps[i] + } + m.Where(p...) +} + +// Op returns the operation name. +func (m *CloudflareR2Mutation) Op() Op { + return m.op +} + +// SetOp allows setting the mutation operation. +func (m *CloudflareR2Mutation) SetOp(op Op) { + m.op = op +} + +// Type returns the node type of this mutation (CloudflareR2). +func (m *CloudflareR2Mutation) Type() string { + return m.typ +} + +// Fields returns all fields that were changed during this mutation. Note that in +// order to get all numeric fields that were incremented/decremented, call +// AddedFields(). +func (m *CloudflareR2Mutation) Fields() []string { + fields := make([]string, 0, 11) + if m.owner_id != nil { + fields = append(fields, cloudflarer2.FieldOwnerID) + } + if m.name != nil { + fields = append(fields, cloudflarer2.FieldName) + } + if m.location != nil { + fields = append(fields, cloudflarer2.FieldLocation) + } + if m.storage_class != nil { + fields = append(fields, cloudflarer2.FieldStorageClass) + } + if m.status != nil { + fields = append(fields, cloudflarer2.FieldStatus) + } + if m.payload_size != nil { + fields = append(fields, cloudflarer2.FieldPayloadSize) + } + if m.metadata_size != nil { + fields = append(fields, cloudflarer2.FieldMetadataSize) + } + if m.object_count != nil { + fields = append(fields, cloudflarer2.FieldObjectCount) + } + if m.remark != nil { + fields = append(fields, cloudflarer2.FieldRemark) + } + if m.created_at != nil { + fields = append(fields, cloudflarer2.FieldCreatedAt) + } + if m.updated_at != nil { + fields = append(fields, cloudflarer2.FieldUpdatedAt) + } + return fields +} + +// Field returns the value of a field with the given name. The second boolean +// return value indicates that this field was not set, or was not defined in the +// schema. +func (m *CloudflareR2Mutation) Field(name string) (ent.Value, bool) { + switch name { + case cloudflarer2.FieldOwnerID: + return m.OwnerID() + case cloudflarer2.FieldName: + return m.Name() + case cloudflarer2.FieldLocation: + return m.Location() + case cloudflarer2.FieldStorageClass: + return m.StorageClass() + case cloudflarer2.FieldStatus: + return m.Status() + case cloudflarer2.FieldPayloadSize: + return m.PayloadSize() + case cloudflarer2.FieldMetadataSize: + return m.MetadataSize() + case cloudflarer2.FieldObjectCount: + return m.ObjectCount() + case cloudflarer2.FieldRemark: + return m.Remark() + case cloudflarer2.FieldCreatedAt: + return m.CreatedAt() + case cloudflarer2.FieldUpdatedAt: + return m.UpdatedAt() + } + return nil, false +} + +// OldField returns the old value of the field from the database. An error is +// returned if the mutation operation is not UpdateOne, or the query to the +// database failed. +func (m *CloudflareR2Mutation) OldField(ctx context.Context, name string) (ent.Value, error) { + switch name { + case cloudflarer2.FieldOwnerID: + return m.OldOwnerID(ctx) + case cloudflarer2.FieldName: + return m.OldName(ctx) + case cloudflarer2.FieldLocation: + return m.OldLocation(ctx) + case cloudflarer2.FieldStorageClass: + return m.OldStorageClass(ctx) + case cloudflarer2.FieldStatus: + return m.OldStatus(ctx) + case cloudflarer2.FieldPayloadSize: + return m.OldPayloadSize(ctx) + case cloudflarer2.FieldMetadataSize: + return m.OldMetadataSize(ctx) + case cloudflarer2.FieldObjectCount: + return m.OldObjectCount(ctx) + case cloudflarer2.FieldRemark: + return m.OldRemark(ctx) + case cloudflarer2.FieldCreatedAt: + return m.OldCreatedAt(ctx) + case cloudflarer2.FieldUpdatedAt: + return m.OldUpdatedAt(ctx) + } + return nil, fmt.Errorf("unknown CloudflareR2 field %s", name) +} + +// SetField sets the value of a field with the given name. It returns an error if +// the field is not defined in the schema, or if the type mismatched the field +// type. +func (m *CloudflareR2Mutation) SetField(name string, value ent.Value) error { + switch name { + case cloudflarer2.FieldOwnerID: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetOwnerID(v) + return nil + case cloudflarer2.FieldName: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetName(v) + return nil + case cloudflarer2.FieldLocation: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetLocation(v) + return nil + case cloudflarer2.FieldStorageClass: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetStorageClass(v) + return nil + case cloudflarer2.FieldStatus: + v, ok := value.(int8) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetStatus(v) + return nil + case cloudflarer2.FieldPayloadSize: + v, ok := value.(int64) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetPayloadSize(v) + return nil + case cloudflarer2.FieldMetadataSize: + v, ok := value.(int64) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetMetadataSize(v) + return nil + case cloudflarer2.FieldObjectCount: + v, ok := value.(int) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetObjectCount(v) + return nil + case cloudflarer2.FieldRemark: + v, ok := value.(string) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetRemark(v) + return nil + case cloudflarer2.FieldCreatedAt: + v, ok := value.(time.Time) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetCreatedAt(v) + return nil + case cloudflarer2.FieldUpdatedAt: + v, ok := value.(time.Time) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetUpdatedAt(v) + return nil + } + return fmt.Errorf("unknown CloudflareR2 field %s", name) +} + +// AddedFields returns all numeric fields that were incremented/decremented during +// this mutation. +func (m *CloudflareR2Mutation) AddedFields() []string { + var fields []string + if m.addstatus != nil { + fields = append(fields, cloudflarer2.FieldStatus) + } + if m.addpayload_size != nil { + fields = append(fields, cloudflarer2.FieldPayloadSize) + } + if m.addmetadata_size != nil { + fields = append(fields, cloudflarer2.FieldMetadataSize) + } + if m.addobject_count != nil { + fields = append(fields, cloudflarer2.FieldObjectCount) + } + return fields +} + +// AddedField returns the numeric value that was incremented/decremented on a field +// with the given name. The second boolean return value indicates that this field +// was not set, or was not defined in the schema. +func (m *CloudflareR2Mutation) AddedField(name string) (ent.Value, bool) { + switch name { + case cloudflarer2.FieldStatus: + return m.AddedStatus() + case cloudflarer2.FieldPayloadSize: + return m.AddedPayloadSize() + case cloudflarer2.FieldMetadataSize: + return m.AddedMetadataSize() + case cloudflarer2.FieldObjectCount: + return m.AddedObjectCount() + } + return nil, false +} + +// AddField adds the value to the field with the given name. It returns an error if +// the field is not defined in the schema, or if the type mismatched the field +// type. +func (m *CloudflareR2Mutation) AddField(name string, value ent.Value) error { + switch name { + case cloudflarer2.FieldStatus: + v, ok := value.(int8) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.AddStatus(v) + return nil + case cloudflarer2.FieldPayloadSize: + v, ok := value.(int64) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.AddPayloadSize(v) + return nil + case cloudflarer2.FieldMetadataSize: + v, ok := value.(int64) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.AddMetadataSize(v) + return nil + case cloudflarer2.FieldObjectCount: + v, ok := value.(int) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.AddObjectCount(v) + return nil + } + return fmt.Errorf("unknown CloudflareR2 numeric field %s", name) +} + +// ClearedFields returns all nullable fields that were cleared during this +// mutation. +func (m *CloudflareR2Mutation) ClearedFields() []string { + var fields []string + if m.FieldCleared(cloudflarer2.FieldRemark) { + fields = append(fields, cloudflarer2.FieldRemark) + } + return fields +} + +// FieldCleared returns a boolean indicating if a field with the given name was +// cleared in this mutation. +func (m *CloudflareR2Mutation) FieldCleared(name string) bool { + _, ok := m.clearedFields[name] + return ok +} + +// ClearField clears the value of the field with the given name. It returns an +// error if the field is not defined in the schema. +func (m *CloudflareR2Mutation) ClearField(name string) error { + switch name { + case cloudflarer2.FieldRemark: + m.ClearRemark() + return nil + } + return fmt.Errorf("unknown CloudflareR2 nullable field %s", name) +} + +// ResetField resets all changes in the mutation for the field with the given name. +// It returns an error if the field is not defined in the schema. +func (m *CloudflareR2Mutation) ResetField(name string) error { + switch name { + case cloudflarer2.FieldOwnerID: + m.ResetOwnerID() + return nil + case cloudflarer2.FieldName: + m.ResetName() + return nil + case cloudflarer2.FieldLocation: + m.ResetLocation() + return nil + case cloudflarer2.FieldStorageClass: + m.ResetStorageClass() + return nil + case cloudflarer2.FieldStatus: + m.ResetStatus() + return nil + case cloudflarer2.FieldPayloadSize: + m.ResetPayloadSize() + return nil + case cloudflarer2.FieldMetadataSize: + m.ResetMetadataSize() + return nil + case cloudflarer2.FieldObjectCount: + m.ResetObjectCount() + return nil + case cloudflarer2.FieldRemark: + m.ResetRemark() + return nil + case cloudflarer2.FieldCreatedAt: + m.ResetCreatedAt() + return nil + case cloudflarer2.FieldUpdatedAt: + m.ResetUpdatedAt() + return nil + } + return fmt.Errorf("unknown CloudflareR2 field %s", name) +} + +// AddedEdges returns all edge names that were set/added in this mutation. +func (m *CloudflareR2Mutation) AddedEdges() []string { + edges := make([]string, 0, 1) + if m.cloudflare_account != nil { + edges = append(edges, cloudflarer2.EdgeCloudflareAccount) + } + return edges +} + +// AddedIDs returns all IDs (to other nodes) that were added for the given edge +// name in this mutation. +func (m *CloudflareR2Mutation) AddedIDs(name string) []ent.Value { + switch name { + case cloudflarer2.EdgeCloudflareAccount: + if id := m.cloudflare_account; id != nil { + return []ent.Value{*id} + } + } + return nil +} + +// RemovedEdges returns all edge names that were removed in this mutation. +func (m *CloudflareR2Mutation) RemovedEdges() []string { + edges := make([]string, 0, 1) + return edges +} + +// RemovedIDs returns all IDs (to other nodes) that were removed for the edge with +// the given name in this mutation. +func (m *CloudflareR2Mutation) RemovedIDs(name string) []ent.Value { + return nil +} + +// ClearedEdges returns all edge names that were cleared in this mutation. +func (m *CloudflareR2Mutation) ClearedEdges() []string { + edges := make([]string, 0, 1) + if m.clearedcloudflare_account { + edges = append(edges, cloudflarer2.EdgeCloudflareAccount) + } + return edges +} + +// EdgeCleared returns a boolean which indicates if the edge with the given name +// was cleared in this mutation. +func (m *CloudflareR2Mutation) EdgeCleared(name string) bool { + switch name { + case cloudflarer2.EdgeCloudflareAccount: + return m.clearedcloudflare_account + } + return false +} + +// ClearEdge clears the value of the edge with the given name. It returns an error +// if that edge is not defined in the schema. +func (m *CloudflareR2Mutation) ClearEdge(name string) error { + switch name { + case cloudflarer2.EdgeCloudflareAccount: + m.ClearCloudflareAccount() + return nil + } + return fmt.Errorf("unknown CloudflareR2 unique edge %s", name) +} + +// ResetEdge resets all changes to the edge with the given name in this mutation. +// It returns an error if the edge is not defined in the schema. +func (m *CloudflareR2Mutation) ResetEdge(name string) error { + switch name { + case cloudflarer2.EdgeCloudflareAccount: + m.ResetCloudflareAccount() + return nil + } + return fmt.Errorf("unknown CloudflareR2 edge %s", name) +} diff --git a/internal/ent/predicate/predicate.go b/internal/ent/predicate/predicate.go new file mode 100644 index 0000000..9b6d620 --- /dev/null +++ b/internal/ent/predicate/predicate.go @@ -0,0 +1,13 @@ +// Code generated by ent, DO NOT EDIT. + +package predicate + +import ( + "entgo.io/ent/dialect/sql" +) + +// CloudflareAccounts is the predicate function for cloudflareaccounts builders. +type CloudflareAccounts func(*sql.Selector) + +// CloudflareR2 is the predicate function for cloudflarer2 builders. +type CloudflareR2 func(*sql.Selector) diff --git a/internal/ent/runtime.go b/internal/ent/runtime.go new file mode 100644 index 0000000..7ff1ede --- /dev/null +++ b/internal/ent/runtime.go @@ -0,0 +1,80 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "time" + "unR2/internal/ent/cloudflareaccounts" + "unR2/internal/ent/cloudflarer2" + "unR2/internal/ent/schema" +) + +// The init function reads all schema descriptors with runtime code +// (default values, validators, hooks and policies) and stitches it +// to their package variables. +func init() { + cloudflareaccountsFields := schema.CloudflareAccounts{}.Fields() + _ = cloudflareaccountsFields + // cloudflareaccountsDescName is the schema descriptor for name field. + cloudflareaccountsDescName := cloudflareaccountsFields[0].Descriptor() + // cloudflareaccounts.NameValidator is a validator for the "name" field. It is called by the builders before save. + cloudflareaccounts.NameValidator = cloudflareaccountsDescName.Validators[0].(func(string) error) + // cloudflareaccountsDescAccountID is the schema descriptor for account_id field. + cloudflareaccountsDescAccountID := cloudflareaccountsFields[1].Descriptor() + // cloudflareaccounts.AccountIDValidator is a validator for the "account_id" field. It is called by the builders before save. + cloudflareaccounts.AccountIDValidator = cloudflareaccountsDescAccountID.Validators[0].(func(string) error) + // cloudflareaccountsDescStatus is the schema descriptor for status field. + cloudflareaccountsDescStatus := cloudflareaccountsFields[4].Descriptor() + // cloudflareaccounts.DefaultStatus holds the default value on creation for the status field. + cloudflareaccounts.DefaultStatus = cloudflareaccountsDescStatus.Default.(int8) + // cloudflareaccountsDescCreatedAt is the schema descriptor for created_at field. + cloudflareaccountsDescCreatedAt := cloudflareaccountsFields[6].Descriptor() + // cloudflareaccounts.DefaultCreatedAt holds the default value on creation for the created_at field. + cloudflareaccounts.DefaultCreatedAt = cloudflareaccountsDescCreatedAt.Default.(func() time.Time) + // cloudflareaccountsDescUpdatedAt is the schema descriptor for updated_at field. + cloudflareaccountsDescUpdatedAt := cloudflareaccountsFields[7].Descriptor() + // cloudflareaccounts.DefaultUpdatedAt holds the default value on creation for the updated_at field. + cloudflareaccounts.DefaultUpdatedAt = cloudflareaccountsDescUpdatedAt.Default.(func() time.Time) + // cloudflareaccounts.UpdateDefaultUpdatedAt holds the default value on update for the updated_at field. + cloudflareaccounts.UpdateDefaultUpdatedAt = cloudflareaccountsDescUpdatedAt.UpdateDefault.(func() time.Time) + cloudflarer2Fields := schema.CloudflareR2{}.Fields() + _ = cloudflarer2Fields + // cloudflarer2DescName is the schema descriptor for name field. + cloudflarer2DescName := cloudflarer2Fields[1].Descriptor() + // cloudflarer2.NameValidator is a validator for the "name" field. It is called by the builders before save. + cloudflarer2.NameValidator = cloudflarer2DescName.Validators[0].(func(string) error) + // cloudflarer2DescLocation is the schema descriptor for location field. + cloudflarer2DescLocation := cloudflarer2Fields[2].Descriptor() + // cloudflarer2.LocationValidator is a validator for the "location" field. It is called by the builders before save. + cloudflarer2.LocationValidator = cloudflarer2DescLocation.Validators[0].(func(string) error) + // cloudflarer2DescStorageClass is the schema descriptor for storage_class field. + cloudflarer2DescStorageClass := cloudflarer2Fields[3].Descriptor() + // cloudflarer2.StorageClassValidator is a validator for the "storage_class" field. It is called by the builders before save. + cloudflarer2.StorageClassValidator = cloudflarer2DescStorageClass.Validators[0].(func(string) error) + // cloudflarer2DescStatus is the schema descriptor for status field. + cloudflarer2DescStatus := cloudflarer2Fields[4].Descriptor() + // cloudflarer2.DefaultStatus holds the default value on creation for the status field. + cloudflarer2.DefaultStatus = cloudflarer2DescStatus.Default.(int8) + // cloudflarer2DescPayloadSize is the schema descriptor for payload_size field. + cloudflarer2DescPayloadSize := cloudflarer2Fields[5].Descriptor() + // cloudflarer2.DefaultPayloadSize holds the default value on creation for the payload_size field. + cloudflarer2.DefaultPayloadSize = cloudflarer2DescPayloadSize.Default.(int64) + // cloudflarer2DescMetadataSize is the schema descriptor for metadata_size field. + cloudflarer2DescMetadataSize := cloudflarer2Fields[6].Descriptor() + // cloudflarer2.DefaultMetadataSize holds the default value on creation for the metadata_size field. + cloudflarer2.DefaultMetadataSize = cloudflarer2DescMetadataSize.Default.(int64) + // cloudflarer2DescObjectCount is the schema descriptor for object_count field. + cloudflarer2DescObjectCount := cloudflarer2Fields[7].Descriptor() + // cloudflarer2.DefaultObjectCount holds the default value on creation for the object_count field. + cloudflarer2.DefaultObjectCount = cloudflarer2DescObjectCount.Default.(int) + // cloudflarer2DescCreatedAt is the schema descriptor for created_at field. + cloudflarer2DescCreatedAt := cloudflarer2Fields[9].Descriptor() + // cloudflarer2.DefaultCreatedAt holds the default value on creation for the created_at field. + cloudflarer2.DefaultCreatedAt = cloudflarer2DescCreatedAt.Default.(func() time.Time) + // cloudflarer2DescUpdatedAt is the schema descriptor for updated_at field. + cloudflarer2DescUpdatedAt := cloudflarer2Fields[10].Descriptor() + // cloudflarer2.DefaultUpdatedAt holds the default value on creation for the updated_at field. + cloudflarer2.DefaultUpdatedAt = cloudflarer2DescUpdatedAt.Default.(func() time.Time) + // cloudflarer2.UpdateDefaultUpdatedAt holds the default value on update for the updated_at field. + cloudflarer2.UpdateDefaultUpdatedAt = cloudflarer2DescUpdatedAt.UpdateDefault.(func() time.Time) +} diff --git a/internal/ent/runtime/runtime.go b/internal/ent/runtime/runtime.go new file mode 100644 index 0000000..ebf0fb4 --- /dev/null +++ b/internal/ent/runtime/runtime.go @@ -0,0 +1,10 @@ +// Code generated by ent, DO NOT EDIT. + +package runtime + +// The schema-stitching logic is generated in unR2/internal/ent/runtime.go + +const ( + Version = "v0.14.4" // Version of ent codegen. + Sum = "h1:/DhDraSLXIkBhyiVoJeSshr4ZYi7femzhj6/TckzZuI=" // Sum of ent codegen. +) diff --git a/internal/ent/schema/cloudflareaccounts.go b/internal/ent/schema/cloudflareaccounts.go new file mode 100644 index 0000000..f4eb435 --- /dev/null +++ b/internal/ent/schema/cloudflareaccounts.go @@ -0,0 +1,34 @@ +package schema + +import ( + "entgo.io/ent" + "entgo.io/ent/schema/edge" + "entgo.io/ent/schema/field" + "time" +) + +// CloudflareAccounts holds the schema definition for the CloudflareAccounts entity. +type CloudflareAccounts struct { + ent.Schema +} + +// Fields of the CloudflareAccounts. +func (CloudflareAccounts) Fields() []ent.Field { + return []ent.Field{ + field.String("name").NotEmpty().Comment("账户名称"), + field.String("account_id").NotEmpty().Comment("Cloudflare Account ID"), + field.Text("api_token").Sensitive().Comment("Cloudflare API Token"), + field.String("email").Optional().Comment("Cloudflare 邮箱(可选)"), + field.Int8("status").Default(1).Comment("状态 1=启用, 0=禁用"), + field.Text("remark").Optional().Comment("备注"), + field.Time("created_at").Default(time.Now).Immutable(), + field.Time("updated_at").Default(time.Now).UpdateDefault(time.Now), + } +} + +// Edges of the CloudflareAccounts. +func (CloudflareAccounts) Edges() []ent.Edge { + return []ent.Edge{ + edge.To("cloudflare_buckets", CloudflareR2.Type), + } +} diff --git a/internal/ent/schema/cloudflarer2.go b/internal/ent/schema/cloudflarer2.go new file mode 100644 index 0000000..84c0acb --- /dev/null +++ b/internal/ent/schema/cloudflarer2.go @@ -0,0 +1,62 @@ +package schema + +import ( + "entgo.io/ent" + "entgo.io/ent/schema/edge" + "entgo.io/ent/schema/field" + "time" +) + +// CloudflareR2 holds the schema definition for the CloudflareR2 entity. +type CloudflareR2 struct { + ent.Schema +} + +// Fields of the CloudflareR2. +func (CloudflareR2) Fields() []ent.Field { + return []ent.Field{ + field.String("owner_id").Comment("业务归属标识"), + field.String("name"). + NotEmpty(). + Comment("桶名称(唯一)"), + field.String("location"). + NotEmpty(). + Comment("桶区域,如 apac、eea、us"), + field.String("storage_class"). + NotEmpty(). + Comment("存储类型,如 standard、infrequent-access"), + field.Int8("status"). + Default(1). + Comment("状态:1=启用,0=禁用"), + field.Int64("payload_size"). + Default(0). + Comment("对象数据体积(payloadSize),单位字节"), + + field.Int64("metadata_size"). + Default(0). + Comment("对象元数据大小(metadataSize),单位字节"), + field.Int("object_count"). + Default(0). + Comment("存储桶内对象总数"), + field.Text("remark"). + Optional(). + Comment("备注"), + field.Time("created_at"). + Default(time.Now). + Immutable(), + field.Time("updated_at"). + Default(time.Now). + UpdateDefault(time.Now), + } +} + +// Edges of the CloudflareR2. +func (CloudflareR2) Edges() []ent.Edge { + return []ent.Edge{ + edge.From("cloudflare_account", CloudflareAccounts.Type). + Ref("cloudflare_buckets"). + Unique(). + Required(). + Comment("所属 Cloudflare 账户"), + } +} diff --git a/internal/ent/tx.go b/internal/ent/tx.go new file mode 100644 index 0000000..9590962 --- /dev/null +++ b/internal/ent/tx.go @@ -0,0 +1,213 @@ +// Code generated by ent, DO NOT EDIT. + +package ent + +import ( + "context" + "sync" + + "entgo.io/ent/dialect" +) + +// Tx is a transactional client that is created by calling Client.Tx(). +type Tx struct { + config + // CloudflareAccounts is the client for interacting with the CloudflareAccounts builders. + CloudflareAccounts *CloudflareAccountsClient + // CloudflareR2 is the client for interacting with the CloudflareR2 builders. + CloudflareR2 *CloudflareR2Client + + // lazily loaded. + client *Client + clientOnce sync.Once + // ctx lives for the life of the transaction. It is + // the same context used by the underlying connection. + ctx context.Context +} + +type ( + // Committer is the interface that wraps the Commit method. + Committer interface { + Commit(context.Context, *Tx) error + } + + // The CommitFunc type is an adapter to allow the use of ordinary + // function as a Committer. If f is a function with the appropriate + // signature, CommitFunc(f) is a Committer that calls f. + CommitFunc func(context.Context, *Tx) error + + // CommitHook defines the "commit middleware". A function that gets a Committer + // and returns a Committer. For example: + // + // hook := func(next ent.Committer) ent.Committer { + // return ent.CommitFunc(func(ctx context.Context, tx *ent.Tx) error { + // // Do some stuff before. + // if err := next.Commit(ctx, tx); err != nil { + // return err + // } + // // Do some stuff after. + // return nil + // }) + // } + // + CommitHook func(Committer) Committer +) + +// Commit calls f(ctx, m). +func (f CommitFunc) Commit(ctx context.Context, tx *Tx) error { + return f(ctx, tx) +} + +// Commit commits the transaction. +func (tx *Tx) Commit() error { + txDriver := tx.config.driver.(*txDriver) + var fn Committer = CommitFunc(func(context.Context, *Tx) error { + return txDriver.tx.Commit() + }) + txDriver.mu.Lock() + hooks := append([]CommitHook(nil), txDriver.onCommit...) + txDriver.mu.Unlock() + for i := len(hooks) - 1; i >= 0; i-- { + fn = hooks[i](fn) + } + return fn.Commit(tx.ctx, tx) +} + +// OnCommit adds a hook to call on commit. +func (tx *Tx) OnCommit(f CommitHook) { + txDriver := tx.config.driver.(*txDriver) + txDriver.mu.Lock() + txDriver.onCommit = append(txDriver.onCommit, f) + txDriver.mu.Unlock() +} + +type ( + // Rollbacker is the interface that wraps the Rollback method. + Rollbacker interface { + Rollback(context.Context, *Tx) error + } + + // The RollbackFunc type is an adapter to allow the use of ordinary + // function as a Rollbacker. If f is a function with the appropriate + // signature, RollbackFunc(f) is a Rollbacker that calls f. + RollbackFunc func(context.Context, *Tx) error + + // RollbackHook defines the "rollback middleware". A function that gets a Rollbacker + // and returns a Rollbacker. For example: + // + // hook := func(next ent.Rollbacker) ent.Rollbacker { + // return ent.RollbackFunc(func(ctx context.Context, tx *ent.Tx) error { + // // Do some stuff before. + // if err := next.Rollback(ctx, tx); err != nil { + // return err + // } + // // Do some stuff after. + // return nil + // }) + // } + // + RollbackHook func(Rollbacker) Rollbacker +) + +// Rollback calls f(ctx, m). +func (f RollbackFunc) Rollback(ctx context.Context, tx *Tx) error { + return f(ctx, tx) +} + +// Rollback rollbacks the transaction. +func (tx *Tx) Rollback() error { + txDriver := tx.config.driver.(*txDriver) + var fn Rollbacker = RollbackFunc(func(context.Context, *Tx) error { + return txDriver.tx.Rollback() + }) + txDriver.mu.Lock() + hooks := append([]RollbackHook(nil), txDriver.onRollback...) + txDriver.mu.Unlock() + for i := len(hooks) - 1; i >= 0; i-- { + fn = hooks[i](fn) + } + return fn.Rollback(tx.ctx, tx) +} + +// OnRollback adds a hook to call on rollback. +func (tx *Tx) OnRollback(f RollbackHook) { + txDriver := tx.config.driver.(*txDriver) + txDriver.mu.Lock() + txDriver.onRollback = append(txDriver.onRollback, f) + txDriver.mu.Unlock() +} + +// Client returns a Client that binds to current transaction. +func (tx *Tx) Client() *Client { + tx.clientOnce.Do(func() { + tx.client = &Client{config: tx.config} + tx.client.init() + }) + return tx.client +} + +func (tx *Tx) init() { + tx.CloudflareAccounts = NewCloudflareAccountsClient(tx.config) + tx.CloudflareR2 = NewCloudflareR2Client(tx.config) +} + +// txDriver wraps the given dialect.Tx with a nop dialect.Driver implementation. +// The idea is to support transactions without adding any extra code to the builders. +// When a builder calls to driver.Tx(), it gets the same dialect.Tx instance. +// Commit and Rollback are nop for the internal builders and the user must call one +// of them in order to commit or rollback the transaction. +// +// If a closed transaction is embedded in one of the generated entities, and the entity +// applies a query, for example: CloudflareAccounts.QueryXXX(), the query will be executed +// through the driver which created this transaction. +// +// Note that txDriver is not goroutine safe. +type txDriver struct { + // the driver we started the transaction from. + drv dialect.Driver + // tx is the underlying transaction. + tx dialect.Tx + // completion hooks. + mu sync.Mutex + onCommit []CommitHook + onRollback []RollbackHook +} + +// newTx creates a new transactional driver. +func newTx(ctx context.Context, drv dialect.Driver) (*txDriver, error) { + tx, err := drv.Tx(ctx) + if err != nil { + return nil, err + } + return &txDriver{tx: tx, drv: drv}, nil +} + +// Tx returns the transaction wrapper (txDriver) to avoid Commit or Rollback calls +// from the internal builders. Should be called only by the internal builders. +func (tx *txDriver) Tx(context.Context) (dialect.Tx, error) { return tx, nil } + +// Dialect returns the dialect of the driver we started the transaction from. +func (tx *txDriver) Dialect() string { return tx.drv.Dialect() } + +// Close is a nop close. +func (*txDriver) Close() error { return nil } + +// Commit is a nop commit for the internal builders. +// User must call `Tx.Commit` in order to commit the transaction. +func (*txDriver) Commit() error { return nil } + +// Rollback is a nop rollback for the internal builders. +// User must call `Tx.Rollback` in order to rollback the transaction. +func (*txDriver) Rollback() error { return nil } + +// Exec calls tx.Exec. +func (tx *txDriver) Exec(ctx context.Context, query string, args, v any) error { + return tx.tx.Exec(ctx, query, args, v) +} + +// Query calls tx.Query. +func (tx *txDriver) Query(ctx context.Context, query string, args, v any) error { + return tx.tx.Query(ctx, query, args, v) +} + +var _ dialect.Driver = (*txDriver)(nil) diff --git a/internal/global/global.go b/internal/global/global.go new file mode 100644 index 0000000..f9ec37e --- /dev/null +++ b/internal/global/global.go @@ -0,0 +1,26 @@ +package global + +import ( + "sync" + "unR2/internal/config" + "unR2/internal/ent" +) + +var ( + dbOnce sync.Once + db *ent.Client + AppConfig = &config.Conf +) + +func SetDB(client *ent.Client) { + dbOnce.Do(func() { + db = client + }) +} + +func DB() *ent.Client { + if db == nil { + panic("DB is not initialized") + } + return db +} diff --git a/internal/initialize/db.go b/internal/initialize/db.go new file mode 100644 index 0000000..48674e5 --- /dev/null +++ b/internal/initialize/db.go @@ -0,0 +1,29 @@ +package initialize + +import ( + "context" + "fmt" + "log" + "unR2/internal/config" + "unR2/internal/ent" + "unR2/internal/global" +) + +func InitDB() { + mysql := config.Conf.MySQL + dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?parseTime=True", + mysql.User, mysql.Password, mysql.Host, mysql.Port, mysql.Database, + ) + + client, err := ent.Open("mysql", dsn) + if err != nil { + log.Fatalf("❌ 数据库连接失败: %v", err) + } + + if err := client.Schema.Create(context.Background()); err != nil { + log.Fatalf("❌ 建表失败: %v", err) + } + + global.SetDB(client) + log.Println("✅ 数据库初始化完成") +} diff --git a/internal/pkg/logger/logger.go b/internal/pkg/logger/logger.go new file mode 100644 index 0000000..57bb574 --- /dev/null +++ b/internal/pkg/logger/logger.go @@ -0,0 +1,64 @@ +package logger + +import ( + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "os" +) + +var Log *zap.Logger + +func InitLogger(level, format, output string) { + // 1. 解析日志级别 + var lvl zapcore.Level + switch level { + case "debug": + lvl = zap.DebugLevel + case "info": + lvl = zap.InfoLevel + case "warn": + lvl = zap.WarnLevel + case "error": + lvl = zap.ErrorLevel + default: + lvl = zap.InfoLevel + } + + // 2. 编码器配置 + encoderCfg := zapcore.EncoderConfig{ + TimeKey: "time", + LevelKey: "level", + NameKey: "logger", + CallerKey: "caller", + MessageKey: "msg", + StacktraceKey: "stacktrace", + LineEnding: zapcore.DefaultLineEnding, + EncodeLevel: zapcore.CapitalColorLevelEncoder, + EncodeTime: zapcore.ISO8601TimeEncoder, + EncodeDuration: zapcore.StringDurationEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, + } + + var encoder zapcore.Encoder + if format == "json" { + encoder = zapcore.NewJSONEncoder(encoderCfg) + } else { + encoder = zapcore.NewConsoleEncoder(encoderCfg) + } + + // 3. 设置输出目标 + var ws zapcore.WriteSyncer + if output == "stdout" { + ws = zapcore.AddSync(os.Stdout) + } else { + f, err := os.OpenFile(output, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + panic("无法打开日志文件: " + err.Error()) + } + ws = zapcore.AddSync(f) + } + + core := zapcore.NewCore(encoder, ws, zap.NewAtomicLevelAt(lvl)) + Log = zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1)) + zap.ReplaceGlobals(Log) +} diff --git a/internal/repository/CloudflareAccount.go b/internal/repository/CloudflareAccount.go new file mode 100644 index 0000000..30200ee --- /dev/null +++ b/internal/repository/CloudflareAccount.go @@ -0,0 +1,8 @@ +package repository + +// +//func AccoutAdded() { +// return global.DB().CloudflareAccounts.Create(). +// +// +//} diff --git a/internal/router/router.go b/internal/router/router.go new file mode 100644 index 0000000..86dc5c9 --- /dev/null +++ b/internal/router/router.go @@ -0,0 +1,24 @@ +package router + +import ( + "github.com/gin-gonic/gin" + "unR2/internal/cloudflare" +) + +func SetupRouter() *gin.Engine { + r := gin.Default() + api := r.Group("/api") + { + v1 := api.Group("/v1") + { + cf := v1.Group("/cloudflare") + { + account := cf.Group("/account") + { + account.POST("/create", cloudflare.AccountCreate) + } + } + } + } + return r +}