fixes
Build And Push Image / docker (push) Successful in 1m29s
Details
Build And Push Image / docker (push) Successful in 1m29s
Details
This commit is contained in:
parent
3d565e8185
commit
1875fac7d4
|
|
@ -183,6 +183,57 @@
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
|
<!-- Data Management -->
|
||||||
|
<v-row class="mb-6">
|
||||||
|
<v-col cols="12">
|
||||||
|
<v-card elevation="2">
|
||||||
|
<v-card-title>
|
||||||
|
<v-icon left>mdi-database-cog</v-icon>
|
||||||
|
Data Management
|
||||||
|
</v-card-title>
|
||||||
|
<v-card-text>
|
||||||
|
<p class="mb-4">Manage data integrity and perform maintenance operations on the portal database.</p>
|
||||||
|
|
||||||
|
<v-row>
|
||||||
|
<v-col cols="12" md="6">
|
||||||
|
<v-btn
|
||||||
|
@click="assignMemberIds"
|
||||||
|
color="warning"
|
||||||
|
variant="outlined"
|
||||||
|
prepend-icon="mdi-account-multiple-plus"
|
||||||
|
block
|
||||||
|
size="large"
|
||||||
|
:loading="assigningMemberIds"
|
||||||
|
>
|
||||||
|
Assign Member IDs
|
||||||
|
</v-btn>
|
||||||
|
<div class="text-caption mt-2 text-medium-emphasis">
|
||||||
|
Assign unique member IDs (MUSA-0001, MUSA-0002, etc.) to members who don't have them
|
||||||
|
</div>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
|
<v-col cols="12" md="6">
|
||||||
|
<v-btn
|
||||||
|
@click="backfillEventIds"
|
||||||
|
color="primary"
|
||||||
|
variant="outlined"
|
||||||
|
prepend-icon="mdi-calendar-sync"
|
||||||
|
block
|
||||||
|
size="large"
|
||||||
|
:loading="backfillLoading"
|
||||||
|
>
|
||||||
|
Backfill Event IDs
|
||||||
|
</v-btn>
|
||||||
|
<div class="text-caption mt-2 text-medium-emphasis">
|
||||||
|
Assign business IDs to events that don't have them
|
||||||
|
</div>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
|
||||||
</v-container>
|
</v-container>
|
||||||
|
|
||||||
<!-- NocoDB Settings Dialog -->
|
<!-- NocoDB Settings Dialog -->
|
||||||
|
|
@ -422,6 +473,10 @@ const overdueCount = ref(0);
|
||||||
const overdueRefreshTrigger = ref(0);
|
const overdueRefreshTrigger = ref(0);
|
||||||
const duesRefreshTrigger = ref(0);
|
const duesRefreshTrigger = ref(0);
|
||||||
|
|
||||||
|
// Data management
|
||||||
|
const assigningMemberIds = ref(false);
|
||||||
|
const backfillLoading = ref(false);
|
||||||
|
|
||||||
// Member dialog state
|
// Member dialog state
|
||||||
const showViewDialog = ref(false);
|
const showViewDialog = ref(false);
|
||||||
const showEditDialog = ref(false);
|
const showEditDialog = ref(false);
|
||||||
|
|
@ -719,6 +774,88 @@ const handleMemberUpdated = (member: any) => {
|
||||||
duesRefreshTrigger.value += 1;
|
duesRefreshTrigger.value += 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Data management functions
|
||||||
|
const assignMemberIds = async () => {
|
||||||
|
assigningMemberIds.value = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
console.log('Starting member ID assignment...');
|
||||||
|
|
||||||
|
const response = await $fetch<{
|
||||||
|
success: boolean;
|
||||||
|
message: string;
|
||||||
|
data: {
|
||||||
|
totalMembers: number;
|
||||||
|
membersUpdated: number;
|
||||||
|
updatedMembers: Array<{
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
email: string;
|
||||||
|
memberId: string;
|
||||||
|
}>;
|
||||||
|
startingId: string | null;
|
||||||
|
endingId: string | null;
|
||||||
|
};
|
||||||
|
}>('/api/admin/assign-member-ids', {
|
||||||
|
method: 'POST'
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response.success) {
|
||||||
|
console.log('✅ Member ID assignment completed:', {
|
||||||
|
totalMembers: response.data.totalMembers,
|
||||||
|
membersUpdated: response.data.membersUpdated,
|
||||||
|
startingId: response.data.startingId,
|
||||||
|
endingId: response.data.endingId
|
||||||
|
});
|
||||||
|
|
||||||
|
// Show success message
|
||||||
|
alert(`Success! Assigned member IDs to ${response.data.membersUpdated} members.\nRange: ${response.data.startingId} to ${response.data.endingId}`);
|
||||||
|
|
||||||
|
// Refresh dues management data
|
||||||
|
duesRefreshTrigger.value += 1;
|
||||||
|
}
|
||||||
|
} catch (error: any) {
|
||||||
|
console.error('❌ Failed to assign member IDs:', error);
|
||||||
|
alert(`Error: ${error.statusMessage || error.message || 'Failed to assign member IDs'}`);
|
||||||
|
} finally {
|
||||||
|
assigningMemberIds.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const backfillEventIds = async () => {
|
||||||
|
backfillLoading.value = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
console.log('Starting event ID backfill...');
|
||||||
|
|
||||||
|
const response = await $fetch<{
|
||||||
|
success: boolean;
|
||||||
|
message: string;
|
||||||
|
data: {
|
||||||
|
totalEvents: number;
|
||||||
|
eventsUpdated: number;
|
||||||
|
};
|
||||||
|
}>('/api/admin/backfill-event-ids', {
|
||||||
|
method: 'POST'
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response.success) {
|
||||||
|
console.log('✅ Event ID backfill completed:', {
|
||||||
|
totalEvents: response.data.totalEvents,
|
||||||
|
eventsUpdated: response.data.eventsUpdated
|
||||||
|
});
|
||||||
|
|
||||||
|
// Show success message
|
||||||
|
alert(`Success! Assigned event IDs to ${response.data.eventsUpdated} events.`);
|
||||||
|
}
|
||||||
|
} catch (error: any) {
|
||||||
|
console.error('❌ Failed to backfill event IDs:', error);
|
||||||
|
alert(`Error: ${error.statusMessage || error.message || 'Failed to backfill event IDs'}`);
|
||||||
|
} finally {
|
||||||
|
backfillLoading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Load stats and overdue count on component mount
|
// Load stats and overdue count on component mount
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await loadStats();
|
await loadStats();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue