syntax = "proto3"; package discount; import "google/api/annotations.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/empty.proto"; import "discount/discount.model.proto"; option go_package = "./discount"; service DiscountService { rpc GetAllDiscounts(google.protobuf.Empty) returns (Discounts) { option (google.api.http) = { get: "/discount/all" }; } rpc GetUserDiscounts(GetDiscountByIDRequest) returns (Discounts) { option (google.api.http) = { get: "/discount/user/{ID}" }; } rpc DetermineDiscounts(ApplyDiscountRequest) returns (Discounts) { option (google.api.http) = { post: "/discount/determine" body: "*" }; } rpc ApplyDiscounts(ApplyDiscountRequest) returns (ApplyDiscountResponse) { option (google.api.http) = { post: "/discount/apply" body: "*" }; } rpc GetDiscountByID(GetDiscountByIDRequest) returns (Discount) { option (google.api.http) = { get: "/discount/{ID}" }; } rpc CreateDiscount(CreateDiscountRequest) returns (Discount) { option (google.api.http) = { post: "/discount" }; } rpc ReplaceDiscount(DiscountOptional) returns (Discount) { option (google.api.http) = { put: "/discount/{ID}" body: "*" }; } rpc UpdateDiscount(DiscountOptional) returns (Discount) { option (google.api.http) = { patch: "/discount/{ID}" body: "*" }; } rpc DeleteDiscount(GetDiscountByIDRequest) returns (Discount) { option (google.api.http) = { delete: "/discount/{ID}" }; } } message GetDiscountByIDRequest { string ID = 1; } message ApplyDiscountRequest { UserInformation UserInformation = 1; repeated ProductInformation Products = 2; google.protobuf.Timestamp Date = 3; optional string Coupon = 4; } message ApplyDiscountResponse { double Price = 1; repeated Discount AppliedDiscounts = 2; } message CreateDiscountRequest { string Name = 1; uint32 Layer = 2; string Description = 3; DiscountCondition Condition = 4; DiscountCalculationTarget Target = 5; }