copied the code from the working repo

This commit is contained in:
2024-11-30 16:00:48 +03:00
parent f22b92869b
commit 15ac0cb9b8
148 changed files with 23342 additions and 0 deletions

161
mtucijobsweb2/api/api.ts Normal file
View 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;
}
};

View 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',
},
});