snp-connection-monitoring/frontend/src/services/serviceService.ts
HYOJIN efa7a7bd07 feat(phase2): 핵심 관리 기능 CRUD + 하트비트 스케줄러
백엔드:
- 테넌트 CRUD API (GET/POST/PUT /api/tenants)
- 사용자 CRUD API (GET/POST/PUT/DELETE /api/users, 역할 기반 접근 제어)
- 서비스 등록/관리 API (GET/POST/PUT /api/services, /api/services/{id}/apis)
- 하트비트 스케줄러 (30초 간격 폴링, WebClient 헬스체크)
- 헬스체크 상태 조회/이력 API (GET/POST /api/heartbeat)
- @EnableMethodSecurity + @PreAuthorize 역할 기반 접근 제어
- WebClientConfig, ErrorCode 7개 추가

프론트엔드:
- 테넌트 관리 페이지 (CRUD 테이블 + 모달)
- 사용자 관리 페이지 (역할 드롭다운, 테넌트 선택)
- 서비스 관리 페이지 (헬스 배지, API 목록 탭)
- API 서비스 모듈 4개 (tenant, user, service, heartbeat)

Closes #7

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 17:04:32 +09:00

16 lines
713 B
TypeScript

import { get, post, put } from './apiClient';
import type {
ServiceInfo,
ServiceApi,
CreateServiceRequest,
UpdateServiceRequest,
CreateServiceApiRequest,
} from '../types/service';
export const getServices = () => get<ServiceInfo[]>('/services');
export const createService = (req: CreateServiceRequest) => post<ServiceInfo>('/services', req);
export const updateService = (id: number, req: UpdateServiceRequest) => put<ServiceInfo>(`/services/${id}`, req);
export const getServiceApis = (serviceId: number) => get<ServiceApi[]>(`/services/${serviceId}/apis`);
export const createServiceApi = (serviceId: number, req: CreateServiceApiRequest) =>
post<ServiceApi>(`/services/${serviceId}/apis`, req);