From cc2a1971f0deb96d1f99b402e213c96976823e3b Mon Sep 17 00:00:00 2001 From: Chip Wasson Date: Tue, 5 Sep 2023 11:41:43 -0600 Subject: [PATCH] Add isword module --- Dockerfile | 9 ++++++++- src/app.module.ts | 3 ++- src/isword/isword.controller.ts | 24 ++++++++++++++++++++++++ src/isword/isword.module.ts | 9 +++++++++ src/isword/isword.service.ts | 15 +++++++++++++++ 5 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/isword/isword.controller.ts create mode 100644 src/isword/isword.module.ts create mode 100644 src/isword/isword.service.ts diff --git a/Dockerfile b/Dockerfile index cd76110..9e5d5e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,11 @@ -FROM node:18 +FROM node:18-ubuntu + + +# Install american word lists for /isword +RUN apt-get update && apt-get install -y \ + wamerican \ + # wamerican-insane \ + && rm -rf /var/lib/apt/lists/* ADD package.json . ADD yarn.lock . diff --git a/src/app.module.ts b/src/app.module.ts index 4e79aa7..d31098e 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -2,9 +2,10 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { ParkioModule } from './parkio/parkio.module'; +import { IswordModule } from './isword/isword.module'; @Module({ - imports: [ParkioModule], + imports: [ParkioModule, IswordModule], controllers: [AppController], providers: [AppService], }) diff --git a/src/isword/isword.controller.ts b/src/isword/isword.controller.ts new file mode 100644 index 0000000..f6be9dc --- /dev/null +++ b/src/isword/isword.controller.ts @@ -0,0 +1,24 @@ +import { Body, Controller, Get, Param, Post } from '@nestjs/common'; +import { IswordService } from './isword.service'; + +export type AreWordsDto = string[] + +@Controller('isword') +export class IswordController { + constructor( + private readonly isWordService: IswordService + ) {} + + @Get(':word') + isWord(@Param('word') word: string) { + return this.isWordService.isWord(word) + } + + @Post() + areWords(@Body() body: AreWordsDto) { + return body.reduce((acc, word) => { + acc[word] = this.isWordService.isWord(word) + return acc; + }, {} as {[key: string]: boolean}) + } +} diff --git a/src/isword/isword.module.ts b/src/isword/isword.module.ts new file mode 100644 index 0000000..e6a04d9 --- /dev/null +++ b/src/isword/isword.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { IswordService } from './isword.service'; +import { IswordController } from './isword.controller'; + +@Module({ + providers: [IswordService], + controllers: [IswordController] +}) +export class IswordModule {} diff --git a/src/isword/isword.service.ts b/src/isword/isword.service.ts new file mode 100644 index 0000000..e19d101 --- /dev/null +++ b/src/isword/isword.service.ts @@ -0,0 +1,15 @@ +import { Injectable } from '@nestjs/common'; +import { readFileSync } from 'fs'; + +@Injectable() +export class IswordService { + private readonly dict: string = '/usr/share/dict/words'; + private readonly dictContents: string[]; + constructor() { + this.dictContents = readFileSync(this.dict).toString().split('\n') + + } + + isWord = (word: string) => + this.dictContents.includes(word) +}