Skip to content

Commit

Permalink
fix: backup site
Browse files Browse the repository at this point in the history
  • Loading branch information
1379 authored and 1379 committed Dec 3, 2022
1 parent 7b42511 commit d07cf6d
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 22 deletions.
29 changes: 21 additions & 8 deletions handler/admin/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,45 +28,58 @@ func NewBackupHandler(backupService service.BackupService) *BackupHandler {
}

func (b *BackupHandler) GetWorkDirBackup(ctx *gin.Context) (interface{}, error) {
filename, err := util.ParamString(ctx, "filename")
filename, err := util.MustGetQueryString(ctx, "filename")
if err != nil {
return nil, err
}
return b.BackupService.GetBackup(ctx, filepath.Join(config.BackupDir, filename), service.WholeSite)
}

func (b *BackupHandler) GetDataBackup(ctx *gin.Context) (interface{}, error) {
filename, err := util.ParamString(ctx, "filename")
filename, err := util.MustGetQueryString(ctx, "filename")
if err != nil {
return nil, err
}
return b.BackupService.GetBackup(ctx, filepath.Join(config.DataExportDir, filename), service.JsonData)
}

func (b *BackupHandler) GetMarkDownBackup(ctx *gin.Context) (interface{}, error) {
filename, err := util.ParamString(ctx, "filename")
filename, err := util.MustGetQueryString(ctx, "filename")
if err != nil {
return nil, err
}
return b.BackupService.GetBackup(ctx, filepath.Join(config.BackupMarkdownDir, filename), service.Markdown)
}

func (b *BackupHandler) BackupWholeSite(ctx *gin.Context) (interface{}, error) {
return b.BackupService.BackupWholeSite(ctx)
toBackupItems := make([]string, 0)
err := ctx.ShouldBindJSON(&toBackupItems)
if err != nil {
if e, ok := err.(validator.ValidationErrors); ok {
return nil, xerr.WithStatus(e, xerr.StatusBadRequest).WithMsg(trans.Translate(e))
}
return nil, xerr.WithStatus(err, xerr.StatusBadRequest)
}

return b.BackupService.BackupWholeSite(ctx, toBackupItems)
}

func (b *BackupHandler) ListBackups(ctx *gin.Context) (interface{}, error) {
return b.BackupService.ListFiles(ctx, config.BackupDir, service.WholeSite)
}

func (b *BackupHandler) ListToBackupItems(ctx *gin.Context) (interface{}, error) {
return b.BackupService.ListToBackupItems(ctx)
}

