您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

66 行
2.0KB

  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. }