Skip to content

Commit

Permalink
Merge pull request #728 from BoostryJP/feature/#727
Browse files Browse the repository at this point in the history
Add off-chain update option
  • Loading branch information
YoshihitoAso authored Dec 5, 2024
2 parents 2057fe1 + 8518d79 commit 39ea377
Show file tree
Hide file tree
Showing 8 changed files with 692 additions and 153 deletions.
1 change: 1 addition & 0 deletions app/model/schema/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@
GetBatchRegisterPersonalInfoResponse,
ListAllPersonalInfoBatchRegistrationUploadQuery,
ListBatchRegisterPersonalInfoUploadResponse,
PersonalInfoDataSource,
RegisterPersonalInfoRequest,
)
from .position import (
Expand Down
13 changes: 13 additions & 0 deletions app/model/schema/personal_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@
from .base import BasePaginationQuery, ResultSet, SortOrder


############################
# COMMON
############################
class PersonalInfoEventType(StrEnum):
REGISTER = "register"
MODIFY = "modify"
Expand Down Expand Up @@ -78,6 +81,13 @@ class PersonalInfoHistory(BaseModel):
created: datetime


class PersonalInfoDataSource(StrEnum):
"""Personal information data source"""

ON_CHAIN = "on-chain"
OFF_CHAIN = "off-chain"


############################
# REQUEST
############################
Expand All @@ -86,6 +96,9 @@ class RegisterPersonalInfoRequest(PersonalInfoInput):

account_address: EthereumAddress
key_manager: str
data_source: PersonalInfoDataSource = Field(
PersonalInfoDataSource.ON_CHAIN, description=PersonalInfoDataSource.__doc__
)


class ListAllPersonalInfoBatchRegistrationUploadQuery(BasePaginationQuery):
Expand Down
50 changes: 36 additions & 14 deletions app/routers/issuer/bond.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@
ListTransferHistoryQuery,
ListTransferHistorySortItem,
LockEventCategory,
PersonalInfoDataSource,
RegisterPersonalInfoRequest,
ScheduledEventIdListResponse,
ScheduledEventIdResponse,
Expand Down Expand Up @@ -2447,20 +2448,41 @@ async def register_bond_token_holder_personal_info(
raise InvalidParameterError("this token is temporarily unavailable")

# Register Personal Info
token_contract = await IbetStraightBondContract(token_address).get()
try:
personal_info_contract = PersonalInfoContract(
logger=LOG,
issuer=issuer_account,
contract_address=token_contract.personal_info_contract_address,
)
await personal_info_contract.register_info(
account_address=personal_info.account_address,
data=personal_info.model_dump(),
default_value=None,
)
except SendTransactionError:
raise SendTransactionError("failed to register personal information")
input_personal_info = personal_info.model_dump(
include={
"key_manager",
"name",
"postal_code",
"address",
"email",
"birth",
"is_corporate",
"tax_category",
}
)
if personal_info.data_source == PersonalInfoDataSource.OFF_CHAIN:
_off_personal_info = IDXPersonalInfo()
_off_personal_info.issuer_address = issuer_address
_off_personal_info.account_address = personal_info.account_address
_off_personal_info.personal_info = input_personal_info
_off_personal_info.data_source = PersonalInfoDataSource.OFF_CHAIN
await db.merge(_off_personal_info)
await db.commit()
else:
token_contract = await IbetStraightBondContract(token_address).get()
try:
personal_info_contract = PersonalInfoContract(
logger=LOG,
issuer=issuer_account,
contract_address=token_contract.personal_info_contract_address,
)
await personal_info_contract.register_info(
account_address=personal_info.account_address,
data=input_personal_info,
default_value=None,
)
except SendTransactionError:
raise SendTransactionError("failed to register personal information")

return

Expand Down
50 changes: 36 additions & 14 deletions app/routers/issuer/share.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@
ListTransferHistoryQuery,
ListTransferHistorySortItem,
LockEventCategory,
PersonalInfoDataSource,
RegisterPersonalInfoRequest,
ScheduledEventIdListResponse,
ScheduledEventIdResponse,
Expand Down Expand Up @@ -2375,20 +2376,41 @@ async def register_share_token_holder_personal_info(
raise InvalidParameterError("this token is temporarily unavailable")

# Register Personal Info
token_contract = await IbetShareContract(token_address).get()
try:
personal_info_contract = PersonalInfoContract(
logger=LOG,
issuer=issuer_account,
contract_address=token_contract.personal_info_contract_address,
)
await personal_info_contract.register_info(
account_address=personal_info.account_address,
data=personal_info.model_dump(),
default_value=None,
)
except SendTransactionError:
raise SendTransactionError("failed to register personal information")
input_personal_info = personal_info.model_dump(
include={
"key_manager",
"name",
"postal_code",
"address",
"email",
"birth",
"is_corporate",
"tax_category",
}
)
if personal_info.data_source == PersonalInfoDataSource.OFF_CHAIN:
_off_personal_info = IDXPersonalInfo()
_off_personal_info.issuer_address = issuer_address
_off_personal_info.account_address = personal_info.account_address
_off_personal_info.personal_info = input_personal_info
_off_personal_info.data_source = PersonalInfoDataSource.OFF_CHAIN
await db.merge(_off_personal_info)
await db.commit()
else:
token_contract = await IbetShareContract(token_address).get()
try:
personal_info_contract = PersonalInfoContract(
logger=LOG,
issuer=issuer_account,
contract_address=token_contract.personal_info_contract_address,
)
await personal_info_contract.register_info(
account_address=personal_info.account_address,
data=input_personal_info,
default_value=None,
)
except SendTransactionError:
raise SendTransactionError("failed to register personal information")

return

Expand Down
Loading

0 comments on commit 39ea377

Please sign in to comment.