93 lines
2.5 KiB
TypeScript
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;
|
|
|