copied the code from the working repo
This commit is contained in:
161
mtucijobsweb2/api/api.ts
Normal file
161
mtucijobsweb2/api/api.ts
Normal file
@@ -0,0 +1,161 @@
|
||||
import { ExtendedJobData, JobData, LoginData, ResumeData, ResumeDataWithoutSkills, SearchFilters } from "@/types/types";
|
||||
import { $Api, $mtuciApi } from "./axiosInstance";
|
||||
import qs from 'qs';
|
||||
import { AxiosResponse } from "axios";
|
||||
import { message } from "antd";
|
||||
export const sendJobs = async (postData: JobData) => {
|
||||
try {
|
||||
const response = await $Api.post(`/jobs/`, postData, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('Error post jobs:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const login = async (values: LoginData) => {
|
||||
try {
|
||||
const response = await $Api.post('/login', qs.stringify(values), {
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
});
|
||||
|
||||
// Сохраняем токен в localStorage
|
||||
const { access_token, token_type } = response.data;
|
||||
localStorage.setItem('token', `${token_type} ${access_token}`);
|
||||
|
||||
return response.data; // Верните данные ответа
|
||||
} catch (error) {
|
||||
console.error('Error logging in:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
export const fetchJobs = async (): Promise<ExtendedJobData[]> => {
|
||||
try {
|
||||
const response = await $Api.get('/jobs/');
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Error fetching jobs:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
export const fetchJobById = async (id: number): Promise<ExtendedJobData> => {
|
||||
try {
|
||||
const response = await $Api.get(`/jobs/${id}`);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Error fetching jobs:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const updateJob = async (id: number, job: JobData) => {
|
||||
try {
|
||||
const response = await $Api.put(`/jobs/${id}`, job);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Error put jobs:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const fetchJobsMatches = async (id: number): Promise<ResumeData[]> => {
|
||||
try {
|
||||
const response = await $Api.get(`/jobs/matches/${id}`);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Error fetching jobs:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
export const deleteJob = async (id: number): Promise<void> => {
|
||||
try {
|
||||
await $Api.delete(`/jobs/${id}`);
|
||||
} catch (error) {
|
||||
console.error('Error deleting job:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
export const fetchHardSkills = async (
|
||||
|
||||
): Promise<{ Hard_skillID: number; Title: string }[]> => {
|
||||
try {
|
||||
const response = await $mtuciApi.get(`/services/hardskills/`);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Error fetching hard skills:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
export const fetchJobsHardSkills = async (id: number): Promise<string[]> => {
|
||||
try {
|
||||
const response: AxiosResponse<{ Hard_skillID: number; Title: string }[]> =
|
||||
await $Api.get(`/jobs/hardskills/${id}`);
|
||||
// Извлекаем массив названий хардскиллов из ответа
|
||||
const skills = response.data.map(skill => skill.Title);
|
||||
return skills;
|
||||
} catch (error) {
|
||||
console.error('Error fetching hardskills:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
export const downloadResume = async (filename: string): Promise<void> => {
|
||||
try {
|
||||
const response: AxiosResponse<Blob> = await $mtuciApi.get(
|
||||
`/services/resume/${filename}`,
|
||||
{
|
||||
responseType: 'blob', // Указываем тип ответа blob для скачивания файлов
|
||||
}
|
||||
);
|
||||
|
||||
// Проверяем, что ответ содержит данные
|
||||
if (!response.data) {
|
||||
message.error('У пользователя нет резюме.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Создаем ссылку для скачивания файла
|
||||
const url = window.URL.createObjectURL(new Blob([response.data]));
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
link.setAttribute('download', filename); // Устанавливаем имя файла для сохранения
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
link.remove();
|
||||
} catch (error) {
|
||||
console.error('Error downloading resume:', error);
|
||||
message.error('Не удалось скачать резюме.');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
export const searchStudents = async (
|
||||
queryString: string
|
||||
): Promise<ResumeDataWithoutSkills[]> => {
|
||||
try {
|
||||
const response = await $Api.get(`/jobs/students-search/?${queryString}`);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error('Error fetching students:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
31
mtucijobsweb2/api/axiosInstance.ts
Normal file
31
mtucijobsweb2/api/axiosInstance.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import axios from 'axios';
|
||||
import 'dotenv/config'
|
||||
|
||||
// Настройка Axios без заголовка Content-Type
|
||||
export const $Api = axios.create({
|
||||
baseURL: `${process.env.APP_BASE_URL}`,
|
||||
// Убедитесь, что переменная окружения правильно задана
|
||||
});
|
||||
|
||||
// Добавляем интерсептор для добавления токена в заголовок запроса
|
||||
$Api.interceptors.request.use(
|
||||
config => {
|
||||
const token = localStorage.getItem('token');
|
||||
if (token) {
|
||||
config.headers.Authorization = token;
|
||||
}
|
||||
return config;
|
||||
},
|
||||
error => Promise.reject(error)
|
||||
);
|
||||
|
||||
|
||||
|
||||
export const $mtuciApi = axios.create({
|
||||
baseURL: `${process.env.APP_BASE_URL}`,
|
||||
headers: {
|
||||
Accept: '*/*',
|
||||
'X-API-KEY':
|
||||
'SbRHOVoK97GKCx3Lqx6hKXLbZZJEd0GTGbeglXdpK9PhSB9kpr4eWCsuIIwnD6F2mgpTDlVHFCRbeFmuSfqBVsb12lNwF3P1tmdxiktl7zH9sDS2YK7Pyj2DecCWAZ3n',
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user