UNPKG

eksi-sozluk

Version:
319 lines (294 loc) 6.99 kB
const axios = require('axios') const qs = require('querystring') const Entry = require('./Entry') const UserForMember = require('./UserForMember') const { URLS } = require('../constants') const { VoteError } = require('../exceptions') /** * Entry for members. * * @augments Entry */ class EntryForMember extends Entry { /** * Is entry favorite? * * @type {boolean} */ isFavorited /** * Is entry deleted? * * @type {boolean} */ isDeleted /** * Is rookie entry? * * @type {boolean} */ isRookieEntry /** * Is entry author me? * * @type {boolean} */ isEntryAuthorMe /** * Upvote. * * @returns {Promise} Promise. */ upvote () { return new Promise((resolve, reject) => { axios({ url: URLS.ENTRY_VOTE, method: 'POST', headers: { 'x-requested-with': 'XMLHttpRequest', cookie: this._cookies }, data: qs.stringify({ id: this.id, rate: 1, owner: this.authorId }) }).then(res => { // res.data -> { Success: true, AlreadyVotedAnonymously: false, Message: 'oldu' } if (!res.data.Success) { return reject(new VoteError(res.data.Message)) } resolve() }) }) } /** * Downvote. * * @returns {Promise} Promise. */ downvote () { return new Promise((resolve, reject) => { axios({ url: URLS.ENTRY_VOTE, method: 'POST', headers: { 'x-requested-with': 'XMLHttpRequest', cookie: this._cookies }, data: qs.stringify({ id: this.id, rate: -1, owner: this.authorId }) }).then(res => { // res.data -> { Success: true, AlreadyVotedAnonymously: false, Message: 'oldu' } if (!res.data.Success) { return reject(new VoteError(res.data.Message)) } resolve() }) }) } /** * Remove vote. * * @returns {Promise} Promise. */ removevote () { return new Promise((resolve, reject) => { axios({ url: URLS.ENTRY_VOTE_REMOVE, method: 'POST', headers: { 'x-requested-with': 'XMLHttpRequest', cookie: this._cookies }, data: qs.stringify({ id: this.id, owner: this.authorId }) }).then(res => { // res.data -> { Success: true, AlreadyVotedAnonymously: false, Message: 'oldu' } if (!res.data.Success) { return reject(new VoteError(res.data.Message)) } resolve() }) }) } /** * Favorite the entry. * * @returns {Promise} Promise. */ favorite () { return new Promise((resolve, reject) => { axios({ url: URLS.ENTRY_FAVORITE, method: 'POST', headers: { 'x-requested-with': 'XMLHttpRequest', cookie: this._cookies }, data: qs.stringify({ entryId: this.id }) }).then(res => { // res.data -> { "Success": true, "ErrorMessage": null, "Count": 2 } if (!res.data.Success) { return reject(new Error(res.data.ErrorMessage)) } this.favoriteCount = res.data.Count this.isFavorited = true resolve() }) }) } /** * Unfavorite the entry. * * @returns {Promise} Promise. */ unfavorite () { return new Promise((resolve, reject) => { axios({ url: URLS.ENTRY_UNFAVORITE, method: 'POST', headers: { 'x-requested-with': 'XMLHttpRequest', cookie: this._cookies }, data: qs.stringify({ entryId: this.id }) }).then(res => { // res.data -> { "Success": true, "ErrorMessage": null, "Count": 2 } if (!res.data.Success) { return reject(new Error(res.data.ErrorMessage)) } this.favoriteCount = res.data.Count this.isFavorited = false resolve() }) }) } /** * List authors of which favorite the entry. * * @returns {Promise.Array<UserForMember>} Promise. */ listFavoritedAuthors () { return new Promise((resolve, reject) => { const requestOptions = { endpoint: URLS.ENTRY_FAVORITE_AUTHORS, ajax: true, params: { entryId: this.id }, cookie: this._cookies } this._request(requestOptions, $ => { const authors = [] $('ul li a').each((i, elm) => { const username = $(elm) .text() .replace('@', '') const path = $(elm).attr('href') const member = new UserForMember( this._request, username, this._cookies ) member.url = URLS.BASE + path authors.push(member) }) resolve(authors) }) }) } /** * List rookies of which favorite the entry. * * @returns {Promise.Array<UserForMember>} Promise. */ listFavoritedRookies () { return new Promise((resolve, reject) => { const requestOptions = { endpoint: URLS.ENTRY_FAVORITE_ROOKIES, ajax: true, params: { entryId: this.id }, cookie: this._cookies } this._request(requestOptions, $ => { const rookies = [] $('ul li a').each((i, elm) => { const username = $(elm) .text() .replace('@', '') const path = $(elm).attr('href') const member = new UserForMember( this._request, username, this._cookies ) member.url = URLS.BASE + path rookies.push(member) }) resolve(rookies) }) }) } /** * Delete the entry from trash. * * @returns {Promise} Promise. */ deleteFromTrash () { return new Promise((resolve, reject) => { axios({ url: URLS.TRASH_DELETE, method: 'POST', params: { id: this.id }, headers: { 'x-requested-with': 'XMLHttpRequest', cookie: this._cookies } }).then(res => { resolve() }) }) } /** * Recover the entry from trash. * * @returns {Promise} Promise. */ recoverFromTrash () { return new Promise((resolve, reject) => { axios({ url: URLS.TRASH_RECOVER, method: 'POST', params: { id: this.id }, headers: { 'x-requested-with': 'XMLHttpRequest', cookie: this._cookies } }) .then(res => { resolve() }) .catch(err => { // user don't permitted recover to the entry if (err.response && err.response.status === 403) { return reject(new Error('Not Permitted')) } // handle other errors reject(err) }) }) } } module.exports = EntryForMember