162 lines
4.3 KiB
TypeScript
162 lines
4.3 KiB
TypeScript
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;
|
||
}
|
||
};
|