Files
kandev/apps/backend/internal/task/controller/message.go
T
2026-01-15 20:31:39 +00:00

79 lines
2.1 KiB
Go

package controller
import (
"context"
"github.com/kandev/kandev/internal/task/dto"
"github.com/kandev/kandev/internal/task/service"
v1 "github.com/kandev/kandev/pkg/api/v1"
)
type MessageController struct {
service *service.Service
}
func NewMessageController(svc *service.Service) *MessageController {
return &MessageController{service: svc}
}
func (c *MessageController) ListMessages(ctx context.Context, req dto.ListMessagesRequest) (dto.ListMessagesResponse, error) {
messages, hasMore, err := c.service.ListMessagesPaginated(ctx, service.ListMessagesRequest{
TaskSessionID: req.TaskSessionID,
Limit: req.Limit,
Before: req.Before,
After: req.After,
Sort: req.Sort,
})
if err != nil {
return dto.ListMessagesResponse{}, err
}
result := make([]*v1.Message, 0, len(messages))
for _, message := range messages {
result = append(result, message.ToAPI())
}
cursor := ""
if len(result) > 0 {
cursor = result[len(result)-1].ID
}
return dto.ListMessagesResponse{
Messages: result,
Total: len(result),
HasMore: hasMore,
Cursor: cursor,
}, nil
}
func (c *MessageController) ListAllMessages(ctx context.Context, sessionID string) (dto.ListMessagesResponse, error) {
messages, err := c.service.ListMessages(ctx, sessionID)
if err != nil {
return dto.ListMessagesResponse{}, err
}
result := make([]*v1.Message, 0, len(messages))
for _, message := range messages {
result = append(result, message.ToAPI())
}
return dto.ListMessagesResponse{
Messages: result,
Total: len(result),
HasMore: false,
Cursor: "",
}, nil
}
func (c *MessageController) CreateMessage(ctx context.Context, req dto.CreateMessageRequest) (*v1.Message, error) {
message, err := c.service.CreateMessage(ctx, &service.CreateMessageRequest{
TaskSessionID: req.TaskSessionID,
TaskID: req.TaskID,
Content: req.Content,
AuthorType: req.AuthorType,
AuthorID: req.AuthorID,
Type: req.Type,
RequestsInput: req.RequestsInput,
Metadata: req.Metadata,
})
if err != nil {
return nil, err
}
return message.ToAPI(), nil
}