ElectronicBabylonianLiterature/ebl-frontend

View on GitHub
src/dictionary/application/WordService.ts

Summary

Maintainability
A
1 hr
Test Coverage
B
85%
import Promise from 'bluebird'
import Word from 'dictionary/domain/Word'
import WordRepository from 'dictionary/infrastructure/WordRepository'
import _ from 'lodash'
import { stringify } from 'query-string'

export interface WordQuery {
  word?: string
  meaning?: string
  root?: string
  vowelClass?: string
}

class WordService {
  private readonly wordRepository: WordRepository

  constructor(wordRepository: WordRepository) {
    this.wordRepository = wordRepository
  }

  find(id: string): Promise<Word> {
    return this.wordRepository.find(id)
  }

  findAll(ids: string[]): Promise<readonly Word[]> {
    return this.wordRepository.findAll(ids)
  }

  search(query: WordQuery): Promise<Word[]> {
    return this.wordRepository.search(
      stringify(query, { skipEmptyString: true })
    )
  }

  searchLemma(lemma: string): Promise<readonly Word[]> {
    return _.isEmpty(lemma)
      ? Promise.resolve([])
      : this.wordRepository.searchLemma(lemma)
  }

  update(word: Word): Promise<Word> {
    return this.wordRepository.update(word)
  }

  listAllWords(): Promise<string[]> {
    return this.wordRepository.listAllWords()
  }
}

export default WordService