Skip to content

Commit

Permalink
AddressBooks and AddressBookItems deletion API endpoints (#2148)
Browse files Browse the repository at this point in the history
  • Loading branch information
hectorgomezv authored Nov 21, 2024
1 parent 0d8eeea commit a4cc91f
Show file tree
Hide file tree
Showing 5 changed files with 499 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,19 @@ export interface IAddressBooksRepository {
chainId: string;
createAddressBookItemDto: CreateAddressBookItemDto;
}): Promise<AddressBookItem>;

deleteAddressBook(args: {
authPayload: AuthPayload;
address: `0x${string}`;
chainId: string;
}): Promise<void>;

deleteAddressBookItem(args: {
authPayload: AuthPayload;
address: `0x${string}`;
chainId: string;
addressBookItemId: number;
}): Promise<void>;
}

@Module({
Expand Down
50 changes: 50 additions & 0 deletions src/domain/accounts/address-books/address-books.repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,56 @@ export class AddressBooksRepository implements IAddressBooksRepository {
});
}

async deleteAddressBook(args: {
authPayload: AuthPayload;
address: `0x${string}`;
chainId: string;
}): Promise<void> {
if (!args.authPayload.isForSigner(args.address)) {
throw new UnauthorizedException();
}
await this.checkAddressBooksIsEnabled({
authPayload: args.authPayload,
address: args.address,
});
const account = await this.accountsRepository.getAccount({
authPayload: args.authPayload,
address: args.address,
});
const addressBook = await this.datasource.getAddressBook({
account,
chainId: args.chainId,
});
return this.datasource.deleteAddressBook(addressBook);
}

async deleteAddressBookItem(args: {
authPayload: AuthPayload;
address: `0x${string}`;
chainId: string;
addressBookItemId: number;
}): Promise<void> {
if (!args.authPayload.isForSigner(args.address)) {
throw new UnauthorizedException();
}
await this.checkAddressBooksIsEnabled({
authPayload: args.authPayload,
address: args.address,
});
const account = await this.accountsRepository.getAccount({
authPayload: args.authPayload,
address: args.address,
});
const addressBook = await this.datasource.getAddressBook({
account,
chainId: args.chainId,
});
return this.datasource.deleteAddressBookItem({
addressBook,
id: args.addressBookItemId,
});
}

// TODO: Extract this functionality in AccountsRepository['checkIsEnabled(DataType, Account)']
private async checkAddressBooksIsEnabled(args: {
authPayload: AuthPayload;
Expand Down
Loading

0 comments on commit a4cc91f

Please sign in to comment.