221 lines
6.0 KiB
Protocol Buffer
221 lines
6.0 KiB
Protocol Buffer
|
|
syntax = "proto3";
|
||
|
|
|
||
|
|
package commission;
|
||
|
|
|
||
|
|
import "public_messages.proto";
|
||
|
|
import "google/protobuf/empty.proto";
|
||
|
|
import "google/protobuf/wrappers.proto";
|
||
|
|
import "google/protobuf/timestamp.proto";
|
||
|
|
import "google/api/annotations.proto";
|
||
|
|
|
||
|
|
option csharp_namespace = "CMSMicroservice.Protobuf.Protos.Commission";
|
||
|
|
|
||
|
|
service CommissionContract
|
||
|
|
{
|
||
|
|
// Commands
|
||
|
|
rpc CalculateWeeklyBalances(CalculateWeeklyBalancesRequest) returns (google.protobuf.Empty){
|
||
|
|
option (google.api.http) = {
|
||
|
|
post: "/Commission/CalculateWeeklyBalances"
|
||
|
|
body: "*"
|
||
|
|
};
|
||
|
|
};
|
||
|
|
rpc CalculateWeeklyCommissionPool(CalculateWeeklyCommissionPoolRequest) returns (google.protobuf.Empty){
|
||
|
|
option (google.api.http) = {
|
||
|
|
post: "/Commission/CalculateWeeklyPool"
|
||
|
|
body: "*"
|
||
|
|
};
|
||
|
|
};
|
||
|
|
rpc ProcessUserPayouts(ProcessUserPayoutsRequest) returns (google.protobuf.Empty){
|
||
|
|
option (google.api.http) = {
|
||
|
|
post: "/Commission/ProcessPayouts"
|
||
|
|
body: "*"
|
||
|
|
};
|
||
|
|
};
|
||
|
|
rpc RequestWithdrawal(RequestWithdrawalRequest) returns (google.protobuf.Empty){
|
||
|
|
option (google.api.http) = {
|
||
|
|
post: "/Commission/RequestWithdrawal"
|
||
|
|
body: "*"
|
||
|
|
};
|
||
|
|
};
|
||
|
|
rpc ProcessWithdrawal(ProcessWithdrawalRequest) returns (google.protobuf.Empty){
|
||
|
|
option (google.api.http) = {
|
||
|
|
post: "/Commission/ProcessWithdrawal"
|
||
|
|
body: "*"
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
// Queries
|
||
|
|
rpc GetWeeklyCommissionPool(GetWeeklyCommissionPoolRequest) returns (GetWeeklyCommissionPoolResponse){
|
||
|
|
option (google.api.http) = {
|
||
|
|
get: "/Commission/GetWeeklyPool"
|
||
|
|
};
|
||
|
|
};
|
||
|
|
rpc GetUserCommissionPayouts(GetUserCommissionPayoutsRequest) returns (GetUserCommissionPayoutsResponse){
|
||
|
|
option (google.api.http) = {
|
||
|
|
get: "/Commission/GetUserPayouts"
|
||
|
|
};
|
||
|
|
};
|
||
|
|
rpc GetCommissionPayoutHistory(GetCommissionPayoutHistoryRequest) returns (GetCommissionPayoutHistoryResponse){
|
||
|
|
option (google.api.http) = {
|
||
|
|
get: "/Commission/GetPayoutHistory"
|
||
|
|
};
|
||
|
|
};
|
||
|
|
rpc GetUserWeeklyBalances(GetUserWeeklyBalancesRequest) returns (GetUserWeeklyBalancesResponse){
|
||
|
|
option (google.api.http) = {
|
||
|
|
get: "/Commission/GetUserWeeklyBalances"
|
||
|
|
};
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
// ============ Commands ============
|
||
|
|
|
||
|
|
// CalculateWeeklyBalances Command
|
||
|
|
message CalculateWeeklyBalancesRequest
|
||
|
|
{
|
||
|
|
string week_number = 1; // Format: "YYYY-Www" (e.g., "2025-W01")
|
||
|
|
bool force_recalculate = 2;
|
||
|
|
}
|
||
|
|
|
||
|
|
// CalculateWeeklyCommissionPool Command
|
||
|
|
message CalculateWeeklyCommissionPoolRequest
|
||
|
|
{
|
||
|
|
string week_number = 1;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ProcessUserPayouts Command
|
||
|
|
message ProcessUserPayoutsRequest
|
||
|
|
{
|
||
|
|
string week_number = 1;
|
||
|
|
bool force_reprocess = 2;
|
||
|
|
}
|
||
|
|
|
||
|
|
// RequestWithdrawal Command
|
||
|
|
message RequestWithdrawalRequest
|
||
|
|
{
|
||
|
|
int64 payout_id = 1;
|
||
|
|
int32 withdrawal_method = 2; // WithdrawalMethod enum: Cash=0, Diamond=1
|
||
|
|
google.protobuf.StringValue iban_number = 3; // Required for Cash method
|
||
|
|
}
|
||
|
|
|
||
|
|
// ProcessWithdrawal Command
|
||
|
|
message ProcessWithdrawalRequest
|
||
|
|
{
|
||
|
|
int64 payout_id = 1;
|
||
|
|
bool is_approved = 2;
|
||
|
|
google.protobuf.StringValue reason = 3; // Required for rejection
|
||
|
|
}
|
||
|
|
|
||
|
|
// ============ Queries ============
|
||
|
|
|
||
|
|
// GetWeeklyCommissionPool Query
|
||
|
|
message GetWeeklyCommissionPoolRequest
|
||
|
|
{
|
||
|
|
string week_number = 1;
|
||
|
|
}
|
||
|
|
|
||
|
|
message GetWeeklyCommissionPoolResponse
|
||
|
|
{
|
||
|
|
int64 id = 1;
|
||
|
|
string week_number = 2;
|
||
|
|
int64 total_pool_amount = 3; // Rials
|
||
|
|
int32 total_balances = 4;
|
||
|
|
int64 value_per_balance = 5; // Rials per balance
|
||
|
|
bool is_calculated = 6;
|
||
|
|
google.protobuf.Timestamp calculated_at = 7;
|
||
|
|
google.protobuf.Timestamp created = 8;
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetUserCommissionPayouts Query
|
||
|
|
message GetUserCommissionPayoutsRequest
|
||
|
|
{
|
||
|
|
google.protobuf.Int64Value user_id = 1;
|
||
|
|
google.protobuf.Int32Value status = 2; // CommissionPayoutStatus enum
|
||
|
|
google.protobuf.StringValue week_number = 3;
|
||
|
|
int32 page_index = 4;
|
||
|
|
int32 page_size = 5;
|
||
|
|
}
|
||
|
|
|
||
|
|
message GetUserCommissionPayoutsResponse
|
||
|
|
{
|
||
|
|
messages.MetaData meta_data = 1;
|
||
|
|
repeated UserCommissionPayoutModel models = 2;
|
||
|
|
}
|
||
|
|
|
||
|
|
message UserCommissionPayoutModel
|
||
|
|
{
|
||
|
|
int64 id = 1;
|
||
|
|
int64 user_id = 2;
|
||
|
|
string user_name = 3;
|
||
|
|
string week_number = 4;
|
||
|
|
int32 balances_earned = 5;
|
||
|
|
int64 value_per_balance = 6;
|
||
|
|
int64 total_amount = 7;
|
||
|
|
int32 status = 8; // CommissionPayoutStatus enum
|
||
|
|
google.protobuf.Int32Value withdrawal_method = 9;
|
||
|
|
string iban_number = 10;
|
||
|
|
google.protobuf.Timestamp created = 11;
|
||
|
|
google.protobuf.Timestamp last_modified = 12;
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetCommissionPayoutHistory Query
|
||
|
|
message GetCommissionPayoutHistoryRequest
|
||
|
|
{
|
||
|
|
google.protobuf.Int64Value payout_id = 1;
|
||
|
|
google.protobuf.Int64Value user_id = 2;
|
||
|
|
google.protobuf.StringValue week_number = 3;
|
||
|
|
int32 page_index = 4;
|
||
|
|
int32 page_size = 5;
|
||
|
|
}
|
||
|
|
|
||
|
|
message GetCommissionPayoutHistoryResponse
|
||
|
|
{
|
||
|
|
messages.MetaData meta_data = 1;
|
||
|
|
repeated CommissionPayoutHistoryModel models = 2;
|
||
|
|
}
|
||
|
|
|
||
|
|
message CommissionPayoutHistoryModel
|
||
|
|
{
|
||
|
|
int64 id = 1;
|
||
|
|
int64 payout_id = 2;
|
||
|
|
int64 user_id = 3;
|
||
|
|
string week_number = 4;
|
||
|
|
int64 amount_before = 5;
|
||
|
|
int64 amount_after = 6;
|
||
|
|
int32 old_status = 7; // CommissionPayoutStatus enum
|
||
|
|
int32 new_status = 8;
|
||
|
|
int32 action = 9; // CommissionPayoutAction enum
|
||
|
|
string performed_by = 10;
|
||
|
|
string reason = 11;
|
||
|
|
google.protobuf.Timestamp created = 12;
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetUserWeeklyBalances Query
|
||
|
|
message GetUserWeeklyBalancesRequest
|
||
|
|
{
|
||
|
|
google.protobuf.Int64Value user_id = 1;
|
||
|
|
google.protobuf.StringValue week_number = 2;
|
||
|
|
bool only_active = 3; // Only non-expired balances
|
||
|
|
int32 page_index = 4;
|
||
|
|
int32 page_size = 5;
|
||
|
|
}
|
||
|
|
|
||
|
|
message GetUserWeeklyBalancesResponse
|
||
|
|
{
|
||
|
|
messages.MetaData meta_data = 1;
|
||
|
|
repeated UserWeeklyBalanceModel models = 2;
|
||
|
|
}
|
||
|
|
|
||
|
|
message UserWeeklyBalanceModel
|
||
|
|
{
|
||
|
|
int64 id = 1;
|
||
|
|
int64 user_id = 2;
|
||
|
|
string week_number = 3;
|
||
|
|
int32 left_leg_balances = 4;
|
||
|
|
int32 right_leg_balances = 5;
|
||
|
|
int32 total_balances = 6;
|
||
|
|
int64 weekly_pool_contribution = 7;
|
||
|
|
google.protobuf.Timestamp calculated_at = 8;
|
||
|
|
bool is_expired = 9;
|
||
|
|
google.protobuf.Timestamp created = 10;
|
||
|
|
}
|