import { apiCodes } from '@i18n/api-codes'; import { lastValueFrom, MonoTypeOperatorFunction, Observable, pipe } from 'rxjs'; import { map, tap } from 'rxjs/operators'; import { HttpPlainResponse } from '../models/response.interface'; export const isValidResponse = (status: number) => status >= 200 && status < 300; const validateResponse = (response: T) => { const { status, message, code } = response; if (!isValidResponse(status)) { const msg = apiCodes[code]?.msg ?? message; throw new Error(msg); } return response; }; export const handleRequest = async (request: Observable) => { const response = await lastValueFrom(request); return validateResponse(response); }; export const validateMutation = ( callback: () => void = () => {} ): MonoTypeOperatorFunction => pipe( map((response) => validateResponse(response)), tap(callback) );