feat: manually mirror opencoze's code from bytedance

Change-Id: I09a73aadda978ad9511264a756b2ce51f5761adf
This commit is contained in:
fanlv
2025-07-20 17:36:12 +08:00
commit 890153324f
14811 changed files with 1923430 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 consts
const (
// RDBFieldID primary key id
RDBFieldID = "_knowledge_document_slice_id"
KnowledgeName = "knowledge_name"
DocumentURL = "document_url"
DefaultChunkSize = 800
DefaultSeparator = "\n"
DefaultOverlap = 10
DefaultTrimSpace = false
DefaultTrimURLAndEmail = false
)

View File

@@ -0,0 +1,111 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 convert
import (
"time"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/consts"
"github.com/coze-dev/coze-studio/backend/infra/contract/document"
"github.com/coze-dev/coze-studio/backend/infra/contract/document/parser"
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
)
func DocumentToParseConfig(doc *entity.Document) *parser.Config {
return ToParseConfig(doc.FileExtension, doc.ParsingStrategy, doc.ChunkingStrategy, doc.IsAppend, doc.TableInfo.Columns)
}
func ToParseConfig(fileExtension parser.FileExtension, ps *entity.ParsingStrategy, cs *entity.ChunkingStrategy, isAppend bool, columns []*entity.TableColumn) *parser.Config {
if ps == nil {
ps = &entity.ParsingStrategy{HeaderLine: 0, DataStartLine: 1}
}
p := &parser.ParsingStrategy{
ExtractImage: ps.ExtractImage,
ExtractTable: ps.ExtractTable,
ImageOCR: ps.ImageOCR,
FilterPages: ps.FilterPages,
SheetID: ptr.Of(int(ps.SheetID)),
HeaderLine: ps.HeaderLine,
DataStartLine: ps.DataStartLine,
RowsCount: ps.RowsCount,
IsAppend: isAppend,
Columns: convColumns(columns),
IgnoreColumnTypeErr: true, // default true
ImageAnnotationType: ptr.From(ptr.From(ps).CaptionType),
}
var c *parser.ChunkingStrategy
if cs != nil {
c = &parser.ChunkingStrategy{
ChunkType: cs.ChunkType,
ChunkSize: cs.ChunkSize,
Separator: cs.Separator,
Overlap: cs.Overlap,
TrimSpace: cs.TrimSpace,
TrimURLAndEmail: cs.TrimURLAndEmail,
MaxDepth: cs.MaxDepth,
SaveTitle: cs.SaveTitle,
}
}
return &parser.Config{
FileExtension: fileExtension,
ParsingStrategy: p,
ChunkingStrategy: c,
}
}
func convColumns(src []*entity.TableColumn) []*document.Column {
resp := make([]*document.Column, 0, len(src))
for _, c := range src {
if c.Name == consts.RDBFieldID {
continue
}
dc := &document.Column{
ID: c.ID,
Name: c.Name,
Type: c.Type,
Description: c.Description,
Nullable: !c.Indexing,
IsPrimary: false,
Sequence: int(c.Sequence),
}
resp = append(resp, dc)
}
return resp
}
func Type2DefaultVal(typ document.TableColumnType) any {
switch typ {
case document.TableColumnTypeString:
return ""
case document.TableColumnTypeInteger:
return 0
case document.TableColumnTypeTime:
return time.Time{}
case document.TableColumnTypeNumber:
return 0.0
case document.TableColumnTypeBoolean:
return false
case document.TableColumnTypeImage:
return []byte{}
default:
return ""
}
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 convert
import (
"github.com/coze-dev/coze-studio/backend/infra/contract/document"
rdbEntity "github.com/coze-dev/coze-studio/backend/infra/contract/rdb/entity"
)
func ConvertColumnType(columnType document.TableColumnType) rdbEntity.DataType {
switch columnType {
case document.TableColumnTypeBoolean:
return rdbEntity.TypeBoolean
case document.TableColumnTypeInteger:
return rdbEntity.TypeBigInt
case document.TableColumnTypeNumber:
return rdbEntity.TypeDouble
case document.TableColumnTypeString, document.TableColumnTypeImage:
return rdbEntity.TypeText
case document.TableColumnTypeTime:
return rdbEntity.TypeTimestamp
default:
return rdbEntity.TypeText
}
}

View File

@@ -0,0 +1,158 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 convert
import (
"fmt"
"reflect"
"time"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/consts"
"github.com/coze-dev/coze-studio/backend/infra/contract/document"
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
)
const timeFormat = "2006-01-02 15:04:05"
func TransformColumnType(src, dst document.TableColumnType) document.TableColumnType {
if src == document.TableColumnTypeUnknown {
return dst
}
if dst == document.TableColumnTypeUnknown {
return src
}
if dst == document.TableColumnTypeString {
return dst
}
if src == dst {
return dst
}
if src == document.TableColumnTypeInteger && dst == document.TableColumnTypeNumber {
return dst
}
return document.TableColumnTypeString
}
const columnPrefix = "c_%d"
func ColumnIDToRDBField(colID int64) string {
return fmt.Sprintf(columnPrefix, colID)
}
func ParseAnyData(col *entity.TableColumn, data any) (*document.ColumnData, error) {
resp := &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
}
if data == nil {
return resp, nil
}
switch col.Type {
case document.TableColumnTypeString:
switch v := data.(type) {
case string:
resp.ValString = ptr.Of(v)
case []byte:
resp.ValString = ptr.Of(string(v))
default:
return nil, fmt.Errorf("[ParseAnyData] type assertion failed")
}
case document.TableColumnTypeInteger:
switch data.(type) {
case int, int8, int16, int32, int64:
resp.ValInteger = ptr.Of(reflect.ValueOf(data).Int())
case uint, uint8, uint16, uint32, uint64, uintptr:
resp.ValInteger = ptr.Of(int64(reflect.ValueOf(data).Uint()))
default:
return nil, fmt.Errorf("[ParseAnyData] type assertion failed")
}
case document.TableColumnTypeTime:
if t, ok := data.(time.Time); ok {
resp.ValTime = &t
} else if b, ok := data.([]byte); ok {
t, err := time.Parse(timeFormat, string(b))
if err != nil {
return nil, fmt.Errorf("[ParseAnyData] format time failed, %w", err)
}
resp.ValTime = &t
} else {
return nil, fmt.Errorf("[ParseAnyData] type assertion failed")
}
case document.TableColumnTypeNumber:
switch data.(type) {
case float32, float64:
resp.ValNumber = ptr.Of(reflect.ValueOf(data).Float())
default:
return nil, fmt.Errorf("[ParseAnyData] type assertion failed")
}
case document.TableColumnTypeBoolean:
switch data.(type) {
case bool:
resp.ValBoolean = ptr.Of(data.(bool))
case int, int8, int16, int32, int64:
if reflect.ValueOf(data).Int() >= 1 {
resp.ValBoolean = ptr.Of(true)
} else {
resp.ValBoolean = ptr.Of(false)
}
case uint, uint8, uint16, uint32, uint64, uintptr:
resp.ValInteger = ptr.Of(int64(reflect.ValueOf(data).Uint()))
if reflect.ValueOf(data).Int() >= 1 {
resp.ValBoolean = ptr.Of(true)
} else {
resp.ValBoolean = ptr.Of(false)
}
default:
return nil, fmt.Errorf("[ParseAnyData] type assertion failed")
}
case document.TableColumnTypeImage:
switch v := data.(type) {
case string:
resp.ValImage = ptr.Of(v)
case []byte:
resp.ValImage = ptr.Of(string(v))
default:
return nil, fmt.Errorf("[ParseAnyData] type assertion failed")
}
default:
return nil, fmt.Errorf("[ParseAnyData] column type not support, type=%d", col.Type)
}
return resp, nil
}
func FilterColumnsRDBID(cols []*entity.TableColumn) []*entity.TableColumn {
for i := len(cols) - 1; i >= 0; i-- {
if cols[i].Name == consts.RDBFieldID {
cols = append(cols[:i], cols[i+1:]...)
break
}
}
return cols
}
func ColumnIDMapping(cols []*entity.TableColumn) map[int64]*entity.TableColumn {
resp := make(map[int64]*entity.TableColumn, len(cols))
for i := range cols {
col := cols[i]
resp[col.ID] = col
}
return resp
}

View File

@@ -0,0 +1,267 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 convert
import (
"fmt"
"testing"
"time"
. "github.com/bytedance/mockey"
"github.com/smartystreets/goconvey/convey"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
"github.com/coze-dev/coze-studio/backend/infra/contract/document"
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
)
func TestParseAnyData(t *testing.T) {
PatchConvey("test ParseAnyData", t, func() {
PatchConvey("test data is nil", func() {
col := &entity.TableColumn{
ID: 123,
Name: "test",
Type: document.TableColumnTypeString,
}
resp, err := ParseAnyData(col, nil)
convey.So(err, convey.ShouldBeNil)
convey.So(resp, convey.ShouldEqual, &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
})
})
PatchConvey("test unsupported type", func() {
col := &entity.TableColumn{
ID: 123,
Name: "test",
Type: 10001,
}
data := 123
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeError, fmt.Errorf("[ParseAnyData] column type not support, type=%d", col.Type))
convey.So(resp, convey.ShouldBeNil)
})
PatchConvey("test string", func() {
col := &entity.TableColumn{
ID: 123,
Name: "test",
Type: document.TableColumnTypeString,
}
PatchConvey("test string", func() {
data := "hello"
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeNil)
convey.So(resp, convey.ShouldEqual, &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
ValString: ptr.Of(data),
})
})
PatchConvey("test []byte", func() {
data := "hello"
resp, err := ParseAnyData(col, []byte(data))
convey.So(err, convey.ShouldBeNil)
convey.So(resp, convey.ShouldEqual, &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
ValString: ptr.Of(data),
})
})
PatchConvey("test failed", func() {
data := 123
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeError, fmt.Errorf("[ParseAnyData] type assertion failed"))
convey.So(resp, convey.ShouldBeNil)
})
})
PatchConvey("test integer", func() {
col := &entity.TableColumn{
ID: 123,
Name: "test",
Type: document.TableColumnTypeInteger,
}
PatchConvey("test int", func() {
allData := []any{1, int8(1), int16(1), int32(1), int64(1)}
for _, data := range allData {
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeNil)
convey.So(resp, convey.ShouldEqual, &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
ValInteger: ptr.Of(int64(1)),
})
}
})
PatchConvey("test uint", func() {
allData := []any{uint(1), uint8(1), uint16(1), uint32(1), uint64(1), uintptr(1)}
for _, data := range allData {
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeNil)
convey.So(resp, convey.ShouldEqual, &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
ValInteger: ptr.Of(int64(1)),
})
}
})
PatchConvey("test failed", func() {
data := "hello"
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeError, fmt.Errorf("[ParseAnyData] type assertion failed"))
convey.So(resp, convey.ShouldBeNil)
})
})
PatchConvey("test time", func() {
col := &entity.TableColumn{
ID: 123,
Name: "test",
Type: document.TableColumnTypeTime,
}
PatchConvey("test time", func() {
data := time.Now()
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeNil)
convey.So(resp, convey.ShouldEqual, &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
ValTime: ptr.Of(data),
})
})
PatchConvey("test failed", func() {
data := "hello"
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeError, fmt.Errorf("[ParseAnyData] type assertion failed"))
convey.So(resp, convey.ShouldBeNil)
})
})
PatchConvey("test number", func() {
col := &entity.TableColumn{
ID: 123,
Name: "test",
Type: document.TableColumnTypeNumber,
}
PatchConvey("test float", func() {
allData := []any{float32(1), 1.0}
for _, data := range allData {
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeNil)
convey.So(resp, convey.ShouldEqual, &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
ValNumber: ptr.Of(float64(1)),
})
}
})
PatchConvey("test failed", func() {
data := "hello"
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeError, fmt.Errorf("[ParseAnyData] type assertion failed"))
convey.So(resp, convey.ShouldBeNil)
})
})
PatchConvey("test boolean", func() {
col := &entity.TableColumn{
ID: 123,
Name: "test",
Type: document.TableColumnTypeBoolean,
}
PatchConvey("test float", func() {
resp, err := ParseAnyData(col, true)
convey.So(err, convey.ShouldBeNil)
convey.So(resp, convey.ShouldEqual, &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
ValBoolean: ptr.Of(true),
})
})
PatchConvey("test failed", func() {
data := "hello"
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeError, fmt.Errorf("[ParseAnyData] type assertion failed"))
convey.So(resp, convey.ShouldBeNil)
})
})
PatchConvey("test image", func() {
col := &entity.TableColumn{
ID: 123,
Name: "test",
Type: document.TableColumnTypeImage,
}
PatchConvey("test string", func() {
data := "hello"
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeNil)
convey.So(resp, convey.ShouldEqual, &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
ValImage: ptr.Of(data),
})
})
PatchConvey("test []byte", func() {
data := "hello"
resp, err := ParseAnyData(col, []byte(data))
convey.So(err, convey.ShouldBeNil)
convey.So(resp, convey.ShouldEqual, &document.ColumnData{
ColumnID: col.ID,
ColumnName: col.Name,
Type: col.Type,
ValImage: ptr.Of(data),
})
})
PatchConvey("test failed", func() {
data := 123
resp, err := ParseAnyData(col, data)
convey.So(err, convey.ShouldBeError, fmt.Errorf("[ParseAnyData] type assertion failed"))
convey.So(resp, convey.ShouldBeNil)
})
})
})
}

View File

@@ -0,0 +1,180 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 dao
import (
"context"
"errors"
"time"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/query"
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
)
type KnowledgeDAO struct {
DB *gorm.DB
Query *query.Query
}
func (dao *KnowledgeDAO) Create(ctx context.Context, knowledge *model.Knowledge) error {
return dao.Query.Knowledge.WithContext(ctx).Create(knowledge)
}
func (dao *KnowledgeDAO) Upsert(ctx context.Context, knowledge *model.Knowledge) error {
return dao.Query.Knowledge.WithContext(ctx).Clauses(clause.OnConflict{UpdateAll: true}).Create(knowledge)
}
func (dao *KnowledgeDAO) Update(ctx context.Context, knowledge *model.Knowledge) error {
k := dao.Query.Knowledge
knowledge.UpdatedAt = time.Now().UnixMilli()
err := k.WithContext(ctx).Where(k.ID.Eq(knowledge.ID)).Save(knowledge)
return err
}
func (dao *KnowledgeDAO) Delete(ctx context.Context, id int64) error {
k := dao.Query.Knowledge
_, err := k.WithContext(ctx).Where(k.ID.Eq(id)).Delete()
return err
}
func (dao *KnowledgeDAO) MGetByID(ctx context.Context, ids []int64) ([]*model.Knowledge, error) {
if len(ids) == 0 {
return nil, nil
}
k := dao.Query.Knowledge
pos, err := k.WithContext(ctx).Where(k.ID.In(ids...)).Find()
if err != nil {
return nil, err
}
return pos, nil
}
func (dao *KnowledgeDAO) FilterEnableKnowledge(ctx context.Context, knowledgeIDs []int64) ([]*model.Knowledge, error) {
if len(knowledgeIDs) == 0 {
return nil, nil
}
k := dao.Query.Knowledge
knowledgeModels, err := k.WithContext(ctx).
Select(k.ID, k.FormatType).
Where(k.ID.In(knowledgeIDs...)).
Where(k.Status.Eq(int32(entity.DocumentStatusEnable))).
Find()
return knowledgeModels, err
}
func (dao *KnowledgeDAO) InitTx() (tx *gorm.DB, err error) {
tx = dao.DB.Begin()
if tx.Error != nil {
return nil, err
}
return
}
func (dao *KnowledgeDAO) UpdateWithTx(ctx context.Context, tx *gorm.DB, knowledgeID int64, updateMap map[string]interface{}) error {
return tx.WithContext(ctx).Model(&model.Knowledge{}).Where("id = ?", knowledgeID).Updates(updateMap).Error
}
func (dao *KnowledgeDAO) FindKnowledgeByCondition(ctx context.Context, opts *entity.WhereKnowledgeOption) (knowledge []*model.Knowledge, total int64, err error) {
k := dao.Query.Knowledge
do := k.WithContext(ctx).Debug()
if opts == nil {
return nil, 0, nil
}
if opts.Query != nil && len(*opts.Query) > 0 {
do = do.Where(k.Name.Like("%" + *opts.Query + "%"))
}
if opts.Name != nil && len(*opts.Name) > 0 {
do = do.Where(k.Name.Eq(*opts.Name))
}
if len(opts.KnowledgeIDs) > 0 {
do = do.Where(k.ID.In(opts.KnowledgeIDs...))
}
if ptr.From(opts.AppID) != 0 {
do = do.Where(k.AppID.Eq(ptr.From(opts.AppID)))
} else {
if len(opts.KnowledgeIDs) == 0 {
do = do.Where(k.AppID.Eq(0))
}
}
if ptr.From(opts.SpaceID) != 0 {
do = do.Where(k.SpaceID.Eq(*opts.SpaceID))
}
if len(opts.Status) > 0 {
do = do.Where(k.Status.In(opts.Status...))
}
if opts.UserID != nil && ptr.From(opts.UserID) != 0 {
do = do.Where(k.CreatorID.Eq(*opts.UserID))
}
if opts.FormatType != nil {
do = do.Where(k.FormatType.Eq(int32(*opts.FormatType)))
}
if opts.Order != nil {
if *opts.Order == entity.OrderCreatedAt {
if opts.OrderType != nil {
if *opts.OrderType == entity.OrderTypeAsc {
do = do.Order(k.CreatedAt.Asc())
} else {
do = do.Order(k.CreatedAt.Desc())
}
} else {
do = do.Order(k.CreatedAt.Desc())
}
} else if *opts.Order == entity.OrderUpdatedAt {
if opts.OrderType != nil {
if *opts.OrderType == entity.OrderTypeAsc {
do = do.Order(k.UpdatedAt.Asc())
} else {
do = do.Order(k.UpdatedAt.Desc())
}
} else {
do = do.Order(k.UpdatedAt.Desc())
}
}
}
if opts.Page != nil && opts.PageSize != nil {
offset := (*opts.Page - 1) * (*opts.PageSize)
do = do.Limit(*opts.PageSize).Offset(offset)
}
knowledge, err = do.Find()
if err != nil {
return nil, 0, err
}
total, err = do.Limit(-1).Offset(-1).Count()
if err != nil {
return nil, 0, err
}
return knowledge, total, err
}
func (dao *KnowledgeDAO) GetByID(ctx context.Context, id int64) (*model.Knowledge, error) {
k := dao.Query.Knowledge
knowledge, err := k.WithContext(ctx).Where(k.ID.Eq(id)).First()
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return knowledge, nil
}

