mirror of https://github.com/go-sonic/sonic.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
310 lines
9.0 KiB
Go
310 lines
9.0 KiB
Go
package admin
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/go-playground/validator/v10"
|
|
|
|
"github.com/go-sonic/sonic/consts"
|
|
"github.com/go-sonic/sonic/handler/trans"
|
|
"github.com/go-sonic/sonic/model/param"
|
|
"github.com/go-sonic/sonic/service"
|
|
"github.com/go-sonic/sonic/util"
|
|
"github.com/go-sonic/sonic/util/xerr"
|
|
)
|
|
|
|
type ThemeHandler struct {
|
|
ThemeService service.ThemeService
|
|
OptionService service.OptionService
|
|
}
|
|
|
|
func NewThemeHandler(l service.ThemeService, o service.OptionService) *ThemeHandler {
|
|
return &ThemeHandler{
|
|
ThemeService: l,
|
|
OptionService: o,
|
|
}
|
|
}
|
|
|
|
func (t *ThemeHandler) GetThemeByID(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.GetThemeByID(ctx, themeID)
|
|
}
|
|
|
|
func (t *ThemeHandler) ListAllThemes(ctx *gin.Context) (interface{}, error) {
|
|
return t.ThemeService.ListAllTheme(ctx)
|
|
}
|
|
|
|
func (t *ThemeHandler) ListActivatedThemeFile(ctx *gin.Context) (interface{}, error) {
|
|
activatedThemeID, err := t.OptionService.GetActivatedThemeID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.ListThemeFiles(ctx, activatedThemeID)
|
|
}
|
|
|
|
func (t *ThemeHandler) ListThemeFileByID(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.ListThemeFiles(ctx, themeID)
|
|
}
|
|
|
|
func (t *ThemeHandler) GetThemeFileContent(ctx *gin.Context) (interface{}, error) {
|
|
path, err := util.MustGetQueryString(ctx, "path")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
activatedThemeID, err := t.OptionService.GetActivatedThemeID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.GetThemeFileContent(ctx, activatedThemeID, path)
|
|
}
|
|
|
|
func (t *ThemeHandler) GetThemeFileContentByID(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
path, err := util.MustGetQueryString(ctx, "path")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return t.ThemeService.GetThemeFileContent(ctx, themeID, path)
|
|
}
|
|
|
|
func (t *ThemeHandler) UpdateThemeFile(ctx *gin.Context) (interface{}, error) {
|
|
themeParam := ¶m.ThemeContent{}
|
|
err := ctx.ShouldBindJSON(themeParam)
|
|
if err != nil {
|
|
if err != nil {
|
|
e := validator.ValidationErrors{}
|
|
if errors.As(err, &e) {
|
|
return nil, xerr.WithStatus(e, xerr.StatusBadRequest).WithMsg(trans.Translate(e))
|
|
}
|
|
return nil, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg("parameter error")
|
|
}
|
|
}
|
|
activatedThemeID, err := t.OptionService.GetActivatedThemeID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return nil, t.ThemeService.UpdateThemeFile(ctx, activatedThemeID, themeParam.Path, themeParam.Content)
|
|
}
|
|
|
|
func (t *ThemeHandler) UpdateThemeFileByID(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
themeParam := ¶m.ThemeContent{}
|
|
err = ctx.ShouldBindJSON(themeParam)
|
|
if err != nil {
|
|
if err != nil {
|
|
e := validator.ValidationErrors{}
|
|
if errors.As(err, &e) {
|
|
return nil, xerr.WithStatus(e, xerr.StatusBadRequest).WithMsg(trans.Translate(e))
|
|
}
|
|
return nil, xerr.WithStatus(err, xerr.StatusBadRequest).WithMsg("parameter error")
|
|
}
|
|
}
|
|
return nil, t.ThemeService.UpdateThemeFile(ctx, themeID, themeParam.Path, themeParam.Content)
|
|
}
|
|
|
|
func (t *ThemeHandler) ListCustomSheetTemplate(ctx *gin.Context) (interface{}, error) {
|
|
activatedThemeID, err := t.OptionService.GetActivatedThemeID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.ListCustomTemplates(ctx, activatedThemeID, consts.ThemeCustomSheetPrefix)
|
|
}
|
|
|
|
func (t *ThemeHandler) ListCustomPostTemplate(ctx *gin.Context) (interface{}, error) {
|
|
activatedThemeID, err := t.OptionService.GetActivatedThemeID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.ListCustomTemplates(ctx, activatedThemeID, consts.ThemeCustomPostPrefix)
|
|
}
|
|
|
|
func (t *ThemeHandler) ActivateTheme(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.ActivateTheme(ctx, themeID)
|
|
}
|
|
|
|
func (t *ThemeHandler) GetActivatedTheme(ctx *gin.Context) (interface{}, error) {
|
|
activatedThemeID, err := t.OptionService.GetActivatedThemeID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.GetThemeByID(ctx, activatedThemeID)
|
|
}
|
|
|
|
func (t *ThemeHandler) GetActivatedThemeConfig(ctx *gin.Context) (interface{}, error) {
|
|
activatedThemeID, err := t.OptionService.GetActivatedThemeID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.GetThemeConfig(ctx, activatedThemeID)
|
|
}
|
|
|
|
func (t *ThemeHandler) GetThemeConfigByID(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.GetThemeConfig(ctx, themeID)
|
|
}
|
|
|
|
func (t *ThemeHandler) GetThemeConfigByGroup(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
group, err := util.ParamString(ctx, "group")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
themeSettings, err := t.ThemeService.GetThemeConfig(ctx, themeID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, setting := range themeSettings {
|
|
if setting.Name == group {
|
|
return setting.Items, nil
|
|
}
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
func (t *ThemeHandler) GetThemeConfigGroupNames(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
themeSettings, err := t.ThemeService.GetThemeConfig(ctx, themeID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
groupNames := make([]string, len(themeSettings))
|
|
for index, setting := range themeSettings {
|
|
groupNames[index] = setting.Name
|
|
}
|
|
return groupNames, nil
|
|
}
|
|
|
|
func (t *ThemeHandler) GetActivatedThemeSettingMap(ctx *gin.Context) (interface{}, error) {
|
|
activatedThemeID, err := t.OptionService.GetActivatedThemeID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.GetThemeSettingMap(ctx, activatedThemeID)
|
|
}
|
|
|
|
func (t *ThemeHandler) GetThemeSettingMapByID(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.GetThemeSettingMap(ctx, themeID)
|
|
}
|
|
|
|
func (t *ThemeHandler) GetThemeSettingMapByGroupAndThemeID(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
group, err := util.ParamString(ctx, "group")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.GetThemeGroupSettingMap(ctx, themeID, group)
|
|
}
|
|
|
|
func (t *ThemeHandler) SaveActivatedThemeSetting(ctx *gin.Context) (interface{}, error) {
|
|
activatedThemeID, err := t.OptionService.GetActivatedThemeID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
settings := make(map[string]interface{})
|
|
err = ctx.ShouldBindJSON(&settings)
|
|
if err != nil {
|
|
return nil, xerr.WithStatus(err, xerr.StatusBadRequest)
|
|
}
|
|
return nil, t.ThemeService.SaveThemeSettings(ctx, activatedThemeID, settings)
|
|
}
|
|
|
|
func (t *ThemeHandler) SaveThemeSettingByID(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
settings := make(map[string]interface{})
|
|
err = ctx.ShouldBindJSON(&settings)
|
|
if err != nil {
|
|
return nil, xerr.WithStatus(err, xerr.StatusBadRequest)
|
|
}
|
|
return nil, t.ThemeService.SaveThemeSettings(ctx, themeID, settings)
|
|
}
|
|
|
|
func (t *ThemeHandler) DeleteThemeByID(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
isDeleteSetting, err := util.GetQueryBool(ctx, "deleteSettings", false)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return nil, t.ThemeService.DeleteTheme(ctx, themeID, isDeleteSetting)
|
|
}
|
|
|
|
func (t *ThemeHandler) UploadTheme(ctx *gin.Context) (interface{}, error) {
|
|
fileHeader, err := ctx.FormFile("file")
|
|
if err != nil {
|
|
return nil, xerr.WithMsg(err, "upload theme error").WithStatus(xerr.StatusBadRequest)
|
|
}
|
|
return t.ThemeService.UploadTheme(ctx, fileHeader)
|
|
}
|
|
|
|
func (t *ThemeHandler) UpdateThemeByUpload(ctx *gin.Context) (interface{}, error) {
|
|
themeID, err := util.ParamString(ctx, "themeID")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
fileHeader, err := ctx.FormFile("file")
|
|
if err != nil {
|
|
return nil, xerr.WithMsg(err, "upload theme error").WithStatus(xerr.StatusBadRequest)
|
|
}
|
|
return t.ThemeService.UpdateThemeByUpload(ctx, themeID, fileHeader)
|
|
}
|
|
|
|
func (t *ThemeHandler) FetchTheme(ctx *gin.Context) (interface{}, error) {
|
|
return nil, xerr.WithMsg(nil, "not support").WithStatus(xerr.StatusInternalServerError)
|
|
}
|
|
|
|
func (t *ThemeHandler) UpdateThemeByFetching(ctx *gin.Context) (interface{}, error) {
|
|
return nil, xerr.WithMsg(nil, "not support").WithStatus(xerr.StatusInternalServerError)
|
|
}
|
|
|
|
func (t *ThemeHandler) ReloadTheme(ctx *gin.Context) (interface{}, error) {
|
|
return nil, t.ThemeService.ReloadTheme(ctx)
|
|
}
|
|
|
|
func (t *ThemeHandler) TemplateExist(ctx *gin.Context) (interface{}, error) {
|
|
template, err := util.MustGetQueryString(ctx, "template")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return t.ThemeService.TemplateExist(ctx, template)
|
|
}
|