import { Topping, ChangeToppingDto, } from "../generated/graphql"; import { ToppingList } from "../data-source/topping-list"; import { v4 as uuidv4 } from 'uuid'; import { EEXIST } from "constants"; import { PubSub } from "apollo-server"; export class ToppingResolver { static toppingEvent = new PubSub(); static events = { TOPPING_CHANGED: "toppingChanged", } static getById = (id: string): Topping => { return ToppingList.filter(topping => topping.id === id)[0]; }; static getByName = (name: string): Topping => { return ToppingList.filter(topping => topping.name === name)[0]; }; static list = (): Topping[] => { return ToppingList; }; static delete = (id: string): Topping => { const index = ToppingList.indexOf(ToppingResolver.getById(id)); if ( index ) { ToppingList.splice(index, 1) } return ToppingResolver.getById(id) }; static create = (toppingCreateDto: ChangeToppingDto): Topping => { const topping: Topping = { id: uuidv4(), name: toppingCreateDto.name, } ToppingList.push(topping); console.log(`Create Topping ...`, topping); ToppingResolver.toppingEvent.publish(ToppingResolver.events.TOPPING_CHANGED, { toppingsChanged: ToppingList }); return topping; }; static update = (toppingId: string, toppingUpdateDto: ChangeToppingDto): Topping => { const topping = ToppingResolver.getById(toppingId); if (!topping) { throw new Error( `No Topping found with id ${toppingId}` ) } topping.name = toppingUpdateDto.name; const toppingIndex = ToppingList.indexOf(topping); ToppingList[toppingIndex] = topping; ToppingResolver.toppingEvent.publish(ToppingResolver.events.TOPPING_CHANGED, { toppingsChanged: ToppingList }); console.log(`Update Topping ...`, topping) return topping; }; }