const {query} = require("../client") class Comment { /** * @param {string} id * @param {string} subject * @param {string} author * @param {string} characterName * @param {CommentCharacter} character * @param {string | number | Date} fictionalDate * @param {string | number | Date} createdDate * @param {string | number | Date} editedDate * @param {string} source */ constructor(id, subject, author, characterName, character, fictionalDate, createdDate, editedDate, source) { this.id = id this.subject = subject this.author = author this.characterName = characterName this.character = character != null ? CommentCharacter.fromData(character) : null this.fictionalDate = fictionalDate != null ? new Date(fictionalDate) : null this.createdDate = new Date(createdDate) this.editedDate = new Date(editedDate) this.source = source } static fromData(data) { return new Comment(data.id, data.subject, data.author, data.characterName, data.character, data.fictionalDate, data.createdDate, data.editedDate, data.source) } } class CommentCharacter { /** * @param {string} id * @param {string} name * @param {string} author * @param {string} description */ constructor(id, name, author, description) { this.id = id this.name = name this.author = author this.description = description } static fromData(data) { return new CommentCharacter(data.id, data.name, data.author, data.description) } } class CommentAPI { /** * @param {string} id * @returns {Promise} */ find(id) { return query(` query FindComment($id: String!) { comment(id: $id) { id subject author characterName character { id name author description } fictionalDate createdDate editedDate source } } `, {id}).then(({comment}) => { return new Comment( comment.id, comment.subject, comment.author, comment.characterName, comment.character, comment.fictionalDate, comment.createdDate, comment.editedDate, comment.source, ) }) } /** * @param {any} input * @returns {Promise} */ addComment(input) { return query(` mutation AddComment($input: CommentAddInput!) { addComment(input: $input) { id subject author characterName character { id name author description } fictionalDate createdDate editedDate source } } `, {input}).then(({comment}) => { return new Comment( comment.id, comment.subject, comment.author, comment.characterName, comment.character, comment.fictionalDate, comment.createdDate, comment.editedDate, comment.source, ) }) } } module.exports = {Comment, CommentCharacter, commentApi: new CommentAPI}