View File

@@ -0,0 +1,197 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 dao
import (
"context"
"errors"
"strconv"
"time"
"gorm.io/gorm"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/query"
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
)
type KnowledgeDocumentDAO struct {
DB *gorm.DB
Query *query.Query
}
func (dao *KnowledgeDocumentDAO) Create(ctx context.Context, document *model.KnowledgeDocument) error {
return dao.Query.KnowledgeDocument.WithContext(ctx).Create(document)
}
func (dao *KnowledgeDocumentDAO) Update(ctx context.Context, document *model.KnowledgeDocument) error {
document.UpdatedAt = time.Now().UnixMilli()
err := dao.Query.KnowledgeDocument.WithContext(ctx).Save(document)
return err
}
func (dao *KnowledgeDocumentDAO) Delete(ctx context.Context, id int64) error {
k := dao.Query.KnowledgeDocument
_, err := k.WithContext(ctx).Where(k.ID.Eq(id)).Delete()
return err
}
func (dao *KnowledgeDocumentDAO) MGetByID(ctx context.Context, ids []int64) ([]*model.KnowledgeDocument, error) {
if len(ids) == 0 {
return nil, nil
}
k := dao.Query.KnowledgeDocument
pos, err := k.WithContext(ctx).Where(k.ID.In(ids...)).Find()
if err != nil {
return nil, err
}
return pos, err
}
func (dao *KnowledgeDocumentDAO) fromCursor(cursor string) (id int64, err error) {
id, err = strconv.ParseInt(cursor, 10, 64)
return
}
func (dao *KnowledgeDocumentDAO) FindDocumentByCondition(ctx context.Context, opts *entity.WhereDocumentOpt) ([]*model.KnowledgeDocument, int64, error) {
k := dao.Query.KnowledgeDocument
do := k.WithContext(ctx)
if opts == nil {
return nil, 0, nil
}
if len(opts.IDs) == 0 && len(opts.KnowledgeIDs) == 0 {
return nil, 0, errors.New("need ids or knowledge_ids")
}
if opts.CreatorID > 0 {
do = do.Where(k.CreatorID.Eq(opts.CreatorID))
}
if len(opts.IDs) > 0 {
do = do.Where(k.ID.In(opts.IDs...))
}
if len(opts.KnowledgeIDs) > 0 {
do = do.Where(k.KnowledgeID.In(opts.KnowledgeIDs...))
}
if len(opts.StatusIn) > 0 {
do = do.Where(k.Status.In(opts.StatusIn...))
}
if len(opts.StatusNotIn) > 0 {
do = do.Where(k.Status.NotIn(opts.StatusNotIn...))
}
if opts.SelectAll {
do = do.Limit(-1)
} else {
if opts.Limit != 0 {
do = do.Limit(opts.Limit)
}
if opts.Offset != nil {
do = do.Offset(ptr.From(opts.Offset))
}
}
if opts.Cursor != nil {
id, err := dao.fromCursor(ptr.From(opts.Cursor))
if err != nil {
return nil, 0, err
}
do = do.Where(k.ID.Lt(id)).Order(k.ID.Desc())
}
resp, err := do.Find()
if err != nil {
return nil, 0, err
}
total, err := do.Limit(-1).Offset(-1).Count()
if err != nil {
return nil, 0, err
}
return resp, total, nil
}
func (dao *KnowledgeDocumentDAO) DeleteDocuments(ctx context.Context, ids []int64) error {
tx := dao.DB.Begin()
var err error
defer func() {
if err != nil {
tx.Rollback()
} else {
tx.Commit()
}
}()
// 删除document
err = tx.WithContext(ctx).Model(&model.KnowledgeDocument{}).Where("id in ?", ids).Delete(&model.KnowledgeDocument{}).Error
if err != nil {
return err
}
// 删除document_slice
err = tx.WithContext(ctx).Model(&model.KnowledgeDocumentSlice{}).Where("document_id in?", ids).Delete(&model.KnowledgeDocumentSlice{}).Error
if err != nil {
return err
}
return nil
}
func (dao *KnowledgeDocumentDAO) SetStatus(ctx context.Context, documentID int64, status int32, reason string) error {
k := dao.Query.KnowledgeDocument
d := &model.KnowledgeDocument{Status: status, FailReason: reason, UpdatedAt: time.Now().UnixMilli()}
_, err := k.WithContext(ctx).Debug().Where(k.ID.Eq(documentID)).Updates(d)
return err
}
func (dao *KnowledgeDocumentDAO) CreateWithTx(ctx context.Context, tx *gorm.DB, documents []*model.KnowledgeDocument) error {
if len(documents) == 0 {
return nil
}
tx = tx.WithContext(ctx).Debug().CreateInBatches(documents, len(documents))
return tx.Error
}
func (dao *KnowledgeDocumentDAO) GetByID(ctx context.Context, id int64) (*model.KnowledgeDocument, error) {
k := dao.Query.KnowledgeDocument
document, err := k.WithContext(ctx).Where(k.ID.Eq(id)).First()
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return document, nil
}
func (dao *KnowledgeDocumentDAO) UpdateDocumentSliceInfo(ctx context.Context, documentID int64) error {
s := dao.Query.KnowledgeDocumentSlice
var err error
var sliceCount int64
var totalSize *int64
sliceCount, err = s.WithContext(ctx).Debug().Where(s.DocumentID.Eq(documentID)).Count()
if err != nil {
return err
}
err = dao.DB.Raw("SELECT SUM(CHAR_LENGTH(content)) FROM knowledge_document_slice WHERE document_id = ? AND deleted_at IS NULL", documentID).Scan(&totalSize).Error
if err != nil {
return err
}
k := dao.Query.KnowledgeDocument
updates := map[string]any{}
updates[k.SliceCount.ColumnName().String()] = sliceCount
if totalSize != nil {
updates[k.Size.ColumnName().String()] = ptr.From(totalSize)
}
updates[k.UpdatedAt.ColumnName().String()] = time.Now().UnixMilli()
_, err = k.WithContext(ctx).Debug().Where(k.ID.Eq(documentID)).Updates(updates)
return err
}

View File

@@ -0,0 +1,47 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 dao
import (
"context"
"gorm.io/gorm"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/query"
)
type KnowledgeDocumentReviewDAO struct {
DB *gorm.DB
Query *query.Query
}
func (dao *KnowledgeDocumentReviewDAO) CreateInBatches(ctx context.Context, reviews []*model.KnowledgeDocumentReview) error {
return dao.Query.KnowledgeDocumentReview.WithContext(ctx).Debug().CreateInBatches(reviews, len(reviews))
}
func (dao *KnowledgeDocumentReviewDAO) MGetByIDs(ctx context.Context, reviewIDs []int64) ([]*model.KnowledgeDocumentReview, error) {
return dao.Query.KnowledgeDocumentReview.WithContext(ctx).Debug().Where(dao.Query.KnowledgeDocumentReview.ID.In(reviewIDs...)).Find()
}
func (dao *KnowledgeDocumentReviewDAO) GetByID(ctx context.Context, reviewID int64) (*model.KnowledgeDocumentReview, error) {
return dao.Query.KnowledgeDocumentReview.WithContext(ctx).Debug().Where(dao.Query.KnowledgeDocumentReview.ID.Eq(reviewID)).First()
}
func (dao *KnowledgeDocumentReviewDAO) UpdateReview(ctx context.Context, reviewID int64, mp map[string]interface{}) error {
_, err := dao.Query.KnowledgeDocumentReview.WithContext(ctx).Debug().Where(dao.Query.KnowledgeDocumentReview.ID.Eq(reviewID)).Updates(mp)
return err
}

View File

@@ -0,0 +1,323 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 dao
import (
"context"
"errors"
"fmt"
"sync"
"time"
"golang.org/x/sync/errgroup"
"gorm.io/gorm"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/query"
"github.com/coze-dev/coze-studio/backend/pkg/errorx"
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
"github.com/coze-dev/coze-studio/backend/pkg/logs"
"github.com/coze-dev/coze-studio/backend/types/errno"
)
type KnowledgeDocumentSliceDAO struct {
DB *gorm.DB
Query *query.Query
}
func (dao *KnowledgeDocumentSliceDAO) Create(ctx context.Context, slice *model.KnowledgeDocumentSlice) error {
return dao.Query.KnowledgeDocumentSlice.WithContext(ctx).Create(slice)
}
func (dao *KnowledgeDocumentSliceDAO) Update(ctx context.Context, slice *model.KnowledgeDocumentSlice) error {
s := dao.Query.KnowledgeDocumentSlice
slice.UpdatedAt = time.Now().UnixMilli()
err := s.WithContext(ctx).Save(slice)
return err
}
func (dao *KnowledgeDocumentSliceDAO) BatchCreate(ctx context.Context, slices []*model.KnowledgeDocumentSlice) error {
return dao.Query.KnowledgeDocumentSlice.WithContext(ctx).CreateInBatches(slices, 100)
}
func (dao *KnowledgeDocumentSliceDAO) BatchSetStatus(ctx context.Context, ids []int64, status int32, reason string) error {
s := dao.Query.KnowledgeDocumentSlice
updates := map[string]any{s.Status.ColumnName().String(): status}
if reason != "" {
updates[s.FailReason.ColumnName().String()] = reason
}
updates[s.UpdatedAt.ColumnName().String()] = time.Now().UnixMilli()
_, err := s.WithContext(ctx).Where(s.ID.In(ids...)).Updates(updates)
return err
}
func (dao *KnowledgeDocumentSliceDAO) Delete(ctx context.Context, slice *model.KnowledgeDocumentSlice) error {
s := dao.Query.KnowledgeDocumentSlice
_, err := s.WithContext(ctx).Where(s.ID.Eq(slice.ID)).Delete()
return err
}
func (dao *KnowledgeDocumentSliceDAO) DeleteByDocument(ctx context.Context, documentID int64) error {
s := dao.Query.KnowledgeDocumentSlice
_, err := s.WithContext(ctx).Where(s.DocumentID.Eq(documentID)).Delete()
return err
}
func (dao *KnowledgeDocumentSliceDAO) List(ctx context.Context, knowledgeID int64, documentID int64, limit int) (
pos []*model.KnowledgeDocumentSlice, hasMore bool, err error) {
do, err := dao.listDo(ctx, knowledgeID, documentID)
if err != nil {
return nil, false, err
}
if limit == -1 {
var (
lastID int64 = 0
batchSize = 100
)
for {
sliceArr, _, err := dao.listBatch(ctx, knowledgeID, documentID, batchSize, lastID)
if err != nil {
return nil, false, err
}
if len(sliceArr) == 0 {
break
}
pos = append(pos, sliceArr...)
lastID = sliceArr[len(sliceArr)-1].ID
}
return pos, false, nil
} else {
pos, err = do.Limit(limit).Find()
if err != nil {
return nil, false, err
}
if len(pos) == 0 {
return nil, false, nil
}
hasMore = len(pos) == limit
return pos, hasMore, err
}
}
func (dao *KnowledgeDocumentSliceDAO) listBatch(ctx context.Context, knowledgeID int64, documentID int64, batchSize int, lastID int64) (
pos []*model.KnowledgeDocumentSlice, hasMore bool, err error) {
if batchSize <= 0 {
batchSize = 100 // 默认批量大小
}
do, err := dao.listDo(ctx, knowledgeID, documentID)
if err != nil {
return nil, false, err
}
if lastID > 0 {
do = do.Where(dao.Query.KnowledgeDocumentSlice.ID.Gt(lastID))
}
pos, err = do.Debug().Limit(batchSize).Order(dao.Query.KnowledgeDocumentSlice.ID.Asc()).Find()
if err != nil {
return nil, false, err
}
hasMore = len(pos) == batchSize
return pos, hasMore, nil
}
func (dao *KnowledgeDocumentSliceDAO) listDo(ctx context.Context, knowledgeID int64, documentID int64) (
query.IKnowledgeDocumentSliceDo, error) {
s := dao.Query.KnowledgeDocumentSlice
do := s.WithContext(ctx)
if documentID != 0 {
do = do.Where(s.DocumentID.Eq(documentID))
}
if knowledgeID != 0 {
do = do.Where(s.KnowledgeID.Eq(knowledgeID))
}
return do, nil
}
func (dao *KnowledgeDocumentSliceDAO) GetDocumentSliceIDs(ctx context.Context, docIDs []int64) (sliceIDs []int64, err error) {
if len(docIDs) == 0 {
return nil, errors.New("empty document ids")
}
// doc可能会有很多slice所以批量处理
sliceIDs = make([]int64, 0)
var mu sync.Mutex
errGroup, ctx := errgroup.WithContext(ctx)
errGroup.SetLimit(10)
for i := range docIDs {
docID := docIDs[i]
errGroup.Go(func() (err error) {
defer func() {
if panicErr := recover(); panicErr != nil {
logs.CtxErrorf(ctx, "[getDocSliceIDs] routine error recover:%+v", panicErr)
}
}()
select {
case <-ctx.Done():
logs.CtxErrorf(ctx, "[getDocSliceIDs] doc_id:%d canceled", docID)
return ctx.Err()
default:
}
slices, _, dbErr := dao.List(ctx, 0, docID, -1)
if dbErr != nil {
logs.CtxErrorf(ctx, "[getDocSliceIDs] get deleted slice id err:%+v, doc_id:%v", dbErr, docID)
return dbErr
}
mu.Lock()
for _, slice := range slices {
sliceIDs = append(sliceIDs, slice.ID)
}
mu.Unlock()
return nil
})
}
if err = errGroup.Wait(); err != nil {
return nil, err
}
return sliceIDs, nil
}
func (dao *KnowledgeDocumentSliceDAO) MGetSlices(ctx context.Context, sliceIDs []int64) ([]*model.KnowledgeDocumentSlice, error) {
if len(sliceIDs) == 0 {
return nil, nil
}
s := dao.Query.KnowledgeDocumentSlice
pos, err := s.WithContext(ctx).Where(s.ID.In(sliceIDs...)).Find()
if err != nil {
return nil, err
}
return pos, nil
}
func (dao *KnowledgeDocumentSliceDAO) FindSliceByCondition(ctx context.Context, opts *entity.WhereSliceOpt) (
[]*model.KnowledgeDocumentSlice, int64, error) {
s := dao.Query.KnowledgeDocumentSlice
do := s.WithContext(ctx)
if opts.DocumentID != 0 {
do = do.Where(s.DocumentID.Eq(opts.DocumentID))
}
if len(opts.DocumentIDs) != 0 {
do = do.Where(s.DocumentID.In(opts.DocumentIDs...))
}
if opts.KnowledgeID != 0 {
do = do.Where(s.KnowledgeID.Eq(opts.KnowledgeID))
}
if opts.DocumentID == 0 && opts.KnowledgeID == 0 && len(opts.DocumentIDs) == 0 {
return nil, 0, errors.New("documentID and knowledgeID cannot be empty at the same time")
}
if opts.Keyword != nil && len(*opts.Keyword) != 0 {
do = do.Where(s.Content.Like(*opts.Keyword))
}
if opts.PageSize != 0 {
do = do.Limit(int(opts.PageSize))
do = do.Offset(int(opts.Sequence)).Order(s.Sequence.Asc())
}
if opts.NotEmpty != nil {
if ptr.From(opts.NotEmpty) {
do = do.Where(s.Content.Neq(""))
} else {
do = do.Where(s.Content.Eq(""))
}
}
pos, err := do.Find()
if err != nil {
return nil, 0, err
}
total, err := do.Limit(-1).Offset(-1).Count()
if err != nil {
return nil, 0, err
}
return pos, total, nil
}
func (dao *KnowledgeDocumentSliceDAO) GetSliceBySequence(ctx context.Context, documentID, sequence int64) ([]*model.KnowledgeDocumentSlice, error) {
if documentID == 0 {
return nil, errors.New("documentID cannot be empty")
}
s := dao.Query.KnowledgeDocumentSlice
var offset int
if sequence >= 2 {
offset = int(sequence - 2)
}
pos, err := s.WithContext(ctx).Where(s.DocumentID.Eq(documentID)).Offset(offset).Order(s.Sequence.Asc()).Limit(2).Find()
if err != nil {
return nil, err
}
return pos, nil
}
func (dao *KnowledgeDocumentSliceDAO) IncrementHitCount(ctx context.Context, sliceIDs []int64) error {
if len(sliceIDs) == 0 {
return nil
}
s := dao.Query.KnowledgeDocumentSlice
_, err := s.WithContext(ctx).Debug().Where(s.ID.In(sliceIDs...)).Updates(map[string]interface{}{
s.Hit.ColumnName().String(): gorm.Expr("hit +?", 1),
s.UpdatedAt.ColumnName().String(): time.Now().UnixMilli(),
})
return err
}
func (dao *KnowledgeDocumentSliceDAO) GetSliceHitByKnowledgeID(ctx context.Context, knowledgeID int64) (int64, error) {
if knowledgeID == 0 {
return 0, errors.New("knowledgeID cannot be empty")
}
s := dao.Query.KnowledgeDocumentSlice
var totalSliceHit *int64
err := s.WithContext(ctx).Debug().Select(s.Hit.Sum()).Where(s.KnowledgeID.Eq(knowledgeID)).Scan(&totalSliceHit)
if err != nil {
return 0, err
}
return ptr.From(totalSliceHit), nil
}
func (dao *KnowledgeDocumentSliceDAO) GetLastSequence(ctx context.Context, documentID int64) (float64, error) {
if documentID == 0 {
return 0, errors.New("[GetLastSequence] documentID cannot be empty")
}
s := dao.Query.KnowledgeDocumentSlice
resp, err := s.WithContext(ctx).Debug().
Select(s.Sequence).
Where(s.DocumentID.Eq(documentID)).
Order(s.Sequence.Desc()).
First()
if err == gorm.ErrRecordNotFound {
return 0, nil
}
if err != nil {
return 0, fmt.Errorf("[GetLastSequence] db exec err, document_id=%v, %w", documentID, err)
}
if resp == nil {
return 0, errorx.New(errno.ErrKnowledgeNonRetryableCode,
errorx.KVf("reason", "[GetLastSequence] resp is nil, document_id=%v", documentID))
}
return resp.Sequence, nil
}

