93 lines
2.5 KiB
TypeScript

import axios from 'axios';
import type { Repository, RepositoryCreate, Review, ReviewStats } from '../types';
// Используем относительный путь для production или env для development
const API_BASE_URL = import.meta.env.VITE_API_URL || '/api';
const api = axios.create({
baseURL: API_BASE_URL,
headers: {
'Content-Type': 'application/json',
},
});
// Repositories
export const getRepositories = async () => {
const response = await api.get<{ items: Repository[]; total: number }>('/repositories');
return response.data;
};
export const getRepository = async (id: number) => {
const response = await api.get<Repository>(`/repositories/${id}`);
return response.data;
};
export const createRepository = async (data: RepositoryCreate) => {
const response = await api.post<Repository>('/repositories', data);
return response.data;
};
export const updateRepository = async (id: number, data: Partial<RepositoryCreate>) => {
const response = await api.put<Repository>(`/repositories/${id}`, data);
return response.data;
};
export const deleteRepository = async (id: number) => {
const response = await api.delete(`/repositories/${id}`);
return response.data;
};
export const scanRepository = async (id: number) => {
const response = await api.post(`/repositories/${id}/scan`);
return response.data;
};
// Reviews
export const getReviews = async (params?: {
skip?: number;
limit?: number;
repository_id?: number;
status?: string;
}) => {
const response = await api.get<{ items: Review[]; total: number }>('/reviews', { params });
return response.data;
};
export const getReview = async (id: number) => {
const response = await api.get<Review>(`/reviews/${id}`);
return response.data;
};
export const retryReview = async (id: number) => {
const response = await api.post(`/reviews/${id}/retry`);
return response.data;
};
export const getReviewStats = async () => {
const response = await api.get<ReviewStats>('/reviews/stats/dashboard');
return response.data;
};
export interface ReviewEvent {
id: number;
review_id: number;
event_type: string;
step?: string;
message?: string;
data?: any;
created_at: string;
}
export const getReviewEvents = async (reviewId: number) => {
const response = await api.get<ReviewEvent[]>(`/reviews/${reviewId}/events`);
return response.data;
};
export const getBackendVersion = async () => {
const response = await api.get<{ version: string }>('/version');
return response.data;
};
export default api;