This is an automated email from the ASF dual-hosted git repository.
linkinstar pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/answer.git
The following commit(s) were added to refs/heads/dev by this push:
new 5e705a12 refactor(lint): improve error handling and code consistency
across multiple files
5e705a12 is described below
commit 5e705a124b3ae2d927f8084e545c3809ae70f4a8
Author: LinkinStars <[email protected]>
AuthorDate: Mon Dec 1 12:23:50 2025 +0800
refactor(lint): improve error handling and code consistency across multiple
files
---
.golangci.yaml | 13 +++++-
cmd/wire.go | 3 +-
internal/base/conf/conf.go | 4 +-
internal/base/constant/ctx_flag.go | 7 +++
internal/base/data/data.go | 2 +-
internal/base/handler/lang.go | 2 +-
internal/base/handler/short_id.go | 2 +-
internal/base/server/http_funcmap.go | 9 ++--
internal/base/validator/validator.go | 2 +-
internal/cli/build.go | 52 ----------------------
internal/cli/config.go | 6 ++-
internal/cli/dump.go | 4 +-
internal/cli/install_check.go | 8 +++-
internal/cli/reset_password.go | 4 +-
internal/controller/template_controller.go | 43 +++++++-----------
internal/controller/template_render/controller.go | 1 -
internal/controller/user_controller.go | 7 +--
internal/install/install_from_env.go | 3 +-
internal/migrations/migrations.go | 4 +-
internal/migrations/v22.go | 3 ++
internal/migrations/v24.go | 3 --
internal/repo/answer/answer_repo.go | 1 +
.../repo/plugin_config/plugin_user_config_repo.go | 2 +-
internal/repo/repo_test/repo_main_test.go | 2 +-
internal/repo/tag/tag_rel_repo.go | 1 +
internal/service/action/captcha_service.go | 7 ++-
internal/service/action/captcha_strategy.go | 27 +++++------
internal/service/badge/badge_event_handler.go | 1 -
internal/service/badge/badge_service.go | 26 ++++-------
internal/service/content/question_service.go | 22 +++++----
internal/service/content/revision_service.go | 5 +--
internal/service/content/search_service.go | 3 ++
internal/service/content/vote_service.go | 3 --
internal/service/dashboard/dashboard_service.go | 8 ++--
.../service/file_record/file_record_service.go | 1 -
internal/service/importer/importer_service.go | 5 +--
internal/service/meta/meta_service.go | 12 ++---
.../notification/invite_answer_notification.go | 2 +-
.../notification/new_answer_notification.go | 2 +-
.../notification/new_comment_notification.go | 2 +-
.../notification/new_question_notification.go | 2 +-
.../service/notification/notification_service.go | 4 +-
.../service/notification_common/notification.go | 3 ++
internal/service/report_handle/report_handle.go | 6 +++
internal/service/review/review_service.go | 1 -
internal/service/siteinfo/siteinfo_service.go | 4 +-
internal/service/uploader/upload.go | 28 ++++++++----
internal/service/user_admin/user_backyard.go | 11 ++---
.../user_notification_config_service.go | 8 ++--
pkg/checker/file_type.go | 4 +-
pkg/checker/password.go | 3 +-
pkg/converter/markdown.go | 7 ++-
pkg/htmltext/htmltext.go | 4 +-
plugin/kv_storage.go | 6 +--
plugin/plugin_test/plugin_main_test.go | 2 +-
ui/static.go | 1 -
56 files changed, 194 insertions(+), 214 deletions(-)
diff --git a/.golangci.yaml b/.golangci.yaml
index 263f63f7..611b49bc 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -17,7 +17,18 @@
version: "2"
linters:
- default: none
+ exclusions:
+ paths:
+ - answer-data
+ - ui
+ - i18n
+ enable:
+ - asasalint # checks for pass []any as any in variadic func(...any)
+ - asciicheck # checks that your code does not contain non-ASCII identifiers
+ - bidichk # checks for dangerous unicode character sequences
+ - bodyclose # checks whether HTTP response body is closed successfully
+ - canonicalheader # checks whether net/http.Header uses canonical header
+ - copyloopvar # detects places where loop variables are copied (Go 1.22+)
formatters:
enable:
diff --git a/cmd/wire.go b/cmd/wire.go
index b25026e5..3979ecbf 100644
--- a/cmd/wire.go
+++ b/cmd/wire.go
@@ -1,5 +1,4 @@
//go:build wireinject
-// +build wireinject
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -32,7 +31,7 @@ import (
"github.com/apache/answer/internal/base/server"
"github.com/apache/answer/internal/base/translator"
"github.com/apache/answer/internal/controller"
- "github.com/apache/answer/internal/controller/template_render"
+ templaterender
"github.com/apache/answer/internal/controller/template_render"
"github.com/apache/answer/internal/controller_admin"
"github.com/apache/answer/internal/repo"
"github.com/apache/answer/internal/router"
diff --git a/internal/base/conf/conf.go b/internal/base/conf/conf.go
index db83862b..04e3a19b 100644
--- a/internal/base/conf/conf.go
+++ b/internal/base/conf/conf.go
@@ -117,7 +117,9 @@ func ReadConfig(configFilePath string) (c *AllConfig, err
error) {
func RewriteConfig(configFilePath string, allConfig *AllConfig) error {
buf := bytes.Buffer{}
enc := yaml.NewEncoder(&buf)
- defer enc.Close()
+ defer func() {
+ _ = enc.Close()
+ }()
enc.SetIndent(2)
if err := enc.Encode(allConfig); err != nil {
return err
diff --git a/internal/base/constant/ctx_flag.go
b/internal/base/constant/ctx_flag.go
index 2a757fa8..450491bb 100644
--- a/internal/base/constant/ctx_flag.go
+++ b/internal/base/constant/ctx_flag.go
@@ -23,3 +23,10 @@ const (
AcceptLanguageFlag = "Accept-Language"
ShortIDFlag = "Short-ID-Enabled"
)
+
+type ContextKey string
+
+const (
+ AcceptLanguageContextKey ContextKey = ContextKey(AcceptLanguageFlag)
+ ShortIDContextKey ContextKey = ContextKey(ShortIDFlag)
+)
diff --git a/internal/base/data/data.go b/internal/base/data/data.go
index 1d24d718..7696d8f5 100644
--- a/internal/base/data/data.go
+++ b/internal/base/data/data.go
@@ -47,7 +47,7 @@ type Data struct {
func NewData(db *xorm.Engine, cache cache.Cache) (*Data, func(), error) {
cleanup := func() {
log.Info("closing the data resources")
- db.Close()
+ _ = db.Close()
}
return &Data{DB: db, Cache: cache}, cleanup, nil
}
diff --git a/internal/base/handler/lang.go b/internal/base/handler/lang.go
index a676e5bc..4ff1ac7f 100644
--- a/internal/base/handler/lang.go
+++ b/internal/base/handler/lang.go
@@ -38,7 +38,7 @@ func GetLang(ctx *gin.Context) i18n.Language {
// GetLangByCtx get language from header
func GetLangByCtx(ctx context.Context) i18n.Language {
- acceptLanguage, ok :=
ctx.Value(constant.AcceptLanguageFlag).(i18n.Language)
+ acceptLanguage, ok :=
ctx.Value(constant.AcceptLanguageContextKey).(i18n.Language)
if ok {
return acceptLanguage
}
diff --git a/internal/base/handler/short_id.go
b/internal/base/handler/short_id.go
index c763bf94..8f9a2a7e 100644
--- a/internal/base/handler/short_id.go
+++ b/internal/base/handler/short_id.go
@@ -27,7 +27,7 @@ import (
// GetEnableShortID get language from header
func GetEnableShortID(ctx context.Context) bool {
- flag, ok := ctx.Value(constant.ShortIDFlag).(bool)
+ flag, ok := ctx.Value(constant.ShortIDContextKey).(bool)
if ok {
return flag
}
diff --git a/internal/base/server/http_funcmap.go
b/internal/base/server/http_funcmap.go
index 8f6cac5f..db460457 100644
--- a/internal/base/server/http_funcmap.go
+++ b/internal/base/server/http_funcmap.go
@@ -21,7 +21,6 @@ package server
import (
"html/template"
- "math"
"regexp"
"strconv"
"strings"
@@ -107,15 +106,15 @@ var funcMap = template.FuncMap{
}
if between >= 60 && between < 3600 {
- min := math.Floor(float64(between / 60))
+ min := between / 60
trans = translator.GlobalTrans.Tr(la,
"ui.dates.x_minutes_ago")
- return strings.ReplaceAll(trans, "{{count}}",
strconv.FormatFloat(min, 'f', 0, 64))
+ return strings.ReplaceAll(trans, "{{count}}",
strconv.FormatInt(min, 10))
}
if between >= 3600 && between < 3600*24 {
- h := math.Floor(float64(between / 3600))
+ h := between / 3600
trans = translator.GlobalTrans.Tr(la,
"ui.dates.x_hours_ago")
- return strings.ReplaceAll(trans, "{{count}}",
strconv.FormatFloat(h, 'f', 0, 64))
+ return strings.ReplaceAll(trans, "{{count}}",
strconv.FormatInt(h, 10))
}
if between >= 3600*24 &&
diff --git a/internal/base/validator/validator.go
b/internal/base/validator/validator.go
index 22761c52..9c7f6ec4 100644
--- a/internal/base/validator/validator.go
+++ b/internal/base/validator/validator.go
@@ -142,7 +142,7 @@ func Sanitizer(fl validator.FieldLevel) (res bool) {
switch field.Kind() {
case reflect.String:
filter := bluemonday.UGCPolicy()
- content := strings.Replace(filter.Sanitize(field.String()),
"&", "&", -1)
+ content := strings.ReplaceAll(filter.Sanitize(field.String()),
"&", "&")
field.SetString(content)
return true
case reflect.Chan, reflect.Map, reflect.Slice, reflect.Array:
diff --git a/internal/cli/build.go b/internal/cli/build.go
index a5a4d938..efc876e3 100644
--- a/internal/cli/build.go
+++ b/internal/cli/build.go
@@ -34,7 +34,6 @@ import (
"github.com/Masterminds/semver/v3"
"github.com/apache/answer/pkg/dir"
"github.com/apache/answer/pkg/writer"
- "github.com/apache/answer/ui"
"github.com/segmentfault/pacman/log"
"gopkg.in/yaml.v3"
)
@@ -300,50 +299,6 @@ func copyUIFiles(b *buildingMaterial) (err error) {
return nil
}
-// overwriteIndexTs overwrites index.ts file in ui/src/plugins/ dir
-func overwriteIndexTs(b *buildingMaterial) (err error) {
- localUIPluginDir := filepath.Join(b.tmpDir,
"vendor/github.com/apache/answer/ui/src/plugins/")
-
- folders, err := getFolders(localUIPluginDir)
- if err != nil {
- return fmt.Errorf("failed to get folders: %w", err)
- }
-
- content := generateIndexTsContent(folders)
- err = os.WriteFile(filepath.Join(localUIPluginDir, "index.ts"),
[]byte(content), 0644)
- if err != nil {
- return fmt.Errorf("failed to write index.ts: %w", err)
- }
- return nil
-}
-
-func getFolders(dir string) ([]string, error) {
- var folders []string
- files, err := os.ReadDir(dir)
- if err != nil {
- return nil, err
- }
- for _, file := range files {
- if file.IsDir() && file.Name() != "builtin" {
- folders = append(folders, file.Name())
- }
- }
- return folders, nil
-}
-
-func generateIndexTsContent(folders []string) string {
- builder := &strings.Builder{}
- builder.WriteString("export default null;\n")
- // Line 2:1: Delete `⏎` prettier/prettier
- if len(folders) > 0 {
- builder.WriteString("\n")
- }
- for _, folder := range folders {
- builder.WriteString(fmt.Sprintf("export { default as %s } from
'%s';\n", folder, folder))
- }
- return builder.String()
-}
-
// buildUI run pnpm install and pnpm build commands to build ui
func buildUI(b *buildingMaterial) (err error) {
localUIBuildDir := filepath.Join(b.tmpDir,
"vendor/github.com/apache/answer/ui")
@@ -362,13 +317,6 @@ func buildUI(b *buildingMaterial) (err error) {
return nil
}
-func replaceNecessaryFile(b *buildingMaterial) (err error) {
- fmt.Printf("try to replace ui build directory\n")
- uiBuildDir := filepath.Join(b.tmpDir,
"vendor/github.com/apache/answer/ui")
- err = copyDirEntries(ui.Build, ".", uiBuildDir)
- return err
-}
-
// mergeI18nFiles merge i18n files
func mergeI18nFiles(b *buildingMaterial) (err error) {
fmt.Printf("try to merge i18n files\n")
diff --git a/internal/cli/config.go b/internal/cli/config.go
index ecb62a13..e2445c59 100644
--- a/internal/cli/config.go
+++ b/internal/cli/config.go
@@ -42,7 +42,9 @@ func SetDefaultConfig(dbConf *data.Database, cacheConf
*data.CacheConf, field *C
if err != nil {
return err
}
- defer db.Close()
+ defer func() {
+ _ = db.Close()
+ }()
cache, cacheCleanup, err := data.NewCache(cacheConf)
if err != nil {
@@ -50,7 +52,7 @@ func SetDefaultConfig(dbConf *data.Database, cacheConf
*data.CacheConf, field *C
}
defer func() {
if cache != nil {
- cache.Flush(context.Background())
+ _ = cache.Flush(context.Background())
cacheCleanup()
}
}()
diff --git a/internal/cli/dump.go b/internal/cli/dump.go
index e5d52821..e63ef1a9 100644
--- a/internal/cli/dump.go
+++ b/internal/cli/dump.go
@@ -34,7 +34,9 @@ func DumpAllData(dataConf *data.Database, dumpDataPath
string) error {
if err != nil {
return err
}
- defer db.Close()
+ defer func() {
+ _ = db.Close()
+ }()
if err = db.Ping(); err != nil {
return err
}
diff --git a/internal/cli/install_check.go b/internal/cli/install_check.go
index 9326e069..c3fadcab 100644
--- a/internal/cli/install_check.go
+++ b/internal/cli/install_check.go
@@ -43,7 +43,9 @@ func CheckDBConnection(dataConf *data.Database) bool {
fmt.Printf("connection database failed: %s\n", err)
return false
}
- defer db.Close()
+ defer func() {
+ _ = db.Close()
+ }()
if err = db.Ping(); err != nil {
fmt.Printf("connection ping database failed: %s\n", err)
return false
@@ -59,7 +61,9 @@ func CheckDBTableExist(dataConf *data.Database) bool {
fmt.Printf("connection database failed: %s\n", err)
return false
}
- defer db.Close()
+ defer func() {
+ _ = db.Close()
+ }()
if err = db.Ping(); err != nil {
fmt.Printf("connection ping database failed: %s\n", err)
return false
diff --git a/internal/cli/reset_password.go b/internal/cli/reset_password.go
index 2a7d1af4..dbb3422a 100644
--- a/internal/cli/reset_password.go
+++ b/internal/cli/reset_password.go
@@ -77,7 +77,9 @@ func ResetPassword(ctx context.Context, dataDirPath string,
opts *ResetPasswordO
if err != nil {
return fmt.Errorf("connect database failed: %w", err)
}
- defer db.Close()
+ defer func() {
+ _ = db.Close()
+ }()
cache, cacheCleanup, err := data.NewCache(config.Data.Cache)
if err != nil {
diff --git a/internal/controller/template_controller.go
b/internal/controller/template_controller.go
index 83cd58c3..801e129c 100644
--- a/internal/controller/template_controller.go
+++ b/internal/controller/template_controller.go
@@ -162,11 +162,9 @@ func (tc *TemplateController) Index(ctx *gin.Context) {
siteInfo := tc.SiteInfo(ctx)
siteInfo.Canonical = siteInfo.General.SiteUrl
- UrlUseTitle := false
- if siteInfo.SiteSeo.Permalink == constant.PermalinkQuestionIDAndTitle ||
- siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitleByShortID {
- UrlUseTitle = true
- }
+ UrlUseTitle := siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitle ||
+ siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitleByShortID
+
siteInfo.Title = ""
tc.html(ctx, http.StatusOK, "question.html", siteInfo, gin.H{
"data": data,
@@ -205,11 +203,9 @@ func (tc *TemplateController) QuestionList(ctx
*gin.Context) {
siteInfo.Canonical = fmt.Sprintf("%s/questions?page=%d",
siteInfo.General.SiteUrl, page)
}
- UrlUseTitle := false
- if siteInfo.SiteSeo.Permalink == constant.PermalinkQuestionIDAndTitle ||
- siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitleByShortID {
- UrlUseTitle = true
- }
+ UrlUseTitle := siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitle ||
+ siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitleByShortID
+
siteInfo.Title = fmt.Sprintf("%s - %s",
translator.Tr(handler.GetLang(ctx), constant.QuestionsTitleTrKey),
siteInfo.General.Name)
tc.html(ctx, http.StatusOK, "question.html", siteInfo, gin.H{
"data": data,
@@ -371,11 +367,8 @@ func (tc *TemplateController) QuestionInfo(ctx
*gin.Context) {
return
}
- UrlUseTitle := false
- if siteInfo.SiteSeo.Permalink == constant.PermalinkQuestionIDAndTitle ||
- siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitleByShortID {
- UrlUseTitle = true
- }
+ UrlUseTitle := siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitle ||
+ siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitleByShortID
//related question
userID := middleware.GetLoginUserIDFromContext(ctx)
@@ -434,7 +427,7 @@ func (tc *TemplateController) QuestionInfo(ctx
*gin.Context) {
for _, tag := range detail.Tags {
tags = append(tags, tag.DisplayName)
}
- siteInfo.Keywords = strings.Replace(strings.Trim(fmt.Sprint(tags),
"[]"), " ", ",", -1)
+ siteInfo.Keywords = strings.ReplaceAll(strings.Trim(fmt.Sprint(tags),
"[]"), " ", ",")
siteInfo.Title = fmt.Sprintf("%s - %s", detail.Title,
siteInfo.General.Name)
tc.html(ctx, http.StatusOK, "question-detail.html", siteInfo, gin.H{
"id": id,
@@ -504,11 +497,9 @@ func (tc *TemplateController) TagInfo(ctx *gin.Context) {
}
siteInfo.Keywords = tagInfo.DisplayName
- UrlUseTitle := false
- if siteInfo.SiteSeo.Permalink == constant.PermalinkQuestionIDAndTitle ||
- siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitleByShortID {
- UrlUseTitle = true
- }
+ UrlUseTitle := siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitle ||
+ siteInfo.SiteSeo.Permalink ==
constant.PermalinkQuestionIDAndTitleByShortID
+
siteInfo.Title = fmt.Sprintf("'%s' %s - %s", tagInfo.DisplayName,
translator.Tr(handler.GetLang(ctx), constant.QuestionsTitleTrKey),
siteInfo.General.Name)
tc.html(ctx, http.StatusOK, "tag-detail.html", siteInfo, gin.H{
"tag": tagInfo,
@@ -570,11 +561,9 @@ func (tc *TemplateController) Page404(ctx *gin.Context) {
}
func (tc *TemplateController) html(ctx *gin.Context, code int, tpl string,
siteInfo *schema.TemplateSiteInfoResp, data gin.H) {
- var (
- prefix = ""
- cssPath = ""
- scriptPath = make([]string, len(tc.scriptPath))
- )
+ prefix := ""
+ cssPath := ""
+ scriptPath := make([]string, len(tc.scriptPath))
_ = plugin.CallCDN(func(fn plugin.CDN) error {
prefix = fn.GetStaticPrefix()
@@ -612,7 +601,7 @@ func (tc *TemplateController) html(ctx *gin.Context, code
int, tpl string, siteI
data["description"] = siteInfo.Description
data["language"] = handler.GetLang(ctx)
data["timezone"] = siteInfo.Interface.TimeZone
- language := strings.Replace(siteInfo.Interface.Language, "_", "-", -1)
+ language := strings.ReplaceAll(siteInfo.Interface.Language, "_", "-")
data["lang"] = language
data["HeadCode"] = siteInfo.CustomCssHtml.CustomHead
data["HeaderCode"] = siteInfo.CustomCssHtml.CustomHeader
diff --git a/internal/controller/template_render/controller.go
b/internal/controller/template_render/controller.go
index 5f802fa7..3412010d 100644
--- a/internal/controller/template_render/controller.go
+++ b/internal/controller/template_render/controller.go
@@ -101,7 +101,6 @@ func Paginator(page, pageSize int, nums int64)
*schema.Paginator {
case page >= 3 && totalpages > 5:
start := page - 3 + 1
pages = make([]int, 5)
- prevpage = page - 3
for i := range pages {
pages[i] = start + i
}
diff --git a/internal/controller/user_controller.go
b/internal/controller/user_controller.go
index 49b9b23c..e4a3b3d3 100644
--- a/internal/controller/user_controller.go
+++ b/internal/controller/user_controller.go
@@ -151,7 +151,7 @@ func (uc *UserController) UserEmailLogin(ctx *gin.Context) {
resp, err := uc.userService.EmailLogin(ctx, req)
if err != nil {
- _, _ = uc.actionService.ActionRecordAdd(ctx,
entity.CaptchaActionPassword, ctx.ClientIP())
+ uc.actionService.ActionRecordAdd(ctx,
entity.CaptchaActionPassword, ctx.ClientIP())
errFields := append([]*validator.FormErrorField{},
&validator.FormErrorField{
ErrorField: "e_mail",
ErrorMsg: translator.Tr(handler.GetLang(ctx),
reason.EmailOrPasswordWrong),
@@ -404,10 +404,7 @@ func (uc *UserController) UserModifyPassWord(ctx
*gin.Context) {
handler.HandleResponse(ctx,
errors.BadRequest(reason.CaptchaVerificationFailed), errFields)
return
}
- _, err := uc.actionService.ActionRecordAdd(ctx,
entity.CaptchaActionEditUserinfo, req.UserID)
- if err != nil {
- log.Error(err)
- }
+ uc.actionService.ActionRecordAdd(ctx,
entity.CaptchaActionEditUserinfo, req.UserID)
}
oldPassVerification, err :=
uc.userService.UserModifyPassWordVerification(ctx, req)
diff --git a/internal/install/install_from_env.go
b/internal/install/install_from_env.go
index c05d2aab..02bc7638 100644
--- a/internal/install/install_from_env.go
+++ b/internal/install/install_from_env.go
@@ -22,6 +22,7 @@ package install
import (
"bytes"
"encoding/json"
+ "errors"
"fmt"
"net/http"
"net/http/httptest"
@@ -143,7 +144,7 @@ func requestAPI(req any, method, url string, handlerFunc
gin.HandlerFunc) error
}
handlerFunc(c)
if w.Code != http.StatusOK {
- return fmt.Errorf(gjson.Get(w.Body.String(), "msg").String())
+ return errors.New(gjson.Get(w.Body.String(), "msg").String())
}
return nil
}
diff --git a/internal/migrations/migrations.go
b/internal/migrations/migrations.go
index 9caa28ed..2fbfbb7f 100644
--- a/internal/migrations/migrations.go
+++ b/internal/migrations/migrations.go
@@ -147,7 +147,9 @@ func Migrate(debug bool, dbConf *data.Database, cacheConf
*data.CacheConf, upgra
fmt.Println("new database failed: ", err.Error())
return err
}
- defer engine.Close()
+ defer func() {
+ _ = engine.Close()
+ }()
currentDBVersion, err := GetCurrentDBVersion(engine)
if err != nil {
diff --git a/internal/migrations/v22.go b/internal/migrations/v22.go
index e7177dea..5367f5d4 100644
--- a/internal/migrations/v22.go
+++ b/internal/migrations/v22.go
@@ -61,6 +61,9 @@ func addBadges(ctx context.Context, x *xorm.Engine) (err
error) {
if exist {
badge.ID = beans.ID
_, err = x.Context(ctx).ID(beans.ID).Update(badge)
+ if err != nil {
+ return fmt.Errorf("update badge failed: %w",
err)
+ }
continue
}
badge.ID, err = uniqueIDRepo.GenUniqueIDStr(ctx,
new(entity.Badge).TableName())
diff --git a/internal/migrations/v24.go b/internal/migrations/v24.go
index a488679f..86d62425 100644
--- a/internal/migrations/v24.go
+++ b/internal/migrations/v24.go
@@ -66,8 +66,5 @@ func addQuestionLinkedCount(ctx context.Context, x
*xorm.Engine) error {
}
}
- type Question struct {
- LinkedCount int `xorm:"not null default 0 INT(11) linked_count"`
- }
return x.Context(ctx).Sync(new(entity.Question))
}
diff --git a/internal/repo/answer/answer_repo.go
b/internal/repo/answer/answer_repo.go
index c5447bef..0f1ae814 100644
--- a/internal/repo/answer/answer_repo.go
+++ b/internal/repo/answer/answer_repo.go
@@ -503,6 +503,7 @@ func (ar *answerRepo) updateSearch(ctx context.Context,
answerID string) (err er
err = st.Find(&tagListList)
if err != nil {
err =
errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
+ return
}
for _, tag := range tagListList {
tags = append(tags, tag.TagID)
diff --git a/internal/repo/plugin_config/plugin_user_config_repo.go
b/internal/repo/plugin_config/plugin_user_config_repo.go
index d14442a5..df5ae29b 100644
--- a/internal/repo/plugin_config/plugin_user_config_repo.go
+++ b/internal/repo/plugin_config/plugin_user_config_repo.go
@@ -71,7 +71,7 @@ func (ur *pluginUserConfigRepo) SaveUserPluginConfig(ctx
context.Context, userID
return nil, nil
})
if err != nil {
- err =
errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
+ return
errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
}
return nil
}
diff --git a/internal/repo/repo_test/repo_main_test.go
b/internal/repo/repo_test/repo_main_test.go
index a59ae626..919ca94e 100644
--- a/internal/repo/repo_test/repo_main_test.go
+++ b/internal/repo/repo_test/repo_main_test.go
@@ -77,7 +77,7 @@ func TestMain(t *testing.M) {
dbSetting = dbSettingMapping[string(schemas.SQLITE)]
}
if dbSetting.Driver == string(schemas.SQLITE) {
- os.RemoveAll(dbSetting.Connection)
+ _ = os.RemoveAll(dbSetting.Connection)
}
defer func() {
diff --git a/internal/repo/tag/tag_rel_repo.go
b/internal/repo/tag/tag_rel_repo.go
index 3634c97a..a52b1bf5 100644
--- a/internal/repo/tag/tag_rel_repo.go
+++ b/internal/repo/tag/tag_rel_repo.go
@@ -198,6 +198,7 @@ func (tr *tagRelRepo) GetTagRelDefaultStatusByObjectID(ctx
context.Context, obje
exist, err := tr.data.DB.Context(ctx).ID(objectID).Cols("show",
"status").Get(&question)
if err != nil {
err =
errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
+ return
}
if exist && (question.Show == entity.QuestionHide || question.Status ==
entity.QuestionStatusDeleted) {
return entity.TagRelStatusHide, nil
diff --git a/internal/service/action/captcha_service.go
b/internal/service/action/captcha_service.go
index 04f8b16a..aefb7051 100644
--- a/internal/service/action/captcha_service.go
+++ b/internal/service/action/captcha_service.go
@@ -106,11 +106,11 @@ func (cs *CaptchaService) ActionRecordVerifyCaptcha(
return pass
}
-func (cs *CaptchaService) ActionRecordAdd(ctx context.Context, actionType
string, unit string) (int, error) {
+func (cs *CaptchaService) ActionRecordAdd(ctx context.Context, actionType
string, unit string) {
info, err := cs.captchaRepo.GetActionType(ctx, unit, actionType)
if err != nil {
log.Error(err)
- return 0, err
+ return
}
amount := 1
if info != nil {
@@ -118,9 +118,8 @@ func (cs *CaptchaService) ActionRecordAdd(ctx
context.Context, actionType string
}
err = cs.captchaRepo.SetActionType(ctx, unit, actionType, "", amount)
if err != nil {
- return 0, err
+ log.Error(err)
}
- return amount, nil
}
func (cs *CaptchaService) ActionRecordDel(ctx context.Context, actionType
string, unit string) {
diff --git a/internal/service/action/captcha_strategy.go
b/internal/service/action/captcha_strategy.go
index 3befda82..b423b583 100644
--- a/internal/service/action/captcha_strategy.go
+++ b/internal/service/action/captcha_strategy.go
@@ -89,7 +89,9 @@ func (cs *CaptchaService) CaptchaActionPassword(ctx
context.Context, unit string
return false
}
if now-actionInfo.LastTime != 0 && now-actionInfo.LastTime > setTime {
- cs.captchaRepo.SetActionType(ctx, unit,
entity.CaptchaActionPassword, "", 0)
+ if err := cs.captchaRepo.SetActionType(ctx, unit,
entity.CaptchaActionPassword, "", 0); err != nil {
+ log.Error(err)
+ }
}
return true
}
@@ -105,7 +107,9 @@ func (cs *CaptchaService) CaptchaActionEditUserinfo(ctx
context.Context, unit st
return false
}
if now-actionInfo.LastTime != 0 && now-actionInfo.LastTime > setTime {
- cs.captchaRepo.SetActionType(ctx, unit,
entity.CaptchaActionEditUserinfo, "", 0)
+ if err := cs.captchaRepo.SetActionType(ctx, unit,
entity.CaptchaActionEditUserinfo, "", 0); err != nil {
+ log.Error(err)
+ }
}
return true
}
@@ -154,10 +158,7 @@ func (cs *CaptchaService) CaptchaActionEdit(ctx
context.Context, unit string, ac
return true
}
setNum := 10
- if actionInfo.Num >= setNum {
- return false
- }
- return true
+ return actionInfo.Num < setNum
}
func (cs *CaptchaService) CaptchaActionInvitationAnswer(ctx context.Context,
unit string, actionInfo *entity.ActionRecordInfo) bool {
@@ -165,10 +166,7 @@ func (cs *CaptchaService)
CaptchaActionInvitationAnswer(ctx context.Context, uni
return true
}
setNum := 30
- if actionInfo.Num >= setNum {
- return false
- }
- return true
+ return actionInfo.Num < setNum
}
func (cs *CaptchaService) CaptchaActionSearch(ctx context.Context, unit
string, actionInfo *entity.ActionRecordInfo) bool {
@@ -182,7 +180,9 @@ func (cs *CaptchaService) CaptchaActionSearch(ctx
context.Context, unit string,
return false
}
if now-actionInfo.LastTime > setTime {
- cs.captchaRepo.SetActionType(ctx, unit,
entity.CaptchaActionSearch, "", 0)
+ if err := cs.captchaRepo.SetActionType(ctx, unit,
entity.CaptchaActionSearch, "", 0); err != nil {
+ log.Error(err)
+ }
}
return true
}
@@ -218,8 +218,5 @@ func (cs *CaptchaService) CaptchaActionVote(ctx
context.Context, unit string, ac
return true
}
setNum := 40
- if actionInfo.Num >= setNum {
- return false
- }
- return true
+ return actionInfo.Num < setNum
}
diff --git a/internal/service/badge/badge_event_handler.go
b/internal/service/badge/badge_event_handler.go
index cc161f6a..24cabf29 100644
--- a/internal/service/badge/badge_event_handler.go
+++ b/internal/service/badge/badge_event_handler.go
@@ -32,7 +32,6 @@ import (
type BadgeEventService struct {
data *data.Data
eventQueueService event_queue.EventQueueService
- badgeAwardRepo BadgeAwardRepo
badgeRepo BadgeRepo
eventRuleRepo EventRuleRepo
badgeAwardService *BadgeAwardService
diff --git a/internal/service/badge/badge_service.go
b/internal/service/badge/badge_service.go
index 03b8a877..ebb90450 100644
--- a/internal/service/badge/badge_service.go
+++ b/internal/service/badge/badge_service.go
@@ -206,10 +206,8 @@ func (b *BadgeService) ListPaged(ctx context.Context, req
*schema.GetBadgeListPa
resp = make([]*schema.GetBadgeListPagedResp, len(badges))
general, siteErr := b.siteInfoCommonService.GetSiteGeneral(ctx)
- var baseURL = ""
- if siteErr != nil {
- baseURL = ""
- } else {
+ baseURL := ""
+ if siteErr == nil {
baseURL = general.SiteUrl
}
@@ -246,31 +244,23 @@ func (b *BadgeService) searchByName(ctx context.Context,
name string) (result []
// GetBadgeInfo get badge info
func (b *BadgeService) GetBadgeInfo(ctx *gin.Context, id string, userID
string) (info *schema.GetBadgeInfoResp, err error) {
- var (
- badge *entity.Badge
- earnedTotal int64 = 0
- exists = false
- )
-
- badge, exists, err = b.badgeRepo.GetByID(ctx, id)
+ badge, exists, err := b.badgeRepo.GetByID(ctx, id)
if err != nil {
- return
+ return nil, err
}
if !exists || badge.Status == entity.BadgeStatusInactive {
- err = errors.BadRequest(reason.BadgeObjectNotFound)
- return
+ return nil, errors.BadRequest(reason.BadgeObjectNotFound)
}
+ var earnedTotal int64
if len(userID) > 0 {
earnedTotal = b.badgeAwardRepo.CountByUserIdAndBadgeId(ctx,
userID, badge.ID)
}
+ baseURL := ""
general, siteErr := b.siteInfoCommonService.GetSiteGeneral(ctx)
- var baseURL = ""
- if siteErr != nil {
- baseURL = ""
- } else {
+ if siteErr == nil {
baseURL = general.SiteUrl
}
diff --git a/internal/service/content/question_service.go
b/internal/service/content/question_service.go
index 1d1d1af3..da15fae5 100644
--- a/internal/service/content/question_service.go
+++ b/internal/service/content/question_service.go
@@ -277,7 +277,7 @@ func (qs *QuestionService) CheckAddQuestion(ctx
context.Context, req *schema.Que
if tagerr != nil {
return errorlist, tagerr
}
- if !req.QuestionPermission.CanUseReservedTag {
+ if !req.CanUseReservedTag {
taglist, err := qs.AddQuestionCheckTags(ctx, Tags)
errMsg := fmt.Sprintf(`"%s" can only be used by moderators.`,
strings.Join(taglist, ","))
@@ -350,7 +350,7 @@ func (qs *QuestionService) AddQuestion(ctx context.Context,
req *schema.Question
if tagerr != nil {
return questionInfo, tagerr
}
- if !req.QuestionPermission.CanUseReservedTag {
+ if !req.CanUseReservedTag {
taglist, err := qs.AddQuestionCheckTags(ctx, tags)
errMsg := fmt.Sprintf(`"%s" can only be used by moderators.`,
strings.Join(taglist, ","))
@@ -1397,13 +1397,17 @@ func (qs *QuestionService) GetQuestionsByTitle(ctx
context.Context, title string
for _, question := range res {
questionIDs = append(questionIDs, question.ID)
}
- questions, err = qs.questionRepo.FindByID(ctx, questionIDs)
+ var questionErr error
+ questions, questionErr = qs.questionRepo.FindByID(ctx,
questionIDs)
+ if questionErr != nil {
+ return resp, questionErr
+ }
} else {
- questions, err = qs.questionRepo.GetQuestionsByTitle(ctx,
title, 10)
- }
-
- if err != nil {
- return resp, err
+ var questionErr error
+ questions, questionErr =
qs.questionRepo.GetQuestionsByTitle(ctx, title, 10)
+ if questionErr != nil {
+ return resp, questionErr
+ }
}
for _, question := range questions {
item := &schema.QuestionBaseInfo{}
@@ -1723,7 +1727,7 @@ func (qs *QuestionService) SitemapCron(ctx
context.Context) {
log.Error(err)
return
}
- ctx = context.WithValue(ctx, constant.ShortIDFlag,
siteSeo.IsShortLink())
+ ctx = context.WithValue(ctx, constant.ShortIDContextKey,
siteSeo.IsShortLink())
qs.questioncommon.SitemapCron(ctx)
}
diff --git a/internal/service/content/revision_service.go
b/internal/service/content/revision_service.go
index 1aed4cf8..a5cefeb4 100644
--- a/internal/service/content/revision_service.go
+++ b/internal/service/content/revision_service.go
@@ -41,7 +41,6 @@ import (
"github.com/apache/answer/internal/service/review"
"github.com/apache/answer/internal/service/revision"
"github.com/apache/answer/internal/service/tag_common"
- tagcommon "github.com/apache/answer/internal/service/tag_common"
usercommon "github.com/apache/answer/internal/service/user_common"
"github.com/apache/answer/pkg/converter"
"github.com/apache/answer/pkg/htmltext"
@@ -62,7 +61,7 @@ type RevisionService struct {
questionRepo questioncommon.QuestionRepo
answerRepo answercommon.AnswerRepo
tagRepo tag_common.TagRepo
- tagCommon *tagcommon.TagCommonService
+ tagCommon *tag_common.TagCommonService
notificationQueueService notice_queue.NotificationQueueService
activityQueueService activity_queue.ActivityQueueService
reportRepo report_common.ReportRepo
@@ -79,7 +78,7 @@ func NewRevisionService(
questionRepo questioncommon.QuestionRepo,
answerRepo answercommon.AnswerRepo,
tagRepo tag_common.TagRepo,
- tagCommon *tagcommon.TagCommonService,
+ tagCommon *tag_common.TagCommonService,
notificationQueueService notice_queue.NotificationQueueService,
activityQueueService activity_queue.ActivityQueueService,
reportRepo report_common.ReportRepo,
diff --git a/internal/service/content/search_service.go
b/internal/service/content/search_service.go
index 98add093..ccafcd82 100644
--- a/internal/service/content/search_service.go
+++ b/internal/service/content/search_service.go
@@ -93,6 +93,9 @@ func (ss *SearchService) searchByPlugin(ctx context.Context,
finder plugin.Searc
} else if cond.SearchAnswer() {
res, resp.Total, err = finder.SearchAnswers(ctx,
cond.Convert2PluginSearchCond(dto.Page, dto.Size, dto.Order))
}
+ if err != nil {
+ return resp, err
+ }
resp.SearchResults, err = ss.searchRepo.ParseSearchPluginResult(ctx,
res, cond.Words)
return resp, err
diff --git a/internal/service/content/vote_service.go
b/internal/service/content/vote_service.go
index 92f0c996..aa615049 100644
--- a/internal/service/content/vote_service.go
+++ b/internal/service/content/vote_service.go
@@ -26,8 +26,6 @@ import (
"github.com/apache/answer/internal/service/event_queue"
- "github.com/apache/answer/internal/service/activity_common"
-
"github.com/apache/answer/internal/base/constant"
"github.com/apache/answer/internal/base/handler"
"github.com/apache/answer/internal/base/pager"
@@ -64,7 +62,6 @@ type VoteService struct {
answerRepo answercommon.AnswerRepo
commentCommonRepo comment_common.CommentCommonRepo
objectService *object_info.ObjService
- activityRepo activity_common.ActivityRepo
eventQueueService event_queue.EventQueueService
}
diff --git a/internal/service/dashboard/dashboard_service.go
b/internal/service/dashboard/dashboard_service.go
index d9198e6d..91f0e338 100644
--- a/internal/service/dashboard/dashboard_service.go
+++ b/internal/service/dashboard/dashboard_service.go
@@ -274,7 +274,9 @@ func (ds *dashboardService) remoteVersion(ctx
context.Context) string {
log.Errorf("request remote version failed: %s", err)
return ""
}
- defer resp.Body.Close()
+ defer func() {
+ _ = resp.Body.Close()
+ }()
respByte, err := io.ReadAll(resp.Body)
if err != nil {
@@ -358,7 +360,7 @@ func (ds *dashboardService) GetDatabaseSize() (dbSize
string) {
if err != nil {
log.Warnf("get db size failed: %s", err)
} else {
- if res != nil && len(res) > 0 && res[0]["db_size"] !=
nil {
+ if len(res) > 0 && res[0]["db_size"] != nil {
dbSizeStr, _ := res[0]["db_size"].(string)
dbSize =
dir.FormatFileSize(converter.StringToInt64(dbSizeStr))
}
@@ -370,7 +372,7 @@ func (ds *dashboardService) GetDatabaseSize() (dbSize
string) {
if err != nil {
log.Warnf("get db size failed: %s", err)
} else {
- if res != nil && len(res) > 0 && res[0]["db_size"] !=
nil {
+ if len(res) > 0 && res[0]["db_size"] != nil {
dbSizeStr, _ := res[0]["db_size"].(int32)
dbSize = dir.FormatFileSize(int64(dbSizeStr))
}
diff --git a/internal/service/file_record/file_record_service.go
b/internal/service/file_record/file_record_service.go
index 29097ba8..aa526f01 100644
--- a/internal/service/file_record/file_record_service.go
+++ b/internal/service/file_record/file_record_service.go
@@ -174,7 +174,6 @@ func (fs *FileRecordService) PurgeDeletedFiles(ctx
context.Context) {
if err != nil {
log.Errorf("create deleted directory error: %v", err)
}
- return
}
func (fs *FileRecordService) DeleteAndMoveFileRecord(ctx context.Context,
fileRecord *entity.FileRecord) error {
diff --git a/internal/service/importer/importer_service.go
b/internal/service/importer/importer_service.go
index 45aabf39..c7673ffb 100644
--- a/internal/service/importer/importer_service.go
+++ b/internal/service/importer/importer_service.go
@@ -62,8 +62,7 @@ type ImporterFunc struct {
}
func (ipfunc *ImporterFunc) AddQuestion(ctx context.Context, questionInfo
plugin.QuestionImporterInfo) (err error) {
- ipfunc.importerService.ImportQuestion(ctx, questionInfo)
- return nil
+ return ipfunc.importerService.ImportQuestion(ctx, questionInfo)
}
func (ip *ImporterService) NewImporterFunc() plugin.ImporterFunc {
@@ -84,7 +83,7 @@ func (ip *ImporterService) ImportQuestion(ctx
context.Context, questionInfo plug
return err
}
if !exist {
- return fmt.Errorf("User not found")
+ return fmt.Errorf("user not found")
}
// To limit rate, remove the following code from comment: Part 2/2
diff --git a/internal/service/meta/meta_service.go
b/internal/service/meta/meta_service.go
index 4b310419..c1ca7c61 100644
--- a/internal/service/meta/meta_service.go
+++ b/internal/service/meta/meta_service.go
@@ -97,7 +97,8 @@ func (ms *MetaService) AddOrUpdateReaction(ctx
context.Context, req *schema.Upda
return nil, err
}
var event *schema.EventMsg
- if objectType == constant.AnswerObjectType {
+ switch objectType {
+ case constant.AnswerObjectType:
answerInfo, exist, err := ms.answerRepo.GetAnswer(ctx,
req.ObjectID)
if err != nil {
return nil, err
@@ -107,7 +108,7 @@ func (ms *MetaService) AddOrUpdateReaction(ctx
context.Context, req *schema.Upda
}
event = schema.NewEvent(constant.EventAnswerReact,
req.UserID).TID(answerInfo.ID).
AID(answerInfo.ID, answerInfo.UserID)
- } else if objectType == constant.QuestionObjectType {
+ case constant.QuestionObjectType:
questionInfo, exist, err := ms.questionRepo.GetQuestion(ctx,
req.ObjectID)
if err != nil {
return nil, err
@@ -117,7 +118,7 @@ func (ms *MetaService) AddOrUpdateReaction(ctx
context.Context, req *schema.Upda
}
event = schema.NewEvent(constant.EventQuestionReact,
req.UserID).TID(questionInfo.ID).
QID(questionInfo.ID, questionInfo.UserID)
- } else {
+ default:
return nil, myErrors.BadRequest(reason.ObjectNotFound)
}
@@ -159,9 +160,10 @@ func (ms *MetaService) AddOrUpdateReaction(ctx
context.Context, req *schema.Upda
// updateReaction update reaction
func (ms *MetaService) updateReaction(req *schema.UpdateReactionReq, reactions
*schema.ReactionsSummaryMeta) {
- if req.Reaction == "activate" {
+ switch req.Reaction {
+ case "activate":
reactions.AddReactionSummary(req.Emoji, req.UserID)
- } else if req.Reaction == "deactivate" {
+ case "deactivate":
reactions.RemoveReactionSummary(req.Emoji, req.UserID)
}
}
diff --git a/internal/service/notification/invite_answer_notification.go
b/internal/service/notification/invite_answer_notification.go
index 4e7c051c..f68feb06 100644
--- a/internal/service/notification/invite_answer_notification.go
+++ b/internal/service/notification/invite_answer_notification.go
@@ -70,7 +70,7 @@ func (ns *ExternalNotificationService)
sendInviteAnswerNotificationEmail(ctx con
// If receiver has set language, use it to send email.
if len(lang) > 0 {
- ctx = context.WithValue(ctx, constant.AcceptLanguageFlag,
i18n.Language(lang))
+ ctx = context.WithValue(ctx, constant.AcceptLanguageContextKey,
i18n.Language(lang))
}
title, body, err := ns.emailService.NewInviteAnswerTemplate(ctx,
rawData)
if err != nil {
diff --git a/internal/service/notification/new_answer_notification.go
b/internal/service/notification/new_answer_notification.go
index 91b7e2ae..c54fd961 100644
--- a/internal/service/notification/new_answer_notification.go
+++ b/internal/service/notification/new_answer_notification.go
@@ -70,7 +70,7 @@ func (ns *ExternalNotificationService)
sendNewAnswerNotificationEmail(ctx contex
// If receiver has set language, use it to send email.
if len(lang) > 0 {
- ctx = context.WithValue(ctx, constant.AcceptLanguageFlag,
i18n.Language(lang))
+ ctx = context.WithValue(ctx, constant.AcceptLanguageContextKey,
i18n.Language(lang))
}
title, body, err := ns.emailService.NewAnswerTemplate(ctx, rawData)
if err != nil {
diff --git a/internal/service/notification/new_comment_notification.go
b/internal/service/notification/new_comment_notification.go
index 3ec99d13..e622ed4f 100644
--- a/internal/service/notification/new_comment_notification.go
+++ b/internal/service/notification/new_comment_notification.go
@@ -69,7 +69,7 @@ func (ns *ExternalNotificationService)
sendNewCommentNotificationEmail(ctx conte
}
// If receiver has set language, use it to send email.
if len(lang) > 0 {
- ctx = context.WithValue(ctx, constant.AcceptLanguageFlag,
i18n.Language(lang))
+ ctx = context.WithValue(ctx, constant.AcceptLanguageContextKey,
i18n.Language(lang))
}
title, body, err := ns.emailService.NewCommentTemplate(ctx, rawData)
if err != nil {
diff --git a/internal/service/notification/new_question_notification.go
b/internal/service/notification/new_question_notification.go
index 8a12d0b8..debfb8c2 100644
--- a/internal/service/notification/new_question_notification.go
+++ b/internal/service/notification/new_question_notification.go
@@ -176,7 +176,7 @@ func (ns *ExternalNotificationService)
sendNewQuestionNotificationEmail(ctx cont
}
// If receiver has set language, use it to send email.
if len(userInfo.Language) > 0 {
- ctx = context.WithValue(ctx, constant.AcceptLanguageFlag,
i18n.Language(userInfo.Language))
+ ctx = context.WithValue(ctx, constant.AcceptLanguageContextKey,
i18n.Language(userInfo.Language))
}
title, body, err := ns.emailService.NewQuestionTemplate(ctx, rawData)
if err != nil {
diff --git a/internal/service/notification/notification_service.go
b/internal/service/notification/notification_service.go
index 09d87135..0369d455 100644
--- a/internal/service/notification/notification_service.go
+++ b/internal/service/notification/notification_service.go
@@ -82,8 +82,8 @@ func (ns *NotificationService) GetRedDot(ctx context.Context,
req *schema.GetRed
achievementKey := fmt.Sprintf(constant.RedDotCacheKey,
constant.NotificationTypeAchievement, req.UserID)
redBot := &schema.RedDot{}
- redBot.Inbox, _, err = ns.data.Cache.GetInt64(ctx, inboxKey)
- redBot.Achievement, _, err = ns.data.Cache.GetInt64(ctx, achievementKey)
+ redBot.Inbox, _, _ = ns.data.Cache.GetInt64(ctx, inboxKey)
+ redBot.Achievement, _, _ = ns.data.Cache.GetInt64(ctx, achievementKey)
// get review amount
if req.CanReviewAnswer || req.CanReviewQuestion || req.CanReviewTag {
diff --git a/internal/service/notification_common/notification.go
b/internal/service/notification_common/notification.go
index 2bceb629..55d63842 100644
--- a/internal/service/notification_common/notification.go
+++ b/internal/service/notification_common/notification.go
@@ -206,6 +206,9 @@ func (ns *NotificationCommon) AddNotification(ctx
context.Context, msg *schema.N
}
if req.ObjectInfo.ObjectType == constant.BadgeAwardObjectType {
err = ns.AddBadgeAwardAlertCache(ctx, info.UserID, info.ID,
req.ObjectInfo.ObjectMap["badge_id"])
+ if err != nil {
+ log.Error("AddBadgeAwardAlertCache Error", err.Error())
+ }
}
go ns.SendNotificationToAllFollower(ctx, msg, questionID)
diff --git a/internal/service/report_handle/report_handle.go
b/internal/service/report_handle/report_handle.go
index 27cffb11..a0468166 100644
--- a/internal/service/report_handle/report_handle.go
+++ b/internal/service/report_handle/report_handle.go
@@ -112,6 +112,9 @@ func (rh *ReportHandle) updateReportedAnswerReport(ctx
context.Context, report *
NoNeedReview: true,
})
}
+ if err != nil {
+ return err
+ }
return nil
}
@@ -128,5 +131,8 @@ func (rh *ReportHandle) updateReportedCommentReport(ctx
context.Context, report
UserID: req.UserID,
})
}
+ if err != nil {
+ return err
+ }
return nil
}
diff --git a/internal/service/review/review_service.go
b/internal/service/review/review_service.go
index 40089fb2..a23b9ee4 100644
--- a/internal/service/review/review_service.go
+++ b/internal/service/review/review_service.go
@@ -469,7 +469,6 @@ func (cs *ReviewService)
notificationCommentOnTheQuestion(ctx context.Context, c
cs.notificationAnswerComment(ctx, objInfo.QuestionID,
objInfo.Title, objInfo.AnswerID,
objInfo.ObjectCreatorUserID, comment.ID,
comment.UserID, htmltext.FetchExcerpt(comment.ParsedText, "...", 240))
}
- return
}
func (cs *ReviewService) notificationCommentReply(ctx context.Context,
replyUserID, commentID, commentUserID,
diff --git a/internal/service/siteinfo/siteinfo_service.go
b/internal/service/siteinfo/siteinfo_service.go
index cf43d68d..f355d09f 100644
--- a/internal/service/siteinfo/siteinfo_service.go
+++ b/internal/service/siteinfo/siteinfo_service.go
@@ -345,7 +345,7 @@ func (s *SiteInfoService) GetPrivilegesConfig(ctx
context.Context) (resp *schema
return nil, err
}
privilegeOptions := schema.DefaultPrivilegeOptions
- if privilege.CustomPrivileges != nil && len(privilege.CustomPrivileges)
> 0 {
+ if len(privilege.CustomPrivileges) > 0 {
privilegeOptions = append(privilegeOptions,
&schema.PrivilegeOption{
Level: schema.PrivilegeLevelCustom,
LevelDesc: reason.PrivilegeLevelCustomDesc,
@@ -358,7 +358,7 @@ func (s *SiteInfoService) GetPrivilegesConfig(ctx
context.Context) (resp *schema
Options: s.translatePrivilegeOptions(ctx,
privilegeOptions),
SelectedLevel: schema.PrivilegeLevel3,
}
- if privilege != nil && privilege.Level > 0 {
+ if privilege.Level > 0 {
resp.SelectedLevel = privilege.Level
}
return resp, nil
diff --git a/internal/service/uploader/upload.go
b/internal/service/uploader/upload.go
index 2ae5369d..30029193 100644
--- a/internal/service/uploader/upload.go
+++ b/internal/service/uploader/upload.go
@@ -119,7 +119,9 @@ func (us *uploaderService) UploadAvatarFile(ctx
*gin.Context, userID string) (ur
if err != nil {
return "",
errors.BadRequest(reason.RequestFormatError).WithError(err)
}
- file.Close()
+ defer func() {
+ _ = file.Close()
+ }()
fileExt := strings.ToLower(path.Ext(fileHeader.Filename))
if _, ok :=
plugin.DefaultFileTypeCheckMapping[plugin.UserAvatar][fileExt]; !ok {
return "",
errors.BadRequest(reason.RequestFormatError).WithError(err)
@@ -148,12 +150,12 @@ func (us *uploaderService) AvatarThumbFile(ctx
*gin.Context, fileName string, si
thumbFileName := fmt.Sprintf("%d_%d@%s", size, size, fileName)
thumbFilePath := fmt.Sprintf("%s/%s/%s", us.serviceConfig.UploadPath,
constant.AvatarThumbSubPath, thumbFileName)
- avatarFile, err := os.ReadFile(thumbFilePath)
+ _, err = os.ReadFile(thumbFilePath)
if err == nil {
return thumbFilePath, nil
}
filePath := fmt.Sprintf("%s/%s/%s", us.serviceConfig.UploadPath,
constant.AvatarSubPath, fileName)
- avatarFile, err = os.ReadFile(filePath)
+ avatarFile, err := os.ReadFile(filePath)
if err != nil {
return "", errors.NotFound(reason.UnknownError).WithError(err)
}
@@ -179,7 +181,9 @@ func (us *uploaderService) AvatarThumbFile(ctx
*gin.Context, fileName string, si
if err != nil {
return "",
errors.InternalServer(reason.UnknownError).WithError(err).WithStack()
}
- defer out.Close()
+ defer func() {
+ _ = out.Close()
+ }()
thumbReader := bytes.NewReader(buf.Bytes())
if _, err = io.Copy(out, thumbReader); err != nil {
@@ -208,7 +212,9 @@ func (us *uploaderService) UploadPostFile(ctx *gin.Context,
userID string) (
if err != nil {
return "",
errors.BadRequest(reason.RequestFormatError).WithError(err)
}
- defer file.Close()
+ defer func() {
+ _ = file.Close()
+ }()
if checker.IsUnAuthorizedExtension(fileHeader.Filename,
siteWrite.AuthorizedImageExtensions) {
return "",
errors.BadRequest(reason.RequestFormatError).WithError(err)
}
@@ -244,7 +250,9 @@ func (us *uploaderService) UploadPostAttachment(ctx
*gin.Context, userID string)
if err != nil {
return "",
errors.BadRequest(reason.RequestFormatError).WithError(err)
}
- defer file.Close()
+ defer func() {
+ _ = file.Close()
+ }()
if checker.IsUnAuthorizedExtension(fileHeader.Filename,
resp.AuthorizedAttachmentExtensions) {
return "",
errors.BadRequest(reason.RequestFormatError).WithError(err)
}
@@ -280,7 +288,9 @@ func (us *uploaderService) UploadBrandingFile(ctx
*gin.Context, userID string) (
if err != nil {
return "",
errors.BadRequest(reason.RequestFormatError).WithError(err)
}
- file.Close()
+ defer func() {
+ _ = file.Close()
+ }()
fileExt := strings.ToLower(path.Ext(fileHeader.Filename))
if _, ok :=
plugin.DefaultFileTypeCheckMapping[plugin.AdminBranding][fileExt]; !ok {
return "",
errors.BadRequest(reason.RequestFormatError).WithError(err)
@@ -316,7 +326,9 @@ func (us *uploaderService) uploadImageFile(ctx
*gin.Context, file *multipart.Fil
if err != nil {
return "",
errors.InternalServer(reason.UnknownError).WithError(err).WithStack()
}
- defer src.Close()
+ defer func() {
+ _ = src.Close()
+ }()
if !checker.DecodeAndCheckImageFile(filePath,
siteWrite.GetMaxImageMegapixel()) {
return "",
errors.BadRequest(reason.UploadFileUnsupportedFileFormat)
diff --git a/internal/service/user_admin/user_backyard.go
b/internal/service/user_admin/user_backyard.go
index 0f6ec81e..6fce161c 100644
--- a/internal/service/user_admin/user_backyard.go
+++ b/internal/service/user_admin/user_backyard.go
@@ -400,7 +400,7 @@ func (us *UserAdminService) EditUserProfile(ctx
context.Context, req *schema.Edi
if req.UserID == req.LoginUserID {
return nil,
errors.BadRequest(reason.AdminCannotEditTheirProfile)
}
- userInfo, exist, err := us.userRepo.GetUserInfo(ctx, req.UserID)
+ _, exist, err := us.userRepo.GetUserInfo(ctx, req.UserID)
if err != nil {
return nil, err
}
@@ -415,7 +415,7 @@ func (us *UserAdminService) EditUserProfile(ctx
context.Context, req *schema.Edi
}), errors.BadRequest(reason.UsernameInvalid)
}
- userInfo, exist, err = us.userCommonService.GetByUsername(ctx,
req.Username)
+ userInfo, exist, err := us.userCommonService.GetByUsername(ctx,
req.Username)
if err != nil {
return nil, err
}
@@ -620,11 +620,12 @@ func (us *UserAdminService) SendUserActivation(ctx
context.Context, req *schema.
}
func (us *UserAdminService) DeletePermanently(ctx context.Context, req
*schema.DeletePermanentlyReq) (err error) {
- if req.Type == constant.DeletePermanentlyUsers {
+ switch req.Type {
+ case constant.DeletePermanentlyUsers:
return us.userRepo.DeletePermanentlyUsers(ctx)
- } else if req.Type == constant.DeletePermanentlyQuestions {
+ case constant.DeletePermanentlyQuestions:
return us.questionCommonRepo.DeletePermanentlyQuestions(ctx)
- } else if req.Type == constant.DeletePermanentlyAnswers {
+ case constant.DeletePermanentlyAnswers:
return us.answerCommonRepo.DeletePermanentlyAnswers(ctx)
}
diff --git
a/internal/service/user_notification_config/user_notification_config_service.go
b/internal/service/user_notification_config/user_notification_config_service.go
index 01da3ee2..c40df55c 100644
---
a/internal/service/user_notification_config/user_notification_config_service.go
+++
b/internal/service/user_notification_config/user_notification_config_service.go
@@ -68,21 +68,21 @@ func (us *UserNotificationConfigService)
GetUserNotificationConfig(ctx context.C
func (us *UserNotificationConfigService) UpdateUserNotificationConfig(
ctx context.Context, req *schema.UpdateUserNotificationConfigReq) (err
error) {
- req.NotificationConfig.Format()
+ req.Format()
err = us.userNotificationConfigRepo.Save(ctx,
- us.convertToEntity(ctx, req.UserID, constant.InboxSource,
req.NotificationConfig.Inbox))
+ us.convertToEntity(ctx, req.UserID, constant.InboxSource,
req.Inbox))
if err != nil {
return err
}
err = us.userNotificationConfigRepo.Save(ctx,
- us.convertToEntity(ctx, req.UserID,
constant.AllNewQuestionSource, req.NotificationConfig.AllNewQuestion))
+ us.convertToEntity(ctx, req.UserID,
constant.AllNewQuestionSource, req.AllNewQuestion))
if err != nil {
return err
}
err = us.userNotificationConfigRepo.Save(ctx,
us.convertToEntity(ctx, req.UserID,
constant.AllNewQuestionForFollowingTagsSource,
- req.NotificationConfig.AllNewQuestionForFollowingTags))
+ req.AllNewQuestionForFollowingTags))
if err != nil {
return err
}
diff --git a/pkg/checker/file_type.go b/pkg/checker/file_type.go
index 51f687d6..ac1fbcaf 100644
--- a/pkg/checker/file_type.go
+++ b/pkg/checker/file_type.go
@@ -75,7 +75,9 @@ func decodeAndCheckImageFile(localFilePath string,
maxImageMegapixel int, checke
log.Errorf("open file error: %v", err)
return false
}
- defer file.Close()
+ defer func() {
+ _ = file.Close()
+ }()
if err = checker(file, maxImageMegapixel); err != nil {
log.Errorf("check image format error: %v", err)
diff --git a/pkg/checker/password.go b/pkg/checker/password.go
index ac274f35..ac99fd43 100644
--- a/pkg/checker/password.go
+++ b/pkg/checker/password.go
@@ -20,6 +20,7 @@
package checker
import (
+ "errors"
"fmt"
"regexp"
"strings"
@@ -40,7 +41,7 @@ const (
// CheckPassword checks the password strength
func CheckPassword(password string) error {
if strings.Contains(password, " ") {
- return fmt.Errorf(PasswordCannotContainSpaces)
+ return errors.New(PasswordCannotContainSpaces)
}
// TODO Currently there is no requirement for password strength
diff --git a/pkg/converter/markdown.go b/pkg/converter/markdown.go
index 1789a32c..d16915a8 100644
--- a/pkg/converter/markdown.go
+++ b/pkg/converter/markdown.go
@@ -32,7 +32,6 @@ import (
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/parser"
"github.com/yuin/goldmark/renderer"
- "github.com/yuin/goldmark/renderer/html"
goldmarkHTML "github.com/yuin/goldmark/renderer/html"
"github.com/yuin/goldmark/util"
)
@@ -141,7 +140,7 @@ func (r *DangerousHTMLRenderer) renderLink(w
util.BufWriter, source []byte, node
if entering && r.renderLinkIsUrl(string(n.Destination)) {
_, _ = w.WriteString("<a href=\"")
// _, _ = w.WriteString("<a test=\"1\" rel=\"nofollow\"
href=\"")
- if r.Unsafe || !html.IsDangerousURL(n.Destination) {
+ if r.Unsafe || !goldmarkHTML.IsDangerousURL(n.Destination) {
_, _ =
w.Write(util.EscapeHTML(util.URLEscape(n.Destination, true)))
}
_ = w.WriteByte('"')
@@ -151,7 +150,7 @@ func (r *DangerousHTMLRenderer) renderLink(w
util.BufWriter, source []byte, node
_ = w.WriteByte('"')
}
if n.Attributes() != nil {
- html.RenderAttributes(w, n, html.LinkAttributeFilter)
+ goldmarkHTML.RenderAttributes(w, n,
goldmarkHTML.LinkAttributeFilter)
}
_ = w.WriteByte('>')
} else {
@@ -175,7 +174,7 @@ func (r *DangerousHTMLRenderer) renderAutoLink(w
util.BufWriter, source []byte,
_, _ = w.Write(util.EscapeHTML(util.URLEscape(url, false)))
if n.Attributes() != nil {
_ = w.WriteByte('"')
- html.RenderAttributes(w, n, html.LinkAttributeFilter)
+ goldmarkHTML.RenderAttributes(w, n,
goldmarkHTML.LinkAttributeFilter)
_ = w.WriteByte('>')
} else {
_, _ = w.WriteString(`">`)
diff --git a/pkg/htmltext/htmltext.go b/pkg/htmltext/htmltext.go
index 707c20a8..56db4d2b 100644
--- a/pkg/htmltext/htmltext.go
+++ b/pkg/htmltext/htmltext.go
@@ -194,7 +194,9 @@ func GetPicByUrl(Url string) string {
if err != nil {
return ""
}
- defer res.Body.Close()
+ defer func() {
+ _ = res.Body.Close()
+ }()
pix, err := io.ReadAll(res.Body)
if err != nil {
return ""
diff --git a/plugin/kv_storage.go b/plugin/kv_storage.go
index d1ed3eaa..204e5ee6 100644
--- a/plugin/kv_storage.go
+++ b/plugin/kv_storage.go
@@ -88,7 +88,7 @@ func (kv *KVOperator) getSession(ctx context.Context)
(*xorm.Session, func()) {
session = kv.data.DB.NewSession().Context(ctx)
cleanup = func() {
if session != nil {
- session.Close()
+ _ = session.Close()
}
}
}
@@ -281,7 +281,7 @@ func (kv *KVOperator) Tx(ctx context.Context, fn func(ctx
context.Context, kv *K
if kv.session == nil {
session := kv.data.DB.NewSession().Context(ctx)
if err := session.Begin(); err != nil {
- session.Close()
+ _ = session.Close()
return fmt.Errorf("%w: begin transaction failed: %v",
ErrKVTransactionFailed, err)
}
@@ -291,7 +291,7 @@ func (kv *KVOperator) Tx(ctx context.Context, fn func(ctx
context.Context, kv *K
log.Errorf("rollback failed: %v",
rollbackErr)
}
}
- session.Close()
+ _ = session.Close()
}()
txKv = &KVOperator{
diff --git a/plugin/plugin_test/plugin_main_test.go
b/plugin/plugin_test/plugin_main_test.go
index add11460..fd9015c8 100644
--- a/plugin/plugin_test/plugin_main_test.go
+++ b/plugin/plugin_test/plugin_main_test.go
@@ -78,7 +78,7 @@ func TestMain(t *testing.M) {
dbSetting = dbSettingMapping[string(schemas.SQLITE)]
}
if dbSetting.Driver == string(schemas.SQLITE) {
- os.RemoveAll(dbSetting.Connection)
+ _ = os.RemoveAll(dbSetting.Connection)
}
defer func() {
diff --git a/ui/static.go b/ui/static.go
index dc79a178..65caae46 100644
--- a/ui/static.go
+++ b/ui/static.go
@@ -21,7 +21,6 @@ package ui
import (
"embed"
- _ "embed"
)
//go:embed build