135 lines
3.1 KiB
JavaScript
135 lines
3.1 KiB
JavaScript
import Serializer from "../data/serializer";
|
|
import Net from "../tools/net";
|
|
|
|
function UserService() {
|
|
let cachedUserInfo = null;
|
|
|
|
async function login({ username, password }) {
|
|
let response = await Net.sendJsonRequest({
|
|
method: "POST",
|
|
url: "/api/users/login",
|
|
data: { username, password },
|
|
});
|
|
|
|
if (response.status !== 200) {
|
|
let responseData = JSON.parse(response.data);
|
|
throw new Error(responseData.error);
|
|
}
|
|
}
|
|
|
|
async function logout() {
|
|
let response = await Net.sendJsonRequest({
|
|
method: "POST",
|
|
url: "/api/users/logout",
|
|
});
|
|
cachedUserInfo = null;
|
|
}
|
|
|
|
async function getUserInfo() {
|
|
if (cachedUserInfo) {
|
|
return cachedUserInfo;
|
|
}
|
|
let response = await Net.sendRequest({
|
|
method: "GET",
|
|
url: "/api/users/session/info",
|
|
});
|
|
|
|
if (response.status !== 200) {
|
|
return null;
|
|
}
|
|
|
|
response = JSON.parse(response.data);
|
|
cachedUserInfo = response;
|
|
return response;
|
|
}
|
|
|
|
async function changePassword({ currentPassword, newPassword }) {
|
|
let response = await Net.sendJsonRequest({
|
|
method: "POST",
|
|
url: "/api/users/newpassword",
|
|
data: { currentPassword, newPassword },
|
|
});
|
|
|
|
if (response.status !== 200) {
|
|
let responseData = JSON.parse(response.data);
|
|
throw new Error(responseData.error);
|
|
}
|
|
}
|
|
|
|
async function getUsers() {
|
|
let response = await Net.sendRequest({
|
|
method: "GET",
|
|
url: "/api/users",
|
|
});
|
|
|
|
if (response.status !== 200) {
|
|
let responseData = JSON.parse(response.data);
|
|
throw new Error(responseData.error);
|
|
}
|
|
|
|
let userObjects = JSON.parse(response.data);
|
|
return Serializer.deserializeUsers(userObjects);
|
|
}
|
|
|
|
async function createUser({ username, password, isAdmin }) {
|
|
let response = await Net.sendJsonRequest({
|
|
method: "POST",
|
|
url: "/api/users",
|
|
data: { username, password, is_admin: isAdmin },
|
|
});
|
|
|
|
if (response.status !== 200) {
|
|
let responseData = JSON.parse(response.data);
|
|
throw new Error(responseData.error);
|
|
}
|
|
|
|
let userObject = JSON.parse(response.data);
|
|
let user = Serializer.deserializeUser(userObject);
|
|
return user;
|
|
}
|
|
|
|
async function updateUser(userId, { isAdmin }) {
|
|
let response = await Net.sendJsonRequest({
|
|
method: "PUT",
|
|
url: "/api/users/" + userId,
|
|
data: { is_admin: isAdmin ? 1 : 0 },
|
|
});
|
|
|
|
if (response.status !== 200) {
|
|
let responseData = JSON.parse(response.data);
|
|
throw new Error(responseData.error);
|
|
}
|
|
|
|
let userObject = JSON.parse(response.data);
|
|
let user = Serializer.deserializeUser(userObject);
|
|
return user;
|
|
}
|
|
|
|
async function deleteUser(userId) {
|
|
let response = await Net.sendJsonRequest({
|
|
method: "DELETE",
|
|
url: "/api/users/" + userId,
|
|
});
|
|
|
|
if (response.status !== 200) {
|
|
let responseData = JSON.parse(response.data);
|
|
throw new Error(responseData.error);
|
|
}
|
|
}
|
|
|
|
return {
|
|
login,
|
|
logout,
|
|
getUserInfo,
|
|
changePassword,
|
|
getUsers,
|
|
createUser,
|
|
updateUser,
|
|
deleteUser,
|
|
};
|
|
}
|
|
|
|
UserService = new UserService();
|
|
|
|
export default UserService;
|