diff --git a/api/rag/document.proto b/api/rag/document.proto index ac61436..912d0e0 100644 --- a/api/rag/document.proto +++ b/api/rag/document.proto @@ -52,6 +52,7 @@ message ListDocumentBlockResponse { message UpdateDocumentBlockRequest { int64 id = 1; string content = 2; + int64 order = 3; } message UpdateDocumentBlockResponse { diff --git a/ent/migrate/schema.go b/ent/migrate/schema.go index 156466a..f43b648 100644 --- a/ent/migrate/schema.go +++ b/ent/migrate/schema.go @@ -56,9 +56,9 @@ var ( PrimaryKey: []*schema.Column{DocumentBlocksColumns[0]}, Indexes: []*schema.Index{ { - Name: "documentblock_user_id_order", + Name: "documentblock_user_id_order_document_id", Unique: false, - Columns: []*schema.Column{DocumentBlocksColumns[4], DocumentBlocksColumns[2]}, + Columns: []*schema.Column{DocumentBlocksColumns[4], DocumentBlocksColumns[2], DocumentBlocksColumns[3]}, }, }, } diff --git a/ent/schema/documentblock.go b/ent/schema/documentblock.go index 128be9b..804ed2c 100644 --- a/ent/schema/documentblock.go +++ b/ent/schema/documentblock.go @@ -37,6 +37,6 @@ func (DocumentBlock) Edges() []ent.Edge { func (DocumentBlock) Indexes() []ent.Index { return []ent.Index{ - index.Fields("user_id", "order"), + index.Fields("user_id", "order", "document_id"), } } diff --git a/ent/schema/documentblockchunk.go b/ent/schema/documentblockchunk.go new file mode 100644 index 0000000..a89c48c --- /dev/null +++ b/ent/schema/documentblockchunk.go @@ -0,0 +1,35 @@ +package schema + +import ( + "entgo.io/ent" + "entgo.io/ent/schema/edge" + "entgo.io/ent/schema/field" + "entgo.io/ent/schema/index" +) + +// DocumentBlockChunk holds the schema definition for the DocumentBlockChunk entity. +type DocumentBlockChunk struct { + ent.Schema +} + +// Fields of the DocumentBlockChunk. +func (DocumentBlockChunk) Fields() []ent.Field { + return []ent.Field{ + field.String("content"), + field.Int64("document_block_id"), + field.Bool("chunked").Default(false), + } +} + +// Edges of the DocumentBlockChunk. +func (DocumentBlockChunk) Edges() []ent.Edge { + return []ent.Edge{ + edge.To("document_block", DocumentBlock.Type), + } +} + +func (DocumentBlockChunk) Indexes() []ent.Index { + return []ent.Index{ + index.Fields("document_block_id", "chunked"), + } +} diff --git a/internal/logic/document.go b/internal/logic/document.go index 3a8092b..e98493a 100644 --- a/internal/logic/document.go +++ b/internal/logic/document.go @@ -94,11 +94,15 @@ func (d DocumentLogic) ListDocumentBlock(ctx context.Context, documentId int) ([ return nil, consts.ErrDocumentNotFound } - blocks, err := orm.DocumentBlock.Query().Where( + blocks := orm.DocumentBlock.Query().Where( documentblock.DocumentID(int64(documentId)), - ).All(ctx) + ) - return blocks, err + blocks = blocks.Order(ent.Asc(documentblock.FieldOrder)) + + allBlocks, err := blocks.All(ctx) + + return allBlocks, err } diff --git a/internal/migrations/20240722104713_add_document_id_index_to_document_blocks_table.sql b/internal/migrations/20240722104713_add_document_id_index_to_document_blocks_table.sql new file mode 100644 index 0000000..908e436 --- /dev/null +++ b/internal/migrations/20240722104713_add_document_id_index_to_document_blocks_table.sql @@ -0,0 +1,7 @@ +-- +goose Up +-- create index "documentblock_user_id_order_document_id" to table: "document_blocks" +CREATE INDEX "documentblock_user_id_order_document_id" ON "document_blocks" ("user_id", "order", "document_id"); + +-- +goose Down +-- reverse: create index "documentblock_user_id_order_document_id" to table: "document_blocks" +DROP INDEX "documentblock_user_id_order_document_id"; diff --git a/internal/migrations/atlas.sum b/internal/migrations/atlas.sum index 6c89a44..706a9e2 100644 --- a/internal/migrations/atlas.sum +++ b/internal/migrations/atlas.sum @@ -1,3 +1,4 @@ -h1:i8hOFFa2SFOjNMtOo1eFw1/d9UpiSBEi2XMeAacMcEA= -20240720155522_init.sql h1:EV/WhsF30qL+Q4kf1mhNxGP0KQpbVxMhjzUmG1pOEdQ= -20240721084724_remove_name_field_from_document_blocks.sql h1:V/+wh2/7HshCdZNTo4xrAVG7WF8HlcRIKa8285zy2K8= +h1:v4UVmVgqfUE/xwMK5hjP6laAx2UGwfm7KdOmQIOyTOI= +20240720155522_init.sql h1:CKqDLw2sVT+NMqnmrvwtkmbHwNFJTUbdR5q0OtoxF1k= +20240721084724_remove_name_field_from_document_blocks.sql h1:IEUdjs3V5UcCd6As9A829u8CvW3g4DS5xKHDDPHKzlI= +20240722104713_add_document_id_index_to_document_blocks_table.sql h1:Iad/3g4/BLGlbQeB00lUGDVY5KE5BXHeEAFx2gWNjXI= diff --git a/internal/services/rag/documentService.go b/internal/services/rag/documentService.go index 799a5b3..a059e8a 100644 --- a/internal/services/rag/documentService.go +++ b/internal/services/rag/documentService.go @@ -78,11 +78,30 @@ func (Service) CreateDocumentBlock(ctx context.Context, req *ragApi.CreateDocume } func (Service) ListDocumentBlock(ctx context.Context, req *ragApi.ListDocumentBlockRequest) (*ragApi.ListDocumentBlockResponse, error) { - panic("implement me") + documentBlocks, err := documentLogic.ListDocumentBlock(ctx, int(req.DocumentId)) + if err != nil { + return nil, err + } + + var documentBlockApiResponse ragApi.ListDocumentBlockResponse + for _, documentBlock := range documentBlocks { + var documentBlockApiResponseItem = ragApi.DocumentBlock{ + Id: int64(documentBlock.ID), + Content: documentBlock.Content, + DocumentId: documentBlock.DocumentID, + CreatedAt: documentBlock.CreatedAt.String(), + UpdatedAt: documentBlock.UpdatedAt.String(), + } + documentBlockApiResponse.DocumentBlocks = append(documentBlockApiResponse.DocumentBlocks, &documentBlockApiResponseItem) + } + return &documentBlockApiResponse, nil } func (Service) UpdateDocumentBlock(ctx context.Context, req *ragApi.UpdateDocumentBlockRequest) (*ragApi.UpdateDocumentBlockResponse, error) { - panic("implement me") + var updateDB = &models.UpdateDocumentBlock{ + Order: req.Order, + Content: req.Content, + } } func (Service) DeleteDocumentBlock(ctx context.Context, req *ragApi.DeleteDocumentBlockRequest) (*ragApi.DeleteDocumentBlockResponse, error) { diff --git a/models/document.go b/models/document.go index 4303099..8e90d28 100644 --- a/models/document.go +++ b/models/document.go @@ -4,7 +4,14 @@ package models // CreateDocumentBlock CreateDocumentBlock //} -type CreateDocumentBlock struct { - Order int64 `json:"order"` - Content string `json:"content"` -} +type ( + CreateDocumentBlock struct { + Order int64 `json:"order"` + Content string `json:"content"` + } + + UpdateDocumentBlock struct { + Order int64 `json:"order"` + Content string `json:"content"` + } +)