StudE-Frontend/src/components/Api/Api.tsx

219 lines
5.9 KiB
TypeScript
Raw Normal View History

2023-07-03 21:22:31 +08:00
import axios from "axios";
import AsyncStorage from "@react-native-async-storage/async-storage";
import {
ActivationParams,
LoginParams,
2023-07-06 20:29:04 +08:00
OnboardingParams,
2023-07-03 21:22:31 +08:00
RegistrationParams,
} from "../../interfaces/Interfaces";
let debug = true;
export let backendURL = "";
if (debug) {
backendURL = "http://10.0.10.8:8000";
} else {
backendURL = "https://keannu125.pythonanywhere.com";
}
const instance = axios.create({
baseURL: backendURL,
timeout: 1000,
});
// App APIs
// Token Handling
export async function getAccessToken() {
const accessToken = await AsyncStorage.getItem("access_token");
return accessToken;
}
2023-07-03 21:22:31 +08:00
export async function getRefreshToken() {
const refreshToken = await AsyncStorage.getItem("refresh_token");
return refreshToken;
}
export async function setAccessToken(access: string) {
await AsyncStorage.setItem("access_token", access);
return true;
}
export async function setRefreshToken(refresh: string) {
await AsyncStorage.setItem("refresh_token", refresh);
return true;
}
// User APIs
2023-07-03 21:22:31 +08:00
export function UserRegister(register: RegistrationParams) {
console.log(JSON.stringify(register));
return instance
.post("/api/v1/accounts/users/", register)
.then(async (response) => {
2023-07-04 14:34:31 +08:00
return [true, response.status];
2023-07-03 21:22:31 +08:00
})
.catch((error) => {
let error_message = "";
if (error.response) error_message = error.response.data;
else error_message = "Unable to reach servers";
return [false, error_message];
2023-07-03 21:22:31 +08:00
});
}
export function UserLogin(user: LoginParams) {
return instance
2023-07-03 23:19:36 +08:00
.post("/api/v1/accounts/jwt/create/", user)
2023-07-03 21:22:31 +08:00
.then(async (response) => {
2023-07-04 19:40:25 +08:00
/*console.log(
"Access Token:",
response.data.access,
"\nRefresh Token:",
response.data.refresh
2023-07-04 19:40:25 +08:00
);*/
setAccessToken(response.data.access);
setRefreshToken(response.data.refresh);
return [true];
2023-07-03 21:22:31 +08:00
})
.catch((error) => {
let error_message = "";
if (error.response) error_message = error.response.data;
else error_message = "Unable to reach servers";
return [false, error_message];
2023-07-03 21:22:31 +08:00
});
}
export async function TokenRefresh() {
const refresh = await getRefreshToken();
// console.log("Refresh token", refresh);
2023-07-03 23:19:36 +08:00
return instance
.post("/api/v1/accounts/jwt/refresh/", {
refresh: refresh,
})
2023-07-03 23:19:36 +08:00
.then(async (response) => {
setAccessToken(response.data.access);
/*console.log(
"Token refresh success! New Access Token",
response.data.access
);*/
return true;
2023-07-03 23:19:36 +08:00
})
.catch((error) => {
let error_message = "";
if (error.response) error_message = error.response.data;
else error_message = "Unable to reach servers";
console.log("Token Refresh error:", error_message);
return false;
2023-07-03 23:19:36 +08:00
});
}
2023-07-03 21:22:31 +08:00
export async function UserInfo() {
const accessToken = await getAccessToken();
2023-07-03 21:22:31 +08:00
return instance
.get("/api/v1/accounts/users/me/", {
headers: {
Authorization: `Bearer ${accessToken}`,
2023-07-03 21:22:31 +08:00
},
})
.then((response) => {
// console.log(JSON.stringify(response.data));
2023-07-06 20:29:04 +08:00
return [true, response.data];
})
.catch((error) => {
let error_message = "";
if (error.response) error_message = error.response.data;
else error_message = "Unable to reach servers";
return [false, error_message];
2023-07-03 21:22:31 +08:00
});
}
export function UserActivate(activation: ActivationParams) {
return instance
.post("/api/v1/accounts/users/activation/", activation)
.then(async (response) => {
return true;
})
.catch((error) => {
return false;
});
}
// App APIs
export async function GetCourses() {
const accessToken = await getAccessToken();
return instance
.get("/api/v1/courses/", {
headers: {
Authorization: `Bearer ${accessToken}`,
},
})
.then((response) => {
// console.log(JSON.stringify(response.data));
return [true, response.data];
})
.catch((error) => {
let error_message = "";
if (error.response) error_message = error.response.data;
else error_message = "Unable to reach servers";
return [false, error_message];
});
}
export async function GetSemesters() {
const accessToken = await getAccessToken();
return instance
.get("/api/v1/semesters/", {
headers: {
Authorization: `Bearer ${accessToken}`,
},
})
.then((response) => {
// console.log(JSON.stringify(response.data));
return [true, response.data];
})
.catch((error) => {
let error_message = "";
if (error.response) error_message = error.response.data;
else error_message = "Unable to reach servers";
return [false, error_message];
});
}
export async function GetYearLevels() {
const accessToken = await getAccessToken();
return instance
.get("/api/v1/year_levels/", {
headers: {
Authorization: `Bearer ${accessToken}`,
},
})
.then((response) => {
// console.log(JSON.stringify(response.data));
return [true, response.data];
})
.catch((error) => {
let error_message = "";
if (error.response) error_message = error.response.data;
else error_message = "Unable to reach servers";
return [false, error_message];
});
}
2023-07-06 20:29:04 +08:00
export async function OnboardingUpdateStudentInfo(info: OnboardingParams) {
const accessToken = await getAccessToken();
const headers = {
Authorization: `Bearer ${accessToken}`,
};
return instance
.patch("/api/v1/accounts/users/me/", info, { headers })
.then((response) => {
console.log(JSON.stringify(response.data));
2023-07-06 21:27:36 +08:00
return [true, response.data];
2023-07-06 20:29:04 +08:00
})
.catch((error) => {
let error_message = "";
if (error.response) error_message = error.response.data;
else error_message = "Unable to reach servers";
console.log("Error updating onboarding info", error_message);
2023-07-06 21:27:36 +08:00
return [false, error_message];
2023-07-06 20:29:04 +08:00
});
}