This commit is contained in:
Primakov Alexandr Alexandrovich
2025-10-12 23:15:09 +03:00
commit 09cdd06307
88 changed files with 15007 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
import axios from 'axios';
import type { Repository, RepositoryCreate, Review, ReviewStats } from '../types';
const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8000/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 default api;