This is an automated email from the ASF dual-hosted git repository.
kumfo pushed a commit to branch feat/1.8.0/menu
in repository https://gitbox.apache.org/repos/asf/answer.git
The following commit(s) were added to refs/heads/feat/1.8.0/menu by this push:
new 0d7979e9 feat(siteinfo): add users settings endpoint and update
interface settings structure
0d7979e9 is described below
commit 0d7979e901983ae14e97a2404f3e7a83bc51a812
Author: kumfo <[email protected]>
AuthorDate: Wed Jan 21 09:39:37 2026 +0800
feat(siteinfo): add users settings endpoint and update interface settings
structure
---
docs/docs.go | 127 ++++++++++++++++++---
docs/swagger.json | 127 ++++++++++++++++++---
docs/swagger.yaml | 81 +++++++++++--
internal/base/constant/site_type.go | 18 ++-
internal/controller/siteinfo_controller.go | 5 +
internal/controller_admin/siteinfo_controller.go | 33 +++++-
internal/migrations/v30.go | 96 ++++++++++++++++
internal/router/answer_api_router.go | 4 +
internal/schema/siteinfo_schema.go | 58 ++++++----
internal/service/siteinfo/siteinfo_service.go | 21 +++-
.../service/siteinfo_common/siteinfo_service.go | 20 +++-
11 files changed, 516 insertions(+), 74 deletions(-)
diff --git a/docs/docs.go b/docs/docs.go
index 73d85436..b030c3d3 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -1167,7 +1167,7 @@ const docTemplate = `{
"type": "object",
"properties": {
"data": {
- "$ref":
"#/definitions/schema.SiteInterfaceResp"
+ "$ref":
"#/definitions/schema.SiteInterfaceSettingsResp"
}
}
}
@@ -1708,6 +1708,77 @@ const docTemplate = `{
}
}
},
+ "/answer/admin/api/siteinfo/users-settings": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "get site interface",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "get site interface",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/handler.RespBody"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "$ref":
"#/definitions/schema.SiteUsersSettingsResp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "update site info users settings",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "update site info users settings",
+ "parameters": [
+ {
+ "description": "general",
+ "name": "data",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/schema.SiteUsersSettingsReq"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/handler.RespBody"
+ }
+ }
+ }
+ }
+ },
"/answer/admin/api/theme/options": {
"get": {
"security": [
@@ -10843,7 +10914,7 @@ const docTemplate = `{
"$ref": "#/definitions/schema.SiteGeneralResp"
},
"interface": {
- "$ref": "#/definitions/schema.SiteInterfaceResp"
+ "$ref": "#/definitions/schema.SiteInterfaceSettingsResp"
},
"login": {
"$ref": "#/definitions/schema.SiteLoginResp"
@@ -10872,6 +10943,9 @@ const docTemplate = `{
"theme": {
"$ref": "#/definitions/schema.SiteThemeResp"
},
+ "users_settings": {
+ "$ref": "#/definitions/schema.SiteUsersSettingsResp"
+ },
"version": {
"type": "string"
}
@@ -10905,24 +10979,13 @@ const docTemplate = `{
}
}
},
- "schema.SiteInterfaceResp": {
+ "schema.SiteInterfaceSettingsResp": {
"type": "object",
"required": [
- "default_avatar",
"language",
"time_zone"
],
"properties": {
- "default_avatar": {
- "type": "string",
- "enum": [
- "system",
- "gravatar"
- ]
- },
- "gravatar_base_url": {
- "type": "string"
- },
"language": {
"type": "string",
"maxLength": 128
@@ -11271,6 +11334,42 @@ const docTemplate = `{
}
}
},
+ "schema.SiteUsersSettingsReq": {
+ "type": "object",
+ "required": [
+ "default_avatar"
+ ],
+ "properties": {
+ "default_avatar": {
+ "type": "string",
+ "enum": [
+ "system",
+ "gravatar"
+ ]
+ },
+ "gravatar_base_url": {
+ "type": "string"
+ }
+ }
+ },
+ "schema.SiteUsersSettingsResp": {
+ "type": "object",
+ "required": [
+ "default_avatar"
+ ],
+ "properties": {
+ "default_avatar": {
+ "type": "string",
+ "enum": [
+ "system",
+ "gravatar"
+ ]
+ },
+ "gravatar_base_url": {
+ "type": "string"
+ }
+ }
+ },
"schema.SiteWriteTag": {
"type": "object",
"required": [
diff --git a/docs/swagger.json b/docs/swagger.json
index 6dbecc50..879302fa 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -1159,7 +1159,7 @@
"type": "object",
"properties": {
"data": {
- "$ref":
"#/definitions/schema.SiteInterfaceResp"
+ "$ref":
"#/definitions/schema.SiteInterfaceSettingsResp"
}
}
}
@@ -1700,6 +1700,77 @@
}
}
},
+ "/answer/admin/api/siteinfo/users-settings": {
+ "get": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "get site interface",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "get site interface",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/handler.RespBody"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "$ref":
"#/definitions/schema.SiteUsersSettingsResp"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "put": {
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "description": "update site info users settings",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "update site info users settings",
+ "parameters": [
+ {
+ "description": "general",
+ "name": "data",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/schema.SiteUsersSettingsReq"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/handler.RespBody"
+ }
+ }
+ }
+ }
+ },
"/answer/admin/api/theme/options": {
"get": {
"security": [
@@ -10835,7 +10906,7 @@
"$ref": "#/definitions/schema.SiteGeneralResp"
},
"interface": {
- "$ref": "#/definitions/schema.SiteInterfaceResp"
+ "$ref": "#/definitions/schema.SiteInterfaceSettingsResp"
},
"login": {
"$ref": "#/definitions/schema.SiteLoginResp"
@@ -10864,6 +10935,9 @@
"theme": {
"$ref": "#/definitions/schema.SiteThemeResp"
},
+ "users_settings": {
+ "$ref": "#/definitions/schema.SiteUsersSettingsResp"
+ },
"version": {
"type": "string"
}
@@ -10897,24 +10971,13 @@
}
}
},
- "schema.SiteInterfaceResp": {
+ "schema.SiteInterfaceSettingsResp": {
"type": "object",
"required": [
- "default_avatar",
"language",
"time_zone"
],
"properties": {
- "default_avatar": {
- "type": "string",
- "enum": [
- "system",
- "gravatar"
- ]
- },
- "gravatar_base_url": {
- "type": "string"
- },
"language": {
"type": "string",
"maxLength": 128
@@ -11263,6 +11326,42 @@
}
}
},
+ "schema.SiteUsersSettingsReq": {
+ "type": "object",
+ "required": [
+ "default_avatar"
+ ],
+ "properties": {
+ "default_avatar": {
+ "type": "string",
+ "enum": [
+ "system",
+ "gravatar"
+ ]
+ },
+ "gravatar_base_url": {
+ "type": "string"
+ }
+ }
+ },
+ "schema.SiteUsersSettingsResp": {
+ "type": "object",
+ "required": [
+ "default_avatar"
+ ],
+ "properties": {
+ "default_avatar": {
+ "type": "string",
+ "enum": [
+ "system",
+ "gravatar"
+ ]
+ },
+ "gravatar_base_url": {
+ "type": "string"
+ }
+ }
+ },
"schema.SiteWriteTag": {
"type": "object",
"required": [
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index f4107cd6..ce16da75 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -2212,7 +2212,7 @@ definitions:
general:
$ref: '#/definitions/schema.SiteGeneralResp'
interface:
- $ref: '#/definitions/schema.SiteInterfaceResp'
+ $ref: '#/definitions/schema.SiteInterfaceSettingsResp'
login:
$ref: '#/definitions/schema.SiteLoginResp'
revision:
@@ -2231,6 +2231,8 @@ definitions:
$ref: '#/definitions/schema.SiteUsersResp'
theme:
$ref: '#/definitions/schema.SiteThemeResp'
+ users_settings:
+ $ref: '#/definitions/schema.SiteUsersSettingsResp'
version:
type: string
type: object
@@ -2254,15 +2256,8 @@ definitions:
- language
- time_zone
type: object
- schema.SiteInterfaceResp:
+ schema.SiteInterfaceSettingsResp:
properties:
- default_avatar:
- enum:
- - system
- - gravatar
- type: string
- gravatar_base_url:
- type: string
language:
maxLength: 128
type: string
@@ -2270,7 +2265,6 @@ definitions:
maxLength: 128
type: string
required:
- - default_avatar
- language
- time_zone
type: object
@@ -2502,6 +2496,30 @@ definitions:
required:
- default_avatar
type: object
+ schema.SiteUsersSettingsReq:
+ properties:
+ default_avatar:
+ enum:
+ - system
+ - gravatar
+ type: string
+ gravatar_base_url:
+ type: string
+ required:
+ - default_avatar
+ type: object
+ schema.SiteUsersSettingsResp:
+ properties:
+ default_avatar:
+ enum:
+ - system
+ - gravatar
+ type: string
+ gravatar_base_url:
+ type: string
+ required:
+ - default_avatar
+ type: object
schema.SiteWriteTag:
properties:
display_name:
@@ -3878,7 +3896,7 @@ paths:
- $ref: '#/definitions/handler.RespBody'
- properties:
data:
- $ref: '#/definitions/schema.SiteInterfaceResp'
+ $ref: '#/definitions/schema.SiteInterfaceSettingsResp'
type: object
security:
- ApiKeyAuth: []
@@ -4193,6 +4211,47 @@ paths:
summary: update site info config about users
tags:
- admin
+ /answer/admin/api/siteinfo/users-settings:
+ get:
+ description: get site interface
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ allOf:
+ - $ref: '#/definitions/handler.RespBody'
+ - properties:
+ data:
+ $ref: '#/definitions/schema.SiteUsersSettingsResp'
+ type: object
+ security:
+ - ApiKeyAuth: []
+ summary: get site interface
+ tags:
+ - admin
+ put:
+ description: update site info users settings
+ parameters:
+ - description: general
+ in: body
+ name: data
+ required: true
+ schema:
+ $ref: '#/definitions/schema.SiteUsersSettingsReq'
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: OK
+ schema:
+ $ref: '#/definitions/handler.RespBody'
+ security:
+ - ApiKeyAuth: []
+ summary: update site info users settings
+ tags:
+ - admin
/answer/admin/api/theme/options:
get:
description: Get theme options
diff --git a/internal/base/constant/site_type.go
b/internal/base/constant/site_type.go
index 6106b190..9bb4e10a 100644
--- a/internal/base/constant/site_type.go
+++ b/internal/base/constant/site_type.go
@@ -20,9 +20,11 @@
package constant
const (
- SiteTypeGeneral = "general"
- SiteTypeInterface = "interface"
- SiteTypeBranding = "branding"
+ SiteTypeGeneral = "general"
+ // Deprecated: split SiteTypeInterfaceSettings and
SiteTypeUsersSettings for better clarity
+ SiteTypeInterface = "interface"
+ SiteTypeBranding = "branding"
+ // Deprecated: use SiteTypeAdvanced, SiteTypeQuestions, and
SiteTypeTags instead
SiteTypeWrite = "write"
SiteTypeLegal = "legal"
SiteTypeSeo = "seo"
@@ -31,7 +33,11 @@ const (
SiteTypeTheme = "theme"
SiteTypePrivileges = "privileges"
SiteTypeUsers = "users"
- SiteTypeAdvanced = "advanced"
- SiteTypeQuestions = "questions"
- SiteTypeTags = "tags"
+
+ SiteTypeAdvanced = "advanced"
+ SiteTypeQuestions = "questions"
+ SiteTypeTags = "tags"
+
+ SiteTypeUsersSettings = "users_settings"
+ SiteTypeInterfaceSettings = "interface_settings"
)
diff --git a/internal/controller/siteinfo_controller.go
b/internal/controller/siteinfo_controller.go
index 8035275a..503bfeb6 100644
--- a/internal/controller/siteinfo_controller.go
+++ b/internal/controller/siteinfo_controller.go
@@ -60,6 +60,11 @@ func (sc *SiteInfoController) GetSiteInfo(ctx *gin.Context) {
log.Error(err)
}
+ resp.UsersSettings, err = sc.siteInfoService.GetSiteUsersSettings(ctx)
+ if err != nil {
+ log.Error(err)
+ }
+
resp.Branding, err = sc.siteInfoService.GetSiteBranding(ctx)
if err != nil {
log.Error(err)
diff --git a/internal/controller_admin/siteinfo_controller.go
b/internal/controller_admin/siteinfo_controller.go
index bbab9794..056b01ae 100644
--- a/internal/controller_admin/siteinfo_controller.go
+++ b/internal/controller_admin/siteinfo_controller.go
@@ -62,13 +62,26 @@ func (sc *SiteInfoController) GetGeneral(ctx *gin.Context) {
// @Security ApiKeyAuth
// @Tags admin
// @Produce json
-// @Success 200 {object} handler.RespBody{data=schema.SiteInterfaceResp}
+// @Success 200 {object}
handler.RespBody{data=schema.SiteInterfaceSettingsResp}
// @Router /answer/admin/api/siteinfo/interface [get]
func (sc *SiteInfoController) GetInterface(ctx *gin.Context) {
resp, err := sc.siteInfoService.GetSiteInterface(ctx)
handler.HandleResponse(ctx, err, resp)
}
+// GetUsersSettings get site interface
+// @Summary get site interface
+// @Description get site interface
+// @Security ApiKeyAuth
+// @Tags admin
+// @Produce json
+// @Success 200 {object} handler.RespBody{data=schema.SiteUsersSettingsResp}
+// @Router /answer/admin/api/siteinfo/users-settings [get]
+func (sc *SiteInfoController) GetUsersSettings(ctx *gin.Context) {
+ resp, err := sc.siteInfoService.GetSiteUsersSettings(ctx)
+ handler.HandleResponse(ctx, err, resp)
+}
+
// GetSiteBranding get site interface
// @Summary get site interface
// @Description get site interface
@@ -287,6 +300,24 @@ func (sc *SiteInfoController) UpdateInterface(ctx
*gin.Context) {
handler.HandleResponse(ctx, err, nil)
}
+// UpdateUsersSettings update users settings
+// @Summary update site info users settings
+// @Description update site info users settings
+// @Security ApiKeyAuth
+// @Tags admin
+// @Produce json
+// @Param data body schema.SiteUsersSettingsReq true "general"
+// @Success 200 {object} handler.RespBody{}
+// @Router /answer/admin/api/siteinfo/users-settings [put]
+func (sc *SiteInfoController) UpdateUsersSettings(ctx *gin.Context) {
+ req := schema.SiteUsersSettingsReq{}
+ if handler.BindAndCheck(ctx, &req) {
+ return
+ }
+ err := sc.siteInfoService.SaveSiteUsersSettings(ctx, req)
+ handler.HandleResponse(ctx, err, nil)
+}
+
// UpdateBranding update site branding
// @Summary update site info branding
// @Description update site info branding
diff --git a/internal/migrations/v30.go b/internal/migrations/v30.go
index 5d5d5223..4d0f1130 100644
--- a/internal/migrations/v30.go
+++ b/internal/migrations/v30.go
@@ -171,3 +171,99 @@ func splitWriteMenu(ctx context.Context, x *xorm.Engine)
error {
return nil
}
+
+func splitInterfaceMenu(ctx context.Context, x *xorm.Engine) error {
+ var (
+ siteInfo = &entity.SiteInfo{}
+ siteInfoInterface = &entity.SiteInfo{}
+ siteInfoUsers = &entity.SiteInfo{}
+ )
+ type SiteInterface struct {
+ Language string `validate:"required,gt=1,lte=128"
form:"language" json:"language"`
+ TimeZone string `validate:"required,gt=1,lte=128"
form:"time_zone" json:"time_zone"`
+ DefaultAvatar string `validate:"required,oneof=system
gravatar" json:"default_avatar"`
+ GravatarBaseURL string `validate:"omitempty"
json:"gravatar_base_url"`
+ }
+
+ exist, err := x.Context(ctx).Where(builder.Eq{"type":
constant.SiteTypeInterface}).Get(siteInfo)
+ if err != nil {
+ err =
errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
+ return err
+ }
+ if !exist {
+ return nil
+ }
+ oldSiteInterface := &SiteInterface{}
+ if err := json.Unmarshal([]byte(siteInfo.Content), oldSiteInterface);
err != nil {
+ return err
+ }
+ siteUser := &schema.SiteUsersSettingsResp{
+ DefaultAvatar: oldSiteInterface.DefaultAvatar,
+ GravatarBaseURL: oldSiteInterface.GravatarBaseURL,
+ }
+ siteInterface := &schema.SiteInterfaceResp{
+ Language: oldSiteInterface.Language,
+ TimeZone: oldSiteInterface.TimeZone,
+ }
+
+ // save settings
+ // save user settings
+ existsUsers, err := x.Context(ctx).Where(builder.Eq{"type":
constant.SiteTypeUsersSettings}).Get(siteInfoUsers)
+ if err != nil {
+ return err
+ }
+ userContent, err := json.Marshal(siteUser)
+ if err != nil {
+ return err
+ }
+ if existsUsers {
+ _, err =
x.Context(ctx).ID(siteInfoUsers.ID).Update(&entity.SiteInfo{
+ Type: constant.SiteTypeUsersSettings,
+ Content: string(userContent),
+ Status: 1,
+ })
+ if err != nil {
+ return err
+ }
+ } else {
+ _, err = x.Context(ctx).Insert(&entity.SiteInfo{
+ Type: constant.SiteTypeUsersSettings,
+ Content: string(userContent),
+ Status: 1,
+ })
+ if err != nil {
+ return err
+ }
+ }
+
+ // save interface settings
+ existsInterface, err := x.Context(ctx).Where(builder.Eq{"type":
constant.SiteTypeInterfaceSettings}).Get(siteInfoInterface)
+ if err != nil {
+ return err
+ }
+ interfaceContent, err := json.Marshal(siteInterface)
+ if err != nil {
+ return err
+ }
+ if existsInterface {
+ _, err =
x.Context(ctx).ID(siteInfoInterface.ID).Update(&entity.SiteInfo{
+ Type: constant.SiteTypeInterfaceSettings,
+ Content: string(interfaceContent),
+ Status: 1,
+ })
+ if err != nil {
+ return err
+ }
+ } else {
+ _, err = x.Context(ctx).Insert(&entity.SiteInfo{
+ Type: constant.SiteTypeInterfaceSettings,
+ Content: string(interfaceContent),
+ Status: 1,
+ })
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
diff --git a/internal/router/answer_api_router.go
b/internal/router/answer_api_router.go
index d717bc9d..c776b44f 100644
--- a/internal/router/answer_api_router.go
+++ b/internal/router/answer_api_router.go
@@ -343,8 +343,12 @@ func (a *AnswerAPIRouter) RegisterAnswerAdminAPIRouter(r
*gin.RouterGroup) {
// siteinfo
r.GET("/siteinfo/general", a.adminSiteInfoController.GetGeneral)
r.PUT("/siteinfo/general", a.adminSiteInfoController.UpdateGeneral)
+
r.GET("/siteinfo/interface", a.adminSiteInfoController.GetInterface)
r.PUT("/siteinfo/interface", a.adminSiteInfoController.UpdateInterface)
+ r.GET("/siteinfo/users-settings",
a.adminSiteInfoController.GetUsersSettings)
+ r.PUT("/siteinfo/users-settings",
a.adminSiteInfoController.UpdateUsersSettings)
+
r.GET("/siteinfo/branding", a.adminSiteInfoController.GetSiteBranding)
r.PUT("/siteinfo/branding", a.adminSiteInfoController.UpdateBranding)
diff --git a/internal/schema/siteinfo_schema.go
b/internal/schema/siteinfo_schema.go
index daf49146..a060558a 100644
--- a/internal/schema/siteinfo_schema.go
+++ b/internal/schema/siteinfo_schema.go
@@ -65,6 +65,21 @@ type SiteInterfaceReq struct {
GravatarBaseURL string `validate:"omitempty" json:"gravatar_base_url"`
}
+// SiteInterfaceSettingsReq site interface settings request
+type SiteInterfaceSettingsReq struct {
+ Language string `validate:"required,gt=1,lte=128" json:"language"`
+ TimeZone string `validate:"required,gt=1,lte=128" json:"time_zone"`
+}
+
+type SiteInterfaceSettingsResp SiteInterfaceSettingsReq
+
+type SiteUsersSettingsReq struct {
+ DefaultAvatar string `validate:"required,oneof=system gravatar"
json:"default_avatar"`
+ GravatarBaseURL string `validate:"omitempty" json:"gravatar_base_url"`
+}
+
+type SiteUsersSettingsResp SiteUsersSettingsReq
+
// SiteBrandingReq site branding request
type SiteBrandingReq struct {
Logo string `validate:"omitempty,gt=0,lte=512" form:"logo"
json:"logo"`
@@ -279,27 +294,30 @@ type SiteSeoResp SiteSeoReq
// SiteInfoResp get site info response
type SiteInfoResp struct {
- General *SiteGeneralResp `json:"general"`
- Interface *SiteInterfaceResp `json:"interface"`
- Branding *SiteBrandingResp `json:"branding"`
- Login *SiteLoginResp `json:"login"`
- Theme *SiteThemeResp `json:"theme"`
- CustomCssHtml *SiteCustomCssHTMLResp `json:"custom_css_html"`
- SiteSeo *SiteSeoResp `json:"site_seo"`
- SiteUsers *SiteUsersResp `json:"site_users"`
- Advanced *SiteAdvancedResp `json:"site_advanced"`
- Questions *SiteQuestionsResp `json:"site_questions"`
- Tags *SiteTagsResp `json:"site_tags"`
- Legal *SiteLegalSimpleResp `json:"site_legal"`
- Version string `json:"version"`
- Revision string `json:"revision"`
-}
+ General *SiteGeneralResp `json:"general"`
+ Interface *SiteInterfaceSettingsResp `json:"interface"`
+ UsersSettings *SiteUsersSettingsResp `json:"users_settings"`
+ Branding *SiteBrandingResp `json:"branding"`
+ Login *SiteLoginResp `json:"login"`
+ Theme *SiteThemeResp `json:"theme"`
+ CustomCssHtml *SiteCustomCssHTMLResp `json:"custom_css_html"`
+ SiteSeo *SiteSeoResp `json:"site_seo"`
+ SiteUsers *SiteUsersResp `json:"site_users"`
+ Advanced *SiteAdvancedResp `json:"site_advanced"`
+ Questions *SiteQuestionsResp `json:"site_questions"`
+ Tags *SiteTagsResp `json:"site_tags"`
+ Legal *SiteLegalSimpleResp `json:"site_legal"`
+ Version string `json:"version"`
+ Revision string `json:"revision"`
+}
+
+// todo: 检查模板使用
type TemplateSiteInfoResp struct {
- General *SiteGeneralResp `json:"general"`
- Interface *SiteInterfaceResp `json:"interface"`
- Branding *SiteBrandingResp `json:"branding"`
- SiteSeo *SiteSeoResp `json:"site_seo"`
- CustomCssHtml *SiteCustomCssHTMLResp `json:"custom_css_html"`
+ General *SiteGeneralResp `json:"general"`
+ Interface *SiteInterfaceSettingsResp `json:"interface"`
+ Branding *SiteBrandingResp `json:"branding"`
+ SiteSeo *SiteSeoResp `json:"site_seo"`
+ CustomCssHtml *SiteCustomCssHTMLResp `json:"custom_css_html"`
Title string
Year string
Canonical string
diff --git a/internal/service/siteinfo/siteinfo_service.go
b/internal/service/siteinfo/siteinfo_service.go
index b633ed42..956511ce 100644
--- a/internal/service/siteinfo/siteinfo_service.go
+++ b/internal/service/siteinfo/siteinfo_service.go
@@ -89,10 +89,15 @@ func (s *SiteInfoService) GetSiteGeneral(ctx
context.Context) (resp *schema.Site
}
// GetSiteInterface get site info interface
-func (s *SiteInfoService) GetSiteInterface(ctx context.Context) (resp
*schema.SiteInterfaceResp, err error) {
+func (s *SiteInfoService) GetSiteInterface(ctx context.Context) (resp
*schema.SiteInterfaceSettingsResp, err error) {
return s.siteInfoCommonService.GetSiteInterface(ctx)
}
+// GetSiteUsersSettings get site info users settings
+func (s *SiteInfoService) GetSiteUsersSettings(ctx context.Context) (resp
*schema.SiteUsersSettingsResp, err error) {
+ return s.siteInfoCommonService.GetSiteUsersSettings(ctx)
+}
+
// GetSiteBranding get site info branding
func (s *SiteInfoService) GetSiteBranding(ctx context.Context) (resp
*schema.SiteBrandingResp, err error) {
return s.siteInfoCommonService.GetSiteBranding(ctx)
@@ -172,10 +177,20 @@ func (s *SiteInfoService) SaveSiteInterface(ctx
context.Context, req schema.Site
content, _ := json.Marshal(req)
data := entity.SiteInfo{
- Type: constant.SiteTypeInterface,
+ Type: constant.SiteTypeInterfaceSettings,
+ Content: string(content),
+ }
+ return s.siteInfoRepo.SaveByType(ctx,
constant.SiteTypeInterfaceSettings, &data)
+}
+
+// SaveSiteUsersSettings save site users settings
+func (s *SiteInfoService) SaveSiteUsersSettings(ctx context.Context, req
schema.SiteUsersSettingsReq) (err error) {
+ content, _ := json.Marshal(req)
+ data := entity.SiteInfo{
+ Type: constant.SiteTypeInterfaceSettings,
Content: string(content),
}
- return s.siteInfoRepo.SaveByType(ctx, constant.SiteTypeInterface, &data)
+ return s.siteInfoRepo.SaveByType(ctx, constant.SiteTypeUsersSettings,
&data)
}
// SaveSiteBranding save site branding information
diff --git a/internal/service/siteinfo_common/siteinfo_service.go
b/internal/service/siteinfo_common/siteinfo_service.go
index 87bc7ee1..dde0114b 100644
--- a/internal/service/siteinfo_common/siteinfo_service.go
+++ b/internal/service/siteinfo_common/siteinfo_service.go
@@ -45,7 +45,8 @@ type siteInfoCommonService struct {
type SiteInfoCommonService interface {
GetSiteGeneral(ctx context.Context) (resp *schema.SiteGeneralResp, err
error)
- GetSiteInterface(ctx context.Context) (resp *schema.SiteInterfaceResp,
err error)
+ GetSiteInterface(ctx context.Context) (resp
*schema.SiteInterfaceSettingsResp, err error)
+ GetSiteUsersSettings(ctx context.Context) (resp
*schema.SiteUsersSettingsResp, err error)
GetSiteBranding(ctx context.Context) (resp *schema.SiteBrandingResp,
err error)
GetSiteUsers(ctx context.Context) (resp *schema.SiteUsersResp, err
error)
FormatAvatar(ctx context.Context, originalAvatarData, email string,
userStatus int) *schema.AvatarInfo
@@ -81,9 +82,18 @@ func (s *siteInfoCommonService) GetSiteGeneral(ctx
context.Context) (resp *schem
}
// GetSiteInterface get site info interface
-func (s *siteInfoCommonService) GetSiteInterface(ctx context.Context) (resp
*schema.SiteInterfaceResp, err error) {
- resp = &schema.SiteInterfaceResp{}
- if err = s.GetSiteInfoByType(ctx, constant.SiteTypeInterface, resp);
err != nil {
+func (s *siteInfoCommonService) GetSiteInterface(ctx context.Context) (resp
*schema.SiteInterfaceSettingsResp, err error) {
+ resp = &schema.SiteInterfaceSettingsResp{}
+ if err = s.GetSiteInfoByType(ctx, constant.SiteTypeInterfaceSettings,
resp); err != nil {
+ return nil, err
+ }
+ return resp, nil
+}
+
+// GetSiteUsersSettings get site info interface
+func (s *siteInfoCommonService) GetSiteUsersSettings(ctx context.Context)
(resp *schema.SiteUsersSettingsResp, err error) {
+ resp = &schema.SiteUsersSettingsResp{}
+ if err = s.GetSiteInfoByType(ctx, constant.SiteTypeUsersSettings,
resp); err != nil {
return nil, err
}
return resp, nil
@@ -126,7 +136,7 @@ func (s *siteInfoCommonService) FormatListAvatar(ctx
context.Context, userList [
func (s *siteInfoCommonService) getAvatarDefaultConfig(ctx context.Context)
(string, string) {
gravatarBaseURL, defaultAvatar := constant.DefaultGravatarBaseURL,
constant.DefaultAvatar
- usersConfig, err := s.GetSiteInterface(ctx)
+ usersConfig, err := s.GetSiteUsersSettings(ctx)
if err != nil {
log.Error(err)
}