protocolbuffers / protobuf

Protocol Buffers - Google's data interchange format
http://protobuf.dev
Other
65.25k stars 15.45k forks source link

What am I doing wrong #3588

Closed nenepadi closed 7 years ago

nenepadi commented 7 years ago

Hi, I am very new to protobuf most especially using GRPC i have a bit of an issue with code generation of a proto message. Before I took on the project everything works but immediately i add some lines and generate, all my implementations seem not to work. Below are the files am working with and the error that I am receiving. Help from anywhere will save me a lot.

This part of the code is what seems to be the problem.

var createOrder = function (request, response) {
    sess = request.session;
    console.log(sess, request.cookies);

    request.checkBody('payment_method', 'Invalid Payment Method').notEmpty();
    request.checkBody('delivery', 'Invalid Delivery Address').notEmpty();

    var errors = request.validationErrors();
    if (errors) {
        response
            .status(200)
            .json(responder.errorResponse("Invalid Param", errors))
            .end();
        return;
    }

    if (!validator.validPayment(request.body.payment_method, request.body.transaction_id)) {
        response
            .status(200)
            .json(responder.errorResponse("Invalid Param"))
            .end();
        return;
    }

    var clearCartItems = function () {
        request.session.cart = {
            items: [],
            complete: false
        }
    }

    // add order info
    var orderRequest = new orderMessages.Order();
    userId = request.session.userId;
    orderRequest.setUserId(userId);
    orderRequest.setUnderReview(true);
    orderRequest.setFulfillmentStatus(0);

    //add Tax
    var taxRequest = new orderMessages.Tax();
    tax = priceCal.getTax(request.session.cart.items || []);
    taxRequest.setInternationalShipping(tax.int_shipping.toString());
    taxRequest.setCustomDuties(tax.custom_duties.toString());
    taxRequest.setAhonyaFees(tax.ahonya_fees.toString());
    taxRequest.setCurrencyRate(tax.currency_rate.toString());
    orderRequest.setTax(taxRequest);

    //add Payment
    var payRequest = new orderMessages.Payment();
    payRequest.setPaymentMethod(request.body.payment_method);
    payRequest.setTransactionId(request.body.transaction_id || String());
    orderRequest.setPayment(payRequest);

    //add items
    orderItems = [];
    for (item in request.session.cart.items || []) {
        product = request.session.cart.items[item];
        var itemRequest = new orderMessages.OrderItem();
        itemRequest.setProductName(product.product_name);
        itemRequest.setUnitPrice(product.unit_price.toString());
        itemRequest.setQuantity(product.quantity);
        itemRequest.setProductImage(product.product_image);
        itemRequest.setFulfilmentStatus("new");
        itemRequest.setIsPrime(product.is_prime);
        itemRequest.setWeight(product.weight.toString());
        itemRequest.setAsin(product.asin);
        itemRequest.setAmazonItemid(product.itemid);
        itemRequest.setDomesticShipping(0.0);
        orderItems.push(itemRequest);
    }
    orderRequest.setItemsList(orderItems);

    // add delivery address
    var addrRequest = new orderMessages.DeliveryAddress();
    addrRequest.setAddressId(request.body.delivery.addressId);
    addrRequest.setName(request.body.delivery.name);
    addrRequest.setPhoneNo(request.body.delivery.phoneNo);
    addrRequest.setStreetAddress(request.body.delivery.streetAddress);
    addrRequest.setRegion(request.body.delivery.region);
    addrRequest.setCountry(request.body.delivery.country);
    orderRequest.setDeliveryAddress(addrRequest);

    orderClient.createOrder(orderRequest, function (err, orderReply) {
        if ((!err) && (orderReply.getResponse())) {
            clearCartItems();
            response
                .json(responder.successResponse("ok"))
                .end();
            return;
        } else {
            response
                .json(responder.errorResponse("Ops"))
                .end();
            return;
        }
    });
};

Below is my proto file definition:

syntax = "proto3";

// The order service definition.
service OrderManager {

  //user services
  rpc CreateOrder(Order) returns (OrderReply) {}
}

