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.

topping-resolver.ts 2.0KB

4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { Topping, ChangeToppingDto, } from "../generated/graphql";
  2. import { ToppingList } from "../data-source/topping-list";
  3. import { v4 as uuidv4 } from 'uuid';
  4. import { EEXIST } from "constants";
  5. import { PubSub } from "apollo-server";
  6. export class ToppingResolver {
  7. static toppingEvent = new PubSub();
  8. static events = {
  9. TOPPING_CHANGED: "toppingChanged",
  10. }
  11. static getById = (id: string): Topping => {
  12. return ToppingList.filter(topping => topping.id === id)[0];
  13. };
  14. static getByName = (name: string): Topping => {
  15. return ToppingList.filter(topping => topping.name === name)[0];
  16. };
  17. static list = (): Topping[] => {
  18. return ToppingList;
  19. };
  20. static delete = (id: string): Topping => {
  21. const index = ToppingList.indexOf(ToppingResolver.getById(id));
  22. if ( index ) {
  23. ToppingList.splice(index, 1)
  24. }
  25. return ToppingResolver.getById(id)
  26. };
  27. static create = (toppingCreateDto: ChangeToppingDto): Topping => {
  28. const topping: Topping = {
  29. id: uuidv4(),
  30. name: toppingCreateDto.name,
  31. }
  32. ToppingList.push(topping);
  33. console.log(`Create Topping ...`, topping);
  34. ToppingResolver.toppingEvent.publish(ToppingResolver.events.TOPPING_CHANGED, {
  35. toppingsChanged: ToppingList
  36. });
  37. return topping;
  38. };
  39. static update = (toppingId: string, toppingUpdateDto: ChangeToppingDto): Topping => {
  40. const topping = ToppingResolver.getById(toppingId);
  41. if (!topping) {
  42. throw new Error(
  43. `No Topping found with id ${toppingId}`
  44. )
  45. }
  46. topping.name = toppingUpdateDto.name;
  47. const toppingIndex = ToppingList.indexOf(topping);
  48. ToppingList[toppingIndex] = topping;
  49. ToppingResolver.toppingEvent.publish(ToppingResolver.events.TOPPING_CHANGED, {
  50. toppingsChanged: ToppingList
  51. });
  52. console.log(`Update Topping ...`, topping)
  53. return topping;
  54. };
  55. }