View File

@@ -0,0 +1,229 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 dao
import (
"context"
"errors"
"strings"
"testing"
. "github.com/bytedance/mockey"
. "github.com/smartystreets/goconvey/convey"
"github.com/stretchr/testify/suite"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/query"
"github.com/coze-dev/coze-studio/backend/internal/mock/infra/contract/orm"
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
)
func TestKnowledgeDocument(t *testing.T) {
suite.Run(t, &DocumentTestSuite{})
}
type DocumentTestSuite struct {
suite.Suite
ctx context.Context
db *gorm.DB
dao *KnowledgeDocumentDAO
}
func (suite *DocumentTestSuite) SetupSuite() {
suite.ctx = context.Background()
mockDB := orm.NewMockDB()
mockDB.AddTable(&model.KnowledgeDocument{})
mockDB.AddTable(&model.KnowledgeDocumentSlice{})
db, err := mockDB.DB()
if err != nil {
panic(err)
}
suite.db = db
suite.dao = &KnowledgeDocumentDAO{
DB: db,
Query: query.Use(db),
}
}
func (suite *DocumentTestSuite) TearDownTest() {
suite.clearDB()
}
func (suite *DocumentTestSuite) clearDB() {
suite.db.WithContext(suite.ctx).Unscoped().Delete(&model.KnowledgeDocument{})
suite.db.WithContext(suite.ctx).Unscoped().Delete(&model.KnowledgeDocumentSlice{})
}
func (suite *DocumentTestSuite) TestCRUD() {
PatchConvey("test crud", suite.T(), func() {
ctx := suite.ctx
q := suite.dao.Query.KnowledgeDocument
err := suite.dao.Create(ctx, &model.KnowledgeDocument{ID: 123, KnowledgeID: 456})
So(err, ShouldBeNil)
first, err := q.WithContext(ctx).Where(q.ID.Eq(123)).First()
So(err, ShouldBeNil)
So(first, ShouldNotBeNil)
So(first.KnowledgeID, ShouldEqual, int64(456))
err = suite.dao.Update(ctx, &model.KnowledgeDocument{ID: 123, KnowledgeID: 654})
So(err, ShouldBeNil)
first, err = q.WithContext(ctx).Where(q.ID.Eq(123)).First()
So(err, ShouldBeNil)
So(first, ShouldNotBeNil)
So(first.KnowledgeID, ShouldEqual, int64(654))
err = suite.dao.Delete(ctx, 123)
So(err, ShouldBeNil)
first, err = q.WithContext(ctx).Where(q.ID.Eq(123)).First()
So(err, ShouldNotBeNil)
So(errors.Is(err, gorm.ErrRecordNotFound), ShouldBeTrue)
So(first, ShouldBeNil)
})
}
func (suite *DocumentTestSuite) TestMGetByID() {
PatchConvey("test MGetByID", suite.T(), func() {
ctx := suite.ctx
resp, err := suite.dao.MGetByID(ctx, nil)
So(err, ShouldBeNil)
So(resp, ShouldBeNil)
suite.db.Create([]*model.KnowledgeDocument{
{
ID: 666,
KnowledgeID: 123,
}, {
ID: 667,
KnowledgeID: 123,
},
})
resp, err = suite.dao.MGetByID(ctx, []int64{666, 667})
So(err, ShouldBeNil)
So(len(resp), ShouldEqual, 2)
})
}
func (suite *DocumentTestSuite) TestUpdateDocumentSliceInfo() {
PatchConvey("test UpdateDocumentSliceInfo", suite.T(), func() {
ctx := suite.ctx
suite.db.Create([]*model.KnowledgeDocumentSlice{
{
ID: 1,
KnowledgeID: 123,
DocumentID: 456,
Content: "hello",
},
{
ID: 2,
KnowledgeID: 123,
DocumentID: 456,
Content: "world",
},
})
suite.db.Create(&model.KnowledgeDocument{
ID: 456,
KnowledgeID: 123,
})
Mock(GetMethod(suite.db, "Raw")).To(func(sql string, values ...interface{}) (tx *gorm.DB) {
tx = suite.db.WithContext(suite.ctx)
tx.Statement.SQL = strings.Builder{}
newSQL := strings.Replace(sql, "CHAR_LENGTH", "LENGTH", 1)
if strings.Contains(newSQL, "@") {
clause.NamedExpr{SQL: newSQL, Vars: values}.Build(tx.Statement)
} else {
clause.Expr{SQL: newSQL, Vars: values}.Build(tx.Statement)
}
return tx
}).Build()
err := suite.dao.UpdateDocumentSliceInfo(ctx, 456)
So(err, ShouldBeNil)
q := suite.dao.Query.KnowledgeDocument
d, err := q.WithContext(ctx).Where(q.ID.Eq(456)).First()
So(err, ShouldBeNil)
So(d, ShouldNotBeNil)
So(d.SliceCount, ShouldEqual, 2)
So(d.Size, ShouldEqual, 10)
})
}
func (suite *DocumentTestSuite) TestFindDocumentByCondition() {
PatchConvey("test FindDocumentByCondition", suite.T(), func() {
ctx := context.Background()
mockDB := orm.NewMockDB()
mockDB.AddTable(&model.KnowledgeDocument{})
db, err := mockDB.DB()
So(err, ShouldBeNil)
dao := &KnowledgeDocumentDAO{
DB: db,
Query: query.Use(db),
}
db.Create([]*model.KnowledgeDocument{
{
ID: 666,
KnowledgeID: 123,
}, {
ID: 667,
KnowledgeID: 123,
},
})
PatchConvey("test paging", func() {
resp, total, err := dao.FindDocumentByCondition(ctx, &entity.WhereDocumentOpt{
IDs: []int64{666, 667},
KnowledgeIDs: []int64{123},
Limit: 1,
Offset: ptr.Of(0),
})
So(err, ShouldBeNil)
So(total, ShouldEqual, 2)
So(len(resp), ShouldEqual, 1)
So(resp[0].ID, ShouldEqual, int64(666))
resp, total, err = dao.FindDocumentByCondition(ctx, &entity.WhereDocumentOpt{
IDs: []int64{666, 667},
KnowledgeIDs: []int64{123},
Limit: 1,
Offset: ptr.Of(1),
})
So(err, ShouldBeNil)
So(total, ShouldEqual, 2)
So(len(resp), ShouldEqual, 1)
So(resp[0].ID, ShouldEqual, int64(667))
resp, total, err = dao.FindDocumentByCondition(ctx, &entity.WhereDocumentOpt{
IDs: []int64{666, 667},
KnowledgeIDs: []int64{123},
Limit: 1,
Offset: ptr.Of(2),
})
So(err, ShouldBeNil)
So(total, ShouldEqual, 2)
So(len(resp), ShouldEqual, 0)
})
})
}

View File

@@ -0,0 +1,87 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 dao
import (
"context"
"testing"
. "github.com/bytedance/mockey"
. "github.com/smartystreets/goconvey/convey"
"github.com/stretchr/testify/suite"
"gorm.io/gorm"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/query"
"github.com/coze-dev/coze-studio/backend/internal/mock/infra/contract/orm"
)
func TestKnowledgeSuite(t *testing.T) {
suite.Run(t, new(KnowledgeSuite))
}
type KnowledgeSuite struct {
suite.Suite
ctx context.Context
db *gorm.DB
dao *KnowledgeDAO
}
func (suite *KnowledgeSuite) SetupSuite() {
suite.ctx = context.Background()
mockDB := orm.NewMockDB()
mockDB.AddTable(&model.Knowledge{})
db, err := mockDB.DB()
if err != nil {
panic(err)
}
suite.db = db
suite.dao = &KnowledgeDAO{
DB: db,
Query: query.Use(db),
}
}
func (suite *KnowledgeSuite) TearDownTest() {
suite.db.WithContext(suite.ctx).Unscoped().Delete(&model.Knowledge{})
}
func (suite *KnowledgeSuite) TestCRUD() {
PatchConvey("test crud", suite.T(), func() {
ctx := suite.ctx
q := suite.dao.Query.Knowledge
err := suite.dao.Create(ctx, &model.Knowledge{
ID: 123,
Name: "test",
})
So(err, ShouldBeNil)
k, err := q.WithContext(ctx).Where(q.ID.Eq(123)).First()
So(err, ShouldBeNil)
So(k.Name, ShouldEqual, "test")
err = suite.dao.Upsert(ctx, &model.Knowledge{
ID: 123,
Name: "testtest",
})
So(err, ShouldBeNil)
k, err = q.WithContext(ctx).Where(q.ID.Eq(123)).First()
So(err, ShouldBeNil)
So(k.Name, ShouldEqual, "testtest")
})
}

View File

@@ -0,0 +1,32 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package model
import (
"gorm.io/gorm"
)
const TableNameKnowledge = "knowledge"
// Knowledge 知识库表
type Knowledge struct {
ID int64 `gorm:"column:id;primaryKey;comment:主键ID" json:"id"` // 主键ID
Name string `gorm:"column:name;not null;comment:名称" json:"name"` // 名称
AppID int64 `gorm:"column:app_id;not null;comment:项目ID标识该资源是否是项目独有" json:"app_id"` // 项目ID标识该资源是否是项目独有
CreatorID int64 `gorm:"column:creator_id;not null;comment:ID" json:"creator_id"` // ID
SpaceID int64 `gorm:"column:space_id;not null;comment:空间ID" json:"space_id"` // 空间ID
CreatedAt int64 `gorm:"column:created_at;not null;comment:Create Time in Milliseconds" json:"created_at"` // Create Time in Milliseconds
UpdatedAt int64 `gorm:"column:updated_at;not null;comment:Update Time in Milliseconds" json:"updated_at"` // Update Time in Milliseconds
DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:Delete Time in Milliseconds" json:"deleted_at"` // Delete Time in Milliseconds
Status int32 `gorm:"column:status;not null;default:1;comment:0 初始化, 1 生效 2 失效" json:"status"` // 0 初始化, 1 生效 2 失效
Description string `gorm:"column:description;comment:描述" json:"description"` // 描述
IconURI string `gorm:"column:icon_uri;comment:头像uri" json:"icon_uri"` // 头像uri
FormatType int32 `gorm:"column:format_type;not null;comment:0:文本 1:表格 2:图片" json:"format_type"` // 0:文本 1:表格 2:图片
}
// TableName Knowledge's table name
func (*Knowledge) TableName() string {
return TableNameKnowledge
}

View File

@@ -0,0 +1,40 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package model
import (
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
"gorm.io/gorm"
)
const TableNameKnowledgeDocument = "knowledge_document"
// KnowledgeDocument 知识库文档表
type KnowledgeDocument struct {
ID int64 `gorm:"column:id;primaryKey;comment:主键ID" json:"id"` // 主键ID
KnowledgeID int64 `gorm:"column:knowledge_id;not null;comment:所属knowledge的ID" json:"knowledge_id"` // 所属knowledge的ID
Name string `gorm:"column:name;not null;comment:文档名称" json:"name"` // 文档名称
FileExtension string `gorm:"column:file_extension;not null;default:0;comment:文档类型, txt/pdf/csv/..." json:"file_extension"` // 文档类型, txt/pdf/csv/...
DocumentType int32 `gorm:"column:document_type;not null;comment:文档类型: 0:文本 1:表格 2:图片" json:"document_type"` // 文档类型: 0:文本 1:表格 2:图片
URI string `gorm:"column:uri;comment:资源uri" json:"uri"` // 资源uri
Size int64 `gorm:"column:size;not null;comment:文档大小" json:"size"` // 文档大小
SliceCount int64 `gorm:"column:slice_count;not null;comment:分片数量" json:"slice_count"` // 分片数量
CharCount int64 `gorm:"column:char_count;not null;comment:字符数" json:"char_count"` // 字符数
CreatorID int64 `gorm:"column:creator_id;not null;comment:创建者ID" json:"creator_id"` // 创建者ID
SpaceID int64 `gorm:"column:space_id;not null;comment:空间id" json:"space_id"` // 空间id
CreatedAt int64 `gorm:"column:created_at;not null;comment:Create Time in Milliseconds" json:"created_at"` // Create Time in Milliseconds
UpdatedAt int64 `gorm:"column:updated_at;not null;comment:Update Time in Milliseconds" json:"updated_at"` // Update Time in Milliseconds
DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:Delete Time in Milliseconds" json:"deleted_at"` // Delete Time in Milliseconds
SourceType int32 `gorm:"column:source_type;not null;comment:0:本地文件上传, 2:自定义文本" json:"source_type"` // 0:本地文件上传, 2:自定义文本
Status int32 `gorm:"column:status;not null;comment:状态" json:"status"` // 状态
FailReason string `gorm:"column:fail_reason;comment:失败原因" json:"fail_reason"` // 失败原因
ParseRule *DocumentParseRule `gorm:"column:parse_rule;comment:解析+切片规则;serializer:json" json:"parse_rule"` // 解析+切片规则
TableInfo *entity.TableInfo `gorm:"column:table_info;comment:表格信息;serializer:json" json:"table_info"` // 表格信息
}
// TableName KnowledgeDocument's table name
func (*KnowledgeDocument) TableName() string {
return TableNameKnowledgeDocument
}

View File

@@ -0,0 +1,33 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package model
import (
"gorm.io/gorm"
)
const TableNameKnowledgeDocumentReview = "knowledge_document_review"
// KnowledgeDocumentReview 文档审阅表
type KnowledgeDocumentReview struct {
ID int64 `gorm:"column:id;primaryKey;comment:主键ID" json:"id"` // 主键ID
KnowledgeID int64 `gorm:"column:knowledge_id;not null;comment:knowledge id" json:"knowledge_id"` // knowledge id
SpaceID int64 `gorm:"column:space_id;not null;comment:空间id" json:"space_id"` // 空间id
Name string `gorm:"column:name;not null;comment:文档名称" json:"name"` // 文档名称
Type string `gorm:"column:type;not null;default:0;comment:文档类型" json:"type"` // 文档类型
URI string `gorm:"column:uri;comment:资源标识" json:"uri"` // 资源标识
FormatType int32 `gorm:"column:format_type;not null;comment:0 文本, 1 表格, 2 图片" json:"format_type"` // 0 文本, 1 表格, 2 图片
Status int32 `gorm:"column:status;not null;comment:0 处理中1 已完成2 失败3 失效" json:"status"` // 0 处理中1 已完成2 失败3 失效
ChunkRespURI string `gorm:"column:chunk_resp_uri;comment:预切片tos资源标识" json:"chunk_resp_uri"` // 预切片tos资源标识
DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:Delete Time in Milliseconds" json:"deleted_at"` // Delete Time in Milliseconds
CreatedAt int64 `gorm:"column:created_at;not null;comment:Create Time in Milliseconds" json:"created_at"` // Create Time in Milliseconds
UpdatedAt int64 `gorm:"column:updated_at;not null;comment:Update Time in Milliseconds" json:"updated_at"` // Update Time in Milliseconds
CreatorID int64 `gorm:"column:creator_id;not null;comment:创建者ID" json:"creator_id"` // 创建者ID
}
// TableName KnowledgeDocumentReview's table name
func (*KnowledgeDocumentReview) TableName() string {
return TableNameKnowledgeDocumentReview
}

View File

@@ -0,0 +1,33 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package model
import (
"gorm.io/gorm"
)
const TableNameKnowledgeDocumentSlice = "knowledge_document_slice"
// KnowledgeDocumentSlice 知识库文件切片表
type KnowledgeDocumentSlice struct {
ID int64 `gorm:"column:id;primaryKey;comment:主键ID" json:"id"` // 主键ID
KnowledgeID int64 `gorm:"column:knowledge_id;not null;comment:knowledge id" json:"knowledge_id"` // knowledge id
DocumentID int64 `gorm:"column:document_id;not null;comment:document id" json:"document_id"` // document id
Content string `gorm:"column:content;comment:切片内容" json:"content"` // 切片内容
Sequence float64 `gorm:"column:sequence;not null;type:decimal(20,5);comment:切片顺序号, 从1开始" json:"sequence"` // 切片顺序号, 从1开始
CreatedAt int64 `gorm:"column:created_at;not null;comment:Create Time in Milliseconds" json:"created_at"` // Create Time in Milliseconds
UpdatedAt int64 `gorm:"column:updated_at;not null;comment:Update Time in Milliseconds" json:"updated_at"` // Update Time in Milliseconds
DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:Delete Time in Milliseconds" json:"deleted_at"` // Delete Time in Milliseconds
CreatorID int64 `gorm:"column:creator_id;not null;comment:创建者ID" json:"creator_id"` // 创建者ID
SpaceID int64 `gorm:"column:space_id;not null;comment:空间ID" json:"space_id"` // 空间ID
Status int32 `gorm:"column:status;not null;comment:状态" json:"status"` // 状态
FailReason string `gorm:"column:fail_reason;comment:失败原因" json:"fail_reason"` // 失败原因
Hit int64 `gorm:"column:hit;not null;comment:命中次数" json:"hit"` // 命中次数
}
// TableName KnowledgeDocumentSlice's table name
func (*KnowledgeDocumentSlice) TableName() string {
return TableNameKnowledgeDocumentSlice
}