message OrderItem {
  string product_id = 1;
  string product_name = 2;
  string unit_price = 3;
  int32 quantity = 4;
  string product_image = 5;
  string created_at = 6;
  string date_modified = 7;

  // status for user
  // [new, shipped_to_ghana, delivered_to_user, cancelled, refunded]
  string fulfilment_status = 8;

  // amazon related
  bool is_prime = 9;
  string weight = 10;
  string asin = 11;
  string amazon_itemid = 12;
  float domestic_shipping = 13;
  string eta = 14;
}

message DeliveryAddress {
  string address_id = 1;
  string name = 2;
  string phone_no = 3;
  string street_address = 4;
  string region = 5;
  string country = 6;
}

message Payment {
// [mpower, bank_deposit, office_deposit, mobile_money]
  string payment_method = 1;

  // [0 => pending, 1 => partially paid, 2 => fully paid, 3 => partially refunded, 4 => fully refunded]
  int32 payment_status = 2;
  string payment_date = 3;
  string transaction_id = 4;
  float order_amount_paid = 5;
  float refund_amount_paid = 6;
  string refund_transaction_id = 7;
  string refund_sender = 8;
  string order_payment_receiver = 10;
  // [mobile_money, office_pickup, bank_transaction]
  string refund_payment_method = 9;
}

message Tax {
  string international_shipping = 1;
  string custom_duties = 2;
  string ahonya_fees = 3;
  string currency_rate = 4;
  bool tax_complete = 5;
}

message TransactionDocument {
  string doc_type = 1;
  string doc_ref = 2;
  string doc_path = 3;
  int32 doc_num = 4;
  string doc_extra = 5;
  string doc_issue_date = 6;
}

message Order {
  string order_id = 1;
  string user_id = 2;
  string created_at = 3;
  string date_modified = 4;
  bool status = 5;
  bool under_review = 6;

  Payment payment = 7;
  Tax tax = 8;
  DeliveryAddress delivery_address = 9;
  repeated OrderItem items = 10;

  int32 fulfillment_status = 11;
  repeated TransactionDocument documents = 12;
}

message OrderRequest {
  int32 page_number = 1;
  int32 result_size = 2;
  string search_query = 3;
  bool admin_status = 4;
  bool status = 5;
}

message OrderReply {
  bool response = 1;
  string data = 2;
  Order order = 3;
  repeated Order orders = 4;
}

This is the error it producesses

TypeError: message.serializeBinaryToWriter is not a function
    at proto.DeliveryAddress.serializeBinaryToWriter (/Volumes/Data HD/Ahonya/node/web-ahonya/services/account_pb.js:1008:11)
    at jspb.BinaryWriter.writeMessage (/Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/google-protobuf/google-protobuf.js:292:342)
    at Function.proto.Order.serializeBinaryToWriter (/Volumes/Data HD/Ahonya/node/web-ahonya/services/order_pb.js:1940:12)
    at proto.Order.serializeBinary (/Volumes/Data HD/Ahonya/node/web-ahonya/services/order_pb.js:1867:15)
    at serialize_Order (/Volumes/Data HD/Ahonya/node/web-ahonya/services/order_grpc_pb.js:11:25)
    at ServiceClient.Client.makeUnaryRequest (/Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/grpc/src/node/src/client.js:530:17)
    at apply (/Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/lodash/lodash.js:499:17)
    at ServiceClient.wrapper [as createOrder] (/Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/lodash/lodash.js:5356:16)
    at createOrder (/Volumes/Data HD/Ahonya/node/web-ahonya/controllers/api_order.js:162:17)
    at Layer.handle [as handle_request] (/Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/express/lib/router/layer.js:95:5)
    at next (/Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/express/lib/router/layer.js:95:5)
    at /Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/express/lib/router/index.js:335:12)
    at next (/Volumes/Data HD/Ahonya/node/web-ahonya/node_modules/express/lib/router/index.js:275:10)
nenepadi commented 7 years ago

Solved, I have been able to solve the issue. Actually it was just because a message in another proto file was conflicting. Thanks.