add media service

This commit is contained in:
Дмитрий
2026-05-08 17:36:48 +03:00
parent 1a7251976d
commit 72c57f0de3
16 changed files with 757 additions and 291 deletions

View File

@@ -0,0 +1,59 @@
package grpc
import (
"context"
"time"
"lendry-erp/media/pkg/logger"
"github.com/google/uuid"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
)
// RequestLoggerInterceptor логирует время выполнения каждого gRPC запроса
func RequestLoggerInterceptor(
ctx context.Context,
req interface{},
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler,
) (interface{}, error) {
start := time.Now()
resp, err := handler(ctx, req)
status := "✅"
if err != nil {
status = "❌"
}
logger.Info("%s %s %v", status, info.FullMethod, time.Since(start))
return resp, err
}
// TraceIDInterceptor добавляет уникальный ID для отслеживания запроса
func TraceIDInterceptor(
ctx context.Context,
req interface{},
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler,
) (interface{}, error) {
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
md = metadata.New(nil)
}
ids := md.Get("x-trace-id")
var traceID string
if len(ids) == 0 {
traceID = uuid.New().String()
md.Set("x-trace-id", traceID)
} else {
traceID = ids[0]
}
ctx = metadata.NewIncomingContext(ctx, md)
ctx = context.WithValue(ctx, "traceID", traceID)
return handler(ctx, req)
}

View File

@@ -0,0 +1,31 @@
package grpc
import (
pb "git.lendry.ru/lendry-erp/contracts.git/gen/go/media"
"lendry-erp/media/internal/application/usecases"
handler "lendry-erp/media/internal/interfaces/grpc"
"google.golang.org/grpc"
)
// NewServer создает и настраивает gRPC сервер с нужными перехватчиками и лимитами
func NewServer(uploadUC *usecases.UploadUseCase, presignUC *usecases.PresignUseCase) *grpc.Server {
server := grpc.NewServer(
grpc.ChainUnaryInterceptor(
RequestLoggerInterceptor,
TraceIDInterceptor,
),
// Увеличиваем лимит размера пакета до 50 МБ для больших файлов
grpc.MaxRecvMsgSize(50*1024*1024),
)
// Создаем обработчик
h := handler.NewMediaHandler(uploadUC, presignUC)
// Регистрируем наш сервис (здесь используется функция из media_grpc.pb.go)
pb.RegisterMediaServiceServer(server, h)
return server
}