View File

@@ -0,0 +1,14 @@
package model
type SliceStatus int32
const (
SliceStatusProcessing SliceStatus = 0
SliceStatusDone SliceStatus = 1
SliceStatusFailed SliceStatus = 2
)
type SliceProgress struct {
Status SliceStatus
StatusMsg string
}

View File

@@ -0,0 +1,8 @@
package model
import "github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
type DocumentParseRule struct {
ParsingStrategy *entity.ParsingStrategy `json:"parsing_strategy"`
ChunkingStrategy *entity.ChunkingStrategy `json:"chunking_strategy"`
}

View File

@@ -0,0 +1,127 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package query
import (
"context"
"database/sql"
"gorm.io/gorm"
"gorm.io/gen"
"gorm.io/plugin/dbresolver"
)
var (
Q = new(Query)
Knowledge *knowledge
KnowledgeDocument *knowledgeDocument
KnowledgeDocumentReview *knowledgeDocumentReview
KnowledgeDocumentSlice *knowledgeDocumentSlice
)
func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
*Q = *Use(db, opts...)
Knowledge = &Q.Knowledge
KnowledgeDocument = &Q.KnowledgeDocument
KnowledgeDocumentReview = &Q.KnowledgeDocumentReview
KnowledgeDocumentSlice = &Q.KnowledgeDocumentSlice
}
func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
return &Query{
db: db,
Knowledge: newKnowledge(db, opts...),
KnowledgeDocument: newKnowledgeDocument(db, opts...),
KnowledgeDocumentReview: newKnowledgeDocumentReview(db, opts...),
KnowledgeDocumentSlice: newKnowledgeDocumentSlice(db, opts...),
}
}
type Query struct {
db *gorm.DB
Knowledge knowledge
KnowledgeDocument knowledgeDocument
KnowledgeDocumentReview knowledgeDocumentReview
KnowledgeDocumentSlice knowledgeDocumentSlice
}
func (q *Query) Available() bool { return q.db != nil }
func (q *Query) clone(db *gorm.DB) *Query {
return &Query{
db: db,
Knowledge: q.Knowledge.clone(db),
KnowledgeDocument: q.KnowledgeDocument.clone(db),
KnowledgeDocumentReview: q.KnowledgeDocumentReview.clone(db),
KnowledgeDocumentSlice: q.KnowledgeDocumentSlice.clone(db),
}
}
func (q *Query) ReadDB() *Query {
return q.ReplaceDB(q.db.Clauses(dbresolver.Read))
}
func (q *Query) WriteDB() *Query {
return q.ReplaceDB(q.db.Clauses(dbresolver.Write))
}
func (q *Query) ReplaceDB(db *gorm.DB) *Query {
return &Query{
db: db,
Knowledge: q.Knowledge.replaceDB(db),
KnowledgeDocument: q.KnowledgeDocument.replaceDB(db),
KnowledgeDocumentReview: q.KnowledgeDocumentReview.replaceDB(db),
KnowledgeDocumentSlice: q.KnowledgeDocumentSlice.replaceDB(db),
}
}
type queryCtx struct {
Knowledge IKnowledgeDo
KnowledgeDocument IKnowledgeDocumentDo
KnowledgeDocumentReview IKnowledgeDocumentReviewDo
KnowledgeDocumentSlice IKnowledgeDocumentSliceDo
}
func (q *Query) WithContext(ctx context.Context) *queryCtx {
return &queryCtx{
Knowledge: q.Knowledge.WithContext(ctx),
KnowledgeDocument: q.KnowledgeDocument.WithContext(ctx),
KnowledgeDocumentReview: q.KnowledgeDocumentReview.WithContext(ctx),
KnowledgeDocumentSlice: q.KnowledgeDocumentSlice.WithContext(ctx),
}
}
func (q *Query) Transaction(fc func(tx *Query) error, opts ...*sql.TxOptions) error {
return q.db.Transaction(func(tx *gorm.DB) error { return fc(q.clone(tx)) }, opts...)
}
func (q *Query) Begin(opts ...*sql.TxOptions) *QueryTx {
tx := q.db.Begin(opts...)
return &QueryTx{Query: q.clone(tx), Error: tx.Error}
}
type QueryTx struct {
*Query
Error error
}
func (q *QueryTx) Commit() error {
return q.db.Commit().Error
}
func (q *QueryTx) Rollback() error {
return q.db.Rollback().Error
}
func (q *QueryTx) SavePoint(name string) error {
return q.db.SavePoint(name).Error
}
func (q *QueryTx) RollbackTo(name string) error {
return q.db.RollbackTo(name).Error
}

View File

@@ -0,0 +1,425 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package query
import (
"context"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"gorm.io/gorm/schema"
"gorm.io/gen"
"gorm.io/gen/field"
"gorm.io/plugin/dbresolver"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
)
func newKnowledge(db *gorm.DB, opts ...gen.DOOption) knowledge {
_knowledge := knowledge{}
_knowledge.knowledgeDo.UseDB(db, opts...)
_knowledge.knowledgeDo.UseModel(&model.Knowledge{})
tableName := _knowledge.knowledgeDo.TableName()
_knowledge.ALL = field.NewAsterisk(tableName)
_knowledge.ID = field.NewInt64(tableName, "id")
_knowledge.Name = field.NewString(tableName, "name")
_knowledge.AppID = field.NewInt64(tableName, "app_id")
_knowledge.CreatorID = field.NewInt64(tableName, "creator_id")
_knowledge.SpaceID = field.NewInt64(tableName, "space_id")
_knowledge.CreatedAt = field.NewInt64(tableName, "created_at")
_knowledge.UpdatedAt = field.NewInt64(tableName, "updated_at")
_knowledge.DeletedAt = field.NewField(tableName, "deleted_at")
_knowledge.Status = field.NewInt32(tableName, "status")
_knowledge.Description = field.NewString(tableName, "description")
_knowledge.IconURI = field.NewString(tableName, "icon_uri")
_knowledge.FormatType = field.NewInt32(tableName, "format_type")
_knowledge.fillFieldMap()
return _knowledge
}
// knowledge 知识库表
type knowledge struct {
knowledgeDo
ALL field.Asterisk
ID field.Int64 // 主键ID
Name field.String // 名称
AppID field.Int64 // 项目ID标识该资源是否是项目独有
CreatorID field.Int64 // ID
SpaceID field.Int64 // 空间ID
CreatedAt field.Int64 // Create Time in Milliseconds
UpdatedAt field.Int64 // Update Time in Milliseconds
DeletedAt field.Field // Delete Time in Milliseconds
Status field.Int32 // 0 初始化, 1 生效 2 失效
Description field.String // 描述
IconURI field.String // 头像uri
FormatType field.Int32 // 0:文本 1:表格 2:图片
fieldMap map[string]field.Expr
}
func (k knowledge) Table(newTableName string) *knowledge {
k.knowledgeDo.UseTable(newTableName)
return k.updateTableName(newTableName)
}
func (k knowledge) As(alias string) *knowledge {
k.knowledgeDo.DO = *(k.knowledgeDo.As(alias).(*gen.DO))
return k.updateTableName(alias)
}
func (k *knowledge) updateTableName(table string) *knowledge {
k.ALL = field.NewAsterisk(table)
k.ID = field.NewInt64(table, "id")
k.Name = field.NewString(table, "name")
k.AppID = field.NewInt64(table, "app_id")
k.CreatorID = field.NewInt64(table, "creator_id")
k.SpaceID = field.NewInt64(table, "space_id")
k.CreatedAt = field.NewInt64(table, "created_at")
k.UpdatedAt = field.NewInt64(table, "updated_at")
k.DeletedAt = field.NewField(table, "deleted_at")
k.Status = field.NewInt32(table, "status")
k.Description = field.NewString(table, "description")
k.IconURI = field.NewString(table, "icon_uri")
k.FormatType = field.NewInt32(table, "format_type")
k.fillFieldMap()
return k
}
func (k *knowledge) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
_f, ok := k.fieldMap[fieldName]
if !ok || _f == nil {
return nil, false
}
_oe, ok := _f.(field.OrderExpr)
return _oe, ok
}
func (k *knowledge) fillFieldMap() {
k.fieldMap = make(map[string]field.Expr, 12)
k.fieldMap["id"] = k.ID
k.fieldMap["name"] = k.Name
k.fieldMap["app_id"] = k.AppID
k.fieldMap["creator_id"] = k.CreatorID
k.fieldMap["space_id"] = k.SpaceID
k.fieldMap["created_at"] = k.CreatedAt
k.fieldMap["updated_at"] = k.UpdatedAt
k.fieldMap["deleted_at"] = k.DeletedAt
k.fieldMap["status"] = k.Status
k.fieldMap["description"] = k.Description
k.fieldMap["icon_uri"] = k.IconURI
k.fieldMap["format_type"] = k.FormatType
}
func (k knowledge) clone(db *gorm.DB) knowledge {
k.knowledgeDo.ReplaceConnPool(db.Statement.ConnPool)
return k
}
func (k knowledge) replaceDB(db *gorm.DB) knowledge {
k.knowledgeDo.ReplaceDB(db)
return k
}
type knowledgeDo struct{ gen.DO }
type IKnowledgeDo interface {
gen.SubQuery
Debug() IKnowledgeDo
WithContext(ctx context.Context) IKnowledgeDo
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
ReplaceDB(db *gorm.DB)
ReadDB() IKnowledgeDo
WriteDB() IKnowledgeDo
As(alias string) gen.Dao
Session(config *gorm.Session) IKnowledgeDo
Columns(cols ...field.Expr) gen.Columns
Clauses(conds ...clause.Expression) IKnowledgeDo
Not(conds ...gen.Condition) IKnowledgeDo
Or(conds ...gen.Condition) IKnowledgeDo
Select(conds ...field.Expr) IKnowledgeDo
Where(conds ...gen.Condition) IKnowledgeDo
Order(conds ...field.Expr) IKnowledgeDo
Distinct(cols ...field.Expr) IKnowledgeDo
Omit(cols ...field.Expr) IKnowledgeDo
Join(table schema.Tabler, on ...field.Expr) IKnowledgeDo
LeftJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDo
RightJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDo
Group(cols ...field.Expr) IKnowledgeDo
Having(conds ...gen.Condition) IKnowledgeDo
Limit(limit int) IKnowledgeDo
Offset(offset int) IKnowledgeDo
Count() (count int64, err error)
Scopes(funcs ...func(gen.Dao) gen.Dao) IKnowledgeDo
Unscoped() IKnowledgeDo
Create(values ...*model.Knowledge) error
CreateInBatches(values []*model.Knowledge, batchSize int) error
Save(values ...*model.Knowledge) error
First() (*model.Knowledge, error)
Take() (*model.Knowledge, error)
Last() (*model.Knowledge, error)
Find() ([]*model.Knowledge, error)
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.Knowledge, err error)
FindInBatches(result *[]*model.Knowledge, batchSize int, fc func(tx gen.Dao, batch int) error) error
Pluck(column field.Expr, dest interface{}) error
Delete(...*model.Knowledge) (info gen.ResultInfo, err error)
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
Updates(value interface{}) (info gen.ResultInfo, err error)
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
UpdateFrom(q gen.SubQuery) gen.Dao
Attrs(attrs ...field.AssignExpr) IKnowledgeDo
Assign(attrs ...field.AssignExpr) IKnowledgeDo
Joins(fields ...field.RelationField) IKnowledgeDo
Preload(fields ...field.RelationField) IKnowledgeDo
FirstOrInit() (*model.Knowledge, error)
FirstOrCreate() (*model.Knowledge, error)
FindByPage(offset int, limit int) (result []*model.Knowledge, count int64, err error)
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
Scan(result interface{}) (err error)
Returning(value interface{}, columns ...string) IKnowledgeDo
UnderlyingDB() *gorm.DB
schema.Tabler
}
func (k knowledgeDo) Debug() IKnowledgeDo {
return k.withDO(k.DO.Debug())
}
func (k knowledgeDo) WithContext(ctx context.Context) IKnowledgeDo {
return k.withDO(k.DO.WithContext(ctx))
}
func (k knowledgeDo) ReadDB() IKnowledgeDo {
return k.Clauses(dbresolver.Read)
}
func (k knowledgeDo) WriteDB() IKnowledgeDo {
return k.Clauses(dbresolver.Write)
}
func (k knowledgeDo) Session(config *gorm.Session) IKnowledgeDo {
return k.withDO(k.DO.Session(config))
}
func (k knowledgeDo) Clauses(conds ...clause.Expression) IKnowledgeDo {
return k.withDO(k.DO.Clauses(conds...))
}
func (k knowledgeDo) Returning(value interface{}, columns ...string) IKnowledgeDo {
return k.withDO(k.DO.Returning(value, columns...))
}
func (k knowledgeDo) Not(conds ...gen.Condition) IKnowledgeDo {
return k.withDO(k.DO.Not(conds...))
}
func (k knowledgeDo) Or(conds ...gen.Condition) IKnowledgeDo {
return k.withDO(k.DO.Or(conds...))
}
func (k knowledgeDo) Select(conds ...field.Expr) IKnowledgeDo {
return k.withDO(k.DO.Select(conds...))
}
func (k knowledgeDo) Where(conds ...gen.Condition) IKnowledgeDo {
return k.withDO(k.DO.Where(conds...))
}
func (k knowledgeDo) Order(conds ...field.Expr) IKnowledgeDo {
return k.withDO(k.DO.Order(conds...))
}
func (k knowledgeDo) Distinct(cols ...field.Expr) IKnowledgeDo {
return k.withDO(k.DO.Distinct(cols...))
}
func (k knowledgeDo) Omit(cols ...field.Expr) IKnowledgeDo {
return k.withDO(k.DO.Omit(cols...))
}
func (k knowledgeDo) Join(table schema.Tabler, on ...field.Expr) IKnowledgeDo {
return k.withDO(k.DO.Join(table, on...))
}
func (k knowledgeDo) LeftJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDo {
return k.withDO(k.DO.LeftJoin(table, on...))
}
func (k knowledgeDo) RightJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDo {
return k.withDO(k.DO.RightJoin(table, on...))
}
func (k knowledgeDo) Group(cols ...field.Expr) IKnowledgeDo {
return k.withDO(k.DO.Group(cols...))
}
func (k knowledgeDo) Having(conds ...gen.Condition) IKnowledgeDo {
return k.withDO(k.DO.Having(conds...))
}
func (k knowledgeDo) Limit(limit int) IKnowledgeDo {
return k.withDO(k.DO.Limit(limit))
}
func (k knowledgeDo) Offset(offset int) IKnowledgeDo {
return k.withDO(k.DO.Offset(offset))
}
func (k knowledgeDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IKnowledgeDo {
return k.withDO(k.DO.Scopes(funcs...))
}
func (k knowledgeDo) Unscoped() IKnowledgeDo {
return k.withDO(k.DO.Unscoped())
}
func (k knowledgeDo) Create(values ...*model.Knowledge) error {
if len(values) == 0 {
return nil
}
return k.DO.Create(values)
}
func (k knowledgeDo) CreateInBatches(values []*model.Knowledge, batchSize int) error {
return k.DO.CreateInBatches(values, batchSize)
}
// Save : !!! underlying implementation is different with GORM
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
func (k knowledgeDo) Save(values ...*model.Knowledge) error {
if len(values) == 0 {
return nil
}
return k.DO.Save(values)
}
func (k knowledgeDo) First() (*model.Knowledge, error) {
if result, err := k.DO.First(); err != nil {
return nil, err
} else {
return result.(*model.Knowledge), nil
}
}
func (k knowledgeDo) Take() (*model.Knowledge, error) {
if result, err := k.DO.Take(); err != nil {
return nil, err
} else {
return result.(*model.Knowledge), nil
}
}
func (k knowledgeDo) Last() (*model.Knowledge, error) {
if result, err := k.DO.Last(); err != nil {
return nil, err
} else {
return result.(*model.Knowledge), nil
}
}
func (k knowledgeDo) Find() ([]*model.Knowledge, error) {
result, err := k.DO.Find()
return result.([]*model.Knowledge), err
}
func (k knowledgeDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.Knowledge, err error) {
buf := make([]*model.Knowledge, 0, batchSize)
err = k.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
defer func() { results = append(results, buf...) }()
return fc(tx, batch)
})
return results, err
}
func (k knowledgeDo) FindInBatches(result *[]*model.Knowledge, batchSize int, fc func(tx gen.Dao, batch int) error) error {
return k.DO.FindInBatches(result, batchSize, fc)
}
func (k knowledgeDo) Attrs(attrs ...field.AssignExpr) IKnowledgeDo {
return k.withDO(k.DO.Attrs(attrs...))
}
func (k knowledgeDo) Assign(attrs ...field.AssignExpr) IKnowledgeDo {
return k.withDO(k.DO.Assign(attrs...))
}
func (k knowledgeDo) Joins(fields ...field.RelationField) IKnowledgeDo {
for _, _f := range fields {
k = *k.withDO(k.DO.Joins(_f))
}
return &k
}
func (k knowledgeDo) Preload(fields ...field.RelationField) IKnowledgeDo {
for _, _f := range fields {
k = *k.withDO(k.DO.Preload(_f))
}
return &k
}
func (k knowledgeDo) FirstOrInit() (*model.Knowledge, error) {
if result, err := k.DO.FirstOrInit(); err != nil {
return nil, err
} else {
return result.(*model.Knowledge), nil
}
}
func (k knowledgeDo) FirstOrCreate() (*model.Knowledge, error) {
if result, err := k.DO.FirstOrCreate(); err != nil {
return nil, err
} else {
return result.(*model.Knowledge), nil
}
}
func (k knowledgeDo) FindByPage(offset int, limit int) (result []*model.Knowledge, count int64, err error) {
result, err = k.Offset(offset).Limit(limit).Find()
if err != nil {
return
}
if size := len(result); 0 < limit && 0 < size && size < limit {
count = int64(size + offset)
return
}
count, err = k.Offset(-1).Limit(-1).Count()
return
}
func (k knowledgeDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
count, err = k.Count()
if err != nil {
return
}
err = k.Offset(offset).Limit(limit).Scan(result)
return
}
func (k knowledgeDo) Scan(result interface{}) (err error) {
return k.DO.Scan(result)
}
func (k knowledgeDo) Delete(models ...*model.Knowledge) (result gen.ResultInfo, err error) {
return k.DO.Delete(models)
}
func (k *knowledgeDo) withDO(do gen.Dao) *knowledgeDo {
k.DO = *do.(*gen.DO)
return k
}

