onboarding.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { TransactionBaseService } from "@medusajs/medusa";
  2. import OnboardingRepository from "../repositories/onboarding";
  3. import { OnboardingState } from "../models/onboarding";
  4. import { EntityManager, IsNull, Not } from "typeorm";
  5. import { UpdateOnboardingStateInput } from "../types/onboarding";
  6. type InjectedDependencies = {
  7. manager: EntityManager;
  8. onboardingRepository: typeof OnboardingRepository;
  9. };
  10. class OnboardingService extends TransactionBaseService {
  11. protected onboardingRepository_: typeof OnboardingRepository;
  12. constructor({ onboardingRepository }: InjectedDependencies) {
  13. super(arguments[0]);
  14. this.onboardingRepository_ = onboardingRepository;
  15. }
  16. async retrieve(): Promise<OnboardingState | undefined> {
  17. const onboardingRepo = this.activeManager_.withRepository(
  18. this.onboardingRepository_
  19. );
  20. const status = await onboardingRepo.findOne({
  21. where: { id: Not(IsNull()) },
  22. });
  23. return status;
  24. }
  25. async update(data: UpdateOnboardingStateInput): Promise<OnboardingState> {
  26. return await this.atomicPhase_(
  27. async (transactionManager: EntityManager) => {
  28. const onboardingRepository = transactionManager.withRepository(
  29. this.onboardingRepository_
  30. );
  31. const status = await this.retrieve();
  32. for (const [key, value] of Object.entries(data)) {
  33. status[key] = value;
  34. }
  35. return await onboardingRepository.save(status);
  36. }
  37. );
  38. }
  39. }
  40. export default OnboardingService;