func (b *BackupHandler) HandleWorkDir(ctx *gin.Context) {
path := ctx.Request.URL.Path
if path == "/api/admin/backups/work-dir/fetch" {
wrapHandler(b.GetWorkDirBackup)(ctx)
return
}
if path == "/api/admin/backups/work-dir" || path == "/api/admin/backups/work-dir/" {
wrapHandler(b.ListBackups)(ctx)
if path == "/api/admin/backups/work-dir/options" || path == "/api/admin/backups/work-dir/options/" {
wrapHandler(b.ListToBackupItems)(ctx)
return
}
b.DownloadBackups(ctx)
Expand All @@ -91,7 +104,7 @@ func (b *BackupHandler) DownloadBackups(ctx *gin.Context) {
}

func (b *BackupHandler) DeleteBackups(ctx *gin.Context) (interface{}, error) {
filename, err := util.ParamString(ctx, "filename")
filename, err := util.MustGetQueryString(ctx, "filename")
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -169,7 +182,7 @@ func (b *BackupHandler) ListMarkdowns(ctx *gin.Context) (interface{}, error) {
}

func (b *BackupHandler) DeleteMarkdowns(ctx *gin.Context) (interface{}, error) {
filename, err := util.ParamString(ctx, "filename")
filename, err := util.MustGetQueryString(ctx, "filename")
if err != nil {
return nil, err
}
Expand Down
6 changes: 1 addition & 5 deletions handler/route.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ func (s *Server) RegisterRouters() {
{
backupRouter := authRouter.Group("/backups")
backupRouter.POST("/work-dir", s.wrapHandler(s.BackupHandler.BackupWholeSite))
backupRouter.GET("/work-dir", s.wrapHandler(s.BackupHandler.ListBackups))
backupRouter.GET("/work-dir/*path", s.BackupHandler.HandleWorkDir)
backupRouter.DELETE("/work-dir", s.wrapHandler(s.BackupHandler.DeleteBackups))
backupRouter.POST("/data", s.wrapHandler(s.BackupHandler.ExportData))
Expand Down Expand Up @@ -352,11 +353,6 @@ func (s *Server) registerDynamicRouters(contentRouter *gin.RouterGroup) error {
ctx = dal.SetCtxQuery(ctx, dal.GetQueryByCtx(ctx).ReplaceDB(dal.GetDB().Session(
&gorm.Session{Logger: dal.DB.Logger.LogMode(logger.Warn)},
)))
// theme, err := s.ThemeService.GetActivateTheme(ctx)
// if err != nil {
// return nil
// }
// s.Router.StaticFS("/themes/"+theme.FolderName, gin.Dir(theme.ThemePath, false))

archivePath, err := s.OptionService.GetArchivePrefix(ctx)
if err != nil {
Expand Down
3 changes: 2 additions & 1 deletion service/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ type BackupService interface {
// GetBackup Get backup data by backup file name.
GetBackup(ctx context.Context, filename string, backupType BackupType) (*dto.BackupDTO, error)
// BackupWholeSite Zips work directory
BackupWholeSite(ctx context.Context) (*dto.BackupDTO, error)
BackupWholeSite(ctx context.Context, toBackupItems []string) (*dto.BackupDTO, error)
// ListFiles list all files under path
ListFiles(ctx context.Context, path string, backupType BackupType) ([]*dto.BackupDTO, error)
// GetBackupFilePath get filepath and check if the file exist
Expand All @@ -24,6 +24,7 @@ type BackupService interface {
ImportMarkdown(ctx context.Context, fileHeader *multipart.FileHeader) error
// ExportMarkdown export posts to markdown files
ExportMarkdown(ctx context.Context, needFrontMatter bool) (*dto.BackupDTO, error)
ListToBackupItems(ctx context.Context) ([]string, error)
}

type BackupType string
Expand Down
29 changes: 21 additions & 8 deletions service/impl/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,10 @@ func (b *backupServiceImpl) GetBackup(ctx context.Context, filepath string, back
return b.buildBackupDTO(ctx, string(backupType), filepath)
}

func (b *backupServiceImpl) BackupWholeSite(ctx context.Context) (*dto.BackupDTO, error) {
func (b *backupServiceImpl) BackupWholeSite(ctx context.Context, toBackupItems []string) (*dto.BackupDTO, error) {
backupFilename := consts.SonicBackupPrefix + time.Now().Format("2006-01-02-15-04-05") + util.GenUUIDWithOutDash() + ".zip"
backupFilePath := config.BackupDir

if _, err := os.Stat(backupFilePath); os.IsNotExist(err) {
err = os.MkdirAll(backupFilePath, os.ModePerm)
if err != nil {
Expand All @@ -57,17 +58,16 @@ func (b *backupServiceImpl) BackupWholeSite(ctx context.Context) (*dto.BackupDTO
} else if err != nil {
return nil, xerr.NoType.Wrap(err).WithMsg("get fileInfo")
}

backupFile := filepath.Join(backupFilePath, backupFilename)

toBackupPath := []string{b.Config.Sonic.WorkDir}
if !strings.Contains(b.Config.Sonic.LogDir, b.Config.Sonic.WorkDir) {
toBackupPath = append(toBackupPath, b.Config.Sonic.LogDir)
}
if !strings.Contains(b.Config.Sonic.TemplateDir, b.Config.Sonic.WorkDir) {
toBackupPath = append(toBackupPath, b.Config.Sonic.TemplateDir)
toBackupPaths := []string{}
for _, toBackupItem := range toBackupItems {
toBackupPath := filepath.Join(b.Config.Sonic.WorkDir, toBackupItem)
toBackupPaths = append(toBackupPaths, toBackupPath)
}

err := util.ZipFile(backupFile, toBackupPath...)
err := util.ZipFile(backupFile, toBackupPaths...)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -256,3 +256,16 @@ func fillData(dataMap map[string]interface{}, item string, f interface{}, preErr
}
return nil
}

func (b *backupServiceImpl) ListToBackupItems(ctx context.Context) ([]string, error) {
dirEntrys, err := os.ReadDir(b.Config.Sonic.WorkDir)
if err != nil {
return nil, xerr.WithStatus(err, xerr.StatusInternalServerError).WithMsg("read work dir err")
}

result := make([]string, 0)
for _, dirEntry := range dirEntrys {
result = append(result, dirEntry.Name())
}
return result, nil
}

0 comments on commit d07cf6d

Please sign in to comment.