This is an automated email from the ASF dual-hosted git repository.

shuai pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/answer.git

commit c78cadb159deaa7c3cc14d96edcbbae781427bb8
Author: Dinesht04 <[email protected]>
AuthorDate: Tue Oct 14 02:43:47 2025 +0530

    add migration for min_tags
---
 internal/migrations/migrations.go |  1 +
 internal/migrations/v28.go        | 67 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 68 insertions(+)

diff --git a/internal/migrations/migrations.go 
b/internal/migrations/migrations.go
index 4b5335b0..9caa28ed 100644
--- a/internal/migrations/migrations.go
+++ b/internal/migrations/migrations.go
@@ -103,6 +103,7 @@ var migrations = []Migration{
        NewMigration("v1.4.5", "add file record", addFileRecord, true),
        NewMigration("v1.5.1", "add plugin kv storage", addPluginKVStorage, 
true),
        NewMigration("v1.6.0", "move user config to interface", 
moveUserConfigToInterface, true),
+       NewMigration("v1.7.0", "add optional tags", addOptionalTags, true),
 }
 
 func GetMigrations() []Migration {
diff --git a/internal/migrations/v28.go b/internal/migrations/v28.go
new file mode 100644
index 00000000..8b834afa
--- /dev/null
+++ b/internal/migrations/v28.go
@@ -0,0 +1,67 @@
+/*
+ * 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 migrations
+
+import (
+       "context"
+       "encoding/json"
+       "fmt"
+
+       "github.com/apache/answer/internal/base/constant"
+       "github.com/apache/answer/internal/entity"
+       "github.com/apache/answer/internal/schema"
+
+       "xorm.io/xorm"
+)
+
+func addOptionalTags(ctx context.Context, x *xorm.Engine) error {
+       writeSiteInfo := &entity.SiteInfo{
+               Type: constant.SiteTypeWrite,
+       }
+       exist, err := x.Context(ctx).Get(writeSiteInfo)
+       if err != nil {
+               return fmt.Errorf("get config failed: %w", err)
+       }
+       if exist {
+               type OldSiteWriteReq struct {
+                       RestrictAnswer                 bool                   
`json:"restrict_answer"`
+                       MinimumTags                    int                    
`json:"min_tags"`
+                       RequiredTag                    bool                   
`json:"required_tag"`
+                       RecommendTags                  []*schema.SiteWriteTag 
`json:"recommend_tags"`
+                       ReservedTags                   []*schema.SiteWriteTag 
`json:"reserved_tags"`
+                       MaxImageSize                   int                    
`json:"max_image_size"`
+                       MaxAttachmentSize              int                    
`json:"max_attachment_size"`
+                       MaxImageMegapixel              int                    
`json:"max_image_megapixel"`
+                       AuthorizedImageExtensions      []string               
`json:"authorized_image_extensions"`
+                       AuthorizedAttachmentExtensions []string               
`json:"authorized_attachment_extensions"`
+               }
+               content := &OldSiteWriteReq{}
+               _ = json.Unmarshal([]byte(writeSiteInfo.Content), content)
+               content.MinimumTags = 1
+               data, _ := json.Marshal(content)
+               writeSiteInfo.Content = string(data)
+               _, err = 
x.Context(ctx).ID(writeSiteInfo.ID).Cols("content").Update(writeSiteInfo)
+               if err != nil {
+                       return fmt.Errorf("update site info failed: %w", err)
+               }
+       }
+
+       return nil
+}

Reply via email to