sozsoft-platform/ui/src/services/setup.service.ts

64 lines
1.6 KiB
TypeScript
Raw Normal View History

2026-04-23 10:36:51 +00:00
import apiService from './api.service'
2026-04-28 17:12:14 +00:00
import { store } from '@/store'
import { MigrateLogEntry, SetupStatusDto } from '@/proxy/setup/models'
2026-04-23 10:36:51 +00:00
export const getSetupStatus = () =>
apiService.fetchData<SetupStatusDto>({
method: 'GET',
url: '/api/setup/application-status',
2026-04-23 10:36:51 +00:00
})
export const getMigrateUrl = (): string => {
const base = import.meta.env.VITE_API_URL ?? ''
return `${base}/api/setup/migrate`
}
2026-04-28 17:12:14 +00:00
export const streamSetupMigrate = async (
onLog: (entry: MigrateLogEntry) => void,
onDone: () => void,
onError: (err: unknown) => void,
): Promise<void> => {
const token = store.getState().auth.session.token
const url = getMigrateUrl()
try {
const response = await fetch(url, {
method: 'POST',
headers: {
...(token ? { Authorization: `Bearer ${token}` } : {}),
Accept: 'text/event-stream',
},
})
if (!response.ok) {
onError(new Error(`HTTP ${response.status}`))
return
}
const reader = response.body?.getReader()
if (!reader) {
onError(new Error('No response body'))
return
}
const decoder = new TextDecoder()
let buffer = ''
while (true) {
const { done, value } = await reader.read()
if (done) break
buffer += decoder.decode(value, { stream: true })
const lines = buffer.split('\n')
buffer = lines.pop() ?? ''
for (const line of lines) {
if (line.startsWith('data: ')) {
try {
const data = JSON.parse(line.slice(6)) as MigrateLogEntry
onLog(data)
} catch { /* parse hatası, atla */ }
}
}
}
2026-04-28 17:12:14 +00:00
onDone()
} catch (err) {
onError(err)
}
2026-04-28 17:12:14 +00:00
}