mirror of
https://github.com/pinry/pinry.git
synced 2025-11-14 17:05:50 +01:00
256 lines
5.5 KiB
JavaScript
256 lines
5.5 KiB
JavaScript
import axios from 'axios';
|
|
import storage from './utils/storage';
|
|
|
|
const API_PREFIX = '/api/v2/';
|
|
|
|
const Board = {
|
|
create(name) {
|
|
const url = `${API_PREFIX}boards/`;
|
|
const data = { name };
|
|
return new Promise(
|
|
(resolve, reject) => {
|
|
axios.post(url, data).then(
|
|
(resp) => {
|
|
if (resp.status !== 201) {
|
|
reject(resp);
|
|
}
|
|
resolve(resp.data);
|
|
},
|
|
(error) => {
|
|
reject(error.response);
|
|
},
|
|
);
|
|
},
|
|
);
|
|
},
|
|
get(boardId) {
|
|
const url = `${API_PREFIX}boards/${boardId}/`;
|
|
return axios.get(url);
|
|
},
|
|
fetchFullList(username) {
|
|
const url = `${API_PREFIX}boards-auto-complete/?submitter__username=${username}`;
|
|
return axios.get(url);
|
|
},
|
|
saveChanges(boardId, fieldsForm) {
|
|
const url = `${API_PREFIX}boards/${boardId}/`;
|
|
return axios.patch(
|
|
url,
|
|
fieldsForm,
|
|
);
|
|
},
|
|
addToBoard(boardId, pinIds) {
|
|
const url = `${API_PREFIX}boards/${boardId}/`;
|
|
return axios.patch(
|
|
url,
|
|
{ pins_to_add: pinIds },
|
|
);
|
|
},
|
|
delete(boardId) {
|
|
const url = `${API_PREFIX}boards/${boardId}/`;
|
|
return axios.delete(url);
|
|
},
|
|
};
|
|
|
|
const Pin = {
|
|
create(jsonData) {
|
|
const url = `${API_PREFIX}pins/`;
|
|
return axios.post(
|
|
url,
|
|
jsonData,
|
|
);
|
|
},
|
|
createFromURL(jsonData) {
|
|
return this.create(jsonData);
|
|
},
|
|
createFromUploaded(jsonData) {
|
|
return this.create(jsonData);
|
|
},
|
|
uploadImage(fileObject) {
|
|
const url = `${API_PREFIX}images/`;
|
|
const data = new FormData();
|
|
data.append('image', fileObject);
|
|
return axios.post(
|
|
url,
|
|
data,
|
|
{
|
|
headers: {
|
|
'Content-Type': 'multipart/form-data',
|
|
},
|
|
},
|
|
);
|
|
},
|
|
deleteById(pinId) {
|
|
const url = `${API_PREFIX}pins/${pinId}/`;
|
|
return axios.delete(
|
|
url,
|
|
);
|
|
},
|
|
};
|
|
|
|
|
|
function fetchPins(offset, tagFilter, userFilter) {
|
|
const url = `${API_PREFIX}pins/`;
|
|
const queryArgs = {
|
|
format: 'json',
|
|
ordering: '-id',
|
|
limit: 30,
|
|
offset,
|
|
};
|
|
if (tagFilter) queryArgs.tags__name = tagFilter;
|
|
if (userFilter) queryArgs.submitter__username = userFilter;
|
|
return axios.get(
|
|
url,
|
|
{ params: queryArgs },
|
|
);
|
|
}
|
|
|
|
function fetchPin(pinId) {
|
|
const url = `${API_PREFIX}pins/${pinId}`;
|
|
return new Promise(
|
|
(resolve, reject) => {
|
|
const p = axios.get(
|
|
url,
|
|
);
|
|
p.then(
|
|
(resp) => {
|
|
const response = {
|
|
data: { results: [resp.data], next: null },
|
|
};
|
|
resolve(response);
|
|
},
|
|
(error) => {
|
|
reject(error);
|
|
},
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
function fetchPinsForBoard(boardId) {
|
|
const url = `${API_PREFIX}boards/${boardId}/`;
|
|
return new Promise(
|
|
(resolve, reject) => {
|
|
axios.get(url).then(
|
|
(resp) => {
|
|
resolve({ data: { results: resp.data.pins_detail, next: null, board: resp.data } });
|
|
},
|
|
error => reject(error),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
function fetchBoardForUser(username) {
|
|
const url = `${API_PREFIX}boards/?submitter__username=${username}`;
|
|
return axios.get(url);
|
|
}
|
|
|
|
const User = {
|
|
storageKey: 'pinry.user',
|
|
signUp(username, email, password, passwordRepeat) {
|
|
const url = `${API_PREFIX}profile/users/`;
|
|
return new Promise(
|
|
(resolve, reject) => {
|
|
const p = axios.post(
|
|
url,
|
|
{
|
|
username,
|
|
email,
|
|
password,
|
|
password_repeat: passwordRepeat,
|
|
},
|
|
);
|
|
p.then(
|
|
(resp) => {
|
|
if (resp.status !== 201) {
|
|
reject(resp);
|
|
}
|
|
resolve(resp.data);
|
|
},
|
|
(error) => {
|
|
console.log('Failed to sign up due to unexpected error:', error);
|
|
reject(error.response);
|
|
},
|
|
);
|
|
},
|
|
);
|
|
},
|
|
logIn(username, password) {
|
|
const url = `${API_PREFIX}profile/login/`;
|
|
return new Promise(
|
|
(resolve, reject) => {
|
|
const p = axios.post(
|
|
url,
|
|
{
|
|
username,
|
|
password,
|
|
},
|
|
);
|
|
p.then(
|
|
(resp) => {
|
|
if (resp.status !== 200) {
|
|
reject(resp);
|
|
}
|
|
resolve(resp.data);
|
|
},
|
|
(error) => {
|
|
console.log('Failed to log in due to unexpected error:', error);
|
|
reject(error.response);
|
|
},
|
|
);
|
|
},
|
|
);
|
|
},
|
|
logOut() {
|
|
const self = this;
|
|
return new Promise(
|
|
(resolve) => {
|
|
axios.get('/api-auth/logout/').then(
|
|
() => {
|
|
storage.set(self.storageKey, null, 1);
|
|
resolve();
|
|
},
|
|
);
|
|
},
|
|
);
|
|
},
|
|
fetchUserInfo(force = false) {
|
|
/* returns null if user not logged in */
|
|
const self = this;
|
|
if (!force) {
|
|
const userInfo = storage.get(self.storageKey);
|
|
if (userInfo !== null) {
|
|
return new Promise(
|
|
resolve => resolve(userInfo),
|
|
);
|
|
}
|
|
}
|
|
const url = `${API_PREFIX}/profile/users/`;
|
|
return new Promise(
|
|
(resolve) => {
|
|
axios.get(url).then(
|
|
(resp) => {
|
|
const users = resp.data;
|
|
if (users.length === 0) {
|
|
return resolve(null);
|
|
}
|
|
const value = users[0];
|
|
storage.set(self.storageKey, value, 60 * 5 * 1000);
|
|
return resolve(users[0]);
|
|
},
|
|
);
|
|
},
|
|
);
|
|
},
|
|
};
|
|
|
|
export default {
|
|
Pin,
|
|
Board,
|
|
fetchPin,
|
|
fetchPins,
|
|
fetchPinsForBoard,
|
|
fetchBoardForUser,
|
|
User,
|
|
};
|