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

260 lines
7.1 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-17 18:45:25 +08:00
PatchStudentData,
2023-07-03 21:22:31 +08:00
RegistrationParams,
2023-07-17 18:45:25 +08:00
StudentData,
2023-07-03 21:22:31 +08:00
} from "../../interfaces/Interfaces";
2023-07-27 00:06:32 +08:00
export let backendURL = "https://stude.keannu1.duckdns.org";
export let backendURLWebsocket = "ws://stude.keannu1.duckdns.org";
if (__DEV__) {
2023-07-03 21:22:31 +08:00
backendURL = "http://10.0.10.8:8000";
backendURLWebsocket = "ws://10.0.10.8:8000";
2023-07-03 21:22:31 +08:00
}
2023-07-27 00:09:43 +08:00
// Switch this on if you wanna run production URLs while in development
2023-07-27 16:02:14 +08:00
let use_production = true;
2023-07-27 00:09:43 +08:00
if (use_production) {
backendURL = "https://stude.keannu1.duckdns.org";
backendURLWebsocket = "ws://stude.keannu1.duckdns.org";
}
2023-07-03 21:22:31 +08:00
const instance = axios.create({
baseURL: backendURL,
timeout: 1000,
});
2023-07-26 10:03:25 +08:00
console.log(backendURL);
2023-07-03 21:22:31 +08:00
// 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;
}
2023-07-17 18:45:25 +08:00
// Header Config Template for REST
export async function GetConfig() {
const accessToken = await getAccessToken();
return {
headers: {
Authorization: `Bearer ${accessToken}`,
},
};
}
// 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";
// console.log(error_message);
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() {
2023-07-17 18:45:25 +08:00
const config = await GetConfig();
2023-07-03 21:22:31 +08:00
return instance
2023-07-17 18:45:25 +08:00
.get("/api/v1/accounts/users/me/", config)
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
});
}
2023-07-17 18:45:25 +08:00
export async function PatchUserInfo(info: PatchStudentData) {
const config = await GetConfig();
return instance
.patch("/api/v1/accounts/users/me/", info, config)
.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-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() {
2023-07-17 18:45:25 +08:00
const config = await GetConfig();
return instance
2023-07-17 18:45:25 +08:00
.get("/api/v1/year_levels/", config)
.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 GetSubjects() {
2023-07-17 22:44:50 +08:00
const config = await GetConfig();
return instance
.get("/api/v1/subjects/", config)
.then((response) => {
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-17 22:44:50 +08:00
}
2023-07-06 20:29:04 +08:00
export async function OnboardingUpdateStudentInfo(info: OnboardingParams) {
2023-07-17 18:45:25 +08:00
const config = await GetConfig();
2023-07-06 20:29:04 +08:00
return instance
2023-07-17 18:45:25 +08:00
.patch("/api/v1/accounts/users/me/", info, config)
2023-07-06 20:29:04 +08:00
.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
});
}