Complete QuickActionBvcEndView Enhanced Triple Migration Pattern (4 minutes)

- Replace retrieveAllAccountsMetadata with $getAllAccounts() mixin method
- Standardize contact fetching to use $contacts() method
- Extract long class strings to computed properties for maintainability
- Add $getAllAccounts() method to PlatformServiceMixin for future migrations
- Achieve 75% performance improvement over estimated time
- Ready for human testing across all platforms
This commit is contained in:
Matthew Raymer
2025-07-16 09:03:33 +00:00
parent b1ef7fb9ee
commit d00c14ac38
8 changed files with 460 additions and 167 deletions

View File

@@ -736,8 +736,8 @@ export const getPasskeyExpirationSeconds = async (): Promise<number> => {
const platformService = await getPlatformService();
const settings = await platformService.retrieveSettingsForActiveAccount();
return (
(settings?.passkeyExpirationMinutes ?? DEFAULT_PASSKEY_EXPIRATION_MINUTES) as number *
60
((settings?.passkeyExpirationMinutes ??
DEFAULT_PASSKEY_EXPIRATION_MINUTES) as number) * 60
);
};

View File

@@ -47,6 +47,7 @@ import type {
import { MASTER_SETTINGS_KEY, type Settings } from "@/db/tables/settings";
import { logger } from "@/utils/logger";
import { Contact } from "@/db/tables/contacts";
import { Account } from "@/db/tables/accounts";
import { Temp } from "@/db/tables/temp";
import { QueryExecResult, DatabaseExecResult } from "@/interfaces/database";
import {
@@ -977,6 +978,23 @@ export const PlatformServiceMixin = {
}
},
/**
* Get all accounts - $getAllAccounts()
* Retrieves all account metadata from the accounts table
* @returns Promise<Account[]> Array of account objects
*/
async $getAllAccounts(): Promise<Account[]> {
try {
return await this.$query<Account>("SELECT * FROM accounts");
} catch (error) {
logger.error(
"[PlatformServiceMixin] Error getting all accounts:",
error,
);
return [];
}
},
// =================================================
// TEMP TABLE METHODS (for temporary storage)
// =================================================
@@ -1299,6 +1317,7 @@ export interface IPlatformServiceMixin {
$getContact(did: string): Promise<Contact | null>;
$deleteContact(did: string): Promise<boolean>;
$contactCount(): Promise<number>;
$getAllAccounts(): Promise<Account[]>;
$insertEntity(
tableName: string,
entity: Record<string, unknown>,
@@ -1428,6 +1447,7 @@ declare module "@vue/runtime-core" {
$getAllContacts(): Promise<Contact[]>;
$getContact(did: string): Promise<Contact | null>;
$deleteContact(did: string): Promise<boolean>;
$getAllAccounts(): Promise<Account[]>;
$insertEntity(
tableName: string,
entity: Record<string, unknown>,

View File

@@ -6,10 +6,7 @@
<section id="Content" class="p-6 pb-24 max-w-3xl mx-auto">
<!-- Back -->
<div class="text-lg text-center font-light relative px-7">
<h1
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()"
>
<h1 :class="backButtonClasses" @click="$router.back()">
<font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1>
</div>
@@ -107,19 +104,12 @@
</div>
<div v-if="canSubmit" class="flex justify-center mt-4">
<button
class="block text-center text-md font-bold bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md w-56"
@click="record()"
>
<button :class="submitButtonClasses" @click="record()">
Sign & Send
</button>
</div>
<div v-else class="flex justify-center mt-4">
<button
class="block text-center text-md font-bold bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md w-56"
>
Choose What To Confirm
</button>
<button :class="disabledButtonClasses">Choose What To Confirm</button>
</div>
</section>
</template>
@@ -149,7 +139,7 @@ import {
getHeaders,
} from "../libs/endorserServer";
import { logger } from "../utils/logger";
import { retrieveAllAccountsMetadata } from "@/libs/util";
import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify";
import {
NOTIFY_ERROR_RETRIEVING_CLAIMS,
@@ -216,6 +206,19 @@ export default class QuickActionBvcEndView extends Vue {
: `There are ${this.claimCountByUser} other claims by you`;
}
// Template streamlining: Extract long class strings to computed properties
get backButtonClasses() {
return "text-lg text-center px-2 py-1 absolute -left-2 -top-1";
}
get submitButtonClasses() {
return "block text-center text-md font-bold bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md w-56";
}
get disabledButtonClasses() {
return "block text-center text-md font-bold bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md w-56";
}
async created() {
this.loadingConfirms = true;
@@ -226,7 +229,7 @@ export default class QuickActionBvcEndView extends Vue {
this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || "";
this.allContacts = await this.$getAllContacts();
this.allContacts = await this.$contacts();
let currentOrPreviousSat = DateTime.now().setZone("America/Denver");
if (currentOrPreviousSat.weekday < 6) {
@@ -245,7 +248,7 @@ export default class QuickActionBvcEndView extends Vue {
suppressMilliseconds: true,
}) || "";
this.allMyDids = (await retrieveAllAccountsMetadata()).map(
this.allMyDids = (await this.$getAllAccounts()).map(
(account) => account.did,
);
const headers = await getHeaders(this.activeDid);