View File

@@ -0,0 +1,453 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package query
import (
"context"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"gorm.io/gorm/schema"
"gorm.io/gen"
"gorm.io/gen/field"
"gorm.io/plugin/dbresolver"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
)
func newKnowledgeDocument(db *gorm.DB, opts ...gen.DOOption) knowledgeDocument {
_knowledgeDocument := knowledgeDocument{}
_knowledgeDocument.knowledgeDocumentDo.UseDB(db, opts...)
_knowledgeDocument.knowledgeDocumentDo.UseModel(&model.KnowledgeDocument{})
tableName := _knowledgeDocument.knowledgeDocumentDo.TableName()
_knowledgeDocument.ALL = field.NewAsterisk(tableName)
_knowledgeDocument.ID = field.NewInt64(tableName, "id")
_knowledgeDocument.KnowledgeID = field.NewInt64(tableName, "knowledge_id")
_knowledgeDocument.Name = field.NewString(tableName, "name")
_knowledgeDocument.FileExtension = field.NewString(tableName, "file_extension")
_knowledgeDocument.DocumentType = field.NewInt32(tableName, "document_type")
_knowledgeDocument.URI = field.NewString(tableName, "uri")
_knowledgeDocument.Size = field.NewInt64(tableName, "size")
_knowledgeDocument.SliceCount = field.NewInt64(tableName, "slice_count")
_knowledgeDocument.CharCount = field.NewInt64(tableName, "char_count")
_knowledgeDocument.CreatorID = field.NewInt64(tableName, "creator_id")
_knowledgeDocument.SpaceID = field.NewInt64(tableName, "space_id")
_knowledgeDocument.CreatedAt = field.NewInt64(tableName, "created_at")
_knowledgeDocument.UpdatedAt = field.NewInt64(tableName, "updated_at")
_knowledgeDocument.DeletedAt = field.NewField(tableName, "deleted_at")
_knowledgeDocument.SourceType = field.NewInt32(tableName, "source_type")
_knowledgeDocument.Status = field.NewInt32(tableName, "status")
_knowledgeDocument.FailReason = field.NewString(tableName, "fail_reason")
_knowledgeDocument.ParseRule = field.NewField(tableName, "parse_rule")
_knowledgeDocument.TableInfo = field.NewField(tableName, "table_info")
_knowledgeDocument.fillFieldMap()
return _knowledgeDocument
}
// knowledgeDocument 知识库文档表
type knowledgeDocument struct {
knowledgeDocumentDo
ALL field.Asterisk
ID field.Int64 // 主键ID
KnowledgeID field.Int64 // 所属knowledge的ID
Name field.String // 文档名称
FileExtension field.String // 文档类型, txt/pdf/csv/...
DocumentType field.Int32 // 文档类型: 0:文本 1:表格 2:图片
URI field.String // 资源uri
Size field.Int64 // 文档大小
SliceCount field.Int64 // 分片数量
CharCount field.Int64 // 字符数
CreatorID field.Int64 // 创建者ID
SpaceID field.Int64 // 空间id
CreatedAt field.Int64 // Create Time in Milliseconds
UpdatedAt field.Int64 // Update Time in Milliseconds
DeletedAt field.Field // Delete Time in Milliseconds
SourceType field.Int32 // 0:本地文件上传, 2:自定义文本
Status field.Int32 // 状态
FailReason field.String // 失败原因
ParseRule field.Field // 解析+切片规则
TableInfo field.Field // 表格信息
fieldMap map[string]field.Expr
}
func (k knowledgeDocument) Table(newTableName string) *knowledgeDocument {
k.knowledgeDocumentDo.UseTable(newTableName)
return k.updateTableName(newTableName)
}
func (k knowledgeDocument) As(alias string) *knowledgeDocument {
k.knowledgeDocumentDo.DO = *(k.knowledgeDocumentDo.As(alias).(*gen.DO))
return k.updateTableName(alias)
}
func (k *knowledgeDocument) updateTableName(table string) *knowledgeDocument {
k.ALL = field.NewAsterisk(table)
k.ID = field.NewInt64(table, "id")
k.KnowledgeID = field.NewInt64(table, "knowledge_id")
k.Name = field.NewString(table, "name")
k.FileExtension = field.NewString(table, "file_extension")
k.DocumentType = field.NewInt32(table, "document_type")
k.URI = field.NewString(table, "uri")
k.Size = field.NewInt64(table, "size")
k.SliceCount = field.NewInt64(table, "slice_count")
k.CharCount = field.NewInt64(table, "char_count")
k.CreatorID = field.NewInt64(table, "creator_id")
k.SpaceID = field.NewInt64(table, "space_id")
k.CreatedAt = field.NewInt64(table, "created_at")
k.UpdatedAt = field.NewInt64(table, "updated_at")
k.DeletedAt = field.NewField(table, "deleted_at")
k.SourceType = field.NewInt32(table, "source_type")
k.Status = field.NewInt32(table, "status")
k.FailReason = field.NewString(table, "fail_reason")
k.ParseRule = field.NewField(table, "parse_rule")
k.TableInfo = field.NewField(table, "table_info")
k.fillFieldMap()
return k
}
func (k *knowledgeDocument) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
_f, ok := k.fieldMap[fieldName]
if !ok || _f == nil {
return nil, false
}
_oe, ok := _f.(field.OrderExpr)
return _oe, ok
}
func (k *knowledgeDocument) fillFieldMap() {
k.fieldMap = make(map[string]field.Expr, 19)
k.fieldMap["id"] = k.ID
k.fieldMap["knowledge_id"] = k.KnowledgeID
k.fieldMap["name"] = k.Name
k.fieldMap["file_extension"] = k.FileExtension
k.fieldMap["document_type"] = k.DocumentType
k.fieldMap["uri"] = k.URI
k.fieldMap["size"] = k.Size
k.fieldMap["slice_count"] = k.SliceCount
k.fieldMap["char_count"] = k.CharCount
k.fieldMap["creator_id"] = k.CreatorID
k.fieldMap["space_id"] = k.SpaceID
k.fieldMap["created_at"] = k.CreatedAt
k.fieldMap["updated_at"] = k.UpdatedAt
k.fieldMap["deleted_at"] = k.DeletedAt
k.fieldMap["source_type"] = k.SourceType
k.fieldMap["status"] = k.Status
k.fieldMap["fail_reason"] = k.FailReason
k.fieldMap["parse_rule"] = k.ParseRule
k.fieldMap["table_info"] = k.TableInfo
}
func (k knowledgeDocument) clone(db *gorm.DB) knowledgeDocument {
k.knowledgeDocumentDo.ReplaceConnPool(db.Statement.ConnPool)
return k
}
func (k knowledgeDocument) replaceDB(db *gorm.DB) knowledgeDocument {
k.knowledgeDocumentDo.ReplaceDB(db)
return k
}
type knowledgeDocumentDo struct{ gen.DO }
type IKnowledgeDocumentDo interface {
gen.SubQuery
Debug() IKnowledgeDocumentDo
WithContext(ctx context.Context) IKnowledgeDocumentDo
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
ReplaceDB(db *gorm.DB)
ReadDB() IKnowledgeDocumentDo
WriteDB() IKnowledgeDocumentDo
As(alias string) gen.Dao
Session(config *gorm.Session) IKnowledgeDocumentDo
Columns(cols ...field.Expr) gen.Columns
Clauses(conds ...clause.Expression) IKnowledgeDocumentDo
Not(conds ...gen.Condition) IKnowledgeDocumentDo
Or(conds ...gen.Condition) IKnowledgeDocumentDo
Select(conds ...field.Expr) IKnowledgeDocumentDo
Where(conds ...gen.Condition) IKnowledgeDocumentDo
Order(conds ...field.Expr) IKnowledgeDocumentDo
Distinct(cols ...field.Expr) IKnowledgeDocumentDo
Omit(cols ...field.Expr) IKnowledgeDocumentDo
Join(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentDo
LeftJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentDo
RightJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentDo
Group(cols ...field.Expr) IKnowledgeDocumentDo
Having(conds ...gen.Condition) IKnowledgeDocumentDo
Limit(limit int) IKnowledgeDocumentDo
Offset(offset int) IKnowledgeDocumentDo
Count() (count int64, err error)
Scopes(funcs ...func(gen.Dao) gen.Dao) IKnowledgeDocumentDo
Unscoped() IKnowledgeDocumentDo
Create(values ...*model.KnowledgeDocument) error
CreateInBatches(values []*model.KnowledgeDocument, batchSize int) error
Save(values ...*model.KnowledgeDocument) error
First() (*model.KnowledgeDocument, error)
Take() (*model.KnowledgeDocument, error)
Last() (*model.KnowledgeDocument, error)
Find() ([]*model.KnowledgeDocument, error)
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.KnowledgeDocument, err error)
FindInBatches(result *[]*model.KnowledgeDocument, batchSize int, fc func(tx gen.Dao, batch int) error) error
Pluck(column field.Expr, dest interface{}) error
Delete(...*model.KnowledgeDocument) (info gen.ResultInfo, err error)
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
Updates(value interface{}) (info gen.ResultInfo, err error)
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
UpdateFrom(q gen.SubQuery) gen.Dao
Attrs(attrs ...field.AssignExpr) IKnowledgeDocumentDo
Assign(attrs ...field.AssignExpr) IKnowledgeDocumentDo
Joins(fields ...field.RelationField) IKnowledgeDocumentDo
Preload(fields ...field.RelationField) IKnowledgeDocumentDo
FirstOrInit() (*model.KnowledgeDocument, error)
FirstOrCreate() (*model.KnowledgeDocument, error)
FindByPage(offset int, limit int) (result []*model.KnowledgeDocument, count int64, err error)
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
Scan(result interface{}) (err error)
Returning(value interface{}, columns ...string) IKnowledgeDocumentDo
UnderlyingDB() *gorm.DB
schema.Tabler
}
func (k knowledgeDocumentDo) Debug() IKnowledgeDocumentDo {
return k.withDO(k.DO.Debug())
}
func (k knowledgeDocumentDo) WithContext(ctx context.Context) IKnowledgeDocumentDo {
return k.withDO(k.DO.WithContext(ctx))
}
func (k knowledgeDocumentDo) ReadDB() IKnowledgeDocumentDo {
return k.Clauses(dbresolver.Read)
}
func (k knowledgeDocumentDo) WriteDB() IKnowledgeDocumentDo {
return k.Clauses(dbresolver.Write)
}
func (k knowledgeDocumentDo) Session(config *gorm.Session) IKnowledgeDocumentDo {
return k.withDO(k.DO.Session(config))
}
func (k knowledgeDocumentDo) Clauses(conds ...clause.Expression) IKnowledgeDocumentDo {
return k.withDO(k.DO.Clauses(conds...))
}
func (k knowledgeDocumentDo) Returning(value interface{}, columns ...string) IKnowledgeDocumentDo {
return k.withDO(k.DO.Returning(value, columns...))
}
func (k knowledgeDocumentDo) Not(conds ...gen.Condition) IKnowledgeDocumentDo {
return k.withDO(k.DO.Not(conds...))
}
func (k knowledgeDocumentDo) Or(conds ...gen.Condition) IKnowledgeDocumentDo {
return k.withDO(k.DO.Or(conds...))
}
func (k knowledgeDocumentDo) Select(conds ...field.Expr) IKnowledgeDocumentDo {
return k.withDO(k.DO.Select(conds...))
}
func (k knowledgeDocumentDo) Where(conds ...gen.Condition) IKnowledgeDocumentDo {
return k.withDO(k.DO.Where(conds...))
}
func (k knowledgeDocumentDo) Order(conds ...field.Expr) IKnowledgeDocumentDo {
return k.withDO(k.DO.Order(conds...))
}
func (k knowledgeDocumentDo) Distinct(cols ...field.Expr) IKnowledgeDocumentDo {
return k.withDO(k.DO.Distinct(cols...))
}
func (k knowledgeDocumentDo) Omit(cols ...field.Expr) IKnowledgeDocumentDo {
return k.withDO(k.DO.Omit(cols...))
}
func (k knowledgeDocumentDo) Join(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentDo {
return k.withDO(k.DO.Join(table, on...))
}
func (k knowledgeDocumentDo) LeftJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentDo {
return k.withDO(k.DO.LeftJoin(table, on...))
}
func (k knowledgeDocumentDo) RightJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentDo {
return k.withDO(k.DO.RightJoin(table, on...))
}
func (k knowledgeDocumentDo) Group(cols ...field.Expr) IKnowledgeDocumentDo {
return k.withDO(k.DO.Group(cols...))
}
func (k knowledgeDocumentDo) Having(conds ...gen.Condition) IKnowledgeDocumentDo {
return k.withDO(k.DO.Having(conds...))
}
func (k knowledgeDocumentDo) Limit(limit int) IKnowledgeDocumentDo {
return k.withDO(k.DO.Limit(limit))
}
func (k knowledgeDocumentDo) Offset(offset int) IKnowledgeDocumentDo {
return k.withDO(k.DO.Offset(offset))
}
func (k knowledgeDocumentDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IKnowledgeDocumentDo {
return k.withDO(k.DO.Scopes(funcs...))
}
func (k knowledgeDocumentDo) Unscoped() IKnowledgeDocumentDo {
return k.withDO(k.DO.Unscoped())
}
func (k knowledgeDocumentDo) Create(values ...*model.KnowledgeDocument) error {
if len(values) == 0 {
return nil
}
return k.DO.Create(values)
}
func (k knowledgeDocumentDo) CreateInBatches(values []*model.KnowledgeDocument, batchSize int) error {
return k.DO.CreateInBatches(values, batchSize)
}
// Save : !!! underlying implementation is different with GORM
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
func (k knowledgeDocumentDo) Save(values ...*model.KnowledgeDocument) error {
if len(values) == 0 {
return nil
}
return k.DO.Save(values)
}
func (k knowledgeDocumentDo) First() (*model.KnowledgeDocument, error) {
if result, err := k.DO.First(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocument), nil
}
}
func (k knowledgeDocumentDo) Take() (*model.KnowledgeDocument, error) {
if result, err := k.DO.Take(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocument), nil
}
}
func (k knowledgeDocumentDo) Last() (*model.KnowledgeDocument, error) {
if result, err := k.DO.Last(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocument), nil
}
}
func (k knowledgeDocumentDo) Find() ([]*model.KnowledgeDocument, error) {
result, err := k.DO.Find()
return result.([]*model.KnowledgeDocument), err
}
func (k knowledgeDocumentDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.KnowledgeDocument, err error) {
buf := make([]*model.KnowledgeDocument, 0, batchSize)
err = k.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
defer func() { results = append(results, buf...) }()
return fc(tx, batch)
})
return results, err
}
func (k knowledgeDocumentDo) FindInBatches(result *[]*model.KnowledgeDocument, batchSize int, fc func(tx gen.Dao, batch int) error) error {
return k.DO.FindInBatches(result, batchSize, fc)
}
func (k knowledgeDocumentDo) Attrs(attrs ...field.AssignExpr) IKnowledgeDocumentDo {
return k.withDO(k.DO.Attrs(attrs...))
}
func (k knowledgeDocumentDo) Assign(attrs ...field.AssignExpr) IKnowledgeDocumentDo {
return k.withDO(k.DO.Assign(attrs...))
}
func (k knowledgeDocumentDo) Joins(fields ...field.RelationField) IKnowledgeDocumentDo {
for _, _f := range fields {
k = *k.withDO(k.DO.Joins(_f))
}
return &k
}
func (k knowledgeDocumentDo) Preload(fields ...field.RelationField) IKnowledgeDocumentDo {
for _, _f := range fields {
k = *k.withDO(k.DO.Preload(_f))
}
return &k
}
func (k knowledgeDocumentDo) FirstOrInit() (*model.KnowledgeDocument, error) {
if result, err := k.DO.FirstOrInit(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocument), nil
}
}
func (k knowledgeDocumentDo) FirstOrCreate() (*model.KnowledgeDocument, error) {
if result, err := k.DO.FirstOrCreate(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocument), nil
}
}
func (k knowledgeDocumentDo) FindByPage(offset int, limit int) (result []*model.KnowledgeDocument, count int64, err error) {
result, err = k.Offset(offset).Limit(limit).Find()
if err != nil {
return
}
if size := len(result); 0 < limit && 0 < size && size < limit {
count = int64(size + offset)
return
}
count, err = k.Offset(-1).Limit(-1).Count()
return
}
func (k knowledgeDocumentDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
count, err = k.Count()
if err != nil {
return
}
err = k.Offset(offset).Limit(limit).Scan(result)
return
}
func (k knowledgeDocumentDo) Scan(result interface{}) (err error) {
return k.DO.Scan(result)
}
func (k knowledgeDocumentDo) Delete(models ...*model.KnowledgeDocument) (result gen.ResultInfo, err error) {
return k.DO.Delete(models)
}
func (k *knowledgeDocumentDo) withDO(do gen.Dao) *knowledgeDocumentDo {
k.DO = *do.(*gen.DO)
return k
}

