syntax = "proto3"; package wallet; import "authorization_message.proto"; import "base_message.proto"; /* INTERNAL DATA */ message InternalTransactionData { int64 transaction_id = 1; } /* Federation */ message Federation { int64 id = 1; int64 user_id = 2; string ed_public = 3; string ed_public_hash = 4; int32 status = 5; string created_at = 6; string system_wallet_address = 7; } message GetFederationReq { optional int64 federation_id = 1; optional int64 user_id = 2; optional string ed_public = 3; optional string ed_public_hash = 4; } /* Asset */ message AssetList { repeated Asset list = 1; } message Asset { int64 id = 1; string name = 2; string code = 3; string issuer = 4; int32 decimal = 5; double limit_amount = 6; string anchor = 7; string image = 8; string description = 9; string url = 10; int64 buy_unit_price = 11; int64 sell_unit_price = 12; double buy_min_amount = 13; double buy_max_amount = 14; double sell_min_amount = 15; double sell_max_amount = 16; double buy_fee_amount = 17; int64 buy_fee_price = 18; double sell_fee_amount = 19; int64 sell_fee_price = 20; double withdraw_min_amount = 21; double withdraw_max_amount = 22; bool is_active = 23; bool can_buy = 24; bool can_sell = 25; bool can_deposit = 26; bool can_withdraw = 27; string updated_at = 28; string created_at = 29; repeated string images = 30; int32 status = 31; AssetMeta meta = 32; } message GetAssetReq { optional int64 id = 1; optional string code = 3; } message AssetMeta { PropertyMeta property = 1; } message PropertyMeta { string description = 1; string builder_description = 2; string white_paper_url = 3; string expert_report_url = 4; string project_catalog_url = 5; string ownership_document_url = 6; double total_area_meters = 7; int32 total_unit_count = 8; string usage_type = 9; string completion_date = 10; string user_agreement_url = 11; } /* BNPL - not really but close name */ // enum BNPLPgState { // // } message GetUserBNPLInfoReq { authorization.InternalIAM iam = 1; base.IdReq id = 2; } enum BNPLPaymentsStatus { PENDING = 0; PAYED = 1; OVER_DUE = 2; NOT_STARTED = 3; NOT_YET_DUE = 4; CANCLED = 5; } message BNPLPayments { uint64 id = 1; double amount = 2; bool is_paied = 3; string due_date = 4; string settlement_date = 5; BNPLPaymentsStatus status = 6; } message UserBNPLResp { uint64 id = 1; BNPLInfo bnpl = 2; int32 current_step = 3; optional float amount = 4; optional PaymentPeriodInfo payment_period = 5; optional bool accepted_terms = 6; repeated BNPLPayments payments = 7; optional string employee_id = 8; optional authorization.Company company = 10; optional string updated_at = 12; optional string created_at = 13; } message UserBNPLReq { uint64 id = 1; int64 bnpl_id = 2; string created_at = 3; string employee_id = 4; int64 company_id = 5; authorization.InternalIAM iam = 6; float amount = 7; PaymentPeriodInfo payment_period = 8; bool has_agreed_contract = 9; optional int32 current_step = 10; //Can be useful for admin to change the current step } message PaymentPeriodInfo { uint64 id = 1; uint64 period = 2; bool enabled = 3; } message BNPLInfo { uint64 id = 1; string description = 3; repeated Asset supported_assets = 2; optional bool enabled = 4; float amount_start = 5; float amount_end = 6; float amount_steps = 7; repeated PaymentPeriodInfo payment_period = 8; repeated authorization.Company possible_companies = 11; string updated_at = 12; string created_at = 13; string expires_at = 14; } message BNPLList { repeated BNPLInfo list = 1; } /* Wallet */ message WalletList { repeated Wallet list = 1; } message Wallet { int64 id = 1; int64 user_id = 2; int64 asset_id = 3; Asset asset_info = 4; int64 federation_id = 5; Federation federation_info = 6; double balance = 7; string updated_at = 8; string created_at = 9; string wallet_code = 10; } message UserInitWalletReq { authorization.InternalIAM iam = 1; int64 asset_id = 2; } /* Transaction */ message TransactionList { repeated Transaction list = 1; int64 total_count = 2; } message Transaction { int64 id = 1; int64 asset_id = 2; Asset asset_info = 3; optional int64 from_user_id = 4; optional authorization.UserIdentityBasic from_user_info = 5; optional int64 from_federation_id = 6; optional Federation from_federation_info = 7; optional int64 to_user_id = 8; optional authorization.UserIdentityBasic to_user_info = 9; optional int64 to_federation_id = 10; optional Federation to_federation_info = 11; double amount = 12; int32 status = 13; int32 type = 14; string updated_at = 15; string created_at = 16; string tracking_code = 17; } message UserGetTransactionListReq { authorization.InternalIAM iam = 1; optional int32 page_index = 2; optional int32 page_size = 3; optional int64 id = 4; optional int64 asset_id = 5; optional int64 from_user_id = 6; optional int64 from_federation_id = 7; optional int64 to_user_id = 8; optional int64 to_federation_id = 9; optional double amount_from = 10; optional double amount_to = 11; optional int32 status = 12; optional int32 type = 13; optional string tracking_code = 14; } /* Buy */ message UserBuyAssetReq { authorization.InternalIAM iam = 1; int64 asset_id = 2; double amount = 3; } /* Sell */ /* Transfer */ message UserTransferAssetReq { authorization.InternalIAM iam = 1; int64 asset_id = 2; double amount = 3; string to_wallet_address = 4; string to_wallet_memo = 5; } message UserTransferRes { int64 transaction_id = 1; string tracking_code = 2; } // represent the information regarding the sale of the token message SaleGetTokenReq { authorization.InternalIAM iam = 1; int64 asset_id = 2; double amount = 3; } // represent the information regarding the ipg gateway message SaleGetTokenRes { string url = 1; int64 unit_price = 2; int64 total_price = 3; double amount = 4; string asset = 5; } message SaleConfirmReq { string RefId = 1; string ResCode = 2; string SaleOrderId = 3; string SaleReferenceId = 4; string CardHolderInfo = 5; string CardHolderPan = 6; string FinalAmount = 7; } message SaleConfirmRes { string receiptLink = 1; } message SaleManualReq { authorization.InternalIAM iam = 1; int64 asset_id = 2; double amount = 3; string paid_at = 4; string rrn = 5; string national_id = 6; }