zioinfo-mail/workspace/guardia-messenger/services/api.ts
DESKTOP-TKLFCPR\ython 777e027553 refactor(structure): move app -> workspace/guardia-messenger
Permission denied on git mv, used robocopy instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 23:53:57 +09:00

89 lines
3.0 KiB
TypeScript

import axios from 'axios'
import * as SecureStore from 'expo-secure-store'
import { API_BASE } from '../constants/Config'
const client = axios.create({
baseURL: API_BASE,
timeout: 15000,
// 자체서명 인증서 허용 (개발/테스트)
})
client.interceptors.request.use(async (cfg) => {
const token = await SecureStore.getItemAsync('grd_token')
if (token) cfg.headers.Authorization = `Bearer ${token}`
return cfg
})
client.interceptors.response.use(
(r) => r,
async (err) => {
if (err.response?.status === 401) {
await SecureStore.deleteItemAsync('grd_token')
await SecureStore.deleteItemAsync('grd_user')
}
return Promise.reject(err)
}
)
/* ── 인증 ── */
export const login = (username: string, password: string) =>
client.post('/api/auth/login', { username, password })
export const getMe = () =>
client.get('/api/auth/me')
/* ── 대시보드 ── */
export const getDashboard = () =>
client.get('/api/dashboard')
/* ── SR ── */
export const getSRList = (page = 0, size = 20) =>
client.get(`/api/tasks?page=${page}&size=${size}`)
export const getSRDetail = (id: number) =>
client.get(`/api/tasks/${id}`)
export const createSR = (data: { title: string; description: string; priority: string; sr_type: string }) =>
client.post('/api/tasks', data)
export const updateSRStatus = (id: number, status: string) =>
client.patch(`/api/tasks/${id}/status`, { status })
/* ── AI 챗봇 ── */
export const sendAIMessage = (message: string) =>
client.post('/api/chatbot/message', { message })
/* ── 라이선스 ── */
export const getLicenseStatus = () =>
client.get('/api/license/status')
/* ── 알림 ── */
export const getNotifications = () =>
client.get('/api/notifications?size=30')
export const markNotificationRead = (id: number) =>
client.patch(`/api/notifications/${id}/read`)
/* ── DR 자동화 ── */
export const getDRDashboard = () => client.get('/api/dr/dashboard')
export const getDRRtoRpo = () => client.get('/api/dr/rto-rpo')
export const getDRScenarios = () => client.get('/api/dr/scenarios')
export const runDRTest = (scenarioId: number) =>
client.post('/api/dr/test', { scenario_id: scenarioId, test_type: 'RECOVERY' })
/* ── 네트워크 장비 ── */
export const getNetworkDevices = (instId?: number) =>
client.get('/api/network/devices', { params: instId ? { inst_id: instId } : {} })
export const getNetworkTopology = () => client.get('/api/network/topology')
export const backupNetworkDevice = (id: number) =>
client.post(`/api/network/devices/${id}/backup`)
export const getNetworkDiff = (id: number) =>
client.get(`/api/network/devices/${id}/diff`)
/* ── CSAP 점검 ── */
export const getCSAPDashboard = () => client.get('/api/compliance/csap/dashboard')
export const getCSAPItems = () => client.get('/api/compliance/csap/items')
export const getCSAPResults = () => client.get('/api/compliance/csap/results')
export default client