View File

@@ -0,0 +1,429 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package query
import (
"context"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"gorm.io/gorm/schema"
"gorm.io/gen"
"gorm.io/gen/field"
"gorm.io/plugin/dbresolver"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
)
func newKnowledgeDocumentReview(db *gorm.DB, opts ...gen.DOOption) knowledgeDocumentReview {
_knowledgeDocumentReview := knowledgeDocumentReview{}
_knowledgeDocumentReview.knowledgeDocumentReviewDo.UseDB(db, opts...)
_knowledgeDocumentReview.knowledgeDocumentReviewDo.UseModel(&model.KnowledgeDocumentReview{})
tableName := _knowledgeDocumentReview.knowledgeDocumentReviewDo.TableName()
_knowledgeDocumentReview.ALL = field.NewAsterisk(tableName)
_knowledgeDocumentReview.ID = field.NewInt64(tableName, "id")
_knowledgeDocumentReview.KnowledgeID = field.NewInt64(tableName, "knowledge_id")
_knowledgeDocumentReview.SpaceID = field.NewInt64(tableName, "space_id")
_knowledgeDocumentReview.Name = field.NewString(tableName, "name")
_knowledgeDocumentReview.Type = field.NewString(tableName, "type")
_knowledgeDocumentReview.URI = field.NewString(tableName, "uri")
_knowledgeDocumentReview.FormatType = field.NewInt32(tableName, "format_type")
_knowledgeDocumentReview.Status = field.NewInt32(tableName, "status")
_knowledgeDocumentReview.ChunkRespURI = field.NewString(tableName, "chunk_resp_uri")
_knowledgeDocumentReview.DeletedAt = field.NewField(tableName, "deleted_at")
_knowledgeDocumentReview.CreatedAt = field.NewInt64(tableName, "created_at")
_knowledgeDocumentReview.UpdatedAt = field.NewInt64(tableName, "updated_at")
_knowledgeDocumentReview.CreatorID = field.NewInt64(tableName, "creator_id")
_knowledgeDocumentReview.fillFieldMap()
return _knowledgeDocumentReview
}
// knowledgeDocumentReview 文档审阅表
type knowledgeDocumentReview struct {
knowledgeDocumentReviewDo
ALL field.Asterisk
ID field.Int64 // 主键ID
KnowledgeID field.Int64 // knowledge id
SpaceID field.Int64 // 空间id
Name field.String // 文档名称
Type field.String // 文档类型
URI field.String // 资源标识
FormatType field.Int32 // 0 文本, 1 表格, 2 图片
Status field.Int32 // 0 处理中1 已完成2 失败3 失效
ChunkRespURI field.String // 预切片tos资源标识
DeletedAt field.Field // Delete Time in Milliseconds
CreatedAt field.Int64 // Create Time in Milliseconds
UpdatedAt field.Int64 // Update Time in Milliseconds
CreatorID field.Int64 // 创建者ID
fieldMap map[string]field.Expr
}
func (k knowledgeDocumentReview) Table(newTableName string) *knowledgeDocumentReview {
k.knowledgeDocumentReviewDo.UseTable(newTableName)
return k.updateTableName(newTableName)
}
func (k knowledgeDocumentReview) As(alias string) *knowledgeDocumentReview {
k.knowledgeDocumentReviewDo.DO = *(k.knowledgeDocumentReviewDo.As(alias).(*gen.DO))
return k.updateTableName(alias)
}
func (k *knowledgeDocumentReview) updateTableName(table string) *knowledgeDocumentReview {
k.ALL = field.NewAsterisk(table)
k.ID = field.NewInt64(table, "id")
k.KnowledgeID = field.NewInt64(table, "knowledge_id")
k.SpaceID = field.NewInt64(table, "space_id")
k.Name = field.NewString(table, "name")
k.Type = field.NewString(table, "type")
k.URI = field.NewString(table, "uri")
k.FormatType = field.NewInt32(table, "format_type")
k.Status = field.NewInt32(table, "status")
k.ChunkRespURI = field.NewString(table, "chunk_resp_uri")
k.DeletedAt = field.NewField(table, "deleted_at")
k.CreatedAt = field.NewInt64(table, "created_at")
k.UpdatedAt = field.NewInt64(table, "updated_at")
k.CreatorID = field.NewInt64(table, "creator_id")
k.fillFieldMap()
return k
}
func (k *knowledgeDocumentReview) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
_f, ok := k.fieldMap[fieldName]
if !ok || _f == nil {
return nil, false
}
_oe, ok := _f.(field.OrderExpr)
return _oe, ok
}
func (k *knowledgeDocumentReview) fillFieldMap() {
k.fieldMap = make(map[string]field.Expr, 13)
k.fieldMap["id"] = k.ID
k.fieldMap["knowledge_id"] = k.KnowledgeID
k.fieldMap["space_id"] = k.SpaceID
k.fieldMap["name"] = k.Name
k.fieldMap["type"] = k.Type
k.fieldMap["uri"] = k.URI
k.fieldMap["format_type"] = k.FormatType
k.fieldMap["status"] = k.Status
k.fieldMap["chunk_resp_uri"] = k.ChunkRespURI
k.fieldMap["deleted_at"] = k.DeletedAt
k.fieldMap["created_at"] = k.CreatedAt
k.fieldMap["updated_at"] = k.UpdatedAt
k.fieldMap["creator_id"] = k.CreatorID
}
func (k knowledgeDocumentReview) clone(db *gorm.DB) knowledgeDocumentReview {
k.knowledgeDocumentReviewDo.ReplaceConnPool(db.Statement.ConnPool)
return k
}
func (k knowledgeDocumentReview) replaceDB(db *gorm.DB) knowledgeDocumentReview {
k.knowledgeDocumentReviewDo.ReplaceDB(db)
return k
}
type knowledgeDocumentReviewDo struct{ gen.DO }
type IKnowledgeDocumentReviewDo interface {
gen.SubQuery
Debug() IKnowledgeDocumentReviewDo
WithContext(ctx context.Context) IKnowledgeDocumentReviewDo
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
ReplaceDB(db *gorm.DB)
ReadDB() IKnowledgeDocumentReviewDo
WriteDB() IKnowledgeDocumentReviewDo
As(alias string) gen.Dao
Session(config *gorm.Session) IKnowledgeDocumentReviewDo
Columns(cols ...field.Expr) gen.Columns
Clauses(conds ...clause.Expression) IKnowledgeDocumentReviewDo
Not(conds ...gen.Condition) IKnowledgeDocumentReviewDo
Or(conds ...gen.Condition) IKnowledgeDocumentReviewDo
Select(conds ...field.Expr) IKnowledgeDocumentReviewDo
Where(conds ...gen.Condition) IKnowledgeDocumentReviewDo
Order(conds ...field.Expr) IKnowledgeDocumentReviewDo
Distinct(cols ...field.Expr) IKnowledgeDocumentReviewDo
Omit(cols ...field.Expr) IKnowledgeDocumentReviewDo
Join(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentReviewDo
LeftJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentReviewDo
RightJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentReviewDo
Group(cols ...field.Expr) IKnowledgeDocumentReviewDo
Having(conds ...gen.Condition) IKnowledgeDocumentReviewDo
Limit(limit int) IKnowledgeDocumentReviewDo
Offset(offset int) IKnowledgeDocumentReviewDo
Count() (count int64, err error)
Scopes(funcs ...func(gen.Dao) gen.Dao) IKnowledgeDocumentReviewDo
Unscoped() IKnowledgeDocumentReviewDo
Create(values ...*model.KnowledgeDocumentReview) error
CreateInBatches(values []*model.KnowledgeDocumentReview, batchSize int) error
Save(values ...*model.KnowledgeDocumentReview) error
First() (*model.KnowledgeDocumentReview, error)
Take() (*model.KnowledgeDocumentReview, error)
Last() (*model.KnowledgeDocumentReview, error)
Find() ([]*model.KnowledgeDocumentReview, error)
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.KnowledgeDocumentReview, err error)
FindInBatches(result *[]*model.KnowledgeDocumentReview, batchSize int, fc func(tx gen.Dao, batch int) error) error
Pluck(column field.Expr, dest interface{}) error
Delete(...*model.KnowledgeDocumentReview) (info gen.ResultInfo, err error)
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
Updates(value interface{}) (info gen.ResultInfo, err error)
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
UpdateFrom(q gen.SubQuery) gen.Dao
Attrs(attrs ...field.AssignExpr) IKnowledgeDocumentReviewDo
Assign(attrs ...field.AssignExpr) IKnowledgeDocumentReviewDo
Joins(fields ...field.RelationField) IKnowledgeDocumentReviewDo
Preload(fields ...field.RelationField) IKnowledgeDocumentReviewDo
FirstOrInit() (*model.KnowledgeDocumentReview, error)
FirstOrCreate() (*model.KnowledgeDocumentReview, error)
FindByPage(offset int, limit int) (result []*model.KnowledgeDocumentReview, count int64, err error)
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
Scan(result interface{}) (err error)
Returning(value interface{}, columns ...string) IKnowledgeDocumentReviewDo
UnderlyingDB() *gorm.DB
schema.Tabler
}
func (k knowledgeDocumentReviewDo) Debug() IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Debug())
}
func (k knowledgeDocumentReviewDo) WithContext(ctx context.Context) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.WithContext(ctx))
}
func (k knowledgeDocumentReviewDo) ReadDB() IKnowledgeDocumentReviewDo {
return k.Clauses(dbresolver.Read)
}
func (k knowledgeDocumentReviewDo) WriteDB() IKnowledgeDocumentReviewDo {
return k.Clauses(dbresolver.Write)
}
func (k knowledgeDocumentReviewDo) Session(config *gorm.Session) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Session(config))
}
func (k knowledgeDocumentReviewDo) Clauses(conds ...clause.Expression) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Clauses(conds...))
}
func (k knowledgeDocumentReviewDo) Returning(value interface{}, columns ...string) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Returning(value, columns...))
}
func (k knowledgeDocumentReviewDo) Not(conds ...gen.Condition) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Not(conds...))
}
func (k knowledgeDocumentReviewDo) Or(conds ...gen.Condition) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Or(conds...))
}
func (k knowledgeDocumentReviewDo) Select(conds ...field.Expr) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Select(conds...))
}
func (k knowledgeDocumentReviewDo) Where(conds ...gen.Condition) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Where(conds...))
}
func (k knowledgeDocumentReviewDo) Order(conds ...field.Expr) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Order(conds...))
}
func (k knowledgeDocumentReviewDo) Distinct(cols ...field.Expr) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Distinct(cols...))
}
func (k knowledgeDocumentReviewDo) Omit(cols ...field.Expr) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Omit(cols...))
}
func (k knowledgeDocumentReviewDo) Join(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Join(table, on...))
}
func (k knowledgeDocumentReviewDo) LeftJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.LeftJoin(table, on...))
}
func (k knowledgeDocumentReviewDo) RightJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.RightJoin(table, on...))
}
func (k knowledgeDocumentReviewDo) Group(cols ...field.Expr) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Group(cols...))
}
func (k knowledgeDocumentReviewDo) Having(conds ...gen.Condition) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Having(conds...))
}
func (k knowledgeDocumentReviewDo) Limit(limit int) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Limit(limit))
}
func (k knowledgeDocumentReviewDo) Offset(offset int) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Offset(offset))
}
func (k knowledgeDocumentReviewDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Scopes(funcs...))
}
func (k knowledgeDocumentReviewDo) Unscoped() IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Unscoped())
}
func (k knowledgeDocumentReviewDo) Create(values ...*model.KnowledgeDocumentReview) error {
if len(values) == 0 {
return nil
}
return k.DO.Create(values)
}
func (k knowledgeDocumentReviewDo) CreateInBatches(values []*model.KnowledgeDocumentReview, batchSize int) error {
return k.DO.CreateInBatches(values, batchSize)
}
// Save : !!! underlying implementation is different with GORM
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
func (k knowledgeDocumentReviewDo) Save(values ...*model.KnowledgeDocumentReview) error {
if len(values) == 0 {
return nil
}
return k.DO.Save(values)
}
func (k knowledgeDocumentReviewDo) First() (*model.KnowledgeDocumentReview, error) {
if result, err := k.DO.First(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocumentReview), nil
}
}
func (k knowledgeDocumentReviewDo) Take() (*model.KnowledgeDocumentReview, error) {
if result, err := k.DO.Take(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocumentReview), nil
}
}
func (k knowledgeDocumentReviewDo) Last() (*model.KnowledgeDocumentReview, error) {
if result, err := k.DO.Last(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocumentReview), nil
}
}
func (k knowledgeDocumentReviewDo) Find() ([]*model.KnowledgeDocumentReview, error) {
result, err := k.DO.Find()
return result.([]*model.KnowledgeDocumentReview), err
}
func (k knowledgeDocumentReviewDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.KnowledgeDocumentReview, err error) {
buf := make([]*model.KnowledgeDocumentReview, 0, batchSize)
err = k.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
defer func() { results = append(results, buf...) }()
return fc(tx, batch)
})
return results, err
}
func (k knowledgeDocumentReviewDo) FindInBatches(result *[]*model.KnowledgeDocumentReview, batchSize int, fc func(tx gen.Dao, batch int) error) error {
return k.DO.FindInBatches(result, batchSize, fc)
}
func (k knowledgeDocumentReviewDo) Attrs(attrs ...field.AssignExpr) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Attrs(attrs...))
}
func (k knowledgeDocumentReviewDo) Assign(attrs ...field.AssignExpr) IKnowledgeDocumentReviewDo {
return k.withDO(k.DO.Assign(attrs...))
}
func (k knowledgeDocumentReviewDo) Joins(fields ...field.RelationField) IKnowledgeDocumentReviewDo {
for _, _f := range fields {
k = *k.withDO(k.DO.Joins(_f))
}
return &k
}
func (k knowledgeDocumentReviewDo) Preload(fields ...field.RelationField) IKnowledgeDocumentReviewDo {
for _, _f := range fields {
k = *k.withDO(k.DO.Preload(_f))
}
return &k
}
func (k knowledgeDocumentReviewDo) FirstOrInit() (*model.KnowledgeDocumentReview, error) {
if result, err := k.DO.FirstOrInit(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocumentReview), nil
}
}
func (k knowledgeDocumentReviewDo) FirstOrCreate() (*model.KnowledgeDocumentReview, error) {
if result, err := k.DO.FirstOrCreate(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocumentReview), nil
}
}
func (k knowledgeDocumentReviewDo) FindByPage(offset int, limit int) (result []*model.KnowledgeDocumentReview, count int64, err error) {
result, err = k.Offset(offset).Limit(limit).Find()
if err != nil {
return
}
if size := len(result); 0 < limit && 0 < size && size < limit {
count = int64(size + offset)
return
}
count, err = k.Offset(-1).Limit(-1).Count()
return
}
func (k knowledgeDocumentReviewDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
count, err = k.Count()
if err != nil {
return
}
err = k.Offset(offset).Limit(limit).Scan(result)
return
}
func (k knowledgeDocumentReviewDo) Scan(result interface{}) (err error) {
return k.DO.Scan(result)
}
func (k knowledgeDocumentReviewDo) Delete(models ...*model.KnowledgeDocumentReview) (result gen.ResultInfo, err error) {
return k.DO.Delete(models)
}
func (k *knowledgeDocumentReviewDo) withDO(do gen.Dao) *knowledgeDocumentReviewDo {
k.DO = *do.(*gen.DO)
return k
}

View File

