2019-11-22 19:12:02 +08:00
|
|
|
import axios from 'axios';
|
2019-11-29 13:43:09 +08:00
|
|
|
import storage from './utils/storage';
|
2019-11-22 19:12:02 +08:00
|
|
|
|
|
|
|
|
const API_PREFIX = '/api/v2/';
|
|
|
|
|
|
|
|
|
|
function fetchPins(offset, tagFilter, userFilter) {
|
|
|
|
|
const url = `${API_PREFIX}pins/`;
|
|
|
|
|
const queryArgs = {
|
|
|
|
|
format: 'json',
|
|
|
|
|
ordering: '-id',
|
2019-11-29 12:26:50 +08:00
|
|
|
limit: 30,
|
2019-11-22 19:12:02 +08:00
|
|
|
offset,
|
|
|
|
|
};
|
|
|
|
|
if (tagFilter) queryArgs.tags__name = tagFilter;
|
|
|
|
|
if (userFilter) queryArgs.submitter__username = userFilter;
|
|
|
|
|
return axios.get(
|
|
|
|
|
url,
|
|
|
|
|
{ params: queryArgs },
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-30 15:06:29 +08:00
|
|
|
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);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-28 23:12:19 +08:00
|
|
|
function fetchPinsForBoard(boardId) {
|
|
|
|
|
const url = `${API_PREFIX}boards/${boardId}`;
|
|
|
|
|
return new Promise(
|
|
|
|
|
(resolve, reject) => {
|
|
|
|
|
axios.get(url).then(
|
|
|
|
|
(resp) => {
|
2019-11-29 00:16:28 +08:00
|
|
|
resolve({ data: { results: resp.data.pins_detail, next: null } });
|
2019-11-28 23:12:19 +08:00
|
|
|
},
|
|
|
|
|
error => reject(error),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-29 13:43:09 +08:00
|
|
|
const User = {
|
|
|
|
|
storageKey: 'pinry.user',
|
2019-11-29 16:26:11 +08:00
|
|
|
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);
|
2019-11-29 17:25:37 +08:00
|
|
|
reject(error.response);
|
2019-11-29 16:26:11 +08:00
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
},
|
2019-11-29 13:43:09 +08:00
|
|
|
logOut() {
|
|
|
|
|
const self = this;
|
|
|
|
|
return new Promise(
|
|
|
|
|
(resolve) => {
|
2019-11-29 14:40:04 +08:00
|
|
|
axios.get('/api-auth/logout/').then(
|
2019-11-29 13:43:09 +08:00
|
|
|
() => {
|
|
|
|
|
storage.set(self.storageKey, null, 1);
|
|
|
|
|
resolve();
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
fetchUserInfo() {
|
|
|
|
|
/* returns null if user not logged in */
|
|
|
|
|
const self = this;
|
|
|
|
|
const userInfo = storage.get(self.storageKey);
|
|
|
|
|
if (userInfo !== null) {
|
|
|
|
|
return new Promise(
|
|
|
|
|
resolve => resolve(userInfo),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
const url = `${API_PREFIX}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]);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
2019-11-22 19:12:02 +08:00
|
|
|
export default {
|
2019-11-30 15:06:29 +08:00
|
|
|
fetchPin,
|
2019-11-22 19:12:02 +08:00
|
|
|
fetchPins,
|
2019-11-28 23:12:19 +08:00
|
|
|
fetchPinsForBoard,
|
2019-11-29 13:43:09 +08:00
|
|
|
User,
|
2019-11-22 19:12:02 +08:00
|
|
|
};
|