1// Distributed order microservice (Golang + gRPC)
2
3func (s *OrderService) CreateOrder(ctx context.Context, req *pb.CreateOrderRequest) (*pb.OrderResponse, error) {
4 // 1. Validate the incoming gRPC request payload
5 if err := s.validator.Validate(req); err != nil {
6 return nil, status.Errorf(codes.InvalidArgument, "invalid order: %v", err)
7 }
8
9 // 2. Persist to PostgreSQL via sqlc for type-safe, low-latency writes
10 order, err := s.queries.CreateOrder(ctx, db.CreateOrderParams{
11 ProductID: req.ProductId,
12 CustomerID: req.CustomerId,
13 Quantity: req.Quantity,
14 Price: req.Price,
15 })
16
17 // 3. Publish "order.created" to Kafka for async downstream services
18 payload, _ := json.Marshal(order)
19 err = s.kafkaWriter.WriteMessages(ctx, kafka.Message{
20 Key: []byte(order.ID.String()),
21 Value: payload,
22 })
23
24 // 4. Cache order state in Redis for fast, repeated reads
25 s.redis.Set(ctx, fmt.Sprintf("order:%s", order.ID), payload, time.Hour)
26
27 return &pb.OrderResponse{
28 OrderId: order.ID.String(),
29 Status: "ACCEPTED",
30 }, nil
31}