Skip to content

Commit 49a884e

Browse files
committed
Use transferId for internal transfer handling and UETR for display
1 parent ab5ff22 commit 49a884e

File tree

11 files changed

+43
-26
lines changed

11 files changed

+43
-26
lines changed

gui/src/components/TransactionActions.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const props = defineProps<{
66
transaction: JSONify<Transaction>
77
}>()
88
9-
const transactionStatusLink = useBankRoute('admin', 'transfers', props.transaction.uetr)
9+
const transactionStatusLink = useBankRoute('admin', 'transfers', String(props.transaction.id))
1010
1111
defineEmits<{
1212
(e: 'transactionAccepted', acceptedTransaction: JSONify<Transaction>): void

gui/src/components/TransactionsTable.vue

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ type TransformedTransaction = JSONify<Transaction> & {
2929
updatedAtDate: Date
3030
}
3131
32-
import UUID from './UUID.vue'
3332
import TransactionActions from './TransactionActions.vue'
3433
3534
const props = defineProps<{
@@ -324,9 +323,9 @@ const clearFilter = () => {
324323
</Column>
325324

326325
<!-- UETR Column -->
327-
<Column field="uetr" header="ID" sortable>
326+
<Column field="uetr" header="UETR" sortable>
328327
<template #body="{ data }: { data: TransformedTransaction }">
329-
<UUID :uuid="data.uetr" />
328+
{{ data.uetr }}
330329
</template>
331330
<template #filter="{ filterModel }">
332331
<InputText v-model="filterModel.value" type="text" placeholder="Search by UETR" />

gui/src/pages/admin/TransactionStatusPage.vue

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ useHead({
1313
title: 'Transaction Status'
1414
})
1515
const route = useRoute()
16-
const uetr = route.params.uetr as string
16+
const transferId = route.params.transferId as string
1717
1818
const { state: transactionDetails, isLoading } = useAsyncState(
19-
() => fetchTransactionDetails(useCurrentBank(), uetr),
19+
() => fetchTransactionDetails(useCurrentBank(), transferId),
2020
null
2121
)
2222
@@ -45,7 +45,7 @@ function isExpanded(messageId: string) {
4545
4646
async function refresh() {
4747
isLoading.value = true
48-
transactionDetails.value = await fetchTransactionDetails(useCurrentBank(), uetr)
48+
transactionDetails.value = await fetchTransactionDetails(useCurrentBank(), transferId)
4949
isLoading.value = false
5050
}
5151
@@ -59,8 +59,12 @@ useFakeSocket(refresh)
5959
<div class="mb-4">
6060
<h1 class="text-3xl font-bold">Transaction Status</h1>
6161
</div>
62-
<p class="text-base-content/70" v-if="uetr">
63-
Tracking transaction: <code class="badge badge-neutral font-mono">{{ uetr }}</code>
62+
<p class="text-base-content/70">
63+
Tracking transaction:
64+
<code class="badge badge-neutral font-mono">
65+
<template v-if="transactionDetails">{{ transactionDetails?.transaction.uetr }}</template>
66+
<template v-else>{{ transferId }} (Internal ID)</template>
67+
</code>
6468
</p>
6569
</div>
6670

gui/src/router.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const adminRoutes: RouteRecordRaw[] = [
1616
component: () => import('./pages/admin/TransactionsHistoryPage.vue')
1717
},
1818
{
19-
path: 'transfers/:uetr',
19+
path: 'transfers/:transferId',
2020
component: () => import('./pages/admin/TransactionStatusPage.vue')
2121
}
2222
]

gui/src/services/backend/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ function mapTransfers(transfers: any[]): Transfer[] {
186186

187187
export async function makeTransfer(
188188
bank: BankName,
189-
transferDetails: Omit<Transaction, 'uetr' | 'createdAt' | 'updatedAt' | 'status'> & { comment: string | null }
189+
transferDetails: Omit<Transaction, 'id' | 'uetr' | 'createdAt' | 'updatedAt' | 'status'> & { comment: string | null }
190190
): Promise<void> {
191191
try {
192192
const convertedDetails = convertFrontendTransactionToBackendTransferDetails(transferDetails)

gui/src/services/backend/converters.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,15 @@ export function convertBackendTransferToFrontend(backendTransfer: BackendTransfe
7272
}
7373

7474
return {
75-
uetr:
76-
backendTransfer.transferId?.toString() || backendTransfer.endToEndId || backendTransfer.messageId || 'unknown',
75+
uetr: backendTransfer.endToEndId || backendTransfer.messageId || 'unknown',
76+
id: backendTransfer.transferId,
7777
status: convertBackendTransferStatusToFrontend(backendTransfer.status),
7878
type: 'transfer',
7979
debtor,
8080
creditor,
8181
createdAt: backendTransfer.transferTimestamp ? new Date(backendTransfer.transferTimestamp) : new Date(),
82-
updatedAt: backendTransfer.transferTimestamp ? new Date(backendTransfer.transferTimestamp) : new Date()
82+
updatedAt: backendTransfer.transferTimestamp ? new Date(backendTransfer.transferTimestamp) : new Date(),
83+
comment: backendTransfer.remittanceInfo || null
8384
}
8485
}
8586

@@ -110,7 +111,7 @@ export function convertBackendTransfersToFrontendJSON(backendTransfers: BackendT
110111
* Convert frontend transaction to backend transfer details for creation
111112
*/
112113
export function convertFrontendTransactionToBackendTransferDetails(
113-
transaction: Omit<Transaction, 'uetr' | 'createdAt' | 'updatedAt' | 'status'> & { comment: string | null }
114+
transaction: Omit<Transaction, 'id' | 'uetr' | 'createdAt' | 'updatedAt' | 'status'> & { comment: string | null }
114115
): BackendTransferDetails {
115116
return {
116117
debtorIban: transaction.debtor.accountId,

gui/src/services/backend/models.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export type TransferDetails = z.infer<typeof TransferDetailsSchema>
3535
* Transfer entity schema (full transfer object)
3636
*/
3737
export const TransferSchema = z.object({
38-
transferId: z.number().int().optional(),
38+
transferId: z.number().int(),
3939
clientId: z.number().int().nullable(),
4040
status: TransferStatusSchema,
4141
messageId: z.string().optional(),

gui/src/services/mock-backend/api.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { BankName } from '../../../config'
22
import config from '../../../config'
33
import { bankAIbans, bankBIbans, currencies, exchangeValues } from '../hardcoded'
4-
import { simulate } from './simulation'
4+
import { newTransactionId, simulate } from './simulation'
55
import type { Transaction, JSONify, Currency, TransactionMessageStatus } from './types'
66
import { BackendUpdates, deepCopy } from './utils'
77
import { faker } from '@faker-js/faker'
@@ -60,9 +60,12 @@ export function getTransactionFormData(senderBank: BankName) {
6060
}
6161
}
6262

63-
export function newTransaction(transaction: Omit<Transaction, 'uetr' | 'createdAt' | 'updatedAt' | 'status'>): void {
63+
export function newTransaction(
64+
transaction: Omit<Transaction, 'id' | 'uetr' | 'createdAt' | 'updatedAt' | 'status'>
65+
): void {
6466
const newTransaction: Transaction = {
6567
...transaction,
68+
id: newTransactionId(),
6669
uetr: faker.string.uuid(),
6770
status: 'pending',
6871
createdAt: new Date(),
@@ -132,11 +135,11 @@ export function exchange(props: ExchangeProps): boolean {
132135
return true
133136
}
134137

135-
export function getTransactionDetails(uetr: string): JSONify<{
138+
export function getTransactionDetails(transferId: string): JSONify<{
136139
transaction: Transaction
137140
messages: TransactionMessageStatus[]
138141
}> | null {
139-
const transaction = state.transactions.find((t) => t.uetr === uetr)
142+
const transaction = state.transactions.find((t) => t.id === Number(transferId))
140143
if (!transaction) {
141144
return null
142145
}

gui/src/services/mock-backend/simulation.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ import { faker } from '@faker-js/faker'
44
import type { BackendUpdates } from './utils.js'
55
import config from '../../../config.js'
66

7+
let lastTransactionId = 0
8+
9+
export function newTransactionId(): number {
10+
return ++lastTransactionId
11+
}
12+
713
/**
814
* Initializes start data in state and cron jobs for changing state from the other end.
915
* @param ownBIC - BIC of the own bank
@@ -38,6 +44,8 @@ export function simulate(emitter: BackendUpdates) {
3844
for (let j = 0; j < 5; j++) {
3945
const transaction: Transaction = {
4046
uetr: faker.string.uuid(),
47+
id: newTransactionId(),
48+
comment: null,
4149
status: faker.helpers.arrayElement(statuses),
4250
type: 'transfer',
4351
debtor: {
@@ -110,6 +118,8 @@ export function simulate(emitter: BackendUpdates) {
110118
}
111119
const incomingTransaction: Transaction = {
112120
uetr: faker.string.uuid(),
121+
id: newTransactionId(),
122+
comment: null,
113123
status: 'pending',
114124
type: 'transfer',
115125
debtor: {

gui/src/services/mock-backend/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ export type TransactionParty = {
1010
}
1111

1212
export type Transaction = {
13+
id: number
1314
uetr: string
1415
status: TransactionStatus
1516
type: TransactionType
1617
debtor: TransactionParty
1718
creditor: TransactionParty
1819
createdAt: Date
1920
updatedAt: Date
21+
comment: string | null
2022
}
2123

2224
export type Account = {

0 commit comments

Comments
 (0)