From 3f8ecc0cc81f6d3059c40f0ce6708cdd3944419b Mon Sep 17 00:00:00 2001 From: nfel Date: Sun, 17 Nov 2024 16:23:53 +0330 Subject: [PATCH] Added versioning and correct packaging --- pb/auth/v1/authorization.proto | 38 +++ pb/auth/v1/authorization_message.proto | 210 ++++++++++++++ pb/base/v1/base_message.proto | 15 + pb/wallet/v1/wallet.proto | 42 +++ pb/wallet/v1/wallet_message.proto | 379 +++++++++++++++++++++++++ 5 files changed, 684 insertions(+) create mode 100644 pb/auth/v1/authorization.proto create mode 100644 pb/auth/v1/authorization_message.proto create mode 100644 pb/base/v1/base_message.proto create mode 100644 pb/wallet/v1/wallet.proto create mode 100644 pb/wallet/v1/wallet_message.proto diff --git a/pb/auth/v1/authorization.proto b/pb/auth/v1/authorization.proto new file mode 100644 index 0000000..3179650 --- /dev/null +++ b/pb/auth/v1/authorization.proto @@ -0,0 +1,38 @@ +syntax = "proto3"; + +package authorization; + +import "authorization_message.proto"; +import "base_message.proto"; + +service AuthorizationService { + rpc InternalAuthorizationDeleteCache(base.Empty) returns (base.StatusRes); + rpc InternalInitRoutes(InternalInitRoutesReq) returns (base.StatusRes) {} + rpc InternalGetUserIdentityBasic(GetUserReq) returns (UserIdentityBasic) {} + rpc InternalGetUserIAM(GetUserReq) returns (InternalIAM) {} + rpc CheckIAM(CheckIAMReq) returns (InternalIAM) {} + + rpc UserLoginSendOTP(UserSendOtpReq) returns (UserSendOtpRes) {} + rpc UserLoginWithOTP(UserLoginReq) returns (UserAccessTokenRes) {} + rpc UserGetAccessTokenByRefreshToken(UserRefreshTokenReq) + returns (UserAccessTokenRes) {} + + rpc UserGetUserPermission(InternalIAM) returns (PermissionList) {} + + rpc UserGetIdentity(InternalIAM) returns (Identity) {} + rpc UserUpdateIdentity(UserUpdateIdentityReq) returns (base.StatusRes) {} + + rpc UserGetBankInfoList(ReqWithIAMAndParams) returns (BankInfoList) {} + rpc UserUpdateBankInfo(UserUpdateBankInfoReq) returns (base.StatusRes) {} + rpc UserRemoveBankInfo(IdReqWithIAM) returns (base.StatusRes) {} + + rpc GetUser(GetUserReq) returns (User) {} + + // Two Factor Authentication + // For now it's only SMS-OTP - later will be Email-OTP or other methods can be + // added For HMAC-OTP there won't be a need to call this api + rpc SendTFAReq(TFAReq) returns (base.StatusRes) {} + // For HMAC-OTP an initialization step must be added to exchange keys + rpc InitTFAReq(InternalIAM) returns (TFAExRes) {} + rpc CheckTFACode(CheckTFAReq) returns (base.StatusRes) {} +} diff --git a/pb/auth/v1/authorization_message.proto b/pb/auth/v1/authorization_message.proto new file mode 100644 index 0000000..415b2d6 --- /dev/null +++ b/pb/auth/v1/authorization_message.proto @@ -0,0 +1,210 @@ +syntax = "proto3"; + +package authorization; + +/* + Internal +*/ + +message InternalInitRoutesReq { + repeated InternalRoute routes = 1; +} +message InternalRoute { + string path = 1; + string method = 2; + string handler = 3; +} + +/* Role Permission */ +message Role { + int64 id = 1; + string title = 2; + string Key = 3; + string type = 4; +} +message Permission { + int64 id = 1; + string title = 2; + string key = 3; + string route = 4; + string method = 5; +} + +message PermissionList { + repeated Permission list = 1; +} + +/* + UserSendOtp +*/ + +message UserSendOtpReq { + string mobile = 1; +} +message UserSendOtpRes { + int64 expired_at = 1; +} + +/* + UserLogin +*/ + +message UserLoginReq { + string mobile = 1; + string otp_code = 2; +} +message UserRefreshTokenReq { + string refresh_token = 1; +} +message UserAccessTokenRes { + string access_token = 1; + int64 access_expired_at = 2; + string refresh_token = 3; +} + +/* + IAM +*/ + +message CheckIAMReq { + string access_token = 1; + string route = 2; + string method = 3; +} + +message InternalIAM { + User user = 1; + IdentityBasic identity = 2; + repeated Company company = 3; +} +message IdReqWithIAM { + int64 id = 1; + InternalIAM iam = 2; +} +message ReqWithIAMAndParams { + InternalIAM iam = 1; + optional bool accepted = 2; +} + +/* + User +*/ +message GetUserReq { + int64 user_id = 1; + string national_id = 2; +} + +message User { + int64 id = 1; + string national_id = 2; + string mobile = 3; + string email = 4; + repeated int64 roles = 5; +} + +message Company { + int64 id = 1; + string name = 2; + string name_fa = 3; + string location = 4; + bool can_provide_bnpl = 5; +} + +message Identity { + string national_id = 1; + string national_serial_id = 2; + string first_name = 3; + string first_name_en = 4; + string last_name = 5; + string last_name_en = 6; + string father_name = 7; + int64 birthdate = 8; + string birthdate_time = 9; + bool is_alive = 10; + int32 gender = 11; + string serial_number = 12; + string serial_type = 13; + string shenasname_number = 14; + string shenasname_seri = 15; + string shenasname_serial = 16; + int32 status = 17; + string updated_at = 18; + string created_at = 19; + string email = 20; + string mobile = 21; + optional Company company = 22; + optional string employee_info = 23; +} + +message IdentityBasic { + string first_name = 1; + string last_name = 2; +} + +message UserIdentityBasic { + int64 id = 1; + string national_id = 2; + string mobile = 3; + string first_name = 4; + string last_name = 5; +} + +message UserUpdateIdentityReq { + InternalIAM iam = 1; + string national_id = 2; + string birthdate = 3; + string email = 4; +} + +message UserUpdateBankInfoReq { + InternalIAM iam = 1; + string deposit_number = 2; + string iban_number = 3; + string card_number = 4; +} + +message BankInfoList { + repeated BankInfo list = 1; +} + +// Status 0: Fail Verify, 1: Verified, 2: Does not Match user's credential +enum BankInfoStatusEnum { + FAIL_VERIFY = 0; + VERIFIED = 1; + DOES_NOT_MATCH = 2; +} +message BankInfo { + int64 id = 1; + string deposit_number = 2; + string iban_number = 3; + string card_number = 4; + BankInfoStatusEnum status = 5; + string updated_at = 6; + string created_at = 7; +} + +/* Two Factor Authentication */ +message IdReqWithIAMAndTFA { + int64 id = 1; + InternalIAM iam = 2; + string tfa_code = 3; +} +message TFAReq { + InternalIAM iam = 1; + optional string mobile = 2; + optional string email = 3; + optional string reason = 4; // issued jwt reason -> can be login, redeem, withdrawal +} + +// Two Factor Authentication Exchange Response +message TFAExRes { + InternalIAM iam = 1; + string secret = 2; + string qrcode_base64 = 3; +} +message CheckTFAReq { + InternalIAM iam = 1; + string code = 2; + optional string algorithm = 3; + optional string reason = 4; // Can be later used as a lookup +} diff --git a/pb/base/v1/base_message.proto b/pb/base/v1/base_message.proto new file mode 100644 index 0000000..0ac5832 --- /dev/null +++ b/pb/base/v1/base_message.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package base; + +message Empty {} + +message StatusRes { + bool success = 1; +} +message IdRes { + int64 id = 1; +} +message IdReq { + int64 id = 1; +} diff --git a/pb/wallet/v1/wallet.proto b/pb/wallet/v1/wallet.proto new file mode 100644 index 0000000..c7f0ac5 --- /dev/null +++ b/pb/wallet/v1/wallet.proto @@ -0,0 +1,42 @@ +syntax = "proto3"; + +package wallet; + +import "authorization_message.proto"; +import "base_message.proto"; +import "wallet_message.proto"; + +service WalletService { + rpc InternalWalletDeleteCache(base.Empty) returns (base.StatusRes); + rpc InternalCreateFederation(authorization.InternalIAM) returns (base.StatusRes); + + rpc AdminGetFederation(GetFederationReq) returns (Federation); + rpc UserGetFederation(authorization.InternalIAM) returns (Federation); + + rpc UserGetAssetList(base.Empty) returns (AssetList); + rpc AdminGetAssetList(base.Empty) returns (AssetList); + rpc GetAsset(GetAssetReq) returns (Asset); + + rpc UserInitWallet(UserInitWalletReq) returns (base.StatusRes); + rpc UserGetWalletList(authorization.InternalIAM) returns (WalletList); + rpc UserTransferAsset(UserTransferAssetReq) returns (UserTransferRes); + + rpc UserGetTransactionList(UserGetTransactionListReq) returns (TransactionList); + + rpc SaleGetToken(SaleGetTokenReq) returns (SaleGetTokenRes); + rpc SaleConfirm(SaleConfirmReq) returns (SaleConfirmRes); + rpc AdminManualSaleDeposit(SaleManualReq) returns (base.StatusRes); + + // BNPL + rpc GetBNPLList(base.Empty) returns (BNPLList); + rpc GetBNPLInfo(base.IdReq) returns (BNPLInfo); + rpc GetUserBNPLInfo(GetUserBNPLInfoReq) returns (UserBNPLResp); + rpc SubmitBNPLForm(UserBNPLReq) returns (base.StatusRes); + rpc UpdateBNPL(UserBNPLReq) returns (base.StatusRes); + rpc CancleBNPL(authorization.IdReqWithIAM) returns (base.StatusRes); + + // Redeem Token + rpc CalculateRedeemToken(RedeemTokenReq) returns (CalculateRedeemTokenRes); + rpc RedeemToken(RedeemTokenReq) returns (base.StatusRes); + rpc RedeemTokenList(authorization.ReqWithIAMAndParams) returns (RedeemTokenResList); +} diff --git a/pb/wallet/v1/wallet_message.proto b/pb/wallet/v1/wallet_message.proto new file mode 100644 index 0000000..40a7738 --- /dev/null +++ b/pb/wallet/v1/wallet_message.proto @@ -0,0 +1,379 @@ +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; + double amount_irr = 7; + 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; + authorization.InternalIAM iam = 11; + optional string updated_at = 12; + optional string created_at = 13; + Asset selected_asset = 14; +} + +message UserBNPLReq { + uint64 id = 1; + int64 bnpl_id = 2; + authorization.InternalIAM iam = 6; + optional string created_at = 3; + optional string employee_id = 4; + optional int64 company_id = 5; + optional float amount = 7; + optional PaymentPeriodInfo payment_period = 8; + optional bool has_agreed_contract = 9; + optional int32 current_step = 10; //Can be useful for admin to change the current step + optional int64 asset_id = 11; +} + +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; +} + +enum TransactionType { + Unknown = 0; + Buy = 1; + Sell = 2; + Transfer = 3; + Redeem = 4; +} +enum TransactionStatus { + Undetermined = 0; + Failed = -10; + Suspended = -9; + Created = -1; + Pending = 1; + Successful = 2; +} + +message Transaction { + int64 id = 1; + int64 asset_id = 2; + // Asset asset_info = 3; //Causing network overloading + 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; + TransactionStatus status = 13; + TransactionType 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 TransactionStatus status = 12; + optional TransactionType 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; +} + +/* + Redeem Token +*/ +message RedeemTokenReq { + authorization.InternalIAM iam = 1; + int64 asset_id = 2; + uint64 bank_info_id = 3; + double amount = 4; + optional string tfa_code = 5; +} +message CalculateRedeemTokenRes { + Asset asset = 1; + double free_balance = 2; + double total_balance = 3; + double request_amount = 4; + double profit_capital = 5; + double user_capital = 6; + optional authorization.BankInfo bank_info = 7; +} +message RedeemTokenRes { + uint64 id = 1; + int64 user_id = 2; + Asset asset = 3; + double free_balance = 4; + double total_balance = 5; + double request_amount = 6; + string created_at = 7; + bool is_paied = 8; + // receipt.Receipt receipt = 8; + double calculated_profit = 9; + optional authorization.BankInfo bank_info = 10; + optional string receipt = 11; +} +message RedeemTokenResList { + repeated RedeemTokenRes list = 1; +}