-
Notifications
You must be signed in to change notification settings - Fork 255
/
article.ts
85 lines (72 loc) · 2.03 KB
/
article.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import axios from "axios";
import { SERVER_BASE_URL } from "../utils/constant";
import { getQuery } from "../utils/getQuery";
const ArticleAPI = {
all: (page, limit = 10) =>
axios.get(`${SERVER_BASE_URL}/articles?${getQuery(limit, page)}`),
byAuthor: (author, page = 0, limit = 5) =>
axios.get(
`${SERVER_BASE_URL}/articles?author=${encodeURIComponent(
author
)}&${getQuery(limit, page)}`
),
byTag: (tag, page = 0, limit = 10) =>
axios.get(
`${SERVER_BASE_URL}/articles?tag=${encodeURIComponent(tag)}&${getQuery(
limit,
page
)}`
),
delete: (id, token) =>
axios.delete(`${SERVER_BASE_URL}/articles/${id}`, {
headers: {
Authorization: `Token ${token}`,
},
}),
favorite: (slug) =>
axios.post(`${SERVER_BASE_URL}/articles/${slug}/favorite`),
favoritedBy: (author, page) =>
axios.get(
`${SERVER_BASE_URL}/articles?favorited=${encodeURIComponent(
author
)}&${getQuery(10, page)}`
),
feed: (page, limit = 10) =>
axios.get(`${SERVER_BASE_URL}/articles/feed?${getQuery(limit, page)}`),
get: (slug) => axios.get(`${SERVER_BASE_URL}/articles/${slug}`),
unfavorite: (slug) =>
axios.delete(`${SERVER_BASE_URL}/articles/${slug}/favorite`),
update: async (article, token) => {
const { data, status } = await axios.put(
`${SERVER_BASE_URL}/articles/${article.slug}`,
JSON.stringify({ article }),
{
headers: {
"Content-Type": "application/json",
Authorization: `Token ${encodeURIComponent(token)}`,
},
}
);
return {
data,
status,
};
},
create: async (article, token) => {
const { data, status } = await axios.post(
`${SERVER_BASE_URL}/articles`,
JSON.stringify({ article }),
{
headers: {
"Content-Type": "application/json",
Authorization: `Token ${encodeURIComponent(token)}`,
},
}
);
return {
data,
status,
};
},
};
export default ArticleAPI;