migrate from github
This commit is contained in:
@@ -0,0 +1,712 @@
|
||||
package grpcserver
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/XingfenD/yoresee_doc/internal/dto"
|
||||
doc_container_mapper "github.com/XingfenD/yoresee_doc/internal/mapper/doc_container_mapper"
|
||||
"github.com/XingfenD/yoresee_doc/internal/mapper/doc_type_mapper"
|
||||
"github.com/XingfenD/yoresee_doc/internal/mapper/template_container_mapper"
|
||||
"github.com/XingfenD/yoresee_doc/internal/service/document_service"
|
||||
"github.com/XingfenD/yoresee_doc/internal/status"
|
||||
"github.com/XingfenD/yoresee_doc/internal/utils"
|
||||
pb "github.com/XingfenD/yoresee_doc/pkg/gen/yoresee_doc/v1"
|
||||
)
|
||||
|
||||
type DocumentServiceServer struct {
|
||||
pb.UnimplementedDocumentServiceServer
|
||||
}
|
||||
|
||||
func NewDocumentServiceServer() *DocumentServiceServer {
|
||||
return &DocumentServiceServer{}
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) ListDocuments(ctx context.Context, req *pb.ListDocumentsRequest) (*pb.ListDocumentsResponse, error) {
|
||||
if req == nil {
|
||||
return &pb.ListDocumentsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
filterArgs := &dto.DocumentsListFilterArgs{
|
||||
TitleKeyword: req.TitleKeyword,
|
||||
DocType: req.Type,
|
||||
Tags: req.Tags,
|
||||
}
|
||||
if req.CreateTimeRange != nil {
|
||||
filterArgs.CreateTimeRangeStart = req.CreateTimeRange.Start
|
||||
filterArgs.CreateTimeRangeEnd = req.CreateTimeRange.End
|
||||
}
|
||||
if req.UpdateTimeRange != nil {
|
||||
filterArgs.UpdateTimeRangeStart = req.UpdateTimeRange.Start
|
||||
filterArgs.UpdateTimeRangeEnd = req.UpdateTimeRange.End
|
||||
}
|
||||
|
||||
sortArgs := dto.SortArgs{Field: "created_at", Desc: true}
|
||||
if req.OrderBy != nil {
|
||||
sortArgs.Field = req.GetOrderBy()
|
||||
}
|
||||
if req.OrderDesc != nil {
|
||||
sortArgs.Desc = req.GetOrderDesc()
|
||||
}
|
||||
|
||||
serviceReq := &dto.ListDocumentsByExternalRequest{
|
||||
ExternalArgs: &dto.DocumentsListExternalArgs{
|
||||
UserExternalID: req.UserExternalId,
|
||||
RootDocumentExternalID: req.RootDocumentExternalId,
|
||||
KnowledgeExternalID: req.KnowledgeBaseExternalId,
|
||||
},
|
||||
FilterArgs: filterArgs,
|
||||
SortArgs: sortArgs,
|
||||
Pagination: dto.Pagination{
|
||||
Page: int(req.Page),
|
||||
PageSize: int(req.PageSize),
|
||||
},
|
||||
}
|
||||
if req.Options != nil {
|
||||
serviceReq.Options = &dto.RecursiveOptions{
|
||||
IncludeChildren: req.Options.IncludeChildren,
|
||||
Recursive: req.Options.Recursive,
|
||||
Depth: utils.Of(int(req.Options.Depth)),
|
||||
}
|
||||
}
|
||||
|
||||
docs, total, err := document_service.DocumentSvc.ListDocumentsByExternal(ctx, serviceReq)
|
||||
if err != nil {
|
||||
return &pb.ListDocumentsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
respDocs := make([]*pb.DocumentResponse, 0, len(docs))
|
||||
for _, doc := range docs {
|
||||
respDocs = append(respDocs, toDocumentResponse(doc))
|
||||
}
|
||||
|
||||
return &pb.ListDocumentsResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Documents: respDocs,
|
||||
TotalCount: total,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) GetDocumentContent(ctx context.Context, req *pb.GetDocumentContentRequest) (*pb.GetDocumentContentResponse, error) {
|
||||
if req == nil || req.DocumentExternalId == "" {
|
||||
return &pb.GetDocumentContentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
document, err := document_service.DocumentSvc.GetDocumentByExternalID(ctx, req.DocumentExternalId)
|
||||
if err != nil {
|
||||
return &pb.GetDocumentContentResponse{Base: baseResponseFromErr(status.StatusDocumentNotFound)}, nil
|
||||
}
|
||||
|
||||
return &pb.GetDocumentContentResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Document: toDocumentResponse(&document.DocumentMetaResponse),
|
||||
Content: document.Content,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) GetDocumentSettings(ctx context.Context, req *pb.GetDocumentSettingsRequest) (*pb.GetDocumentSettingsResponse, error) {
|
||||
if req == nil || req.DocumentExternalId == "" {
|
||||
return &pb.GetDocumentSettingsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
settings, err := document_service.DocumentSvc.GetDocumentSettings(ctx, &dto.GetDocumentSettingsRequest{
|
||||
ExternalID: req.DocumentExternalId,
|
||||
})
|
||||
if err != nil {
|
||||
return &pb.GetDocumentSettingsResponse{Base: baseResponseFromErr(status.StatusDocumentNotFound)}, nil
|
||||
}
|
||||
|
||||
return &pb.GetDocumentSettingsResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
IsPublic: utils.Of(settings.IsPublic),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) RecordRecentDocument(ctx context.Context, req *pb.RecordRecentDocumentRequest) (*pb.RecordRecentDocumentResponse, error) {
|
||||
if req == nil || req.DocumentExternalId == "" {
|
||||
return &pb.RecordRecentDocumentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.RecordRecentDocumentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if err := document_service.DocumentSvc.RecordRecentDocument(&dto.RecordRecentDocumentRequest{
|
||||
UserExternalID: userExternalID,
|
||||
DocumentExternalID: req.DocumentExternalId,
|
||||
}); err != nil {
|
||||
return &pb.RecordRecentDocumentResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
return &pb.RecordRecentDocumentResponse{Base: baseResponseFromErr(nil)}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) ListRecentDocuments(ctx context.Context, req *pb.ListRecentDocumentsRequest) (*pb.ListRecentDocumentsResponse, error) {
|
||||
if req == nil {
|
||||
return &pb.ListRecentDocumentsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.ListRecentDocumentsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
var startTime *time.Time
|
||||
if req.StartTime != nil && *req.StartTime != "" {
|
||||
t, err := time.Parse(time.RFC3339, *req.StartTime)
|
||||
if err != nil {
|
||||
return &pb.ListRecentDocumentsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
startTime = &t
|
||||
}
|
||||
var endTime *time.Time
|
||||
if req.EndTime != nil && *req.EndTime != "" {
|
||||
t, err := time.Parse(time.RFC3339, *req.EndTime)
|
||||
if err != nil {
|
||||
return &pb.ListRecentDocumentsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
endTime = &t
|
||||
}
|
||||
|
||||
serviceReq := &dto.ListRecentDocumentsRequest{
|
||||
UserExternalID: userExternalID,
|
||||
StartTime: startTime,
|
||||
EndTime: endTime,
|
||||
Pagination: dto.Pagination{
|
||||
Page: int(req.Page),
|
||||
PageSize: int(req.PageSize),
|
||||
},
|
||||
}
|
||||
documents, total, err := document_service.DocumentSvc.ListRecentDocuments(serviceReq)
|
||||
if err != nil {
|
||||
return &pb.ListRecentDocumentsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
respDocs := make([]*pb.DocumentResponse, 0, len(documents))
|
||||
for _, doc := range documents {
|
||||
respDocs = append(respDocs, toDocumentResponse(&doc.DocumentMetaResponse))
|
||||
}
|
||||
|
||||
return &pb.ListRecentDocumentsResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Documents: respDocs,
|
||||
Total: total,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) GetDocumentYjsSnapshot(ctx context.Context, req *pb.GetDocumentYjsSnapshotRequest) (*pb.GetDocumentYjsSnapshotResponse, error) {
|
||||
if req == nil || req.DocumentExternalId == "" {
|
||||
return &pb.GetDocumentYjsSnapshotResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
state, err := document_service.DocumentSvc.GetDocumentYjsSnapshot(ctx, req.DocumentExternalId)
|
||||
if err != nil {
|
||||
return &pb.GetDocumentYjsSnapshotResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.GetDocumentYjsSnapshotResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
State: state,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) SaveDocumentYjsSnapshot(ctx context.Context, req *pb.SaveDocumentYjsSnapshotRequest) (*pb.SaveDocumentYjsSnapshotResponse, error) {
|
||||
if req == nil || req.DocumentExternalId == "" || len(req.State) == 0 {
|
||||
return &pb.SaveDocumentYjsSnapshotResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
if err := document_service.DocumentSvc.SaveDocumentYjsSnapshot(ctx, req.DocumentExternalId, req.State); err != nil {
|
||||
return &pb.SaveDocumentYjsSnapshotResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.SaveDocumentYjsSnapshotResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) GetOwnDocuments(ctx context.Context, req *pb.GetOwnDocumentsRequest) (*pb.GetOwnDocumentsResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.GetOwnDocumentsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
queryReq := &dto.ListDocumentsByExternalRequest{
|
||||
ExternalArgs: &dto.DocumentsListExternalArgs{
|
||||
UserExternalID: &userExternalID,
|
||||
},
|
||||
ListDocumentsBaseArgs: dto.ListDocumentsBaseArgs{
|
||||
ListOwnDoc: true,
|
||||
DirectoryOnly: req.DirectoryOnly,
|
||||
},
|
||||
Pagination: dto.Pagination{
|
||||
Page: int(req.Page),
|
||||
PageSize: int(req.PageSize),
|
||||
},
|
||||
Options: &dto.RecursiveOptions{
|
||||
IncludeChildren: true,
|
||||
Recursive: true,
|
||||
},
|
||||
}
|
||||
|
||||
docs, count, err := document_service.DocumentSvc.ListDocumentsByExternal(ctx, queryReq)
|
||||
if err != nil {
|
||||
return &pb.GetOwnDocumentsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
respDocs := make([]*pb.DocumentResponse, 0, len(docs))
|
||||
for _, doc := range docs {
|
||||
respDocs = append(respDocs, toDocumentResponse(doc))
|
||||
}
|
||||
|
||||
return &pb.GetOwnDocumentsResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Documents: respDocs,
|
||||
TotalCount: count,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) CreateDocument(ctx context.Context, req *pb.CreateDocumentRequest) (*pb.CreateDocumentResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.CreateDocumentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if req == nil || req.Title == "" {
|
||||
return &pb.CreateDocumentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
dtoReq := &dto.CreateDocumentRequest{
|
||||
Title: req.Title,
|
||||
Type: doc_type_mapper.FromProtoType(req.Type),
|
||||
IsPublic: req.GetIsPublic(),
|
||||
CreatorExternalID: utils.Of(userExternalID),
|
||||
ParentExternalID: req.ParentExternalId,
|
||||
}
|
||||
if req.TemplateId != nil && *req.TemplateId > 0 {
|
||||
dtoReq.TemplateID = req.TemplateId
|
||||
}
|
||||
|
||||
containerType, ok := doc_container_mapper.FromProtoType(req.ContainerType)
|
||||
if !ok {
|
||||
return &pb.CreateDocumentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
dtoReq.ContainerType = containerType
|
||||
if containerType == dto.ContainerType_KnowledgeBase {
|
||||
dtoReq.KnowledgeExternalID = req.KnowledgeBaseExternalId
|
||||
}
|
||||
|
||||
resp, err := document_service.DocumentSvc.Create(ctx, dtoReq)
|
||||
if err != nil {
|
||||
return &pb.CreateDocumentResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.CreateDocumentResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
ExternalId: resp.ExternalID,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) UpdateDocument(ctx context.Context, req *pb.UpdateDocumentRequest) (*pb.UpdateDocumentResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.UpdateDocumentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if err := validateUpdateDocumentRequest(req); err != nil {
|
||||
return &pb.UpdateDocumentResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
serviceReq := &dto.UpdateDocumentRequest{
|
||||
ExternalID: req.ExternalId,
|
||||
Title: req.Title,
|
||||
ParentExternalID: req.ParentExternalId,
|
||||
KnowledgeBaseExternalID: req.KnowledgeBaseExternalId,
|
||||
Content: req.Content,
|
||||
}
|
||||
|
||||
if req.MoveToContainer != nil {
|
||||
moveToContainer, ok := doc_container_mapper.FromProtoType(*req.MoveToContainer)
|
||||
if !ok {
|
||||
return &pb.UpdateDocumentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
serviceReq.MoveToContainer = utils.Of(moveToContainer)
|
||||
}
|
||||
|
||||
if _, err := document_service.DocumentSvc.Update(ctx, serviceReq); err != nil {
|
||||
return &pb.UpdateDocumentResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.UpdateDocumentResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) UpdateDocumentMeta(ctx context.Context, req *pb.UpdateDocumentMetaRequest) (*pb.UpdateDocumentMetaResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.UpdateDocumentMetaResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if req == nil || req.ExternalId == "" {
|
||||
return &pb.UpdateDocumentMetaResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if req.Title == nil && req.Summary == nil && req.Tags == nil {
|
||||
return &pb.UpdateDocumentMetaResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
serviceReq := &dto.UpdateDocumentMetaRequest{
|
||||
ExternalID: req.ExternalId,
|
||||
Title: req.Title,
|
||||
Summary: req.Summary,
|
||||
}
|
||||
if req.Tags != nil {
|
||||
tags := req.Tags
|
||||
serviceReq.Tags = &tags
|
||||
}
|
||||
|
||||
if _, err := document_service.DocumentSvc.UpdateDocumentMeta(ctx, serviceReq); err != nil {
|
||||
return &pb.UpdateDocumentMetaResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.UpdateDocumentMetaResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) UpdateDocumentSettings(ctx context.Context, req *pb.UpdateDocumentSettingsRequest) (*pb.UpdateDocumentSettingsResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.UpdateDocumentSettingsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if req == nil || req.ExternalId == "" || req.IsPublic == nil {
|
||||
return &pb.UpdateDocumentSettingsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
serviceReq := &dto.UpdateDocumentSettingsRequest{
|
||||
ExternalID: req.ExternalId,
|
||||
IsPublic: req.GetIsPublic(),
|
||||
}
|
||||
updated, err := document_service.DocumentSvc.UpdateDocumentSettings(ctx, serviceReq)
|
||||
if err != nil {
|
||||
return &pb.UpdateDocumentSettingsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.UpdateDocumentSettingsResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
IsPublic: utils.Of(updated.IsPublic),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) UploadDocumentAttachment(ctx context.Context, req *pb.UploadDocumentAttachmentRequest) (*pb.UploadDocumentAttachmentResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.UploadDocumentAttachmentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if req == nil || req.DocumentExternalId == "" || len(req.FileContent) == 0 {
|
||||
return &pb.UploadDocumentAttachmentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
attachment, err := document_service.DocumentSvc.UploadAttachment(
|
||||
ctx,
|
||||
userExternalID,
|
||||
req.DocumentExternalId,
|
||||
req.FileContent,
|
||||
req.FileName,
|
||||
req.GetContentType(),
|
||||
)
|
||||
if err != nil {
|
||||
return &pb.UploadDocumentAttachmentResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.UploadDocumentAttachmentResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Attachment: toAttachmentResponse(attachment),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) ListDocumentAttachments(ctx context.Context, req *pb.ListDocumentAttachmentsRequest) (*pb.ListDocumentAttachmentsResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.ListDocumentAttachmentsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if req == nil || req.DocumentExternalId == "" {
|
||||
return &pb.ListDocumentAttachmentsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
attachments, err := document_service.DocumentSvc.ListAttachments(ctx, req.DocumentExternalId)
|
||||
if err != nil {
|
||||
return &pb.ListDocumentAttachmentsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
respAttachments := make([]*pb.AttachmentResponse, 0, len(attachments))
|
||||
for _, attachment := range attachments {
|
||||
respAttachments = append(respAttachments, toAttachmentResponse(attachment))
|
||||
}
|
||||
|
||||
return &pb.ListDocumentAttachmentsResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Attachments: respAttachments,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) DeleteDocumentAttachment(ctx context.Context, req *pb.DeleteDocumentAttachmentRequest) (*pb.DeleteDocumentAttachmentResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.DeleteDocumentAttachmentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if req == nil || req.DocumentExternalId == "" || req.AttachmentExternalId == "" {
|
||||
return &pb.DeleteDocumentAttachmentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
if err := document_service.DocumentSvc.DeleteAttachment(ctx, req.DocumentExternalId, req.AttachmentExternalId); err != nil {
|
||||
return &pb.DeleteDocumentAttachmentResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.DeleteDocumentAttachmentResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) ListDocumentVersions(ctx context.Context, req *pb.ListDocumentVersionsRequest) (*pb.ListDocumentVersionsResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.ListDocumentVersionsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if req == nil || req.DocumentExternalId == "" {
|
||||
return &pb.ListDocumentVersionsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
items, total, err := document_service.DocumentSvc.ListDocumentVersions(ctx, req.DocumentExternalId, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
return &pb.ListDocumentVersionsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
respItems := make([]*pb.DocumentVersionResponse, 0, len(items))
|
||||
for _, item := range items {
|
||||
respItems = append(respItems, toDocumentVersionResponse(item))
|
||||
}
|
||||
return &pb.ListDocumentVersionsResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Versions: respItems,
|
||||
Total: total,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) GetDocumentVersionContent(ctx context.Context, req *pb.GetDocumentVersionContentRequest) (*pb.GetDocumentVersionContentResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.GetDocumentVersionContentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if req == nil || req.DocumentExternalId == "" || req.Version <= 0 {
|
||||
return &pb.GetDocumentVersionContentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
item, err := document_service.DocumentSvc.GetDocumentVersionContent(ctx, req.DocumentExternalId, req.Version)
|
||||
if err != nil {
|
||||
return &pb.GetDocumentVersionContentResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
return &pb.GetDocumentVersionContentResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Version: toDocumentVersionResponse(item),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) CreateTemplate(ctx context.Context, req *pb.CreateTemplateRequest) (*pb.CreateTemplateResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.CreateTemplateResponse{Base: baseResponseFromStatus(status.StatusTokenInvalid)}, nil
|
||||
}
|
||||
if req == nil {
|
||||
return &pb.CreateTemplateResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
serviceReq := &dto.CreateTemplateRequest{
|
||||
UserExternalID: userExternalID,
|
||||
TargetContainer: template_container_mapper.FromProtoType(req.TargetContainer),
|
||||
TemplateContent: req.TemplateContent,
|
||||
Type: doc_type_mapper.FromProtoType(req.Type),
|
||||
}
|
||||
if req.KnowledgeBaseId != "" {
|
||||
serviceReq.KnowledgeBaseExternalID = utils.Of(req.KnowledgeBaseId)
|
||||
}
|
||||
|
||||
if err := document_service.DocumentSvc.CreateTemplate(ctx, serviceReq); err != nil {
|
||||
return &pb.CreateTemplateResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.CreateTemplateResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) GetTemplate(ctx context.Context, req *pb.GetTemplateRequest) (*pb.GetTemplateResponse, error) {
|
||||
if req == nil || req.TemplateId <= 0 {
|
||||
return &pb.GetTemplateResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.GetTemplateResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
resp, err := document_service.DocumentSvc.GetTemplateByID(req.TemplateId)
|
||||
if err != nil {
|
||||
return &pb.GetTemplateResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
if req.RecordRecentLog {
|
||||
_ = document_service.DocumentSvc.CreateRecentTemplate(&dto.CreateRecentTemplateRequest{
|
||||
UserExternalID: userExternalID,
|
||||
TemplateID: req.TemplateId,
|
||||
AccessTime: time.Now(),
|
||||
})
|
||||
}
|
||||
return &pb.GetTemplateResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Template: toTemplateResponse(resp),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) ListRecentTemplates(ctx context.Context, req *pb.ListRecentTemplatesRequest) (*pb.ListRecentTemplatesResponse, error) {
|
||||
if req == nil {
|
||||
return &pb.ListRecentTemplatesResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.ListRecentTemplatesResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
var startTime *time.Time
|
||||
if req.StartTime != nil && *req.StartTime != "" {
|
||||
t, err := time.Parse(time.RFC3339, *req.StartTime)
|
||||
if err != nil {
|
||||
return &pb.ListRecentTemplatesResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
startTime = &t
|
||||
}
|
||||
var endTime *time.Time
|
||||
if req.EndTime != nil && *req.EndTime != "" {
|
||||
t, err := time.Parse(time.RFC3339, *req.EndTime)
|
||||
if err != nil {
|
||||
return &pb.ListRecentTemplatesResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
endTime = &t
|
||||
}
|
||||
|
||||
serviceReq := &dto.ListRecentTemplatesRequest{
|
||||
UserExternalID: userExternalID,
|
||||
StartTime: startTime,
|
||||
EndTime: endTime,
|
||||
Pagination: dto.Pagination{
|
||||
Page: int(req.Page),
|
||||
PageSize: int(req.PageSize),
|
||||
},
|
||||
}
|
||||
templates, total, err := document_service.DocumentSvc.ListRecentTemplates(serviceReq)
|
||||
if err != nil {
|
||||
return &pb.ListRecentTemplatesResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
respTemplates := make([]*pb.TemplateResponse, 0, len(templates))
|
||||
for _, tpl := range templates {
|
||||
respTemplates = append(respTemplates, toTemplateResponse(tpl))
|
||||
}
|
||||
return &pb.ListRecentTemplatesResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Templates: respTemplates,
|
||||
Total: total,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) ListTemplates(ctx context.Context, req *pb.ListTemplatesRequest) (*pb.ListTemplatesResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.ListTemplatesResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if req == nil {
|
||||
return &pb.ListTemplatesResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
filterArgs := &dto.TemplateListFilterArgs{
|
||||
NameKeyword: req.NameKeyword,
|
||||
KnowledgeBaseID: req.KnowledgeBaseId,
|
||||
}
|
||||
if req.TargetContainer != nil {
|
||||
container := template_container_mapper.FromProtoType(req.GetTargetContainer())
|
||||
filterArgs.TargetContainer = utils.Of(container)
|
||||
}
|
||||
if req.Type != nil {
|
||||
filterArgs.Type = utils.Of(doc_type_mapper.FromProtoType(req.GetType()))
|
||||
}
|
||||
|
||||
sortArgs := dto.SortArgs{Field: "created_at", Desc: true}
|
||||
if req.OrderBy != nil {
|
||||
sortArgs.Field = req.GetOrderBy()
|
||||
}
|
||||
if req.OrderDesc != nil {
|
||||
sortArgs.Desc = req.GetOrderDesc()
|
||||
}
|
||||
|
||||
serviceReq := &dto.TemplateListByExternalRequest{
|
||||
FilterArgs: filterArgs,
|
||||
SortArgs: sortArgs,
|
||||
Pagination: dto.Pagination{
|
||||
Page: int(req.Page),
|
||||
PageSize: int(req.PageSize),
|
||||
},
|
||||
}
|
||||
if req.OnlyMine {
|
||||
serviceReq.CreatorExternalID = userExternalID
|
||||
}
|
||||
if req.TargetContainer != nil && template_container_mapper.FromProtoType(req.GetTargetContainer()) == dto.TemplateContainerOwn {
|
||||
serviceReq.CreatorExternalID = userExternalID
|
||||
}
|
||||
|
||||
templates, total, err := document_service.DocumentSvc.ListTemplatesByExternal(serviceReq)
|
||||
if err != nil {
|
||||
return &pb.ListTemplatesResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
respTemplates := make([]*pb.TemplateResponse, 0, len(templates))
|
||||
for _, tpl := range templates {
|
||||
respTemplates = append(respTemplates, toTemplateResponse(tpl))
|
||||
}
|
||||
|
||||
return &pb.ListTemplatesResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Templates: respTemplates,
|
||||
Total: total,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) UpdateTemplateSettings(ctx context.Context, req *pb.UpdateTemplateSettingsRequest) (*pb.UpdateTemplateSettingsResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.UpdateTemplateSettingsResponse{Base: baseResponseFromStatus(status.StatusTokenInvalid)}, nil
|
||||
}
|
||||
if req == nil || req.TemplateId <= 0 {
|
||||
return &pb.UpdateTemplateSettingsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
serviceReq := &dto.UpdateTemplateSettingsRequest{
|
||||
UserExternalID: userExternalID,
|
||||
TemplateID: req.TemplateId,
|
||||
Name: req.Name,
|
||||
Description: req.Description,
|
||||
IsPublic: req.IsPublic,
|
||||
}
|
||||
|
||||
if err := document_service.DocumentSvc.UpdateTemplateSettings(ctx, serviceReq); err != nil {
|
||||
return &pb.UpdateTemplateSettingsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.UpdateTemplateSettingsResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *DocumentServiceServer) DeleteDocument(ctx context.Context, req *pb.DeleteDocumentRequest) (*pb.DeleteDocumentResponse, error) {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return &pb.DeleteDocumentResponse{Base: baseResponseFromStatus(status.StatusTokenInvalid)}, nil
|
||||
}
|
||||
if req == nil || req.DocumentExternalId == "" {
|
||||
return &pb.DeleteDocumentResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
|
||||
if err := document_service.DocumentSvc.DeleteDocumentByExternalID(ctx, req.DocumentExternalId); err != nil {
|
||||
return &pb.DeleteDocumentResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
return &pb.DeleteDocumentResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user