fix: Wave 1 — critical bug fixes across 9 files
All checks were successful
Test Asgard Runner / test (push) Successful in 3s
All checks were successful
Test Asgard Runner / test (push) Successful in 3s
- Fix double-prefix URL bugs in 4 analytics/revenue views (/api/api → /api) - Fix AdminDashboard quick-links routing (/platform-admin/* → /admin/*) - Fix MigrationView import missing Authorization header - Remove dead ConsoleModule from app.module (conflicts with NatsBridgeGateway on /ws) - Fix store.service.ts raw Error throws → NotFoundException/ForbiddenException - Fix payment-order entity FK (webstore_subscription_id → WebstoreSubscription) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -19,7 +19,7 @@ let performanceChartInstance: ECharts | null = null
|
||||
const loadMapAnalytics = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const response = await api.get<MapAnalyticsSummary>(`/api/analytics/maps?range=${timeRange.value}`)
|
||||
const response = await api.get<MapAnalyticsSummary>(`/analytics/maps?range=${timeRange.value}`)
|
||||
analytics.value = response
|
||||
await nextTick()
|
||||
renderCharts()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { useApi } from '@/composables/useApi'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
import { Download, Upload, FileText, Loader2 } from 'lucide-vue-next'
|
||||
import { safeFileSize, safeDate } from '@/utils/formatters'
|
||||
|
||||
@@ -13,6 +14,7 @@ interface ExportRecord {
|
||||
}
|
||||
|
||||
const api = useApi()
|
||||
const authStore = useAuthStore()
|
||||
const exports = ref<ExportRecord[]>([])
|
||||
const isExporting = ref(false)
|
||||
const isImporting = ref(false)
|
||||
@@ -53,6 +55,7 @@ async function importData() {
|
||||
|
||||
const response = await fetch('/api/migration/import', {
|
||||
method: 'POST',
|
||||
headers: { 'Authorization': 'Bearer ' + authStore.accessToken },
|
||||
body: formData,
|
||||
})
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ const loadRetentionData = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const response = await api.get<RetentionResponse>(
|
||||
`/api/analytics/retention?wipe_count=${wipeCount.value}`
|
||||
`/analytics/retention?wipe_count=${wipeCount.value}`
|
||||
)
|
||||
retentionData.value = response
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ const formatDate = (dateStr: string): string => {
|
||||
const loadTransactions = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await api.get<StoreTransaction[]>('/api/webstore/transactions')
|
||||
const data = await api.get<StoreTransaction[]>('/webstore/transactions')
|
||||
transactions.value = data
|
||||
await nextTick()
|
||||
renderRevenueChart()
|
||||
|
||||
@@ -30,7 +30,7 @@ const loadAnalytics = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const range = rangeToParam(timeRange.value)
|
||||
const response = await api.get<WipePerformanceMetrics>(`/api/analytics/wipes/performance?range=${range}`)
|
||||
const response = await api.get<WipePerformanceMetrics>(`/analytics/wipes/performance?range=${range}`)
|
||||
metrics.value = response
|
||||
|
||||
await nextTick()
|
||||
|
||||
@@ -30,10 +30,10 @@ const kpiCards = [
|
||||
]
|
||||
|
||||
const quickLinks = [
|
||||
{ label: 'Licenses', description: 'Manage license keys and activations', icon: Key, route: '/platform-admin/licenses' },
|
||||
{ label: 'Subscriptions', description: 'View module subscriptions and MRR', icon: CreditCard, route: '/platform-admin/subscriptions' },
|
||||
{ label: 'Users', description: 'Manage platform users and permissions', icon: Users, route: '/platform-admin/users' },
|
||||
{ label: 'Servers', description: 'Monitor connected game servers', icon: MonitorCog, route: '/platform-admin/servers' },
|
||||
{ label: 'Licenses', description: 'Manage license keys and activations', icon: Key, route: '/admin/licenses' },
|
||||
{ label: 'Subscriptions', description: 'View module subscriptions and MRR', icon: CreditCard, route: '/admin/subscriptions' },
|
||||
{ label: 'Users', description: 'Manage platform users and permissions', icon: Users, route: '/admin/users' },
|
||||
{ label: 'Servers', description: 'Monitor connected game servers', icon: MonitorCog, route: '/admin/servers' },
|
||||
]
|
||||
|
||||
function formatValue(value: number | undefined, format: string): string {
|
||||
|
||||
Reference in New Issue
Block a user