Parcourir la source

feat(wip): site category

Jacky il y a 6 mois
Parent
commit
7ad5cac3b8
73 fichiers modifiés avec 713 ajouts et 235 suppressions
  1. 0 0
      .db
  2. 2 2
      api/certificate/acme_user.go
  3. 5 5
      api/certificate/certificate.go
  4. 2 2
      api/certificate/dns_credential.go
  5. 2 2
      api/cluster/environment.go
  6. 1 1
      api/cluster/router.go
  7. 5 5
      api/config/add.go
  8. 2 2
      api/config/get.go
  9. 6 6
      api/config/modify.go
  10. 4 4
      api/config/rename.go
  11. 3 3
      api/config/router.go
  12. 1 1
      api/notification/notification.go
  13. 2 2
      api/notification/router.go
  14. 1 1
      api/sites/auto_cert.go
  15. 1 1
      api/sites/category.go
  16. 12 12
      api/sites/router.go
  17. 7 7
      api/streams/router.go
  18. 5 5
      api/template/router.go
  19. 2 2
      api/user/passkey.go
  20. 5 5
      api/user/router.go
  21. 2 2
      api/user/user.go
  22. 1 1
      app/src/api/acme_user.ts
  23. 1 1
      app/src/api/cert.ts
  24. 1 1
      app/src/api/config.ts
  25. 52 12
      app/src/api/curd.ts
  26. 1 1
      app/src/api/dns_credential.ts
  27. 1 1
      app/src/api/domain.ts
  28. 2 2
      app/src/api/environment.ts
  29. 2 2
      app/src/api/notification.ts
  30. 11 0
      app/src/api/site_category.ts
  31. 1 1
      app/src/api/stream.ts
  32. 6 6
      app/src/api/template.ts
  33. 1 1
      app/src/api/user.ts
  34. 3 4
      app/src/components/NodeSelector/NodeSelector.vue
  35. 1 1
      app/src/components/Notification/Notification.vue
  36. 4 2
      app/src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts
  37. 0 6
      app/src/components/StdDesign/types.d.ts
  38. 7 0
      app/src/routes/index.ts
  39. 1 1
      app/src/views/certificate/ACMEUserSelector.vue
  40. 1 1
      app/src/views/dashboard/Environments.vue
  41. 28 0
      app/src/views/site/site_category/SiteCategory.vue
  42. 30 0
      app/src/views/site/site_category/columns.ts
  43. 0 2
      go.sum
  44. 1 1
      internal/analytic/node.go
  45. 3 3
      internal/cert/payload.go
  46. 1 1
      internal/config/sync.go
  47. 1 1
      internal/middleware/proxy.go
  48. 1 1
      internal/middleware/proxy_ws.go
  49. 3 3
      internal/user/otp.go
  50. 1 1
      internal/user/user.go
  51. 3 3
      model/cert.go
  52. 4 4
      model/config.go
  53. 4 6
      model/environment.go
  54. 3 3
      model/model.go
  55. 1 1
      model/passkey.go
  56. 1 1
      model/user.go
  57. 5 5
      query/acme_users.gen.go
  58. 5 5
      query/auth_tokens.gen.go
  59. 5 5
      query/auths.gen.go
  60. 2 2
      query/ban_ips.gen.go
  61. 11 11
      query/certs.gen.go
  62. 2 2
      query/chat_gpt_logs.gen.go
  63. 5 5
      query/config_backups.gen.go
  64. 5 5
      query/configs.gen.go
  65. 5 5
      query/dns_credentials.gen.go
  66. 14 22
      query/environments.gen.go
  67. 8 0
      query/gen.go
  68. 5 5
      query/notifications.gen.go
  69. 8 8
      query/passkeys.gen.go
  70. 370 0
      query/site_categories.gen.go
  71. 5 5
      query/sites.gen.go
  72. 5 5
      query/streams.gen.go
  73. 1 0
      router/routers.go

+ 0 - 0
.db


+ 2 - 2
api/certificate/acme_user.go

@@ -13,7 +13,7 @@ import (
 
 func GetAcmeUser(c *gin.Context) {
 	u := query.AcmeUser
-	id := cast.ToInt(c.Param("id"))
+	id := cast.ToUint64(c.Param("id"))
 	user, err := u.FirstByID(id)
 	if err != nil {
 		api.ErrHandler(c, err)
@@ -79,7 +79,7 @@ func RecoverAcmeUser(c *gin.Context) {
 }
 
 func RegisterAcmeUser(c *gin.Context) {
-	id := cast.ToInt(c.Param("id"))
+	id := cast.ToUint64(c.Param("id"))
 	u := query.AcmeUser
 	user, err := u.FirstByID(id)
 	if err != nil {

+ 5 - 5
api/certificate/certificate.go

@@ -71,7 +71,7 @@ func GetCertList(c *gin.Context) {
 func GetCert(c *gin.Context) {
 	q := query.Cert
 
-	certModel, err := q.FirstByID(cast.ToInt(c.Param("id")))
+	certModel, err := q.FirstByID(cast.ToUint64(c.Param("id")))
 
 	if err != nil {
 		api.ErrHandler(c, err)
@@ -89,9 +89,9 @@ type certJson struct {
 	SSLCertificateKey     string             `json:"ssl_certificate_key" binding:"omitempty,privatekey"`
 	KeyType               certcrypto.KeyType `json:"key_type" binding:"omitempty,auto_cert_key_type"`
 	ChallengeMethod       string             `json:"challenge_method"`
-	DnsCredentialID       int                `json:"dns_credential_id"`
-	ACMEUserID            int                `json:"acme_user_id"`
-	SyncNodeIds           []int              `json:"sync_node_ids"`
+	DnsCredentialID       uint64             `json:"dns_credential_id"`
+	ACMEUserID            uint64             `json:"acme_user_id"`
+	SyncNodeIds           []uint64           `json:"sync_node_ids"`
 }
 
 func AddCert(c *gin.Context) {
@@ -141,7 +141,7 @@ func AddCert(c *gin.Context) {
 }
 
 func ModifyCert(c *gin.Context) {
-	id := cast.ToInt(c.Param("id"))
+	id := cast.ToUint64(c.Param("id"))
 
 	var json certJson
 

+ 2 - 2
api/certificate/dns_credential.go

@@ -12,7 +12,7 @@ import (
 )
 
 func GetDnsCredential(c *gin.Context) {
-	id := cast.ToInt(c.Param("id"))
+	id := cast.ToUint64(c.Param("id"))
 
 	d := query.DnsCredential
 
@@ -70,7 +70,7 @@ func AddDnsCredential(c *gin.Context) {
 }
 
 func EditDnsCredential(c *gin.Context) {
-	id := cast.ToInt(c.Param("id"))
+	id := cast.ToUint64(c.Param("id"))
 
 	var json DnsCredentialManageJson
 	if !api.BindAndValid(c, &json) {

+ 2 - 2
api/cluster/environment.go

@@ -15,7 +15,7 @@ import (
 )
 
 func GetEnvironment(c *gin.Context) {
-	id := cast.ToInt(c.Param("id"))
+	id := cast.ToUint64(c.Param("id"))
 
 	envQuery := query.Environment
 
@@ -67,7 +67,7 @@ func EditEnvironment(c *gin.Context) {
 }
 
 func DeleteEnvironment(c *gin.Context) {
-	id := cast.ToInt(c.Param("id"))
+	id := cast.ToUint64(c.Param("id"))
 	envQuery := query.Environment
 
 	env, err := envQuery.FirstByID(id)

+ 1 - 1
api/cluster/router.go

@@ -6,7 +6,7 @@ func InitRouter(r *gin.RouterGroup) {
 	// Environment
 	r.GET("environments", GetEnvironmentList)
 	r.POST("environments/load_from_settings", LoadEnvironmentFromSettings)
-	envGroup := r.Group("environment")
+	envGroup := r.Group("environments")
 	{
 		envGroup.GET("/:id", GetEnvironment)
 		envGroup.POST("", AddEnvironment)

+ 5 - 5
api/config/add.go

@@ -17,11 +17,11 @@ import (
 
 func AddConfig(c *gin.Context) {
 	var json struct {
-		Name        string `json:"name" binding:"required"`
-		NewFilepath string `json:"new_filepath" binding:"required"`
-		Content     string `json:"content"`
-		Overwrite   bool   `json:"overwrite"`
-		SyncNodeIds []int  `json:"sync_node_ids"`
+		Name        string   `json:"name" binding:"required"`
+		NewFilepath string   `json:"new_filepath" binding:"required"`
+		Content     string   `json:"content"`
+		Overwrite   bool     `json:"overwrite"`
+		SyncNodeIds []uint64 `json:"sync_node_ids"`
 	}
 
 	if !api.BindAndValid(c, &json) {

+ 2 - 2
api/config/get.go

@@ -14,8 +14,8 @@ import (
 
 type APIConfigResp struct {
 	config.Config
-	SyncNodeIds   []int `json:"sync_node_ids" gorm:"serializer:json"`
-	SyncOverwrite bool  `json:"sync_overwrite"`
+	SyncNodeIds   []uint64 `json:"sync_node_ids" gorm:"serializer:json"`
+	SyncOverwrite bool     `json:"sync_overwrite"`
 }
 
 func GetConfig(c *gin.Context) {

+ 6 - 6
api/config/modify.go

@@ -21,12 +21,12 @@ type EditConfigJson struct {
 func EditConfig(c *gin.Context) {
 	name := c.Param("name")
 	var json struct {
-		Name          string `json:"name" binding:"required"`
-		Filepath      string `json:"filepath" binding:"required"`
-		NewFilepath   string `json:"new_filepath" binding:"required"`
-		Content       string `json:"content"`
-		SyncOverwrite bool   `json:"sync_overwrite"`
-		SyncNodeIds   []int  `json:"sync_node_ids"`
+		Name          string   `json:"name" binding:"required"`
+		Filepath      string   `json:"filepath" binding:"required"`
+		NewFilepath   string   `json:"new_filepath" binding:"required"`
+		Content       string   `json:"content"`
+		SyncOverwrite bool     `json:"sync_overwrite"`
+		SyncNodeIds   []uint64 `json:"sync_node_ids"`
 	}
 	if !api.BindAndValid(c, &json) {
 		return

+ 4 - 4
api/config/rename.go

@@ -14,10 +14,10 @@ import (
 
 func Rename(c *gin.Context) {
 	var json struct {
-		BasePath    string `json:"base_path"`
-		OrigName    string `json:"orig_name"`
-		NewName     string `json:"new_name"`
-		SyncNodeIds []int  `json:"sync_node_ids" gorm:"serializer:json"`
+		BasePath    string   `json:"base_path"`
+		OrigName    string   `json:"orig_name"`
+		NewName     string   `json:"new_name"`
+		SyncNodeIds []uint64 `json:"sync_node_ids" gorm:"serializer:json"`
 	}
 	if !api.BindAndValid(c, &json) {
 		return

+ 3 - 3
api/config/router.go

@@ -9,9 +9,9 @@ func InitRouter(r *gin.RouterGroup) {
 	r.GET("config_base_path", GetBasePath)
 
 	r.GET("configs", GetConfigs)
-	r.GET("config/*name", GetConfig)
-	r.POST("config", AddConfig)
-	r.POST("config/*name", EditConfig)
+	r.GET("configs/*name", GetConfig)
+	r.POST("configs", AddConfig)
+	r.POST("configs/*name", EditConfig)
 
 	o := r.Group("", middleware.RequireSecureSession())
 	{

+ 1 - 1
api/notification/notification.go

@@ -13,7 +13,7 @@ import (
 func Get(c *gin.Context) {
 	n := query.Notification
 
-	id := cast.ToInt(c.Param("id"))
+	id := cast.ToUint64(c.Param("id"))
 
 	data, err := n.FirstByID(id)
 

+ 2 - 2
api/notification/router.go

@@ -4,7 +4,7 @@ import "github.com/gin-gonic/gin"
 
 func InitRouter(r *gin.RouterGroup) {
 	r.GET("notifications", GetList)
-	r.GET("notification/:id", Get)
-	r.DELETE("notification/:id", Destroy)
+	r.GET("notifications/:id", Get)
+	r.DELETE("notifications/:id", Destroy)
 	r.DELETE("notifications", DestroyAll)
 }

+ 1 - 1
api/sites/auto_cert.go

@@ -13,7 +13,7 @@ func AddDomainToAutoCert(c *gin.Context) {
 	name := c.Param("name")
 
 	var json struct {
-		DnsCredentialID int                `json:"dns_credential_id"`
+		DnsCredentialID uint64             `json:"dns_credential_id"`
 		ChallengeMethod string             `json:"challenge_method"`
 		Domains         []string           `json:"domains"`
 		KeyType         certcrypto.KeyType `json:"key_type"`

+ 1 - 1
api/sites/category.go

@@ -7,7 +7,7 @@ import (
 )
 
 func GetCategory(c *gin.Context) {
-
+	cosy.Core[model.SiteCategory](c).Get()
 }
 
 func GetCategoryList(c *gin.Context) {

+ 12 - 12
api/sites/router.go

@@ -4,22 +4,22 @@ import "github.com/gin-gonic/gin"
 
 func InitRouter(r *gin.RouterGroup) {
 	r.GET("domains", GetSiteList)
-	r.GET("domain/:name", GetSite)
-	r.POST("domain/:name", SaveSite)
-	r.POST("domain/:name/enable", EnableSite)
-	r.POST("domain/:name/disable", DisableSite)
-	r.POST("domain/:name/advance", DomainEditByAdvancedMode)
-	r.DELETE("domain/:name", DeleteSite)
-	r.POST("domain/:name/duplicate", DuplicateSite)
+	r.GET("domains/:name", GetSite)
+	r.POST("domains/:name", SaveSite)
+	r.POST("domains/:name/enable", EnableSite)
+	r.POST("domains/:name/disable", DisableSite)
+	r.POST("domains/:name/advance", DomainEditByAdvancedMode)
+	r.DELETE("domains/:name", DeleteSite)
+	r.POST("domains/:name/duplicate", DuplicateSite)
 	r.POST("auto_cert/:name", AddDomainToAutoCert)
 	r.DELETE("auto_cert/:name", RemoveDomainFromAutoCert)
 }
 
 func InitCategoryRouter(r *gin.RouterGroup) {
 	r.GET("site_categories", GetCategoryList)
-	r.GET("site_category/:id", GetCategory)
-	r.POST("site_category", AddCategory)
-	r.PUT("site_category/:id", ModifyCategory)
-	r.DELETE("site_category/:id", DeleteCategory)
-	r.POST("site_category/:id/recover", RecoverCategory)
+	r.GET("site_categories/:id", GetCategory)
+	r.POST("site_categories", AddCategory)
+	r.POST("site_categories/:id", ModifyCategory)
+	r.DELETE("site_categories/:id", DeleteCategory)
+	r.POST("site_categories/:id/recover", RecoverCategory)
 }

+ 7 - 7
api/streams/router.go

@@ -4,11 +4,11 @@ import "github.com/gin-gonic/gin"
 
 func InitRouter(r *gin.RouterGroup) {
 	r.GET("streams", GetStreams)
-	r.GET("stream/:name", GetStream)
-	r.POST("stream/:name", SaveStream)
-	r.POST("stream/:name/enable", EnableStream)
-	r.POST("stream/:name/disable", DisableStream)
-	r.POST("stream/:name/advance", AdvancedEdit)
-	r.DELETE("stream/:name", DeleteStream)
-	r.POST("stream/:name/duplicate", Duplicate)
+	r.GET("streams/:name", GetStream)
+	r.POST("streams/:name", SaveStream)
+	r.POST("streams/:name/enable", EnableStream)
+	r.POST("streams/:name/disable", DisableStream)
+	r.POST("streams/:name/advance", AdvancedEdit)
+	r.DELETE("streams/:name", DeleteStream)
+	r.POST("streams/:name/duplicate", Duplicate)
 }

+ 5 - 5
api/template/router.go

@@ -3,9 +3,9 @@ package template
 import "github.com/gin-gonic/gin"
 
 func InitRouter(r *gin.RouterGroup) {
-	r.GET("template", GetTemplate)
-	r.GET("template/configs", GetTemplateConfList)
-	r.GET("template/blocks", GetTemplateBlockList)
-	r.GET("template/block/:name", GetTemplateBlock)
-	r.POST("template/block/:name", GetTemplateBlock)
+	r.GET("templates", GetTemplate)
+	r.GET("templates/configs", GetTemplateConfList)
+	r.GET("templates/blocks", GetTemplateBlockList)
+	r.GET("templates/block/:name", GetTemplateBlock)
+	r.POST("templates/block/:name", GetTemplateBlock)
 }

+ 2 - 2
api/user/passkey.go

@@ -23,7 +23,7 @@ import (
 
 const passkeyTimeout = 30 * time.Second
 
-func buildCachePasskeyRegKey(id int) string {
+func buildCachePasskeyRegKey(id uint64) string {
 	return fmt.Sprintf("passkey-reg-%d", id)
 }
 
@@ -130,7 +130,7 @@ func FinishPasskeyLogin(c *gin.Context) {
 				LastUsedAt: time.Now().Unix(),
 			})
 
-			outUser, err = u.FirstByID(cast.ToInt(string(userHandle)))
+			outUser, err = u.FirstByID(cast.ToUint64(string(userHandle)))
 			return outUser, err
 		}, *sessionData, c.Request)
 	if err != nil {

+ 5 - 5
api/user/router.go

@@ -19,11 +19,11 @@ func InitAuthRouter(r *gin.RouterGroup) {
 
 func InitManageUserRouter(r *gin.RouterGroup) {
 	r.GET("users", GetUsers)
-	r.GET("user/:id", GetUser)
-	r.POST("user", AddUser)
-	r.POST("user/:id", EditUser)
-	r.DELETE("user/:id", DeleteUser)
-	r.PATCH("user/:id", RecoverUser)
+	r.GET("users/:id", GetUser)
+	r.POST("users", AddUser)
+	r.POST("users/:id", EditUser)
+	r.DELETE("users/:id", DeleteUser)
+	r.PATCH("users/:id", RecoverUser)
 }
 
 func InitUserRouter(r *gin.RouterGroup) {

+ 2 - 2
api/user/user.go

@@ -17,7 +17,7 @@ func GetUsers(c *gin.Context) {
 }
 
 func GetUser(c *gin.Context) {
-	id := cast.ToInt(c.Param("id"))
+	id := cast.ToUint64(c.Param("id"))
 
 	u := query.User
 
@@ -69,7 +69,7 @@ func AddUser(c *gin.Context) {
 }
 
 func EditUser(c *gin.Context) {
-	userId := cast.ToInt(c.Param("id"))
+	userId := cast.ToUint64(c.Param("id"))
 
 	if settings.NodeSettings.Demo && userId == 1 {
 		c.JSON(http.StatusNotAcceptable, gin.H{

+ 1 - 1
app/src/api/acme_user.ts

@@ -11,7 +11,7 @@ export interface AcmeUser extends ModelBase {
 
 class ACMEUserCurd extends Curd<AcmeUser> {
   constructor() {
-    super('acme_user', 'acme_users')
+    super('acme_users')
   }
 
   public async register(id: number) {

+ 1 - 1
app/src/api/cert.ts

@@ -37,6 +37,6 @@ export interface CertificateResult {
   key_type: PrivateKeyType
 }
 
-const cert: Curd<Cert> = new Curd('/cert')
+const cert: Curd<Cert> = new Curd('/certs')
 
 export default cert

+ 1 - 1
app/src/api/config.ts

@@ -14,7 +14,7 @@ export interface Config {
 
 class ConfigCurd extends Curd<Config> {
   constructor() {
-    super('/config')
+    super('/configs')
   }
 
   get_base_path() {

+ 52 - 12
app/src/api/curd.ts

@@ -15,28 +15,31 @@ export interface Pagination {
 
 export interface GetListResponse<T> {
   data: T[]
-  pagination: Pagination
+  pagination?: Pagination
 }
 
 class Curd<T> {
   protected readonly baseUrl: string
-  protected readonly plural: string
 
   get_list = this._get_list.bind(this)
   get = this._get.bind(this)
   save = this._save.bind(this)
+  import = this._import.bind(this)
+  import_check = this._import_check.bind(this)
   destroy = this._destroy.bind(this)
   recover = this._recover.bind(this)
   update_order = this._update_order.bind(this)
+  batch_save = this._batch_save.bind(this)
+  batch_destroy = this._batch_destroy.bind(this)
+  batch_recover = this._batch_recover.bind(this)
 
-  constructor(baseUrl: string, plural: string | null = null) {
+  constructor(baseUrl: string) {
     this.baseUrl = baseUrl
-    this.plural = plural ?? `${this.baseUrl}s`
   }
 
   // eslint-disable-next-line ts/no-explicit-any
   _get_list(params: any = null): Promise<GetListResponse<T>> {
-    return http.get(this.plural, { params })
+    return http.get(this.baseUrl, { params })
   }
 
   // eslint-disable-next-line ts/no-explicit-any
@@ -45,10 +48,25 @@ class Curd<T> {
   }
 
   // eslint-disable-next-line ts/no-explicit-any
-  _save(id: any = null, data: any = undefined, config: any = undefined): Promise<T> {
+  _save(id: any = null, data: any = {}, config: any = undefined): Promise<T> {
     return http.post(this.baseUrl + (id ? `/${id}` : ''), data, config)
   }
 
+  // eslint-disable-next-line ts/no-explicit-any
+  _import_check(formData: FormData, config: any = {}): Promise<T> {
+    return http.post(`${this.baseUrl}/import_check`, formData, {
+      headers: {
+        'Content-Type': 'multipart/form-data;charset=UTF-8',
+      },
+      ...config,
+    })
+  }
+
+  // eslint-disable-next-line ts/no-explicit-any
+  _import(data: any, config: any = {}): Promise<T> {
+    return http.post(`${this.baseUrl}/import`, data, config)
+  }
+
   // eslint-disable-next-line ts/no-explicit-any
   _destroy(id: any = null, params: any = {}) {
     return http.delete(`${this.baseUrl}/${id}`, { params })
@@ -59,12 +77,34 @@ class Curd<T> {
     return http.patch(`${this.baseUrl}/${id}`)
   }
 
-  _update_order(data: {
-    target_id: number
-    direction: number
-    affected_ids: number[]
-  }) {
-    return http.post(`${this.plural}/order`, data)
+  _update_order(data: { target_id: number, direction: number, affected_ids: number[] }) {
+    return http.post(`${this.baseUrl}/order`, data)
+  }
+
+  // eslint-disable-next-line ts/no-explicit-any
+  _batch_save(ids: any, data: any) {
+    return http.put(this.baseUrl, {
+      ids,
+      data,
+    })
+  }
+
+  // eslint-disable-next-line ts/no-explicit-any
+  _batch_destroy(ids?: (string | number)[], params: any = {}) {
+    return http.delete(this.baseUrl, {
+      params,
+      data: {
+        ids,
+      },
+    })
+  }
+
+  _batch_recover(ids?: (string | number)[]) {
+    return http.patch(this.baseUrl, {
+      data: {
+        ids,
+      },
+    })
   }
 }
 

+ 1 - 1
app/src/api/dns_credential.ts

@@ -17,6 +17,6 @@ export interface DnsCredential extends ModelBase {
   }
 }
 
-const dns_credential: Curd<DnsCredential> = new Curd('/dns_credential')
+const dns_credential: Curd<DnsCredential> = new Curd('/dns_credentials')
 
 export default dns_credential

+ 1 - 1
app/src/api/domain.ts

@@ -56,6 +56,6 @@ class Domain extends Curd<Site> {
   }
 }
 
-const domain = new Domain('/domain')
+const domain = new Domain('/domains')
 
 export default domain

+ 2 - 2
app/src/api/environment.ts

@@ -18,11 +18,11 @@ export interface Node {
 
 class EnvironmentCurd extends Curd<Environment> {
   constructor() {
-    super('/environment')
+    super('/environments')
   }
 
   load_from_settings() {
-    return http.post(`${this.plural}/load_from_settings`)
+    return http.post(`${this.baseUrl}/load_from_settings`)
   }
 }
 

+ 2 - 2
app/src/api/notification.ts

@@ -10,10 +10,10 @@ export interface Notification extends ModelBase {
 
 class NotificationCurd extends Curd<Notification> {
   public clear() {
-    return http.delete(this.plural)
+    return http.delete(this.baseUrl)
   }
 }
 
-const notification = new NotificationCurd('/notification')
+const notification = new NotificationCurd('/notifications')
 
 export default notification

+ 11 - 0
app/src/api/site_category.ts

@@ -0,0 +1,11 @@
+import type { ModelBase } from '@/api/curd'
+import Curd from '@/api/curd'
+
+export interface SiteCategory extends ModelBase {
+  name: string
+  sync_node_ids: number[]
+}
+
+const site_category = new Curd<SiteCategory>('site_categories')
+
+export default site_category

+ 1 - 1
app/src/api/stream.ts

@@ -33,6 +33,6 @@ class StreamCurd extends Curd<Stream> {
   }
 }
 
-const stream = new StreamCurd('/stream')
+const stream = new StreamCurd('/streams')
 
 export default stream

+ 6 - 6
app/src/api/template.ts

@@ -23,26 +23,26 @@ export interface Template extends NgxServer {
 
 class TemplateApi extends Curd<Template> {
   get_config_list() {
-    return http.get('template/configs')
+    return http.get('templates/configs')
   }
 
   get_block_list() {
-    return http.get('template/blocks')
+    return http.get('templates/blocks')
   }
 
   get_config(name: string) {
-    return http.get(`template/config/${name}`)
+    return http.get(`templates/config/${name}`)
   }
 
   get_block(name: string) {
-    return http.get(`template/block/${name}`)
+    return http.get(`templates/block/${name}`)
   }
 
   build_block(name: string, data: Variable) {
-    return http.post(`template/block/${name}`, data)
+    return http.post(`templates/block/${name}`, data)
   }
 }
 
-const template = new TemplateApi('/template')
+const template = new TemplateApi('/templates')
 
 export default template

+ 1 - 1
app/src/api/user.ts

@@ -6,6 +6,6 @@ export interface User extends ModelBase {
   password: string
 }
 
-const user: Curd<User> = new Curd('user')
+const user: Curd<User> = new Curd('users')
 
 export default user

+ 3 - 4
app/src/components/NodeSelector/NodeSelector.vue

@@ -22,7 +22,7 @@ onMounted(async () => {
       r.data?.forEach(node => {
         data_map.value[node.id] = node
       })
-      hasMore = r.data.length === r.pagination.per_page
+      hasMore = r.data.length === r.pagination?.per_page
       page++
     }).catch(() => {
       hasMore = false
@@ -35,7 +35,6 @@ const value = computed({
     return target.value
   },
   set(v: number[]) {
-    console.log(v)
     if (typeof map.value === 'object') {
       const _map = {}
 
@@ -70,7 +69,7 @@ const noData = computed(() => {
         <ACheckbox :value="0">
           {{ $gettext('Local') }}
         </ACheckbox>
-        <ATag color="blue">
+        <ATag color="green">
           {{ $gettext('Online') }}
         </ATag>
       </ACol>
@@ -83,7 +82,7 @@ const noData = computed(() => {
         </ACheckbox>
         <ATag
           v-if="node.status"
-          color="blue"
+          color="green"
         >
           {{ $gettext('Online') }}
         </ATag>

+ 1 - 1
app/src/components/Notification/Notification.vue

@@ -18,7 +18,7 @@ function init() {
   loading.value = true
   notification.get_list().then(r => {
     data.value = r.data
-    unreadCount.value = r.pagination.total
+    unreadCount.value = r.pagination?.total || 0
   }).catch(e => {
     message.error($gettext(e?.message ?? 'Server error'))
   }).finally(() => {

+ 4 - 2
app/src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts

@@ -1,5 +1,6 @@
+import type { GetListResponse } from '@/api/curd'
 import type { StdTableProps } from '@/components/StdDesign/StdDataDisplay/StdTable.vue'
-import type { Column, StdTableResponse } from '@/components/StdDesign/types'
+import type { Column } from '@/components/StdDesign/types'
 import type { ComputedRef } from 'vue'
 import { downloadCsv } from '@/lib/helper'
 import { message } from 'ant-design-vue'
@@ -33,7 +34,8 @@ async function exportCsv(props: StdTableProps, pithyColumns: ComputedRef<Column[
   while (hasMore) {
     // 准备 DataSource
     await props
-      .api!.get_list({ page }).then((r: StdTableResponse) => {
+    // eslint-disable-next-line ts/no-explicit-any
+      .api!.get_list({ page }).then((r: GetListResponse<any>) => {
       if (r.data.length === 0) {
         hasMore = false
 

+ 0 - 6
app/src/components/StdDesign/types.d.ts

@@ -1,4 +1,3 @@
-import type { Pagination } from '@/api/curd'
 import type Curd from '@/api/curd'
 import type { TableColumnType } from 'ant-design-vue'
 import type { Ref } from 'vue'
@@ -104,8 +103,3 @@ export interface Column extends TableColumnType {
     dataSourceValueIndex?: any // relative to dataSource
   }
 }
-
-export interface StdTableResponse {
-  data: any[]
-  pagination: Pagination
-}

+ 7 - 0
app/src/routes/index.ts

@@ -64,6 +64,13 @@ export const routes: RouteRecordRaw[] = [
             name: () => $gettext('Add Site'),
             lastRouteName: 'Sites List',
           },
+        }, {
+          path: 'categories',
+          name: 'Site Categories',
+          component: () => import('@/views/site/site_category/SiteCategory.vue'),
+          meta: {
+            name: () => $gettext('Site Categories'),
+          },
         }, {
           path: ':name',
           name: 'Edit Site',

+ 1 - 1
app/src/views/certificate/ACMEUserSelector.vue

@@ -47,7 +47,7 @@ onMounted(async () => {
       const r = await acme_user.get_list({ page })
 
       users.value.push(...r.data)
-      if (r?.data?.length < r?.pagination?.per_page)
+      if (r?.data?.length < (r?.pagination?.per_page ?? 0))
         break
       page++
     }

+ 1 - 1
app/src/views/dashboard/Environments.vue

@@ -32,7 +32,7 @@ onMounted(async () => {
   while (hasMore) {
     await environment.get_list({ page, enabled: true }).then(r => {
       data.value.push(...r.data)
-      hasMore = r.data.length === r.pagination.per_page
+      hasMore = r.data.length === r.pagination?.per_page
       page++
     }).catch(() => {
       hasMore = false

+ 28 - 0
app/src/views/site/site_category/SiteCategory.vue

@@ -0,0 +1,28 @@
+<script setup lang="ts">
+import site_category from '@/api/site_category'
+import NodeSelector from '@/components/NodeSelector/NodeSelector.vue'
+import { StdCurd } from '@/components/StdDesign/StdDataDisplay'
+import columns from '@/views/site/site_category/columns'
+</script>
+
+<template>
+  <StdCurd
+    :title="$gettext('Site Categories')"
+    :api="site_category"
+    :columns="columns"
+  >
+    <template #edit="{ data }">
+      <div class="mb-2">
+        {{ $gettext('Sync Nodes') }}
+      </div>
+      <NodeSelector
+        v-model:target="data.sync_node_ids"
+        hidden-local
+      />
+    </template>
+  </StdCurd>
+</template>
+
+<style scoped lang="less">
+
+</style>

+ 30 - 0
app/src/views/site/site_category/columns.ts

@@ -0,0 +1,30 @@
+import type { Column } from '@/components/StdDesign/types'
+import { datetime } from '@/components/StdDesign/StdDataDisplay/StdTableTransformer'
+import { input } from '@/components/StdDesign/StdDataEntry'
+
+const columns: Column[] = [{
+  dataIndex: 'name',
+  title: () => $gettext('Name'),
+  search: true,
+  edit: {
+    type: input,
+  },
+  pithy: true,
+}, {
+  title: () => $gettext('Created at'),
+  dataIndex: 'created_at',
+  customRender: datetime,
+  sorter: true,
+  pithy: true,
+}, {
+  title: () => $gettext('Updated at'),
+  dataIndex: 'updated_at',
+  customRender: datetime,
+  sorter: true,
+  pithy: true,
+}, {
+  title: () => $gettext('Action'),
+  dataIndex: 'action',
+}]
+
+export default columns

+ 0 - 2
go.sum

@@ -812,8 +812,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgraph-io/ristretto v0.2.0 h1:XAfl+7cmoUDWW/2Lx8TGZQjjxIQ2Ley9DSf52dru4WE=
-github.com/dgraph-io/ristretto v0.2.0/go.mod h1:8uBHCU/PBV4Ag0CJrP47b9Ofby5dqWNh4FicAdoqFNU=
 github.com/dgraph-io/ristretto/v2 v2.0.0-alpha h1:JBy5Mm/z1HBj3hyDLFBS2uHalL971q3yjUaKcia0Sgo=
 github.com/dgraph-io/ristretto/v2 v2.0.0-alpha/go.mod h1:7bFGBdXzLfFFjKCN8YDQ7+98m/AEYcrdqH7s0En96Qg=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=

+ 1 - 1
internal/analytic/node.go

@@ -42,7 +42,7 @@ type Node struct {
 
 var mutex sync.Mutex
 
-type TNodeMap map[int]*Node
+type TNodeMap map[uint64]*Node
 
 var NodeMap TNodeMap
 

+ 3 - 3
internal/cert/payload.go

@@ -16,11 +16,11 @@ import (
 )
 
 type ConfigPayload struct {
-	CertID                  int                        `json:"cert_id"`
+	CertID                  uint64                     `json:"cert_id"`
 	ServerName              []string                   `json:"server_name"`
 	ChallengeMethod         string                     `json:"challenge_method"`
-	DNSCredentialID         int                        `json:"dns_credential_id"`
-	ACMEUserID              int                        `json:"acme_user_id"`
+	DNSCredentialID         uint64                     `json:"dns_credential_id"`
+	ACMEUserID              uint64                     `json:"acme_user_id"`
 	KeyType                 certcrypto.KeyType         `json:"key_type"`
 	Resource                *model.CertificateResource `json:"resource,omitempty"`
 	MustStaple              bool                       `json:"must_staple"`

+ 1 - 1
internal/config/sync.go

@@ -80,7 +80,7 @@ func SyncToRemoteServer(c *model.Config, newFilepath string) (err error) {
 	return
 }
 
-func SyncRenameOnRemoteServer(origPath, newPath string, syncNodeIds []int) (err error) {
+func SyncRenameOnRemoteServer(origPath, newPath string, syncNodeIds []uint64) (err error) {
 	if origPath == "" || newPath == "" || len(syncNodeIds) == 0 {
 		return
 	}

+ 1 - 1
internal/middleware/proxy.go

@@ -18,7 +18,7 @@ func Proxy() gin.HandlerFunc {
 			c.Next()
 			return
 		}
-		id := cast.ToInt(nodeID)
+		id := cast.ToUint64(nodeID)
 		if id == 0 {
 			c.Next()
 			return

+ 1 - 1
internal/middleware/proxy_ws.go

@@ -16,7 +16,7 @@ func ProxyWs() gin.HandlerFunc {
 			c.Next()
 			return
 		}
-		id := cast.ToInt(nodeID)
+		id := cast.ToUint64(nodeID)
 		if id == 0 {
 			c.Next()
 			return

+ 3 - 3
internal/user/otp.go

@@ -46,16 +46,16 @@ func secureSessionIDCacheKey(sessionId string) string {
 	return fmt.Sprintf("2fa_secure_session:_%s", sessionId)
 }
 
-func SetSecureSessionID(userId int) (sessionId string) {
+func SetSecureSessionID(userId uint64) (sessionId string) {
 	sessionId = uuid.NewString()
 	cache.Set(secureSessionIDCacheKey(sessionId), userId, 5*time.Minute)
 
 	return
 }
 
-func VerifySecureSessionID(sessionId string, userId int) bool {
+func VerifySecureSessionID(sessionId string, userId uint64) bool {
 	if v, ok := cache.Get(secureSessionIDCacheKey(sessionId)); ok {
-		if v.(int) == userId {
+		if v.(uint64) == userId {
 			return true
 		}
 	}

+ 1 - 1
internal/user/user.go

@@ -15,7 +15,7 @@ const ExpiredTime = 24 * time.Hour
 
 type JWTClaims struct {
 	Name   string `json:"name"`
-	UserID int    `json:"user_id"`
+	UserID uint64 `json:"user_id"`
 	jwt.RegisteredClaims
 }
 

+ 3 - 3
model/cert.go

@@ -37,14 +37,14 @@ type Cert struct {
 	SSLCertificateKeyPath   string               `json:"ssl_certificate_key_path"`
 	AutoCert                int                  `json:"auto_cert"`
 	ChallengeMethod         string               `json:"challenge_method"`
-	DnsCredentialID         int                  `json:"dns_credential_id"`
+	DnsCredentialID         uint64               `json:"dns_credential_id"`
 	DnsCredential           *DnsCredential       `json:"dns_credential,omitempty"`
-	ACMEUserID              int                  `json:"acme_user_id"`
+	ACMEUserID              uint64               `json:"acme_user_id"`
 	ACMEUser                *AcmeUser            `json:"acme_user,omitempty"`
 	KeyType                 certcrypto.KeyType   `json:"key_type"`
 	Log                     string               `json:"log"`
 	Resource                *CertificateResource `json:"-" gorm:"serializer:json"`
-	SyncNodeIds             []int                `json:"sync_node_ids" gorm:"serializer:json"`
+	SyncNodeIds             []uint64             `json:"sync_node_ids" gorm:"serializer:json"`
 	MustStaple              bool                 `json:"must_staple"`
 	LegoDisableCNAMESupport bool                 `json:"lego_disable_cname_support"`
 }

+ 4 - 4
model/config.go

@@ -2,8 +2,8 @@ package model
 
 type Config struct {
 	Model
-	Name          string `json:"name"`
-	Filepath      string `json:"filepath"`
-	SyncNodeIds   []int  `json:"sync_node_ids" gorm:"serializer:json"`
-	SyncOverwrite bool   `json:"sync_overwrite"`
+	Name          string   `json:"name"`
+	Filepath      string   `json:"filepath"`
+	SyncNodeIds   []uint64 `json:"sync_node_ids" gorm:"serializer:json"`
+	SyncOverwrite bool     `json:"sync_overwrite"`
 }

+ 4 - 6
model/environment.go

@@ -7,12 +7,10 @@ import (
 
 type Environment struct {
 	Model
-	Name          string `json:"name"`
-	URL           string `json:"url"`
-	Token         string `json:"token"`
-	Enabled       bool   `json:"enabled" gorm:"default:true"`
-	OperationSync bool   `json:"operation_sync"`
-	SyncApiRegex  string `json:"sync_api_regex"`
+	Name    string `json:"name"`
+	URL     string `json:"url"`
+	Token   string `json:"token"`
+	Enabled bool   `json:"enabled" gorm:"default:true"`
 }
 
 func (e *Environment) GetUrl(uri string) (decodedUri string, err error) {

+ 3 - 3
model/model.go

@@ -9,7 +9,7 @@ import (
 var db *gorm.DB
 
 type Model struct {
-	ID        int             `gorm:"primary_key" json:"id"`
+	ID        uint64          `gorm:"primary_key" json:"id"`
 	CreatedAt time.Time       `json:"created_at"`
 	UpdatedAt time.Time       `json:"updated_at"`
 	DeletedAt *gorm.DeletedAt `gorm:"index" json:"deleted_at"`
@@ -57,7 +57,7 @@ type DataList struct {
 
 type Method interface {
 	// FirstByID Where("id=@id")
-	FirstByID(id int) (*gen.T, error)
+	FirstByID(id uint64) (*gen.T, error)
 	// DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-	DeleteByID(id int) error
+	DeleteByID(id uint64) error
 }

+ 1 - 1
model/passkey.go

@@ -6,7 +6,7 @@ type Passkey struct {
 	Model
 
 	Name       string               `json:"name"`
-	UserID     int                  `json:"user_id"`
+	UserID     uint64               `json:"user_id"`
 	RawID      string               `json:"raw_id"`
 	Credential *webauthn.Credential `json:"-" gorm:"serializer:json"`
 	LastUsedAt int64                `json:"last_used_at" gorm:"default:0"`

+ 1 - 1
model/user.go

@@ -17,7 +17,7 @@ type User struct {
 }
 
 type AuthToken struct {
-	UserID    int    `json:"user_id"`
+	UserID    uint64 `json:"user_id"`
 	Token     string `json:"token"`
 	ExpiredAt int64  `json:"expired_at" gorm:"default:0"`
 }

+ 5 - 5
query/acme_users.gen.go

@@ -28,7 +28,7 @@ func newAcmeUser(db *gorm.DB, opts ...gen.DOOption) acmeUser {
 
 	tableName := _acmeUser.acmeUserDo.TableName()
 	_acmeUser.ALL = field.NewAsterisk(tableName)
-	_acmeUser.ID = field.NewInt(tableName, "id")
+	_acmeUser.ID = field.NewUint64(tableName, "id")
 	_acmeUser.CreatedAt = field.NewTime(tableName, "created_at")
 	_acmeUser.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_acmeUser.DeletedAt = field.NewField(tableName, "deleted_at")
@@ -49,7 +49,7 @@ type acmeUser struct {
 	acmeUserDo
 
 	ALL               field.Asterisk
-	ID                field.Int
+	ID                field.Uint64
 	CreatedAt         field.Time
 	UpdatedAt         field.Time
 	DeletedAt         field.Field
@@ -76,7 +76,7 @@ func (a acmeUser) As(alias string) *acmeUser {
 
 func (a *acmeUser) updateTableName(table string) *acmeUser {
 	a.ALL = field.NewAsterisk(table)
-	a.ID = field.NewInt(table, "id")
+	a.ID = field.NewUint64(table, "id")
 	a.CreatedAt = field.NewTime(table, "created_at")
 	a.UpdatedAt = field.NewTime(table, "updated_at")
 	a.DeletedAt = field.NewField(table, "deleted_at")
@@ -130,7 +130,7 @@ func (a acmeUser) replaceDB(db *gorm.DB) acmeUser {
 type acmeUserDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (a acmeUserDo) FirstByID(id int) (result *model.AcmeUser, err error) {
+func (a acmeUserDo) FirstByID(id uint64) (result *model.AcmeUser, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -145,7 +145,7 @@ func (a acmeUserDo) FirstByID(id int) (result *model.AcmeUser, err error) {
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (a acmeUserDo) DeleteByID(id int) (err error) {
+func (a acmeUserDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 5 - 5
query/auth_tokens.gen.go

@@ -28,7 +28,7 @@ func newAuthToken(db *gorm.DB, opts ...gen.DOOption) authToken {
 
 	tableName := _authToken.authTokenDo.TableName()
 	_authToken.ALL = field.NewAsterisk(tableName)
-	_authToken.UserID = field.NewInt(tableName, "user_id")
+	_authToken.UserID = field.NewUint64(tableName, "user_id")
 	_authToken.Token = field.NewString(tableName, "token")
 	_authToken.ExpiredAt = field.NewInt64(tableName, "expired_at")
 
@@ -41,7 +41,7 @@ type authToken struct {
 	authTokenDo
 
 	ALL       field.Asterisk
-	UserID    field.Int
+	UserID    field.Uint64
 	Token     field.String
 	ExpiredAt field.Int64
 
@@ -60,7 +60,7 @@ func (a authToken) As(alias string) *authToken {
 
 func (a *authToken) updateTableName(table string) *authToken {
 	a.ALL = field.NewAsterisk(table)
-	a.UserID = field.NewInt(table, "user_id")
+	a.UserID = field.NewUint64(table, "user_id")
 	a.Token = field.NewString(table, "token")
 	a.ExpiredAt = field.NewInt64(table, "expired_at")
 
@@ -98,7 +98,7 @@ func (a authToken) replaceDB(db *gorm.DB) authToken {
 type authTokenDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (a authTokenDo) FirstByID(id int) (result *model.AuthToken, err error) {
+func (a authTokenDo) FirstByID(id uint64) (result *model.AuthToken, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -113,7 +113,7 @@ func (a authTokenDo) FirstByID(id int) (result *model.AuthToken, err error) {
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (a authTokenDo) DeleteByID(id int) (err error) {
+func (a authTokenDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 5 - 5
query/auths.gen.go

@@ -28,7 +28,7 @@ func newUser(db *gorm.DB, opts ...gen.DOOption) user {
 
 	tableName := _user.userDo.TableName()
 	_user.ALL = field.NewAsterisk(tableName)
-	_user.ID = field.NewInt(tableName, "id")
+	_user.ID = field.NewUint64(tableName, "id")
 	_user.CreatedAt = field.NewTime(tableName, "created_at")
 	_user.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_user.DeletedAt = field.NewField(tableName, "deleted_at")
@@ -46,7 +46,7 @@ type user struct {
 	userDo
 
 	ALL       field.Asterisk
-	ID        field.Int
+	ID        field.Uint64
 	CreatedAt field.Time
 	UpdatedAt field.Time
 	DeletedAt field.Field
@@ -70,7 +70,7 @@ func (u user) As(alias string) *user {
 
 func (u *user) updateTableName(table string) *user {
 	u.ALL = field.NewAsterisk(table)
-	u.ID = field.NewInt(table, "id")
+	u.ID = field.NewUint64(table, "id")
 	u.CreatedAt = field.NewTime(table, "created_at")
 	u.UpdatedAt = field.NewTime(table, "updated_at")
 	u.DeletedAt = field.NewField(table, "deleted_at")
@@ -118,7 +118,7 @@ func (u user) replaceDB(db *gorm.DB) user {
 type userDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (u userDo) FirstByID(id int) (result *model.User, err error) {
+func (u userDo) FirstByID(id uint64) (result *model.User, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -133,7 +133,7 @@ func (u userDo) FirstByID(id int) (result *model.User, err error) {
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (u userDo) DeleteByID(id int) (err error) {
+func (u userDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 2 - 2
query/ban_ips.gen.go

@@ -98,7 +98,7 @@ func (b banIP) replaceDB(db *gorm.DB) banIP {
 type banIPDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (b banIPDo) FirstByID(id int) (result *model.BanIP, err error) {
+func (b banIPDo) FirstByID(id uint64) (result *model.BanIP, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -113,7 +113,7 @@ func (b banIPDo) FirstByID(id int) (result *model.BanIP, err error) {
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (b banIPDo) DeleteByID(id int) (err error) {
+func (b banIPDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 11 - 11
query/certs.gen.go

@@ -28,7 +28,7 @@ func newCert(db *gorm.DB, opts ...gen.DOOption) cert {
 
 	tableName := _cert.certDo.TableName()
 	_cert.ALL = field.NewAsterisk(tableName)
-	_cert.ID = field.NewInt(tableName, "id")
+	_cert.ID = field.NewUint64(tableName, "id")
 	_cert.CreatedAt = field.NewTime(tableName, "created_at")
 	_cert.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_cert.DeletedAt = field.NewField(tableName, "deleted_at")
@@ -39,8 +39,8 @@ func newCert(db *gorm.DB, opts ...gen.DOOption) cert {
 	_cert.SSLCertificateKeyPath = field.NewString(tableName, "ssl_certificate_key_path")
 	_cert.AutoCert = field.NewInt(tableName, "auto_cert")
 	_cert.ChallengeMethod = field.NewString(tableName, "challenge_method")
-	_cert.DnsCredentialID = field.NewInt(tableName, "dns_credential_id")
-	_cert.ACMEUserID = field.NewInt(tableName, "acme_user_id")
+	_cert.DnsCredentialID = field.NewUint64(tableName, "dns_credential_id")
+	_cert.ACMEUserID = field.NewUint64(tableName, "acme_user_id")
 	_cert.KeyType = field.NewString(tableName, "key_type")
 	_cert.Log = field.NewString(tableName, "log")
 	_cert.Resource = field.NewField(tableName, "resource")
@@ -68,7 +68,7 @@ type cert struct {
 	certDo
 
 	ALL                     field.Asterisk
-	ID                      field.Int
+	ID                      field.Uint64
 	CreatedAt               field.Time
 	UpdatedAt               field.Time
 	DeletedAt               field.Field
@@ -79,8 +79,8 @@ type cert struct {
 	SSLCertificateKeyPath   field.String
 	AutoCert                field.Int
 	ChallengeMethod         field.String
-	DnsCredentialID         field.Int
-	ACMEUserID              field.Int
+	DnsCredentialID         field.Uint64
+	ACMEUserID              field.Uint64
 	KeyType                 field.String
 	Log                     field.String
 	Resource                field.Field
@@ -106,7 +106,7 @@ func (c cert) As(alias string) *cert {
 
 func (c *cert) updateTableName(table string) *cert {
 	c.ALL = field.NewAsterisk(table)
-	c.ID = field.NewInt(table, "id")
+	c.ID = field.NewUint64(table, "id")
 	c.CreatedAt = field.NewTime(table, "created_at")
 	c.UpdatedAt = field.NewTime(table, "updated_at")
 	c.DeletedAt = field.NewField(table, "deleted_at")
@@ -117,8 +117,8 @@ func (c *cert) updateTableName(table string) *cert {
 	c.SSLCertificateKeyPath = field.NewString(table, "ssl_certificate_key_path")
 	c.AutoCert = field.NewInt(table, "auto_cert")
 	c.ChallengeMethod = field.NewString(table, "challenge_method")
-	c.DnsCredentialID = field.NewInt(table, "dns_credential_id")
-	c.ACMEUserID = field.NewInt(table, "acme_user_id")
+	c.DnsCredentialID = field.NewUint64(table, "dns_credential_id")
+	c.ACMEUserID = field.NewUint64(table, "acme_user_id")
 	c.KeyType = field.NewString(table, "key_type")
 	c.Log = field.NewString(table, "log")
 	c.Resource = field.NewField(table, "resource")
@@ -319,7 +319,7 @@ func (a certBelongsToACMEUserTx) Count() int64 {
 type certDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (c certDo) FirstByID(id int) (result *model.Cert, err error) {
+func (c certDo) FirstByID(id uint64) (result *model.Cert, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -334,7 +334,7 @@ func (c certDo) FirstByID(id int) (result *model.Cert, err error) {
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (c certDo) DeleteByID(id int) (err error) {
+func (c certDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 2 - 2
query/chat_gpt_logs.gen.go

@@ -94,7 +94,7 @@ func (c chatGPTLog) replaceDB(db *gorm.DB) chatGPTLog {
 type chatGPTLogDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (c chatGPTLogDo) FirstByID(id int) (result *model.ChatGPTLog, err error) {
+func (c chatGPTLogDo) FirstByID(id uint64) (result *model.ChatGPTLog, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -109,7 +109,7 @@ func (c chatGPTLogDo) FirstByID(id int) (result *model.ChatGPTLog, err error) {
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (c chatGPTLogDo) DeleteByID(id int) (err error) {
+func (c chatGPTLogDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 5 - 5
query/config_backups.gen.go

@@ -28,7 +28,7 @@ func newConfigBackup(db *gorm.DB, opts ...gen.DOOption) configBackup {
 
 	tableName := _configBackup.configBackupDo.TableName()
 	_configBackup.ALL = field.NewAsterisk(tableName)
-	_configBackup.ID = field.NewInt(tableName, "id")
+	_configBackup.ID = field.NewUint64(tableName, "id")
 	_configBackup.CreatedAt = field.NewTime(tableName, "created_at")
 	_configBackup.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_configBackup.DeletedAt = field.NewField(tableName, "deleted_at")
@@ -45,7 +45,7 @@ type configBackup struct {
 	configBackupDo
 
 	ALL       field.Asterisk
-	ID        field.Int
+	ID        field.Uint64
 	CreatedAt field.Time
 	UpdatedAt field.Time
 	DeletedAt field.Field
@@ -68,7 +68,7 @@ func (c configBackup) As(alias string) *configBackup {
 
 func (c *configBackup) updateTableName(table string) *configBackup {
 	c.ALL = field.NewAsterisk(table)
-	c.ID = field.NewInt(table, "id")
+	c.ID = field.NewUint64(table, "id")
 	c.CreatedAt = field.NewTime(table, "created_at")
 	c.UpdatedAt = field.NewTime(table, "updated_at")
 	c.DeletedAt = field.NewField(table, "deleted_at")
@@ -114,7 +114,7 @@ func (c configBackup) replaceDB(db *gorm.DB) configBackup {
 type configBackupDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (c configBackupDo) FirstByID(id int) (result *model.ConfigBackup, err error) {
+func (c configBackupDo) FirstByID(id uint64) (result *model.ConfigBackup, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -129,7 +129,7 @@ func (c configBackupDo) FirstByID(id int) (result *model.ConfigBackup, err error
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (c configBackupDo) DeleteByID(id int) (err error) {
+func (c configBackupDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 5 - 5
query/configs.gen.go

@@ -28,7 +28,7 @@ func newConfig(db *gorm.DB, opts ...gen.DOOption) config {
 
 	tableName := _config.configDo.TableName()
 	_config.ALL = field.NewAsterisk(tableName)
-	_config.ID = field.NewInt(tableName, "id")
+	_config.ID = field.NewUint64(tableName, "id")
 	_config.CreatedAt = field.NewTime(tableName, "created_at")
 	_config.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_config.DeletedAt = field.NewField(tableName, "deleted_at")
@@ -46,7 +46,7 @@ type config struct {
 	configDo
 
 	ALL           field.Asterisk
-	ID            field.Int
+	ID            field.Uint64
 	CreatedAt     field.Time
 	UpdatedAt     field.Time
 	DeletedAt     field.Field
@@ -70,7 +70,7 @@ func (c config) As(alias string) *config {
 
 func (c *config) updateTableName(table string) *config {
 	c.ALL = field.NewAsterisk(table)
-	c.ID = field.NewInt(table, "id")
+	c.ID = field.NewUint64(table, "id")
 	c.CreatedAt = field.NewTime(table, "created_at")
 	c.UpdatedAt = field.NewTime(table, "updated_at")
 	c.DeletedAt = field.NewField(table, "deleted_at")
@@ -118,7 +118,7 @@ func (c config) replaceDB(db *gorm.DB) config {
 type configDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (c configDo) FirstByID(id int) (result *model.Config, err error) {
+func (c configDo) FirstByID(id uint64) (result *model.Config, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -133,7 +133,7 @@ func (c configDo) FirstByID(id int) (result *model.Config, err error) {
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (c configDo) DeleteByID(id int) (err error) {
+func (c configDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 5 - 5
query/dns_credentials.gen.go

@@ -28,7 +28,7 @@ func newDnsCredential(db *gorm.DB, opts ...gen.DOOption) dnsCredential {
 
 	tableName := _dnsCredential.dnsCredentialDo.TableName()
 	_dnsCredential.ALL = field.NewAsterisk(tableName)
-	_dnsCredential.ID = field.NewInt(tableName, "id")
+	_dnsCredential.ID = field.NewUint64(tableName, "id")
 	_dnsCredential.CreatedAt = field.NewTime(tableName, "created_at")
 	_dnsCredential.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_dnsCredential.DeletedAt = field.NewField(tableName, "deleted_at")
@@ -45,7 +45,7 @@ type dnsCredential struct {
 	dnsCredentialDo
 
 	ALL       field.Asterisk
-	ID        field.Int
+	ID        field.Uint64
 	CreatedAt field.Time
 	UpdatedAt field.Time
 	DeletedAt field.Field
@@ -68,7 +68,7 @@ func (d dnsCredential) As(alias string) *dnsCredential {
 
 func (d *dnsCredential) updateTableName(table string) *dnsCredential {
 	d.ALL = field.NewAsterisk(table)
-	d.ID = field.NewInt(table, "id")
+	d.ID = field.NewUint64(table, "id")
 	d.CreatedAt = field.NewTime(table, "created_at")
 	d.UpdatedAt = field.NewTime(table, "updated_at")
 	d.DeletedAt = field.NewField(table, "deleted_at")
@@ -114,7 +114,7 @@ func (d dnsCredential) replaceDB(db *gorm.DB) dnsCredential {
 type dnsCredentialDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (d dnsCredentialDo) FirstByID(id int) (result *model.DnsCredential, err error) {
+func (d dnsCredentialDo) FirstByID(id uint64) (result *model.DnsCredential, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -129,7 +129,7 @@ func (d dnsCredentialDo) FirstByID(id int) (result *model.DnsCredential, err err
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (d dnsCredentialDo) DeleteByID(id int) (err error) {
+func (d dnsCredentialDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 14 - 22
query/environments.gen.go

@@ -28,7 +28,7 @@ func newEnvironment(db *gorm.DB, opts ...gen.DOOption) environment {
 
 	tableName := _environment.environmentDo.TableName()
 	_environment.ALL = field.NewAsterisk(tableName)
-	_environment.ID = field.NewInt(tableName, "id")
+	_environment.ID = field.NewUint64(tableName, "id")
 	_environment.CreatedAt = field.NewTime(tableName, "created_at")
 	_environment.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_environment.DeletedAt = field.NewField(tableName, "deleted_at")
@@ -36,8 +36,6 @@ func newEnvironment(db *gorm.DB, opts ...gen.DOOption) environment {
 	_environment.URL = field.NewString(tableName, "url")
 	_environment.Token = field.NewString(tableName, "token")
 	_environment.Enabled = field.NewBool(tableName, "enabled")
-	_environment.OperationSync = field.NewBool(tableName, "operation_sync")
-	_environment.SyncApiRegex = field.NewString(tableName, "sync_api_regex")
 
 	_environment.fillFieldMap()
 
@@ -47,17 +45,15 @@ func newEnvironment(db *gorm.DB, opts ...gen.DOOption) environment {
 type environment struct {
 	environmentDo
 
-	ALL           field.Asterisk
-	ID            field.Int
-	CreatedAt     field.Time
-	UpdatedAt     field.Time
-	DeletedAt     field.Field
-	Name          field.String
-	URL           field.String
-	Token         field.String
-	Enabled       field.Bool
-	OperationSync field.Bool
-	SyncApiRegex  field.String
+	ALL       field.Asterisk
+	ID        field.Uint64
+	CreatedAt field.Time
+	UpdatedAt field.Time
+	DeletedAt field.Field
+	Name      field.String
+	URL       field.String
+	Token     field.String
+	Enabled   field.Bool
 
 	fieldMap map[string]field.Expr
 }
@@ -74,7 +70,7 @@ func (e environment) As(alias string) *environment {
 
 func (e *environment) updateTableName(table string) *environment {
 	e.ALL = field.NewAsterisk(table)
-	e.ID = field.NewInt(table, "id")
+	e.ID = field.NewUint64(table, "id")
 	e.CreatedAt = field.NewTime(table, "created_at")
 	e.UpdatedAt = field.NewTime(table, "updated_at")
 	e.DeletedAt = field.NewField(table, "deleted_at")
@@ -82,8 +78,6 @@ func (e *environment) updateTableName(table string) *environment {
 	e.URL = field.NewString(table, "url")
 	e.Token = field.NewString(table, "token")
 	e.Enabled = field.NewBool(table, "enabled")
-	e.OperationSync = field.NewBool(table, "operation_sync")
-	e.SyncApiRegex = field.NewString(table, "sync_api_regex")
 
 	e.fillFieldMap()
 
@@ -100,7 +94,7 @@ func (e *environment) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
 }
 
 func (e *environment) fillFieldMap() {
-	e.fieldMap = make(map[string]field.Expr, 10)
+	e.fieldMap = make(map[string]field.Expr, 8)
 	e.fieldMap["id"] = e.ID
 	e.fieldMap["created_at"] = e.CreatedAt
 	e.fieldMap["updated_at"] = e.UpdatedAt
@@ -109,8 +103,6 @@ func (e *environment) fillFieldMap() {
 	e.fieldMap["url"] = e.URL
 	e.fieldMap["token"] = e.Token
 	e.fieldMap["enabled"] = e.Enabled
-	e.fieldMap["operation_sync"] = e.OperationSync
-	e.fieldMap["sync_api_regex"] = e.SyncApiRegex
 }
 
 func (e environment) clone(db *gorm.DB) environment {
@@ -126,7 +118,7 @@ func (e environment) replaceDB(db *gorm.DB) environment {
 type environmentDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (e environmentDo) FirstByID(id int) (result *model.Environment, err error) {
+func (e environmentDo) FirstByID(id uint64) (result *model.Environment, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -141,7 +133,7 @@ func (e environmentDo) FirstByID(id int) (result *model.Environment, err error)
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (e environmentDo) DeleteByID(id int) (err error) {
+func (e environmentDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 8 - 0
query/gen.go

@@ -29,6 +29,7 @@ var (
 	Notification  *notification
 	Passkey       *passkey
 	Site          *site
+	SiteCategory  *siteCategory
 	Stream        *stream
 	User          *user
 )
@@ -47,6 +48,7 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
 	Notification = &Q.Notification
 	Passkey = &Q.Passkey
 	Site = &Q.Site
+	SiteCategory = &Q.SiteCategory
 	Stream = &Q.Stream
 	User = &Q.User
 }
@@ -66,6 +68,7 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
 		Notification:  newNotification(db, opts...),
 		Passkey:       newPasskey(db, opts...),
 		Site:          newSite(db, opts...),
+		SiteCategory:  newSiteCategory(db, opts...),
 		Stream:        newStream(db, opts...),
 		User:          newUser(db, opts...),
 	}
@@ -86,6 +89,7 @@ type Query struct {
 	Notification  notification
 	Passkey       passkey
 	Site          site
+	SiteCategory  siteCategory
 	Stream        stream
 	User          user
 }
@@ -107,6 +111,7 @@ func (q *Query) clone(db *gorm.DB) *Query {
 		Notification:  q.Notification.clone(db),
 		Passkey:       q.Passkey.clone(db),
 		Site:          q.Site.clone(db),
+		SiteCategory:  q.SiteCategory.clone(db),
 		Stream:        q.Stream.clone(db),
 		User:          q.User.clone(db),
 	}
@@ -135,6 +140,7 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query {
 		Notification:  q.Notification.replaceDB(db),
 		Passkey:       q.Passkey.replaceDB(db),
 		Site:          q.Site.replaceDB(db),
+		SiteCategory:  q.SiteCategory.replaceDB(db),
 		Stream:        q.Stream.replaceDB(db),
 		User:          q.User.replaceDB(db),
 	}
@@ -153,6 +159,7 @@ type queryCtx struct {
 	Notification  *notificationDo
 	Passkey       *passkeyDo
 	Site          *siteDo
+	SiteCategory  *siteCategoryDo
 	Stream        *streamDo
 	User          *userDo
 }
@@ -171,6 +178,7 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx {
 		Notification:  q.Notification.WithContext(ctx),
 		Passkey:       q.Passkey.WithContext(ctx),
 		Site:          q.Site.WithContext(ctx),
+		SiteCategory:  q.SiteCategory.WithContext(ctx),
 		Stream:        q.Stream.WithContext(ctx),
 		User:          q.User.WithContext(ctx),
 	}

+ 5 - 5
query/notifications.gen.go

@@ -28,7 +28,7 @@ func newNotification(db *gorm.DB, opts ...gen.DOOption) notification {
 
 	tableName := _notification.notificationDo.TableName()
 	_notification.ALL = field.NewAsterisk(tableName)
-	_notification.ID = field.NewInt(tableName, "id")
+	_notification.ID = field.NewUint64(tableName, "id")
 	_notification.CreatedAt = field.NewTime(tableName, "created_at")
 	_notification.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_notification.DeletedAt = field.NewField(tableName, "deleted_at")
@@ -45,7 +45,7 @@ type notification struct {
 	notificationDo
 
 	ALL       field.Asterisk
-	ID        field.Int
+	ID        field.Uint64
 	CreatedAt field.Time
 	UpdatedAt field.Time
 	DeletedAt field.Field
@@ -68,7 +68,7 @@ func (n notification) As(alias string) *notification {
 
 func (n *notification) updateTableName(table string) *notification {
 	n.ALL = field.NewAsterisk(table)
-	n.ID = field.NewInt(table, "id")
+	n.ID = field.NewUint64(table, "id")
 	n.CreatedAt = field.NewTime(table, "created_at")
 	n.UpdatedAt = field.NewTime(table, "updated_at")
 	n.DeletedAt = field.NewField(table, "deleted_at")
@@ -114,7 +114,7 @@ func (n notification) replaceDB(db *gorm.DB) notification {
 type notificationDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (n notificationDo) FirstByID(id int) (result *model.Notification, err error) {
+func (n notificationDo) FirstByID(id uint64) (result *model.Notification, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -129,7 +129,7 @@ func (n notificationDo) FirstByID(id int) (result *model.Notification, err error
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (n notificationDo) DeleteByID(id int) (err error) {
+func (n notificationDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 8 - 8
query/passkeys.gen.go

@@ -28,12 +28,12 @@ func newPasskey(db *gorm.DB, opts ...gen.DOOption) passkey {
 
 	tableName := _passkey.passkeyDo.TableName()
 	_passkey.ALL = field.NewAsterisk(tableName)
-	_passkey.ID = field.NewInt(tableName, "id")
+	_passkey.ID = field.NewUint64(tableName, "id")
 	_passkey.CreatedAt = field.NewTime(tableName, "created_at")
 	_passkey.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_passkey.DeletedAt = field.NewField(tableName, "deleted_at")
 	_passkey.Name = field.NewString(tableName, "name")
-	_passkey.UserID = field.NewInt(tableName, "user_id")
+	_passkey.UserID = field.NewUint64(tableName, "user_id")
 	_passkey.RawID = field.NewString(tableName, "raw_id")
 	_passkey.Credential = field.NewField(tableName, "credential")
 	_passkey.LastUsedAt = field.NewInt64(tableName, "last_used_at")
@@ -47,12 +47,12 @@ type passkey struct {
 	passkeyDo
 
 	ALL        field.Asterisk
-	ID         field.Int
+	ID         field.Uint64
 	CreatedAt  field.Time
 	UpdatedAt  field.Time
 	DeletedAt  field.Field
 	Name       field.String
-	UserID     field.Int
+	UserID     field.Uint64
 	RawID      field.String
 	Credential field.Field
 	LastUsedAt field.Int64
@@ -72,12 +72,12 @@ func (p passkey) As(alias string) *passkey {
 
 func (p *passkey) updateTableName(table string) *passkey {
 	p.ALL = field.NewAsterisk(table)
-	p.ID = field.NewInt(table, "id")
+	p.ID = field.NewUint64(table, "id")
 	p.CreatedAt = field.NewTime(table, "created_at")
 	p.UpdatedAt = field.NewTime(table, "updated_at")
 	p.DeletedAt = field.NewField(table, "deleted_at")
 	p.Name = field.NewString(table, "name")
-	p.UserID = field.NewInt(table, "user_id")
+	p.UserID = field.NewUint64(table, "user_id")
 	p.RawID = field.NewString(table, "raw_id")
 	p.Credential = field.NewField(table, "credential")
 	p.LastUsedAt = field.NewInt64(table, "last_used_at")
@@ -122,7 +122,7 @@ func (p passkey) replaceDB(db *gorm.DB) passkey {
 type passkeyDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (p passkeyDo) FirstByID(id int) (result *model.Passkey, err error) {
+func (p passkeyDo) FirstByID(id uint64) (result *model.Passkey, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -137,7 +137,7 @@ func (p passkeyDo) FirstByID(id int) (result *model.Passkey, err error) {
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (p passkeyDo) DeleteByID(id int) (err error) {
+func (p passkeyDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 370 - 0
query/site_categories.gen.go

@@ -0,0 +1,370 @@
+// Code generated by gorm.io/gen. DO NOT EDIT.
+// Code generated by gorm.io/gen. DO NOT EDIT.
+// Code generated by gorm.io/gen. DO NOT EDIT.
+
+package query
+
+import (
+	"context"
+	"strings"
+
+	"gorm.io/gorm"
+	"gorm.io/gorm/clause"
+	"gorm.io/gorm/schema"
+
+	"gorm.io/gen"
+	"gorm.io/gen/field"
+
+	"gorm.io/plugin/dbresolver"
+
+	"github.com/0xJacky/Nginx-UI/model"
+)
+
+func newSiteCategory(db *gorm.DB, opts ...gen.DOOption) siteCategory {
+	_siteCategory := siteCategory{}
+
+	_siteCategory.siteCategoryDo.UseDB(db, opts...)
+	_siteCategory.siteCategoryDo.UseModel(&model.SiteCategory{})
+
+	tableName := _siteCategory.siteCategoryDo.TableName()
+	_siteCategory.ALL = field.NewAsterisk(tableName)
+	_siteCategory.ID = field.NewUint64(tableName, "id")
+	_siteCategory.CreatedAt = field.NewTime(tableName, "created_at")
+	_siteCategory.UpdatedAt = field.NewTime(tableName, "updated_at")
+	_siteCategory.DeletedAt = field.NewField(tableName, "deleted_at")
+	_siteCategory.Name = field.NewString(tableName, "name")
+	_siteCategory.SyncNodeIds = field.NewField(tableName, "sync_node_ids")
+
+	_siteCategory.fillFieldMap()
+
+	return _siteCategory
+}
+
+type siteCategory struct {
+	siteCategoryDo
+
+	ALL         field.Asterisk
+	ID          field.Uint64
+	CreatedAt   field.Time
+	UpdatedAt   field.Time
+	DeletedAt   field.Field
+	Name        field.String
+	SyncNodeIds field.Field
+
+	fieldMap map[string]field.Expr
+}
+
+func (s siteCategory) Table(newTableName string) *siteCategory {
+	s.siteCategoryDo.UseTable(newTableName)
+	return s.updateTableName(newTableName)
+}
+
+func (s siteCategory) As(alias string) *siteCategory {
+	s.siteCategoryDo.DO = *(s.siteCategoryDo.As(alias).(*gen.DO))
+	return s.updateTableName(alias)
+}
+
+func (s *siteCategory) updateTableName(table string) *siteCategory {
+	s.ALL = field.NewAsterisk(table)
+	s.ID = field.NewUint64(table, "id")
+	s.CreatedAt = field.NewTime(table, "created_at")
+	s.UpdatedAt = field.NewTime(table, "updated_at")
+	s.DeletedAt = field.NewField(table, "deleted_at")
+	s.Name = field.NewString(table, "name")
+	s.SyncNodeIds = field.NewField(table, "sync_node_ids")
+
+	s.fillFieldMap()
+
+	return s
+}
+
+func (s *siteCategory) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
+	_f, ok := s.fieldMap[fieldName]
+	if !ok || _f == nil {
+		return nil, false
+	}
+	_oe, ok := _f.(field.OrderExpr)
+	return _oe, ok
+}
+
+func (s *siteCategory) fillFieldMap() {
+	s.fieldMap = make(map[string]field.Expr, 6)
+	s.fieldMap["id"] = s.ID
+	s.fieldMap["created_at"] = s.CreatedAt
+	s.fieldMap["updated_at"] = s.UpdatedAt
+	s.fieldMap["deleted_at"] = s.DeletedAt
+	s.fieldMap["name"] = s.Name
+	s.fieldMap["sync_node_ids"] = s.SyncNodeIds
+}
+
+func (s siteCategory) clone(db *gorm.DB) siteCategory {
+	s.siteCategoryDo.ReplaceConnPool(db.Statement.ConnPool)
+	return s
+}
+
+func (s siteCategory) replaceDB(db *gorm.DB) siteCategory {
+	s.siteCategoryDo.ReplaceDB(db)
+	return s
+}
+
+type siteCategoryDo struct{ gen.DO }
+
+// FirstByID Where("id=@id")
+func (s siteCategoryDo) FirstByID(id uint64) (result *model.SiteCategory, err error) {
+	var params []interface{}
+
+	var generateSQL strings.Builder
+	params = append(params, id)
+	generateSQL.WriteString("id=? ")
+
+	var executeSQL *gorm.DB
+	executeSQL = s.UnderlyingDB().Where(generateSQL.String(), params...).Take(&result) // ignore_security_alert
+	err = executeSQL.Error
+
+	return
+}
+
+// DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
+func (s siteCategoryDo) DeleteByID(id uint64) (err error) {
+	var params []interface{}
+
+	var generateSQL strings.Builder
+	params = append(params, id)
+	generateSQL.WriteString("update site_categories set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=? ")
+
+	var executeSQL *gorm.DB
+	executeSQL = s.UnderlyingDB().Exec(generateSQL.String(), params...) // ignore_security_alert
+	err = executeSQL.Error
+
+	return
+}
+
+func (s siteCategoryDo) Debug() *siteCategoryDo {
+	return s.withDO(s.DO.Debug())
+}
+
+func (s siteCategoryDo) WithContext(ctx context.Context) *siteCategoryDo {
+	return s.withDO(s.DO.WithContext(ctx))
+}
+
+func (s siteCategoryDo) ReadDB() *siteCategoryDo {
+	return s.Clauses(dbresolver.Read)
+}
+
+func (s siteCategoryDo) WriteDB() *siteCategoryDo {
+	return s.Clauses(dbresolver.Write)
+}
+
+func (s siteCategoryDo) Session(config *gorm.Session) *siteCategoryDo {
+	return s.withDO(s.DO.Session(config))
+}
+
+func (s siteCategoryDo) Clauses(conds ...clause.Expression) *siteCategoryDo {
+	return s.withDO(s.DO.Clauses(conds...))
+}
+
+func (s siteCategoryDo) Returning(value interface{}, columns ...string) *siteCategoryDo {
+	return s.withDO(s.DO.Returning(value, columns...))
+}
+
+func (s siteCategoryDo) Not(conds ...gen.Condition) *siteCategoryDo {
+	return s.withDO(s.DO.Not(conds...))
+}
+
+func (s siteCategoryDo) Or(conds ...gen.Condition) *siteCategoryDo {
+	return s.withDO(s.DO.Or(conds...))
+}
+
+func (s siteCategoryDo) Select(conds ...field.Expr) *siteCategoryDo {
+	return s.withDO(s.DO.Select(conds...))
+}
+
+func (s siteCategoryDo) Where(conds ...gen.Condition) *siteCategoryDo {
+	return s.withDO(s.DO.Where(conds...))
+}
+
+func (s siteCategoryDo) Order(conds ...field.Expr) *siteCategoryDo {
+	return s.withDO(s.DO.Order(conds...))
+}
+
+func (s siteCategoryDo) Distinct(cols ...field.Expr) *siteCategoryDo {
+	return s.withDO(s.DO.Distinct(cols...))
+}
+
+func (s siteCategoryDo) Omit(cols ...field.Expr) *siteCategoryDo {
+	return s.withDO(s.DO.Omit(cols...))
+}
+
+func (s siteCategoryDo) Join(table schema.Tabler, on ...field.Expr) *siteCategoryDo {
+	return s.withDO(s.DO.Join(table, on...))
+}
+
+func (s siteCategoryDo) LeftJoin(table schema.Tabler, on ...field.Expr) *siteCategoryDo {
+	return s.withDO(s.DO.LeftJoin(table, on...))
+}
+
+func (s siteCategoryDo) RightJoin(table schema.Tabler, on ...field.Expr) *siteCategoryDo {
+	return s.withDO(s.DO.RightJoin(table, on...))
+}
+
+func (s siteCategoryDo) Group(cols ...field.Expr) *siteCategoryDo {
+	return s.withDO(s.DO.Group(cols...))
+}
+
+func (s siteCategoryDo) Having(conds ...gen.Condition) *siteCategoryDo {
+	return s.withDO(s.DO.Having(conds...))
+}
+
+func (s siteCategoryDo) Limit(limit int) *siteCategoryDo {
+	return s.withDO(s.DO.Limit(limit))
+}
+
+func (s siteCategoryDo) Offset(offset int) *siteCategoryDo {
+	return s.withDO(s.DO.Offset(offset))
+}
+
+func (s siteCategoryDo) Scopes(funcs ...func(gen.Dao) gen.Dao) *siteCategoryDo {
+	return s.withDO(s.DO.Scopes(funcs...))
+}
+
+func (s siteCategoryDo) Unscoped() *siteCategoryDo {
+	return s.withDO(s.DO.Unscoped())
+}
+
+func (s siteCategoryDo) Create(values ...*model.SiteCategory) error {
+	if len(values) == 0 {
+		return nil
+	}
+	return s.DO.Create(values)
+}
+
+func (s siteCategoryDo) CreateInBatches(values []*model.SiteCategory, batchSize int) error {
+	return s.DO.CreateInBatches(values, batchSize)
+}
+
+// Save : !!! underlying implementation is different with GORM
+// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
+func (s siteCategoryDo) Save(values ...*model.SiteCategory) error {
+	if len(values) == 0 {
+		return nil
+	}
+	return s.DO.Save(values)
+}
+
+func (s siteCategoryDo) First() (*model.SiteCategory, error) {
+	if result, err := s.DO.First(); err != nil {
+		return nil, err
+	} else {
+		return result.(*model.SiteCategory), nil
+	}
+}
+
+func (s siteCategoryDo) Take() (*model.SiteCategory, error) {
+	if result, err := s.DO.Take(); err != nil {
+		return nil, err
+	} else {
+		return result.(*model.SiteCategory), nil
+	}
+}
+
+func (s siteCategoryDo) Last() (*model.SiteCategory, error) {
+	if result, err := s.DO.Last(); err != nil {
+		return nil, err
+	} else {
+		return result.(*model.SiteCategory), nil
+	}
+}
+
+func (s siteCategoryDo) Find() ([]*model.SiteCategory, error) {
+	result, err := s.DO.Find()
+	return result.([]*model.SiteCategory), err
+}
+
+func (s siteCategoryDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.SiteCategory, err error) {
+	buf := make([]*model.SiteCategory, 0, batchSize)
+	err = s.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
+		defer func() { results = append(results, buf...) }()
+		return fc(tx, batch)
+	})
+	return results, err
+}
+
+func (s siteCategoryDo) FindInBatches(result *[]*model.SiteCategory, batchSize int, fc func(tx gen.Dao, batch int) error) error {
+	return s.DO.FindInBatches(result, batchSize, fc)
+}
+
+func (s siteCategoryDo) Attrs(attrs ...field.AssignExpr) *siteCategoryDo {
+	return s.withDO(s.DO.Attrs(attrs...))
+}
+
+func (s siteCategoryDo) Assign(attrs ...field.AssignExpr) *siteCategoryDo {
+	return s.withDO(s.DO.Assign(attrs...))
+}
+
+func (s siteCategoryDo) Joins(fields ...field.RelationField) *siteCategoryDo {
+	for _, _f := range fields {
+		s = *s.withDO(s.DO.Joins(_f))
+	}
+	return &s
+}
+
+func (s siteCategoryDo) Preload(fields ...field.RelationField) *siteCategoryDo {
+	for _, _f := range fields {
+		s = *s.withDO(s.DO.Preload(_f))
+	}
+	return &s
+}
+
+func (s siteCategoryDo) FirstOrInit() (*model.SiteCategory, error) {
+	if result, err := s.DO.FirstOrInit(); err != nil {
+		return nil, err
+	} else {
+		return result.(*model.SiteCategory), nil
+	}
+}
+
+func (s siteCategoryDo) FirstOrCreate() (*model.SiteCategory, error) {
+	if result, err := s.DO.FirstOrCreate(); err != nil {
+		return nil, err
+	} else {
+		return result.(*model.SiteCategory), nil
+	}
+}
+
+func (s siteCategoryDo) FindByPage(offset int, limit int) (result []*model.SiteCategory, count int64, err error) {
+	result, err = s.Offset(offset).Limit(limit).Find()
+	if err != nil {
+		return
+	}
+
+	if size := len(result); 0 < limit && 0 < size && size < limit {
+		count = int64(size + offset)
+		return
+	}
+
+	count, err = s.Offset(-1).Limit(-1).Count()
+	return
+}
+
+func (s siteCategoryDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
+	count, err = s.Count()
+	if err != nil {
+		return
+	}
+
+	err = s.Offset(offset).Limit(limit).Scan(result)
+	return
+}
+
+func (s siteCategoryDo) Scan(result interface{}) (err error) {
+	return s.DO.Scan(result)
+}
+
+func (s siteCategoryDo) Delete(models ...*model.SiteCategory) (result gen.ResultInfo, err error) {
+	return s.DO.Delete(models)
+}
+
+func (s *siteCategoryDo) withDO(do gen.Dao) *siteCategoryDo {
+	s.DO = *do.(*gen.DO)
+	return s
+}

+ 5 - 5
query/sites.gen.go

@@ -28,7 +28,7 @@ func newSite(db *gorm.DB, opts ...gen.DOOption) site {
 
 	tableName := _site.siteDo.TableName()
 	_site.ALL = field.NewAsterisk(tableName)
-	_site.ID = field.NewInt(tableName, "id")
+	_site.ID = field.NewUint64(tableName, "id")
 	_site.CreatedAt = field.NewTime(tableName, "created_at")
 	_site.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_site.DeletedAt = field.NewField(tableName, "deleted_at")
@@ -44,7 +44,7 @@ type site struct {
 	siteDo
 
 	ALL       field.Asterisk
-	ID        field.Int
+	ID        field.Uint64
 	CreatedAt field.Time
 	UpdatedAt field.Time
 	DeletedAt field.Field
@@ -66,7 +66,7 @@ func (s site) As(alias string) *site {
 
 func (s *site) updateTableName(table string) *site {
 	s.ALL = field.NewAsterisk(table)
-	s.ID = field.NewInt(table, "id")
+	s.ID = field.NewUint64(table, "id")
 	s.CreatedAt = field.NewTime(table, "created_at")
 	s.UpdatedAt = field.NewTime(table, "updated_at")
 	s.DeletedAt = field.NewField(table, "deleted_at")
@@ -110,7 +110,7 @@ func (s site) replaceDB(db *gorm.DB) site {
 type siteDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (s siteDo) FirstByID(id int) (result *model.Site, err error) {
+func (s siteDo) FirstByID(id uint64) (result *model.Site, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -125,7 +125,7 @@ func (s siteDo) FirstByID(id int) (result *model.Site, err error) {
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (s siteDo) DeleteByID(id int) (err error) {
+func (s siteDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 5 - 5
query/streams.gen.go

@@ -28,7 +28,7 @@ func newStream(db *gorm.DB, opts ...gen.DOOption) stream {
 
 	tableName := _stream.streamDo.TableName()
 	_stream.ALL = field.NewAsterisk(tableName)
-	_stream.ID = field.NewInt(tableName, "id")
+	_stream.ID = field.NewUint64(tableName, "id")
 	_stream.CreatedAt = field.NewTime(tableName, "created_at")
 	_stream.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_stream.DeletedAt = field.NewField(tableName, "deleted_at")
@@ -44,7 +44,7 @@ type stream struct {
 	streamDo
 
 	ALL       field.Asterisk
-	ID        field.Int
+	ID        field.Uint64
 	CreatedAt field.Time
 	UpdatedAt field.Time
 	DeletedAt field.Field
@@ -66,7 +66,7 @@ func (s stream) As(alias string) *stream {
 
 func (s *stream) updateTableName(table string) *stream {
 	s.ALL = field.NewAsterisk(table)
-	s.ID = field.NewInt(table, "id")
+	s.ID = field.NewUint64(table, "id")
 	s.CreatedAt = field.NewTime(table, "created_at")
 	s.UpdatedAt = field.NewTime(table, "updated_at")
 	s.DeletedAt = field.NewField(table, "deleted_at")
@@ -110,7 +110,7 @@ func (s stream) replaceDB(db *gorm.DB) stream {
 type streamDo struct{ gen.DO }
 
 // FirstByID Where("id=@id")
-func (s streamDo) FirstByID(id int) (result *model.Stream, err error) {
+func (s streamDo) FirstByID(id uint64) (result *model.Stream, err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder
@@ -125,7 +125,7 @@ func (s streamDo) FirstByID(id int) (result *model.Stream, err error) {
 }
 
 // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
-func (s streamDo) DeleteByID(id int) (err error) {
+func (s streamDo) DeleteByID(id uint64) (err error) {
 	var params []interface{}
 
 	var generateSQL strings.Builder

+ 1 - 0
router/routers.go

@@ -49,6 +49,7 @@ func InitRouter() {
 			analytic.InitRouter(g)
 			user.InitManageUserRouter(g)
 			nginx.InitRouter(g)
+			sites.InitCategoryRouter(g)
 			sites.InitRouter(g)
 			streams.InitRouter(g)
 			config.InitRouter(g)