zapupenec/diary_app

View on GitHub
src/api/images/index.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { DTOImage } from 'types';

const apiKey = process.env.REACT_APP_API_KEY;
const baseUrl = new URL('https://api.unsplash.com');

const genURI = (query?: string) => {
  baseUrl.pathname = `/photos/random`;
  baseUrl.searchParams.set('client_id', apiKey ?? '');
  baseUrl.searchParams.set('count', '10');
  if (query) {
    baseUrl.searchParams.set('query', query);
  }
  return baseUrl;
};

const requestSearchImages = async (query?: string) => {
  const response = await fetch(genURI(query));
  if (!response.ok) {
    const { status } = response;
    switch (status) {
      case 403:
        throw Error('Превышен лимит запросов. Попробуйте позже.');
      case 404:
        throw Error('Ничего не найдено по данному запросу.');
      default:
        throw Error('Что-то пошло не так.');
    }
  }
  return (await response.json()) as DTOImage;
};

export const images = {
  requestSearchImages,
};