diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/.DS_Store differ diff --git a/authorization.proto b/authorization.proto new file mode 100644 index 0000000..bdcb013 --- /dev/null +++ b/authorization.proto @@ -0,0 +1,28 @@ +syntax = "proto3"; + +package authorization; + +import "base_message.proto"; +import "authorization_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(InternalIAM) returns (BankInfoList){} + rpc UserUpdateBankInfo(UserUpdateBankInfoReq) returns (base.StatusRes){} + + rpc GetUser(GetUserReq) returns (User){} +} \ No newline at end of file diff --git a/authorization_message.proto b/authorization_message.proto new file mode 100644 index 0000000..8bbf771 --- /dev/null +++ b/authorization_message.proto @@ -0,0 +1,159 @@ +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; +} + +/* + 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 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; + +} + +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; +} + +message BankInfo { + int64 id = 1; + string deposit_number = 2; + string iban_number = 3; + string card_number = 4; + int32 status = 5; + string updated_at = 6; + string created_at = 7; +} \ No newline at end of file diff --git a/base_message.proto b/base_message.proto new file mode 100644 index 0000000..aa5b1a7 --- /dev/null +++ b/base_message.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; + +package base; + +message Empty {} + +message StatusRes { + bool success = 1; +} + +message IdRes { + int64 id = 1; +} +message IdReq { + int64 id = 1; +} \ No newline at end of file diff --git a/wallet.proto b/wallet.proto new file mode 100644 index 0000000..75372a6 --- /dev/null +++ b/wallet.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; + +package wallet; + +import "base_message.proto"; +import "authorization_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); +} \ No newline at end of file diff --git a/wallet_message.proto b/wallet_message.proto new file mode 100644 index 0000000..457d3c8 --- /dev/null +++ b/wallet_message.proto @@ -0,0 +1,244 @@ +syntax = "proto3"; + +package wallet; + +import "authorization_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; +} + +/* + 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; +} + +