You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
5.1 KiB
208 lines
5.1 KiB
const {query} = require("../client")
|
|
|
|
class Character {
|
|
/**
|
|
* @param {string} id
|
|
* @param {string[]} nicks
|
|
* @param {string} author
|
|
* @param {string} name
|
|
* @param {string} shortName
|
|
* @param {string} description
|
|
*/
|
|
constructor(id, nicks, author, name, shortName, description) {
|
|
this.id = id
|
|
this.nicks = nicks
|
|
this.nick = this.nicks[0] || null
|
|
this.author = author
|
|
this.name = name
|
|
this.shortName = shortName
|
|
this.description = description
|
|
}
|
|
|
|
/**
|
|
* Create a character object from data.
|
|
*/
|
|
static fromData(data) {
|
|
return new Character(data.id, data.nicks, data.author, data.name, data.shortName, data.description)
|
|
}
|
|
}
|
|
|
|
class CharacterHeader {
|
|
/**
|
|
* @param {string} id
|
|
* @param {string} author
|
|
* @param {string} name
|
|
*/
|
|
constructor(id, author, name) {
|
|
this.id = id
|
|
this.author = author
|
|
this.name = name
|
|
}
|
|
|
|
/**
|
|
* Create a character object from data.
|
|
*/
|
|
static fromData(data) {
|
|
return new CharacterHeader(data.id, data.author, data.name)
|
|
}
|
|
}
|
|
|
|
class ChracterAPI {
|
|
/**
|
|
* Call `characters(filter)` query
|
|
*
|
|
* @param {{ids:string[], nicks:string[], names:string[], author:string, search:string, logged:boolean}} filter
|
|
* @returns {Promise<Character[]>}
|
|
*/
|
|
list(filter = {}) {
|
|
return query(`
|
|
query ListCharacters($filter: CharactersFilter) {
|
|
characters(filter: $filter) {
|
|
id
|
|
nicks
|
|
author
|
|
name
|
|
shortName
|
|
description
|
|
}
|
|
}
|
|
`, {filter}).then(({characters}) => {
|
|
return characters.map(d => Character.fromData(d))
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Call `characters(filter)` query
|
|
*
|
|
* @param {{ids:string[], nicks:string[], names:string[], author:string, search:string, logged:boolean}} filter
|
|
* @returns {Promise<CharacterHeader[]>}
|
|
*/
|
|
listHeaders(filter = {}) {
|
|
return query(`
|
|
query ListCharacters($filter: CharactersFilter) {
|
|
characters(filter: $filter) {
|
|
id
|
|
name
|
|
author
|
|
}
|
|
}
|
|
`, {filter}).then(({characters}) => {
|
|
return characters.map(d => CharacterHeader.fromData(d))
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Call `addCharacter(input)` mutation, returns addable fields.
|
|
*
|
|
* @param {{id:string, name:string, shortName:string, author:string, description:string}} input
|
|
* @returns {Promise<Character>}
|
|
*/
|
|
add(input) {
|
|
return query(`
|
|
mutation AddCharacter($input: CharacterAddInput!) {
|
|
addCharacter(input: $input) {
|
|
id
|
|
nicks
|
|
author
|
|
name
|
|
shortName
|
|
description
|
|
}
|
|
}
|
|
`, {input}, {permissions: ["member", "character.add"]}).then(({addCharacter}) => {
|
|
return Character.fromData(addCharacter)
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Call `editCharacter(input)` mutation, returns editable fields.
|
|
*
|
|
* @param {{id:string, name:string, shortName:string, description:string}} input
|
|
* @returns {Promise<{id:string, name:string, shortName:string, description:string}>}
|
|
*/
|
|
edit(input) {
|
|
return query(`
|
|
mutation EditCharacters($input: CharacterEditInput!) {
|
|
editCharacter(input: $input) {
|
|
id
|
|
name
|
|
shortName
|
|
description
|
|
}
|
|
}
|
|
`, {input}, {permissions: ["member", "character.edit"]}).then(({editCharacter}) => {
|
|
return editCharacter
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Call `addCharacterNick(input)` mutation, returns new nick list.
|
|
*
|
|
* @param {{id:string, nick:string}} input
|
|
* @returns {Promise<{id:string, nicks:string[]}>}
|
|
*/
|
|
addNick(input) {
|
|
return query(`
|
|
mutation AddCharacterNick($input: CharacterNickInput!) {
|
|
addCharacterNick(input: $input) {
|
|
id
|
|
nicks
|
|
}
|
|
}
|
|
`, {input}, {permissions: ["member", "character.edit"]}).then(({addCharacterNick}) => {
|
|
return addCharacterNick
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Call `removeCharacterNick(input)` mutation, returns new nick list.
|
|
*
|
|
* @param {{id:string, nick:string}} input
|
|
* @returns {Promise<{id:string, nicks:string[]}>}
|
|
*/
|
|
removeNick(input) {
|
|
return query(`
|
|
mutation RemoveCharacterNick($input: CharacterNickInput!) {
|
|
removeCharacterNick(input: $input) {
|
|
id
|
|
nicks
|
|
}
|
|
}
|
|
`, {input}, {permissions: ["member", "character.edit"]}).then(({removeCharacterNick}) => {
|
|
return removeCharacterNick
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Call `removeCharacter(input)` mutation
|
|
*
|
|
* @param {{id:string}} input
|
|
* @returns {Promise<{id:string}>}
|
|
*/
|
|
remove(input) {
|
|
return query(`
|
|
mutation RemoveCharacters($input: CharacterRemoveInput!) {
|
|
removeCharacter(input: $input) {
|
|
id
|
|
}
|
|
}
|
|
`, {input}, {permissions: ["member", "character.remove"]}).then(({removeCharacter}) => {
|
|
return removeCharacter
|
|
})
|
|
}
|
|
|
|
unknownNicks(limit = 100) {
|
|
return query(`
|
|
query UnknownNicks($limit: Int!) {
|
|
unknownNicks(filter: {limit: $limit}) {
|
|
nick
|
|
score
|
|
}
|
|
}
|
|
`, {limit}).then(({unknownNicks}) => {
|
|
return unknownNicks
|
|
})
|
|
}
|
|
}
|
|
|
|
module.exports = { Character, charactersApi: new ChracterAPI }
|