@@ -0,0 +1,429 @@
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package query
import (
"context"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"gorm.io/gorm/schema"
"gorm.io/gen"
"gorm.io/gen/field"
"gorm.io/plugin/dbresolver"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
)
func newKnowledgeDocumentSlice(db *gorm.DB, opts ...gen.DOOption) knowledgeDocumentSlice {
_knowledgeDocumentSlice := knowledgeDocumentSlice{}
_knowledgeDocumentSlice.knowledgeDocumentSliceDo.UseDB(db, opts...)
_knowledgeDocumentSlice.knowledgeDocumentSliceDo.UseModel(&model.KnowledgeDocumentSlice{})
tableName := _knowledgeDocumentSlice.knowledgeDocumentSliceDo.TableName()
_knowledgeDocumentSlice.ALL = field.NewAsterisk(tableName)
_knowledgeDocumentSlice.ID = field.NewInt64(tableName, "id")
_knowledgeDocumentSlice.KnowledgeID = field.NewInt64(tableName, "knowledge_id")
_knowledgeDocumentSlice.DocumentID = field.NewInt64(tableName, "document_id")
_knowledgeDocumentSlice.Content = field.NewString(tableName, "content")
_knowledgeDocumentSlice.Sequence = field.NewFloat64(tableName, "sequence")
_knowledgeDocumentSlice.CreatedAt = field.NewInt64(tableName, "created_at")
_knowledgeDocumentSlice.UpdatedAt = field.NewInt64(tableName, "updated_at")
_knowledgeDocumentSlice.DeletedAt = field.NewField(tableName, "deleted_at")
_knowledgeDocumentSlice.CreatorID = field.NewInt64(tableName, "creator_id")
_knowledgeDocumentSlice.SpaceID = field.NewInt64(tableName, "space_id")
_knowledgeDocumentSlice.Status = field.NewInt32(tableName, "status")
_knowledgeDocumentSlice.FailReason = field.NewString(tableName, "fail_reason")
_knowledgeDocumentSlice.Hit = field.NewInt64(tableName, "hit")
_knowledgeDocumentSlice.fillFieldMap()
return _knowledgeDocumentSlice
}
// knowledgeDocumentSlice 知识库文件切片表
type knowledgeDocumentSlice struct {
knowledgeDocumentSliceDo
ALL field.Asterisk
ID field.Int64 // 主键ID
KnowledgeID field.Int64 // knowledge id
DocumentID field.Int64 // document id
Content field.String // 切片内容
Sequence field.Float64 // 切片顺序号, 从1开始
CreatedAt field.Int64 // Create Time in Milliseconds
UpdatedAt field.Int64 // Update Time in Milliseconds
DeletedAt field.Field // Delete Time in Milliseconds
CreatorID field.Int64 // 创建者ID
SpaceID field.Int64 // 空间ID
Status field.Int32 // 状态
FailReason field.String // 失败原因
Hit field.Int64 // 命中次数
fieldMap map[string]field.Expr
}
func (k knowledgeDocumentSlice) Table(newTableName string) *knowledgeDocumentSlice {
k.knowledgeDocumentSliceDo.UseTable(newTableName)
return k.updateTableName(newTableName)
}
func (k knowledgeDocumentSlice) As(alias string) *knowledgeDocumentSlice {
k.knowledgeDocumentSliceDo.DO = *(k.knowledgeDocumentSliceDo.As(alias).(*gen.DO))
return k.updateTableName(alias)
}
func (k *knowledgeDocumentSlice) updateTableName(table string) *knowledgeDocumentSlice {
k.ALL = field.NewAsterisk(table)
k.ID = field.NewInt64(table, "id")
k.KnowledgeID = field.NewInt64(table, "knowledge_id")
k.DocumentID = field.NewInt64(table, "document_id")
k.Content = field.NewString(table, "content")
k.Sequence = field.NewFloat64(table, "sequence")
k.CreatedAt = field.NewInt64(table, "created_at")
k.UpdatedAt = field.NewInt64(table, "updated_at")
k.DeletedAt = field.NewField(table, "deleted_at")
k.CreatorID = field.NewInt64(table, "creator_id")
k.SpaceID = field.NewInt64(table, "space_id")
k.Status = field.NewInt32(table, "status")
k.FailReason = field.NewString(table, "fail_reason")
k.Hit = field.NewInt64(table, "hit")
k.fillFieldMap()
return k
}
func (k *knowledgeDocumentSlice) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
_f, ok := k.fieldMap[fieldName]
if !ok || _f == nil {
return nil, false
}
_oe, ok := _f.(field.OrderExpr)
return _oe, ok
}
func (k *knowledgeDocumentSlice) fillFieldMap() {
k.fieldMap = make(map[string]field.Expr, 13)
k.fieldMap["id"] = k.ID
k.fieldMap["knowledge_id"] = k.KnowledgeID
k.fieldMap["document_id"] = k.DocumentID
k.fieldMap["content"] = k.Content
k.fieldMap["sequence"] = k.Sequence
k.fieldMap["created_at"] = k.CreatedAt
k.fieldMap["updated_at"] = k.UpdatedAt
k.fieldMap["deleted_at"] = k.DeletedAt
k.fieldMap["creator_id"] = k.CreatorID
k.fieldMap["space_id"] = k.SpaceID
k.fieldMap["status"] = k.Status
k.fieldMap["fail_reason"] = k.FailReason
k.fieldMap["hit"] = k.Hit
}
func (k knowledgeDocumentSlice) clone(db *gorm.DB) knowledgeDocumentSlice {
k.knowledgeDocumentSliceDo.ReplaceConnPool(db.Statement.ConnPool)
return k
}
func (k knowledgeDocumentSlice) replaceDB(db *gorm.DB) knowledgeDocumentSlice {
k.knowledgeDocumentSliceDo.ReplaceDB(db)
return k
}
type knowledgeDocumentSliceDo struct{ gen.DO }
type IKnowledgeDocumentSliceDo interface {
gen.SubQuery
Debug() IKnowledgeDocumentSliceDo
WithContext(ctx context.Context) IKnowledgeDocumentSliceDo
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
ReplaceDB(db *gorm.DB)
ReadDB() IKnowledgeDocumentSliceDo
WriteDB() IKnowledgeDocumentSliceDo
As(alias string) gen.Dao
Session(config *gorm.Session) IKnowledgeDocumentSliceDo
Columns(cols ...field.Expr) gen.Columns
Clauses(conds ...clause.Expression) IKnowledgeDocumentSliceDo
Not(conds ...gen.Condition) IKnowledgeDocumentSliceDo
Or(conds ...gen.Condition) IKnowledgeDocumentSliceDo
Select(conds ...field.Expr) IKnowledgeDocumentSliceDo
Where(conds ...gen.Condition) IKnowledgeDocumentSliceDo
Order(conds ...field.Expr) IKnowledgeDocumentSliceDo
Distinct(cols ...field.Expr) IKnowledgeDocumentSliceDo
Omit(cols ...field.Expr) IKnowledgeDocumentSliceDo
Join(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentSliceDo
LeftJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentSliceDo
RightJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentSliceDo
Group(cols ...field.Expr) IKnowledgeDocumentSliceDo
Having(conds ...gen.Condition) IKnowledgeDocumentSliceDo
Limit(limit int) IKnowledgeDocumentSliceDo
Offset(offset int) IKnowledgeDocumentSliceDo
Count() (count int64, err error)
Scopes(funcs ...func(gen.Dao) gen.Dao) IKnowledgeDocumentSliceDo
Unscoped() IKnowledgeDocumentSliceDo
Create(values ...*model.KnowledgeDocumentSlice) error
CreateInBatches(values []*model.KnowledgeDocumentSlice, batchSize int) error
Save(values ...*model.KnowledgeDocumentSlice) error
First() (*model.KnowledgeDocumentSlice, error)
Take() (*model.KnowledgeDocumentSlice, error)
Last() (*model.KnowledgeDocumentSlice, error)
Find() ([]*model.KnowledgeDocumentSlice, error)
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.KnowledgeDocumentSlice, err error)
FindInBatches(result *[]*model.KnowledgeDocumentSlice, batchSize int, fc func(tx gen.Dao, batch int) error) error
Pluck(column field.Expr, dest interface{}) error
Delete(...*model.KnowledgeDocumentSlice) (info gen.ResultInfo, err error)
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
Updates(value interface{}) (info gen.ResultInfo, err error)
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
UpdateFrom(q gen.SubQuery) gen.Dao
Attrs(attrs ...field.AssignExpr) IKnowledgeDocumentSliceDo
Assign(attrs ...field.AssignExpr) IKnowledgeDocumentSliceDo
Joins(fields ...field.RelationField) IKnowledgeDocumentSliceDo
Preload(fields ...field.RelationField) IKnowledgeDocumentSliceDo
FirstOrInit() (*model.KnowledgeDocumentSlice, error)
FirstOrCreate() (*model.KnowledgeDocumentSlice, error)
FindByPage(offset int, limit int) (result []*model.KnowledgeDocumentSlice, count int64, err error)
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
Scan(result interface{}) (err error)
Returning(value interface{}, columns ...string) IKnowledgeDocumentSliceDo
UnderlyingDB() *gorm.DB
schema.Tabler
}
func (k knowledgeDocumentSliceDo) Debug() IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Debug())
}
func (k knowledgeDocumentSliceDo) WithContext(ctx context.Context) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.WithContext(ctx))
}
func (k knowledgeDocumentSliceDo) ReadDB() IKnowledgeDocumentSliceDo {
return k.Clauses(dbresolver.Read)
}
func (k knowledgeDocumentSliceDo) WriteDB() IKnowledgeDocumentSliceDo {
return k.Clauses(dbresolver.Write)
}
func (k knowledgeDocumentSliceDo) Session(config *gorm.Session) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Session(config))
}
func (k knowledgeDocumentSliceDo) Clauses(conds ...clause.Expression) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Clauses(conds...))
}
func (k knowledgeDocumentSliceDo) Returning(value interface{}, columns ...string) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Returning(value, columns...))
}
func (k knowledgeDocumentSliceDo) Not(conds ...gen.Condition) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Not(conds...))
}
func (k knowledgeDocumentSliceDo) Or(conds ...gen.Condition) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Or(conds...))
}
func (k knowledgeDocumentSliceDo) Select(conds ...field.Expr) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Select(conds...))
}
func (k knowledgeDocumentSliceDo) Where(conds ...gen.Condition) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Where(conds...))
}
func (k knowledgeDocumentSliceDo) Order(conds ...field.Expr) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Order(conds...))
}
func (k knowledgeDocumentSliceDo) Distinct(cols ...field.Expr) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Distinct(cols...))
}
func (k knowledgeDocumentSliceDo) Omit(cols ...field.Expr) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Omit(cols...))
}
func (k knowledgeDocumentSliceDo) Join(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Join(table, on...))
}
func (k knowledgeDocumentSliceDo) LeftJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.LeftJoin(table, on...))
}
func (k knowledgeDocumentSliceDo) RightJoin(table schema.Tabler, on ...field.Expr) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.RightJoin(table, on...))
}
func (k knowledgeDocumentSliceDo) Group(cols ...field.Expr) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Group(cols...))
}
func (k knowledgeDocumentSliceDo) Having(conds ...gen.Condition) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Having(conds...))
}
func (k knowledgeDocumentSliceDo) Limit(limit int) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Limit(limit))
}
func (k knowledgeDocumentSliceDo) Offset(offset int) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Offset(offset))
}
func (k knowledgeDocumentSliceDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Scopes(funcs...))
}
func (k knowledgeDocumentSliceDo) Unscoped() IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Unscoped())
}
func (k knowledgeDocumentSliceDo) Create(values ...*model.KnowledgeDocumentSlice) error {
if len(values) == 0 {
return nil
}
return k.DO.Create(values)
}
func (k knowledgeDocumentSliceDo) CreateInBatches(values []*model.KnowledgeDocumentSlice, batchSize int) error {
return k.DO.CreateInBatches(values, batchSize)
}
// Save : !!! underlying implementation is different with GORM
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
func (k knowledgeDocumentSliceDo) Save(values ...*model.KnowledgeDocumentSlice) error {
if len(values) == 0 {
return nil
}
return k.DO.Save(values)
}
func (k knowledgeDocumentSliceDo) First() (*model.KnowledgeDocumentSlice, error) {
if result, err := k.DO.First(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocumentSlice), nil
}
}
func (k knowledgeDocumentSliceDo) Take() (*model.KnowledgeDocumentSlice, error) {
if result, err := k.DO.Take(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocumentSlice), nil
}
}
func (k knowledgeDocumentSliceDo) Last() (*model.KnowledgeDocumentSlice, error) {
if result, err := k.DO.Last(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocumentSlice), nil
}
}
func (k knowledgeDocumentSliceDo) Find() ([]*model.KnowledgeDocumentSlice, error) {
result, err := k.DO.Find()
return result.([]*model.KnowledgeDocumentSlice), err
}
func (k knowledgeDocumentSliceDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*model.KnowledgeDocumentSlice, err error) {
buf := make([]*model.KnowledgeDocumentSlice, 0, batchSize)
err = k.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
defer func() { results = append(results, buf...) }()
return fc(tx, batch)
})
return results, err
}
func (k knowledgeDocumentSliceDo) FindInBatches(result *[]*model.KnowledgeDocumentSlice, batchSize int, fc func(tx gen.Dao, batch int) error) error {
return k.DO.FindInBatches(result, batchSize, fc)
}
func (k knowledgeDocumentSliceDo) Attrs(attrs ...field.AssignExpr) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Attrs(attrs...))
}
func (k knowledgeDocumentSliceDo) Assign(attrs ...field.AssignExpr) IKnowledgeDocumentSliceDo {
return k.withDO(k.DO.Assign(attrs...))
}
func (k knowledgeDocumentSliceDo) Joins(fields ...field.RelationField) IKnowledgeDocumentSliceDo {
for _, _f := range fields {
k = *k.withDO(k.DO.Joins(_f))
}
return &k
}
func (k knowledgeDocumentSliceDo) Preload(fields ...field.RelationField) IKnowledgeDocumentSliceDo {
for _, _f := range fields {
k = *k.withDO(k.DO.Preload(_f))
}
return &k
}
func (k knowledgeDocumentSliceDo) FirstOrInit() (*model.KnowledgeDocumentSlice, error) {
if result, err := k.DO.FirstOrInit(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocumentSlice), nil
}
}
func (k knowledgeDocumentSliceDo) FirstOrCreate() (*model.KnowledgeDocumentSlice, error) {
if result, err := k.DO.FirstOrCreate(); err != nil {
return nil, err
} else {
return result.(*model.KnowledgeDocumentSlice), nil
}
}
func (k knowledgeDocumentSliceDo) FindByPage(offset int, limit int) (result []*model.KnowledgeDocumentSlice, count int64, err error) {
result, err = k.Offset(offset).Limit(limit).Find()
if err != nil {
return
}
if size := len(result); 0 < limit && 0 < size && size < limit {
count = int64(size + offset)
return
}
count, err = k.Offset(-1).Limit(-1).Count()
return
}
func (k knowledgeDocumentSliceDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
count, err = k.Count()
if err != nil {
return
}
err = k.Offset(offset).Limit(limit).Scan(result)
return
}
func (k knowledgeDocumentSliceDo) Scan(result interface{}) (err error) {
return k.DO.Scan(result)
}
func (k knowledgeDocumentSliceDo) Delete(models ...*model.KnowledgeDocumentSlice) (result gen.ResultInfo, err error) {
return k.DO.Delete(models)
}
func (k *knowledgeDocumentSliceDo) withDO(do gen.Dao) *knowledgeDocumentSliceDo {
k.DO = *do.(*gen.DO)
return k
}

View File

