690 lines
22 KiB
Go
690 lines
22 KiB
Go
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
|
|
package controller_admin
|
|
|
|
import (
|
|
"html"
|
|
"net/http"
|
|
|
|
"github.com/apache/answer/internal/base/handler"
|
|
"github.com/apache/answer/internal/base/middleware"
|
|
"github.com/apache/answer/internal/schema"
|
|
"github.com/apache/answer/internal/service/siteinfo"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/segmentfault/pacman/log"
|
|
)
|
|
|
|
// SiteInfoController site info controller
|
|
type SiteInfoController struct {
|
|
siteInfoService *siteinfo.SiteInfoService
|
|
}
|
|
|
|
// NewSiteInfoController new site info controller
|
|
func NewSiteInfoController(siteInfoService *siteinfo.SiteInfoService) *SiteInfoController {
|
|
return &SiteInfoController{
|
|
siteInfoService: siteInfoService,
|
|
}
|
|
}
|
|
|
|
// GetGeneral get site general information
|
|
// @Summary get site general information
|
|
// @Description get site general information
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteGeneralResp}
|
|
// @Router /answer/admin/api/siteinfo/general [get]
|
|
func (sc *SiteInfoController) GetGeneral(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteGeneral(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetInterface get site interface
|
|
// @Summary get site interface
|
|
// @Description get site interface
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @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
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteBrandingResp}
|
|
// @Router /answer/admin/api/siteinfo/branding [get]
|
|
func (sc *SiteInfoController) GetSiteBranding(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteBranding(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetSiteTag get site tags setting
|
|
// @Summary get site tags setting
|
|
// @Description get site tags setting
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteTagsResp}
|
|
// @Router /answer/admin/api/siteinfo/tag [get]
|
|
func (sc *SiteInfoController) GetSiteTag(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteTag(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetSiteQuestion get site questions setting
|
|
// @Summary get site questions setting
|
|
// @Description get site questions setting
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteQuestionsResp}
|
|
// @Router /answer/admin/api/siteinfo/question [get]
|
|
func (sc *SiteInfoController) GetSiteQuestion(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteQuestion(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetSiteAdvanced get site advanced setting
|
|
// @Summary get site advanced setting
|
|
// @Description get site advanced setting
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteAdvancedResp}
|
|
// @Router /answer/admin/api/siteinfo/advanced [get]
|
|
func (sc *SiteInfoController) GetSiteAdvanced(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteAdvanced(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetSitePolicies Get the policies information for the site
|
|
// @Summary Get the policies information for the site
|
|
// @Description Get the policies information for the site
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SitePoliciesResp}
|
|
// @Router /answer/admin/api/siteinfo/polices [get]
|
|
func (sc *SiteInfoController) GetSitePolicies(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSitePolicies(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetSiteSecurity Get the security information for the site
|
|
// @Summary Get the security information for the site
|
|
// @Description Get the security information for the site
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteSecurityResp}
|
|
// @Router /answer/admin/api/siteinfo/security [get]
|
|
func (sc *SiteInfoController) GetSiteSecurity(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteSecurity(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetSeo get site seo information
|
|
// @Summary get site seo information
|
|
// @Description get site seo information
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteSeoResp}
|
|
// @Router /answer/admin/api/siteinfo/seo [get]
|
|
func (sc *SiteInfoController) GetSeo(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSeo(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetSiteLogin get site info login config
|
|
// @Summary get site info login config
|
|
// @Description get site info login config
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteLoginResp}
|
|
// @Router /answer/admin/api/siteinfo/login [get]
|
|
func (sc *SiteInfoController) GetSiteLogin(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteLogin(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetSiteCustomCssHTML get site info custom html css config
|
|
// @Summary get site info custom html css config
|
|
// @Description get site info custom html css config
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteCustomCssHTMLResp}
|
|
// @Router /answer/admin/api/siteinfo/custom-css-html [get]
|
|
func (sc *SiteInfoController) GetSiteCustomCssHTML(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteCustomCssHTML(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetSiteTheme get site info theme config
|
|
// @Summary get site info theme config
|
|
// @Description get site info theme config
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteThemeResp}
|
|
// @Router /answer/admin/api/siteinfo/theme [get]
|
|
func (sc *SiteInfoController) GetSiteTheme(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteTheme(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetSiteUsers get site user config
|
|
// @Summary get site user config
|
|
// @Description get site user config
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteUsersResp}
|
|
// @Router /answer/admin/api/siteinfo/users [get]
|
|
func (sc *SiteInfoController) GetSiteUsers(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteUsers(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// GetRobots get site robots information
|
|
// @Summary get site robots information
|
|
// @Description get site robots information
|
|
// @Tags site
|
|
// @Produce json
|
|
// @Success 200 {string} txt ""
|
|
// @Router /robots.txt [get]
|
|
func (sc *SiteInfoController) GetRobots(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSeo(ctx)
|
|
if err != nil {
|
|
ctx.String(http.StatusOK, "")
|
|
return
|
|
}
|
|
ctx.String(http.StatusOK, resp.Robots)
|
|
}
|
|
|
|
// GetCss get site custom CSS
|
|
// @Summary get site custom CSS
|
|
// @Description get site custom CSS
|
|
// @Tags site
|
|
// @Produce text/css
|
|
// @Success 200 {string} css ""
|
|
// @Router /custom.css [get]
|
|
func (sc *SiteInfoController) GetCss(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteCustomCssHTML(ctx)
|
|
if err != nil {
|
|
ctx.String(http.StatusOK, "")
|
|
return
|
|
}
|
|
ctx.Header("content-type", "text/css;charset=utf-8")
|
|
ctx.String(http.StatusOK, resp.CustomCss)
|
|
}
|
|
|
|
// UpdateSeo update site seo information
|
|
// @Summary update site seo information
|
|
// @Description update site seo information
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteSeoReq true "seo"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/seo [put]
|
|
func (sc *SiteInfoController) UpdateSeo(ctx *gin.Context) {
|
|
req := schema.SiteSeoReq{}
|
|
if handler.BindAndCheck(ctx, &req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.SaveSeo(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|
|
|
|
// UpdateGeneral update site general information
|
|
// @Summary update site general information
|
|
// @Description update site general information
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteGeneralReq true "general"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/general [put]
|
|
func (sc *SiteInfoController) UpdateGeneral(ctx *gin.Context) {
|
|
req := schema.SiteGeneralReq{}
|
|
if handler.BindAndCheck(ctx, &req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.SaveSiteGeneral(ctx, req)
|
|
req.Name = html.UnescapeString(req.Name)
|
|
handler.HandleResponse(ctx, err, req)
|
|
}
|
|
|
|
// UpdateInterface update site interface
|
|
// @Summary update site info interface
|
|
// @Description update site info interface
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteInterfaceReq true "general"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/interface [put]
|
|
func (sc *SiteInfoController) UpdateInterface(ctx *gin.Context) {
|
|
req := schema.SiteInterfaceReq{}
|
|
if handler.BindAndCheck(ctx, &req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.SaveSiteInterface(ctx, req)
|
|
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
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteBrandingReq true "branding info"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/branding [put]
|
|
func (sc *SiteInfoController) UpdateBranding(ctx *gin.Context) {
|
|
req := &schema.SiteBrandingReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
currentBranding, getBrandingErr := sc.siteInfoService.GetSiteBranding(ctx)
|
|
if getBrandingErr == nil {
|
|
cleanUpErr := sc.siteInfoService.CleanUpRemovedBrandingFiles(ctx, req, currentBranding)
|
|
if cleanUpErr != nil {
|
|
log.Errorf("failed to clean up removed branding file(s): %v", cleanUpErr)
|
|
}
|
|
} else {
|
|
log.Errorf("failed to get current site branding: %v", getBrandingErr)
|
|
}
|
|
saveErr := sc.siteInfoService.SaveSiteBranding(ctx, req)
|
|
handler.HandleResponse(ctx, saveErr, nil)
|
|
}
|
|
|
|
// UpdateSiteQuestion update site question settings
|
|
// @Summary update site question settings
|
|
// @Description update site question settings
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteQuestionsReq true "questions settings"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/question [put]
|
|
func (sc *SiteInfoController) UpdateSiteQuestion(ctx *gin.Context) {
|
|
req := &schema.SiteQuestionsReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
|
|
resp, err := sc.siteInfoService.SaveSiteQuestions(ctx, req)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// UpdateSiteTag update site tag settings
|
|
// @Summary update site tag settings
|
|
// @Description update site tag settings
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteTagsReq true "tags settings"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/tag [put]
|
|
func (sc *SiteInfoController) UpdateSiteTag(ctx *gin.Context) {
|
|
req := &schema.SiteTagsReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
|
|
|
resp, err := sc.siteInfoService.SaveSiteTags(ctx, req)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// UpdateSiteAdvanced update site advanced info
|
|
// @Summary update site advanced info
|
|
// @Description update site advanced info
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteAdvancedReq true "advanced settings"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/advanced [put]
|
|
func (sc *SiteInfoController) UpdateSiteAdvanced(ctx *gin.Context) {
|
|
req := &schema.SiteAdvancedReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
|
|
resp, err := sc.siteInfoService.SaveSiteAdvanced(ctx, req)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// UpdateSitePolices update site policies configuration
|
|
// @Summary update site policies configuration
|
|
// @Description update site policies configuration
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SitePoliciesReq true "write info"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/polices [put]
|
|
func (sc *SiteInfoController) UpdateSitePolices(ctx *gin.Context) {
|
|
req := &schema.SitePoliciesReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.SaveSitePolicies(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|
|
|
|
// UpdateSiteSecurity update site security configuration
|
|
// @Summary update site security configuration
|
|
// @Description update site security configuration
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteSecurityReq true "write info"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/security [put]
|
|
func (sc *SiteInfoController) UpdateSiteSecurity(ctx *gin.Context) {
|
|
req := &schema.SiteSecurityReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.SaveSiteSecurity(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|
|
|
|
// UpdateSiteLogin update site login
|
|
// @Summary update site login
|
|
// @Description update site login
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteLoginReq true "login info"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/login [put]
|
|
func (sc *SiteInfoController) UpdateSiteLogin(ctx *gin.Context) {
|
|
req := &schema.SiteLoginReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.SaveSiteLogin(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|
|
|
|
// UpdateSiteCustomCssHTML update site custom css html config
|
|
// @Summary update site custom css html config
|
|
// @Description update site custom css html config
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteCustomCssHTMLReq true "login info"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/custom-css-html [put]
|
|
func (sc *SiteInfoController) UpdateSiteCustomCssHTML(ctx *gin.Context) {
|
|
req := &schema.SiteCustomCssHTMLReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.SaveSiteCustomCssHTML(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|
|
|
|
// SaveSiteTheme update site custom css html config
|
|
// @Summary update site custom css html config
|
|
// @Description update site custom css html config
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteThemeReq true "login info"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/theme [put]
|
|
func (sc *SiteInfoController) SaveSiteTheme(ctx *gin.Context) {
|
|
req := &schema.SiteThemeReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.SaveSiteTheme(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|
|
|
|
// UpdateSiteUsers update site config about users
|
|
// @Summary update site info config about users
|
|
// @Description update site info config about users
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.SiteUsersReq true "users info"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/siteinfo/users [put]
|
|
func (sc *SiteInfoController) UpdateSiteUsers(ctx *gin.Context) {
|
|
req := &schema.SiteUsersReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.SaveSiteUsers(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|
|
|
|
// GetSMTPConfig get smtp config
|
|
// @Summary GetSMTPConfig get smtp config
|
|
// @Description GetSMTPConfig get smtp config
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.GetSMTPConfigResp}
|
|
// @Router /answer/admin/api/setting/smtp [get]
|
|
func (sc *SiteInfoController) GetSMTPConfig(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSMTPConfig(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// UpdateSMTPConfig update smtp config
|
|
// @Summary update smtp config
|
|
// @Description update smtp config
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.UpdateSMTPConfigReq true "smtp config"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/setting/smtp [put]
|
|
func (sc *SiteInfoController) UpdateSMTPConfig(ctx *gin.Context) {
|
|
req := &schema.UpdateSMTPConfigReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.UpdateSMTPConfig(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|
|
|
|
// GetPrivilegesConfig get privileges config
|
|
// @Summary GetPrivilegesConfig get privileges config
|
|
// @Description GetPrivilegesConfig get privileges config
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.GetPrivilegesConfigResp}
|
|
// @Router /answer/admin/api/setting/privileges [get]
|
|
func (sc *SiteInfoController) GetPrivilegesConfig(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetPrivilegesConfig(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// UpdatePrivilegesConfig update privileges config
|
|
// @Summary update privileges config
|
|
// @Description update privileges config
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Param data body schema.UpdatePrivilegesConfigReq true "config"
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/setting/privileges [put]
|
|
func (sc *SiteInfoController) UpdatePrivilegesConfig(ctx *gin.Context) {
|
|
req := &schema.UpdatePrivilegesConfigReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
err := sc.siteInfoService.UpdatePrivilegesConfig(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|
|
|
|
// GetAIConfig get AI configuration
|
|
// @Summary get AI configuration
|
|
// @Description get AI configuration
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteAIResp}
|
|
// @Router /answer/admin/api/ai-config [get]
|
|
func (sc *SiteInfoController) GetAIConfig(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteAI(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// UpdateAIConfig update AI configuration
|
|
// @Summary update AI configuration
|
|
// @Description update AI configuration
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Param data body schema.SiteAIReq true "AI config"
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/ai-config [put]
|
|
func (sc *SiteInfoController) UpdateAIConfig(ctx *gin.Context) {
|
|
req := &schema.SiteAIReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
|
|
err := sc.siteInfoService.SaveSiteAI(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|
|
|
|
// GetAIProvider get AI provider configuration
|
|
// @Summary get AI provider configuration
|
|
// @Description get AI provider configuration
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=[]schema.GetAIProviderResp}
|
|
// @Router /answer/admin/api/ai-provider [get]
|
|
func (sc *SiteInfoController) GetAIProvider(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetAIProvider(ctx)
|
|
if err != nil {
|
|
handler.HandleResponse(ctx, err, nil)
|
|
return
|
|
}
|
|
handler.HandleResponse(ctx, nil, resp)
|
|
}
|
|
|
|
// RequestAIModels get AI models
|
|
// @Summary get AI models
|
|
// @Description get AI models
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=[]schema.GetAIModelResp}
|
|
// @Router /answer/admin/api/ai-models [post]
|
|
func (sc *SiteInfoController) RequestAIModels(ctx *gin.Context) {
|
|
req := &schema.GetAIModelsReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
resp, err := sc.siteInfoService.GetAIModels(ctx, req)
|
|
if err != nil {
|
|
handler.HandleResponse(ctx, err, nil)
|
|
return
|
|
}
|
|
handler.HandleResponse(ctx, nil, resp)
|
|
}
|
|
|
|
// GetMCPConfig get MCP configuration
|
|
// @Summary get MCP configuration
|
|
// @Description get MCP configuration
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{data=schema.SiteMCPResp}
|
|
// @Router /answer/admin/api/mcp-config [get]
|
|
func (sc *SiteInfoController) GetMCPConfig(ctx *gin.Context) {
|
|
resp, err := sc.siteInfoService.GetSiteMCP(ctx)
|
|
handler.HandleResponse(ctx, err, resp)
|
|
}
|
|
|
|
// UpdateMCPConfig update MCP configuration
|
|
// @Summary update MCP configuration
|
|
// @Description update MCP configuration
|
|
// @Security ApiKeyAuth
|
|
// @Tags admin
|
|
// @Param data body schema.SiteMCPReq true "MCP config"
|
|
// @Produce json
|
|
// @Success 200 {object} handler.RespBody{}
|
|
// @Router /answer/admin/api/mcp-config [put]
|
|
func (sc *SiteInfoController) UpdateMCPConfig(ctx *gin.Context) {
|
|
req := &schema.SiteMCPReq{}
|
|
if handler.BindAndCheck(ctx, req) {
|
|
return
|
|
}
|
|
|
|
err := sc.siteInfoService.SaveSiteMCP(ctx, req)
|
|
handler.HandleResponse(ctx, err, nil)
|
|
}
|