117 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
| /*
 | |
|  * 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 message
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	"github.com/coze-dev/coze-studio/backend/api/model/crossdomain/message"
 | |
| 	"github.com/coze-dev/coze-studio/backend/domain/conversation/message/entity"
 | |
| 	"github.com/coze-dev/coze-studio/backend/domain/conversation/message/repository"
 | |
| 	"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
 | |
| )
 | |
| 
 | |
| type messageImpl struct {
 | |
| 	Components
 | |
| }
 | |
| 
 | |
| type Components struct {
 | |
| 	MessageRepo repository.MessageRepo
 | |
| }
 | |
| 
 | |
| func NewService(c *Components) Message {
 | |
| 	return &messageImpl{
 | |
| 		Components: *c,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (m *messageImpl) PreCreate(ctx context.Context, msg *entity.Message) (*entity.Message, error) {
 | |
| 	// create message
 | |
| 	return m.MessageRepo.PreCreate(ctx, msg)
 | |
| }
 | |
| 
 | |
| func (m *messageImpl) Create(ctx context.Context, msg *entity.Message) (*entity.Message, error) {
 | |
| 	// create message
 | |
| 	return m.MessageRepo.Create(ctx, msg)
 | |
| }
 | |
| 
 | |
| func (m *messageImpl) List(ctx context.Context, req *entity.ListMeta) (*entity.ListResult, error) {
 | |
| 	resp := &entity.ListResult{}
 | |
| 
 | |
| 	// get message with query
 | |
| 	messageList, hasMore, err := m.MessageRepo.List(ctx, req.ConversationID, req.Limit, req.Cursor, req.Direction, ptr.Of(message.MessageTypeQuestion))
 | |
| 	if err != nil {
 | |
| 		return resp, err
 | |
| 	}
 | |
| 
 | |
| 	resp.Direction = req.Direction
 | |
| 	resp.HasMore = hasMore
 | |
| 
 | |
| 	if len(messageList) > 0 {
 | |
| 		resp.PrevCursor = messageList[len(messageList)-1].CreatedAt
 | |
| 		resp.NextCursor = messageList[0].CreatedAt
 | |
| 
 | |
| 		var runIDs []int64
 | |
| 		for _, m := range messageList {
 | |
| 			runIDs = append(runIDs, m.RunID)
 | |
| 		}
 | |
| 		orderBy := "DESC"
 | |
| 		if req.OrderBy != nil {
 | |
| 			orderBy = *req.OrderBy
 | |
| 		}
 | |
| 		allMessageList, err := m.MessageRepo.GetByRunIDs(ctx, runIDs, orderBy)
 | |
| 		if err != nil {
 | |
| 			return resp, err
 | |
| 		}
 | |
| 		resp.Messages = allMessageList
 | |
| 	}
 | |
| 	return resp, nil
 | |
| }
 | |
| 
 | |
| func (m *messageImpl) GetByRunIDs(ctx context.Context, conversationID int64, runIDs []int64) ([]*entity.Message, error) {
 | |
| 	return m.MessageRepo.GetByRunIDs(ctx, runIDs, "ASC")
 | |
| }
 | |
| 
 | |
| func (m *messageImpl) Edit(ctx context.Context, req *entity.Message) (*entity.Message, error) {
 | |
| 	_, err := m.MessageRepo.Edit(ctx, req.ID, req)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	return req, nil
 | |
| }
 | |
| 
 | |
| func (m *messageImpl) Delete(ctx context.Context, req *entity.DeleteMeta) error {
 | |
| 	return m.MessageRepo.Delete(ctx, req.MessageIDs, req.RunIDs)
 | |
| }
 | |
| 
 | |
| func (m *messageImpl) GetByID(ctx context.Context, id int64) (*entity.Message, error) {
 | |
| 	return m.MessageRepo.GetByID(ctx, id)
 | |
| }
 | |
| 
 | |
| func (m *messageImpl) Broken(ctx context.Context, req *entity.BrokenMeta) error {
 | |
| 
 | |
| 	_, err := m.MessageRepo.Edit(ctx, req.ID, &message.Message{
 | |
| 		Status:   message.MessageStatusBroken,
 | |
| 		Position: ptr.From(req.Position),
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	return nil
 | |
| }
 |