Added data download ability
This commit is contained in:
33
frontend/src/services/login.ts
Normal file
33
frontend/src/services/login.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
|
||||
|
||||
export const login = async (email: string, password: string) => {
|
||||
const response = await fetch(`${process.env.REACT_APP_API_URL}/auth/login`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
email,
|
||||
password,
|
||||
}),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Login failed");
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
// save access token to local storage
|
||||
localStorage.setItem("accessToken", data.access_token);
|
||||
localStorage.setItem("refresh_token", data.refresh_token);
|
||||
|
||||
// calculate expiration date
|
||||
const expirationDate = new Date(
|
||||
new Date().getTime() + data.access_token_expiry * 1000
|
||||
);
|
||||
|
||||
// save expiration date to local storage
|
||||
localStorage.setItem("expirationDate", expirationDate.toISOString());
|
||||
return data;
|
||||
};
|
||||
91
frontend/src/services/signs.ts
Normal file
91
frontend/src/services/signs.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
const getSigns = async () => {
|
||||
// get access token from local storage
|
||||
const token = localStorage.getItem('accessToken');
|
||||
// make request to get signs
|
||||
const response = await fetch(`${process.env.REACT_APP_API_URL}/signs/`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`
|
||||
}
|
||||
});
|
||||
|
||||
// return the response
|
||||
return response.json();
|
||||
};
|
||||
|
||||
const addSign = async (url: string) => {
|
||||
// get access token from local storage
|
||||
const token = localStorage.getItem('accessToken');
|
||||
// make request to add sign
|
||||
const response = await fetch(`${process.env.REACT_APP_API_URL}/signs/`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({ "url": url })
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Invalid url or sign already exists");
|
||||
}
|
||||
|
||||
// return the response
|
||||
return response.json();
|
||||
};
|
||||
|
||||
const getSign = async (id: number) => {
|
||||
// get access token from local storage
|
||||
const token = localStorage.getItem('accessToken');
|
||||
// make request to get sign
|
||||
const response = await fetch(`${process.env.REACT_APP_API_URL}/signs/${id}`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Sign not found");
|
||||
}
|
||||
|
||||
// return the response
|
||||
return response.json();
|
||||
};
|
||||
|
||||
const downloadSigns = async () => {
|
||||
// get access token from local storage
|
||||
const token = localStorage.getItem('accessToken');
|
||||
// make request to download signs
|
||||
const response = await fetch(`${process.env.REACT_APP_API_URL}/signs/download/all`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Something went wrong");
|
||||
}
|
||||
|
||||
// return the response
|
||||
return response.blob();
|
||||
};
|
||||
|
||||
const deleteSign = async (id: number) => {
|
||||
// get access token from local storage
|
||||
const token = localStorage.getItem('accessToken');
|
||||
// make request to delete sign
|
||||
const response = await fetch(`${process.env.REACT_APP_API_URL}/signs/${id}`, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Sign not found");
|
||||
}
|
||||
|
||||
// return the response
|
||||
return response.json();
|
||||
};
|
||||
|
||||
export { addSign, getSigns, getSign, downloadSigns, deleteSign };
|
||||
94
frontend/src/services/signvideos.ts
Normal file
94
frontend/src/services/signvideos.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
import axios from 'axios';
|
||||
|
||||
const uploadSignVideo = async (id: number, recordedBlob: Blob, onUploadProgress: ((arg0: number) => void)) => {
|
||||
// get access token from local storage
|
||||
const token = localStorage.getItem('accessToken');
|
||||
|
||||
let formData = new FormData();
|
||||
formData.append('video', recordedBlob);
|
||||
|
||||
// make request to get signs
|
||||
const response = await axios.post(`${process.env.REACT_APP_API_URL}/signs/${id}/video/`, formData, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
ContentType: 'multipart/form-data',
|
||||
},
|
||||
onUploadProgress: (progressEvent) => {
|
||||
onUploadProgress(
|
||||
Math.round((progressEvent.loaded * 100) / (progressEvent.total || 1))
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
// return the response
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const getThumbail = async (sign_id: number, video_id: number) => {
|
||||
// get access token from local storage
|
||||
const token = localStorage.getItem('accessToken');
|
||||
|
||||
// make request to get signs
|
||||
const response = await axios.get(`${process.env.REACT_APP_API_URL}/signs/${sign_id}/video/${video_id}/thumbnail/`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
// response blob
|
||||
responseType: 'blob'
|
||||
});
|
||||
|
||||
// return the response
|
||||
console.log(response)
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const getVideo = async (sign_id: number, video_id: number) => {
|
||||
// get access token from local storage
|
||||
const token = localStorage.getItem('accessToken');
|
||||
|
||||
// make request to get signs
|
||||
const response = await axios.get(`${process.env.REACT_APP_API_URL}/signs/${sign_id}/video/${video_id}/`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
// response blob
|
||||
responseType: 'blob'
|
||||
});
|
||||
|
||||
// return the response
|
||||
return response.data;
|
||||
|
||||
};
|
||||
|
||||
const acceptVideo = async (sign_id: number, video_id: number, approved: boolean = false) => {
|
||||
// get access token from local storage
|
||||
const token = localStorage.getItem('accessToken');
|
||||
|
||||
// make request to get signs
|
||||
const response = await axios.patch(`${process.env.REACT_APP_API_URL}/signs/${sign_id}/video/${video_id}/`, { "approved": approved }, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
"Access-Control-Allow-Methods": '*',
|
||||
},
|
||||
});
|
||||
|
||||
// return the response
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const deleteVideo = async (sign_id: number, video_id: number) => {
|
||||
// get access token from local storage
|
||||
const token = localStorage.getItem('accessToken');
|
||||
|
||||
// make request to get signs
|
||||
const response = await axios.delete(`${process.env.REACT_APP_API_URL}/signs/${sign_id}/video/${video_id}/`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
});
|
||||
|
||||
// return the response
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export { uploadSignVideo, getThumbail, getVideo, acceptVideo, deleteVideo };
|
||||
Reference in New Issue
Block a user