@@ -0,0 +1,59 @@
/*
* Copyright 2025 coze-dev Authors
*
* Licensed 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 events
import "github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
func NewIndexDocumentsEvent(knowledgeID int64, documents []*entity.Document) *entity.Event {
return &entity.Event{
Type: entity.EventTypeIndexDocuments,
KnowledgeID: knowledgeID,
Documents: documents,
}
}
func NewIndexDocumentEvent(knowledgeID int64, document *entity.Document) *entity.Event {
return &entity.Event{
Type: entity.EventTypeIndexDocument,
KnowledgeID: knowledgeID,
Document: document,
}
}
func NewIndexSliceEvent(slice *entity.Slice, document *entity.Document) *entity.Event {
return &entity.Event{
Type: entity.EventTypeIndexSlice,
Slice: slice,
Document: document,
}
}
func NewDeleteKnowledgeDataEvent(knowledgeID int64, sliceIDs []int64) *entity.Event {
return &entity.Event{
Type: entity.EventTypeDeleteKnowledgeData,
KnowledgeID: knowledgeID,
SliceIDs: sliceIDs,
}
}
func NewDocumentReviewEvent(document *entity.Document, review *entity.Review) *entity.Event {
return &entity.Event{
Type: entity.EventTypeDocumentReview,
Document: document,
DocumentReview: review,
}
}

View File

@@ -0,0 +1,176 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: knowledge.go
//
// Generated by this command:
//
// mockgen -destination ../../mock/dal/dao/knowledge.go --package dao -source knowledge.go
//
// Package dao is a generated GoMock package.
package dao
import (
context "context"
reflect "reflect"
gomock "go.uber.org/mock/gomock"
gorm "gorm.io/gorm"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
model "github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
)
// MockKnowledgeRepo is a mock of KnowledgeRepo interface.
type MockKnowledgeRepo struct {
ctrl *gomock.Controller
recorder *MockKnowledgeRepoMockRecorder
}
// MockKnowledgeRepoMockRecorder is the mock recorder for MockKnowledgeRepo.
type MockKnowledgeRepoMockRecorder struct {
mock *MockKnowledgeRepo
}
// NewMockKnowledgeRepo creates a new mock instance.
func NewMockKnowledgeRepo(ctrl *gomock.Controller) *MockKnowledgeRepo {
mock := &MockKnowledgeRepo{ctrl: ctrl}
mock.recorder = &MockKnowledgeRepoMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockKnowledgeRepo) EXPECT() *MockKnowledgeRepoMockRecorder {
return m.recorder
}
// Create mocks base method.
func (m *MockKnowledgeRepo) Create(ctx context.Context, knowledge *model.Knowledge) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Create", ctx, knowledge)
ret0, _ := ret[0].(error)
return ret0
}
// Create indicates an expected call of Create.
func (mr *MockKnowledgeRepoMockRecorder) Create(ctx, knowledge any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockKnowledgeRepo)(nil).Create), ctx, knowledge)
}
// Delete mocks base method.
func (m *MockKnowledgeRepo) Delete(ctx context.Context, id int64) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Delete", ctx, id)
ret0, _ := ret[0].(error)
return ret0
}
// Delete indicates an expected call of Delete.
func (mr *MockKnowledgeRepoMockRecorder) Delete(ctx, id any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockKnowledgeRepo)(nil).Delete), ctx, id)
}
// FilterEnableKnowledge mocks base method.
func (m *MockKnowledgeRepo) FilterEnableKnowledge(ctx context.Context, ids []int64) ([]*model.Knowledge, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "FilterEnableKnowledge", ctx, ids)
ret0, _ := ret[0].([]*model.Knowledge)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// FilterEnableKnowledge indicates an expected call of FilterEnableKnowledge.
func (mr *MockKnowledgeRepoMockRecorder) FilterEnableKnowledge(ctx, ids any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FilterEnableKnowledge", reflect.TypeOf((*MockKnowledgeRepo)(nil).FilterEnableKnowledge), ctx, ids)
}
// FindKnowledgeByCondition mocks base method.
func (m *MockKnowledgeRepo) FindKnowledgeByCondition(ctx context.Context, opts *entity.WhereKnowledgeOption) ([]*model.Knowledge, int64, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "FindKnowledgeByCondition", ctx, opts)
ret0, _ := ret[0].([]*model.Knowledge)
ret1, _ := ret[1].(int64)
ret2, _ := ret[2].(error)
return ret0, ret1, ret2
}
// FindKnowledgeByCondition indicates an expected call of FindKnowledgeByCondition.
func (mr *MockKnowledgeRepoMockRecorder) FindKnowledgeByCondition(ctx, opts any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindKnowledgeByCondition", reflect.TypeOf((*MockKnowledgeRepo)(nil).FindKnowledgeByCondition), ctx, opts)
}
// GetByID mocks base method.
func (m *MockKnowledgeRepo) GetByID(ctx context.Context, id int64) (*model.Knowledge, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetByID", ctx, id)
ret0, _ := ret[0].(*model.Knowledge)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetByID indicates an expected call of GetByID.
func (mr *MockKnowledgeRepoMockRecorder) GetByID(ctx, id any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByID", reflect.TypeOf((*MockKnowledgeRepo)(nil).GetByID), ctx, id)
}
// InitTx mocks base method.
func (m *MockKnowledgeRepo) InitTx() (*gorm.DB, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "InitTx")
ret0, _ := ret[0].(*gorm.DB)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// InitTx indicates an expected call of InitTx.
func (mr *MockKnowledgeRepoMockRecorder) InitTx() *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InitTx", reflect.TypeOf((*MockKnowledgeRepo)(nil).InitTx))
}
// MGetByID mocks base method.
func (m *MockKnowledgeRepo) MGetByID(ctx context.Context, ids []int64) ([]*model.Knowledge, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "MGetByID", ctx, ids)
ret0, _ := ret[0].([]*model.Knowledge)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// MGetByID indicates an expected call of MGetByID.
func (mr *MockKnowledgeRepoMockRecorder) MGetByID(ctx, ids any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MGetByID", reflect.TypeOf((*MockKnowledgeRepo)(nil).MGetByID), ctx, ids)
}
// Update mocks base method.
func (m *MockKnowledgeRepo) Update(ctx context.Context, knowledge *model.Knowledge) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Update", ctx, knowledge)
ret0, _ := ret[0].(error)
return ret0
}
// Update indicates an expected call of Update.
func (mr *MockKnowledgeRepoMockRecorder) Update(ctx, knowledge any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockKnowledgeRepo)(nil).Update), ctx, knowledge)
}
// UpdateWithTx mocks base method.
func (m *MockKnowledgeRepo) UpdateWithTx(ctx context.Context, tx *gorm.DB, knowledgeID int64, updateMap map[string]any) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "UpdateWithTx", ctx, tx, knowledgeID, updateMap)
ret0, _ := ret[0].(error)
return ret0
}
// UpdateWithTx indicates an expected call of UpdateWithTx.
func (mr *MockKnowledgeRepoMockRecorder) UpdateWithTx(ctx, tx, knowledgeID, updateMap any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateWithTx", reflect.TypeOf((*MockKnowledgeRepo)(nil).UpdateWithTx), ctx, tx, knowledgeID, updateMap)
}

View File

@@ -0,0 +1,206 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: knowledge_document.go
//
// Generated by this command:
//
// mockgen -destination ../../mock/dal/dao/knowledge_document.go --package dao -source knowledge_document.go
//
// Package dao is a generated GoMock package.
package dao
import (
context "context"
reflect "reflect"
gomock "go.uber.org/mock/gomock"
gorm "gorm.io/gorm"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
model "github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
)
// MockKnowledgeDocumentRepo is a mock of KnowledgeDocumentRepo interface.
type MockKnowledgeDocumentRepo struct {
ctrl *gomock.Controller
recorder *MockKnowledgeDocumentRepoMockRecorder
isgomock struct{}
}
// MockKnowledgeDocumentRepoMockRecorder is the mock recorder for MockKnowledgeDocumentRepo.
type MockKnowledgeDocumentRepoMockRecorder struct {
mock *MockKnowledgeDocumentRepo
}
// NewMockKnowledgeDocumentRepo creates a new mock instance.
func NewMockKnowledgeDocumentRepo(ctrl *gomock.Controller) *MockKnowledgeDocumentRepo {
mock := &MockKnowledgeDocumentRepo{ctrl: ctrl}
mock.recorder = &MockKnowledgeDocumentRepoMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockKnowledgeDocumentRepo) EXPECT() *MockKnowledgeDocumentRepoMockRecorder {
return m.recorder
}
// Create mocks base method.
func (m *MockKnowledgeDocumentRepo) Create(ctx context.Context, document *model.KnowledgeDocument) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Create", ctx, document)
ret0, _ := ret[0].(error)
return ret0
}
// Create indicates an expected call of Create.
func (mr *MockKnowledgeDocumentRepoMockRecorder) Create(ctx, document any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).Create), ctx, document)
}
// CreateWithTx mocks base method.
func (m *MockKnowledgeDocumentRepo) CreateWithTx(ctx context.Context, tx *gorm.DB, document []*model.KnowledgeDocument) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "CreateWithTx", ctx, tx, document)
ret0, _ := ret[0].(error)
return ret0
}
// CreateWithTx indicates an expected call of CreateWithTx.
func (mr *MockKnowledgeDocumentRepoMockRecorder) CreateWithTx(ctx, tx, document any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateWithTx", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).CreateWithTx), ctx, tx, document)
}
// Delete mocks base method.
func (m *MockKnowledgeDocumentRepo) Delete(ctx context.Context, id int64) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Delete", ctx, id)
ret0, _ := ret[0].(error)
return ret0
}
// Delete indicates an expected call of Delete.
func (mr *MockKnowledgeDocumentRepoMockRecorder) Delete(ctx, id any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).Delete), ctx, id)
}
// DeleteDocuments mocks base method.
func (m *MockKnowledgeDocumentRepo) DeleteDocuments(ctx context.Context, ids []int64) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "DeleteDocuments", ctx, ids)
ret0, _ := ret[0].(error)
return ret0
}
// DeleteDocuments indicates an expected call of DeleteDocuments.
func (mr *MockKnowledgeDocumentRepoMockRecorder) DeleteDocuments(ctx, ids any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteDocuments", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).DeleteDocuments), ctx, ids)
}
// FindDocumentByCondition mocks base method.
func (m *MockKnowledgeDocumentRepo) FindDocumentByCondition(ctx context.Context, opts *entity.WhereDocumentOpt) ([]*model.KnowledgeDocument, int64, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "FindDocumentByCondition", ctx, opts)
ret0, _ := ret[0].([]*model.KnowledgeDocument)
ret1, _ := ret[1].(int64)
ret2, _ := ret[2].(error)
return ret0, ret1, ret2
}
// FindDocumentByCondition indicates an expected call of FindDocumentByCondition.
func (mr *MockKnowledgeDocumentRepoMockRecorder) FindDocumentByCondition(ctx, opts any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindDocumentByCondition", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).FindDocumentByCondition), ctx, opts)
}
// GetByID mocks base method.
func (m *MockKnowledgeDocumentRepo) GetByID(ctx context.Context, id int64) (*model.KnowledgeDocument, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetByID", ctx, id)
ret0, _ := ret[0].(*model.KnowledgeDocument)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetByID indicates an expected call of GetByID.
func (mr *MockKnowledgeDocumentRepoMockRecorder) GetByID(ctx, id any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByID", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).GetByID), ctx, id)
}
// List mocks base method.
func (m *MockKnowledgeDocumentRepo) List(ctx context.Context, knowledgeID int64, name *string, limit int, cursor *string) ([]*model.KnowledgeDocument, *string, bool, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "List", ctx, knowledgeID, name, limit, cursor)
ret0, _ := ret[0].([]*model.KnowledgeDocument)
ret1, _ := ret[1].(*string)
ret2, _ := ret[2].(bool)
ret3, _ := ret[3].(error)
return ret0, ret1, ret2, ret3
}
// List indicates an expected call of List.
func (mr *MockKnowledgeDocumentRepoMockRecorder) List(ctx, knowledgeID, name, limit, cursor any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).List), ctx, knowledgeID, name, limit, cursor)
}
// MGetByID mocks base method.
func (m *MockKnowledgeDocumentRepo) MGetByID(ctx context.Context, ids []int64) ([]*model.KnowledgeDocument, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "MGetByID", ctx, ids)
ret0, _ := ret[0].([]*model.KnowledgeDocument)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// MGetByID indicates an expected call of MGetByID.
func (mr *MockKnowledgeDocumentRepoMockRecorder) MGetByID(ctx, ids any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MGetByID", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).MGetByID), ctx, ids)
}
// SetStatus mocks base method.
func (m *MockKnowledgeDocumentRepo) SetStatus(ctx context.Context, documentID int64, status int32, reason string) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "SetStatus", ctx, documentID, status, reason)
ret0, _ := ret[0].(error)
return ret0
}
// SetStatus indicates an expected call of SetStatus.
func (mr *MockKnowledgeDocumentRepoMockRecorder) SetStatus(ctx, documentID, status, reason any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetStatus", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).SetStatus), ctx, documentID, status, reason)
}
// Update mocks base method.
func (m *MockKnowledgeDocumentRepo) Update(ctx context.Context, document *model.KnowledgeDocument) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Update", ctx, document)
ret0, _ := ret[0].(error)
return ret0
}
// Update indicates an expected call of Update.
func (mr *MockKnowledgeDocumentRepoMockRecorder) Update(ctx, document any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).Update), ctx, document)
}
// UpdateDocumentSliceInfo mocks base method.
func (m *MockKnowledgeDocumentRepo) UpdateDocumentSliceInfo(ctx context.Context, documentID int64) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "UpdateDocumentSliceInfo", ctx, documentID)
ret0, _ := ret[0].(error)
return ret0
}
// UpdateDocumentSliceInfo indicates an expected call of UpdateDocumentSliceInfo.
func (mr *MockKnowledgeDocumentRepoMockRecorder) UpdateDocumentSliceInfo(ctx, documentID any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDocumentSliceInfo", reflect.TypeOf((*MockKnowledgeDocumentRepo)(nil).UpdateDocumentSliceInfo), ctx, documentID)
}

View File

@@ -0,0 +1,222 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: knowledge_document_slice.go
//
// Generated by this command:
//
// mockgen -destination ../../mock/dal/dao/knowledge_document_slice.go --package dao -source knowledge_document_slice.go
//
// Package dao is a generated GoMock package.
package dao
import (
context "context"
reflect "reflect"
gomock "go.uber.org/mock/gomock"
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
model "github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
)
// MockKnowledgeDocumentSliceRepo is a mock of KnowledgeDocumentSliceRepo interface.
type MockKnowledgeDocumentSliceRepo struct {
ctrl *gomock.Controller
recorder *MockKnowledgeDocumentSliceRepoMockRecorder
}
// MockKnowledgeDocumentSliceRepoMockRecorder is the mock recorder for MockKnowledgeDocumentSliceRepo.
type MockKnowledgeDocumentSliceRepoMockRecorder struct {
mock *MockKnowledgeDocumentSliceRepo
}
// NewMockKnowledgeDocumentSliceRepo creates a new mock instance.
func NewMockKnowledgeDocumentSliceRepo(ctrl *gomock.Controller) *MockKnowledgeDocumentSliceRepo {
mock := &MockKnowledgeDocumentSliceRepo{ctrl: ctrl}
mock.recorder = &MockKnowledgeDocumentSliceRepoMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockKnowledgeDocumentSliceRepo) EXPECT() *MockKnowledgeDocumentSliceRepoMockRecorder {
return m.recorder
}
// BatchCreate mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) BatchCreate(ctx context.Context, slices []*model.KnowledgeDocumentSlice) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "BatchCreate", ctx, slices)
ret0, _ := ret[0].(error)
return ret0
}
// BatchCreate indicates an expected call of BatchCreate.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) BatchCreate(ctx, slices any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchCreate", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).BatchCreate), ctx, slices)
}
// BatchSetStatus mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) BatchSetStatus(ctx context.Context, ids []int64, status int32, reason string) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "BatchSetStatus", ctx, ids, status, reason)
ret0, _ := ret[0].(error)
return ret0
}
// BatchSetStatus indicates an expected call of BatchSetStatus.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) BatchSetStatus(ctx, ids, status, reason any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchSetStatus", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).BatchSetStatus), ctx, ids, status, reason)
}
// Create mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) Create(ctx context.Context, slice *model.KnowledgeDocumentSlice) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Create", ctx, slice)
ret0, _ := ret[0].(error)
return ret0
}
// Create indicates an expected call of Create.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) Create(ctx, slice any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).Create), ctx, slice)
}
// Delete mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) Delete(ctx context.Context, slice *model.KnowledgeDocumentSlice) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Delete", ctx, slice)
ret0, _ := ret[0].(error)
return ret0
}
// Delete indicates an expected call of Delete.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) Delete(ctx, slice any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).Delete), ctx, slice)
}
// DeleteByDocument mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) DeleteByDocument(ctx context.Context, documentID int64) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "DeleteByDocument", ctx, documentID)
ret0, _ := ret[0].(error)
return ret0
}
// DeleteByDocument indicates an expected call of DeleteByDocument.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) DeleteByDocument(ctx, documentID any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteByDocument", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).DeleteByDocument), ctx, documentID)
}
// FindSliceByCondition mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) FindSliceByCondition(ctx context.Context, opts *entity.WhereSliceOpt) ([]*model.KnowledgeDocumentSlice, int64, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "FindSliceByCondition", ctx, opts)
ret0, _ := ret[0].([]*model.KnowledgeDocumentSlice)
ret1, _ := ret[1].(int64)
ret2, _ := ret[2].(error)
return ret0, ret1, ret2
}
// FindSliceByCondition indicates an expected call of FindSliceByCondition.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) FindSliceByCondition(ctx, opts any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindSliceByCondition", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).FindSliceByCondition), ctx, opts)
}
// GetDocumentSliceIDs mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) GetDocumentSliceIDs(ctx context.Context, docIDs []int64) ([]int64, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetDocumentSliceIDs", ctx, docIDs)
ret0, _ := ret[0].([]int64)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetDocumentSliceIDs indicates an expected call of GetDocumentSliceIDs.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) GetDocumentSliceIDs(ctx, docIDs any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDocumentSliceIDs", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).GetDocumentSliceIDs), ctx, docIDs)
}
// GetSliceBySequence mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) GetSliceBySequence(ctx context.Context, documentID, sequence int64) ([]*model.KnowledgeDocumentSlice, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetSliceBySequence", ctx, documentID, sequence)
ret0, _ := ret[0].([]*model.KnowledgeDocumentSlice)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetSliceBySequence indicates an expected call of GetSliceBySequence.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) GetSliceBySequence(ctx, documentID, sequence any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSliceBySequence", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).GetSliceBySequence), ctx, documentID, sequence)
}
// List mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) List(ctx context.Context, knowledgeID, documentID int64, limit int, cursor *string) ([]*model.KnowledgeDocumentSlice, *string, bool, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "List", ctx, knowledgeID, documentID, limit, cursor)
ret0, _ := ret[0].([]*model.KnowledgeDocumentSlice)
ret1, _ := ret[1].(*string)
ret2, _ := ret[2].(bool)
ret3, _ := ret[3].(error)
return ret0, ret1, ret2, ret3
}
// List indicates an expected call of List.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) List(ctx, knowledgeID, documentID, limit, cursor any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).List), ctx, knowledgeID, documentID, limit, cursor)
}
// ListStatus mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) ListStatus(ctx context.Context, documentID int64, limit int, cursor *string) ([]*model.SliceProgress, *string, bool, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "ListStatus", ctx, documentID, limit, cursor)
ret0, _ := ret[0].([]*model.SliceProgress)
ret1, _ := ret[1].(*string)
ret2, _ := ret[2].(bool)
ret3, _ := ret[3].(error)
return ret0, ret1, ret2, ret3
}
// ListStatus indicates an expected call of ListStatus.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) ListStatus(ctx, documentID, limit, cursor any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListStatus", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).ListStatus), ctx, documentID, limit, cursor)
}
// MGetSlices mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) MGetSlices(ctx context.Context, sliceIDs []int64) ([]*model.KnowledgeDocumentSlice, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "MGetSlices", ctx, sliceIDs)
ret0, _ := ret[0].([]*model.KnowledgeDocumentSlice)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// MGetSlices indicates an expected call of MGetSlices.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) MGetSlices(ctx, sliceIDs any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MGetSlices", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).MGetSlices), ctx, sliceIDs)
}
// Update mocks base method.
func (m *MockKnowledgeDocumentSliceRepo) Update(ctx context.Context, slice *model.KnowledgeDocumentSlice) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Update", ctx, slice)
ret0, _ := ret[0].(error)
return ret0
}
// Update indicates an expected call of Update.
func (mr *MockKnowledgeDocumentSliceRepoMockRecorder) Update(ctx, slice any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockKnowledgeDocumentSliceRepo)(nil).Update), ctx, slice)
}