|
|
const {query} = require("../client")
class Post { /** * @param {string} id * @param {number} position * @param {Date | string | number} time * @param {string} kind * @param {string} nick * @param {string} text */ constructor(id, position, time, kind, nick, text) { this.id = id this.position = position this.time = new Date(time) this.kind = kind this.nick = nick this.text = text }
static fromData(data) { return new Post(data.id, data.position, data.time, data.kind, data.nick, data.text) } }
class PostAPI { /** * Call `addPost(input)` mutation, returns the id and edited fields of the post * * @param {{logId:string, time:Date, kind:string, nick:string, text:string}} input * @returns {Promise<{id:string, time:Date, kind:string, nick:string, text:string}>} */ add(input) { return query(`
mutation AddPost($input: PostAddInput!) { addPost(input: $input) { id position time kind nick text } } `, {input}, {permissions: ["post.add"]}).then(({addPost}) => {
return new Post(addPost.id, addPost.position, addPost.time, addPost.kind, addPost.nick, addPost.text) }) }
/** * Call `movePost(input)` mutation, returns the id and position of all affected posts. * * @param {{id:string, toPosition: number}} input * @returns {Promise<{id:string, position:number}[]>} */ move(input) { return query(`
mutation MovePost($input: PostMoveInput!) { movePost(input: $input) { id position } } `, {input}, {permissions: ["post.move"]}).then(({movePost}) => {
return movePost }) }
/** * Call `editPost(input)` mutation, returns the id and edited fields of the post * * @param {{id:string, time:Date, kind:string, nick:string, text:string}} input * @returns {Promise<{id:string, time:Date, kind:string, nick:string, text:string}>} */ edit(input) { return query(`
mutation EditPost($input: PostEditInput!) { editPost(input: $input) { id time kind nick text } } `, {input}, {permissions: ["post.edit"]}).then(({editPost}) => {
if (editPost.time != null) { editPost.time = new Date(editPost.time) }
return editPost }) }
/** * Call `removePost(input)` mutation, returns the id of the affected post. * * @param {{id:string, toPosition: number}} input * @returns {Promise<{id:string}>} */ remove(input) { return query(`
mutation RemovePost($input: PostRemoveInput!) { removePost(input: $input) { id } } `, {input}, {permissions: ["post.remove"]}).then(({removePost}) => {
return removePost }) } }
module.exports = {Post, postApi: new PostAPI}
|