diff --git a/src/app/api-utlities/@types/index.ts b/src/app/api-utlities/@types/index.ts index f650de7..e6efdc1 100644 --- a/src/app/api-utlities/@types/index.ts +++ b/src/app/api-utlities/@types/index.ts @@ -53,3 +53,15 @@ export type TextResponse = Root<{ _name: string; _znachenie: string | null; }>; + +export type Team = Root<{ + _foto: Image[]; + _zvanie: string; + _name: string; +}>; + +export type History = Root<{ + _name: string; + _god: string; + _opisanie: string; +}>; diff --git a/src/app/api-utlities/presenters/index.ts b/src/app/api-utlities/presenters/index.ts index a71189e..182986c 100644 --- a/src/app/api-utlities/presenters/index.ts +++ b/src/app/api-utlities/presenters/index.ts @@ -2,16 +2,22 @@ import { isEmpty } from 'lodash'; import { Discount, + History, Image, Job, Partner, + Select, Station, + Team, TextResponse, } from '../@types'; export const presentImage = (images: Image[]) => isEmpty(images) ? null : `${process.env.TAYLOR_MEDIA_URL}/${images[0].url}`; +export const presentSelect = (selectItems: Select[]) => + !isEmpty(selectItems) ? selectItems[0].name : null; + export const presentPartners = (partners: Partner) => partners.records.map((record) => ({ name: record._name, @@ -22,8 +28,22 @@ export const presentJobs = (jobs: Job) => jobs.records.map((job) => ({ name: job._name, tags: job._tags.map((tag) => tag.name), - location: !isEmpty(job._localtio) ? job._localtio[0].name : null, - type: !isEmpty(job._type) ? job._type[0].name : null, + location: presentSelect(job._localtio), + type: presentSelect(job._type), + })); + +export const presentTeamMembers = (members: Team) => + members.records.map((member) => ({ + name: member._name, + photo: presentImage(member._foto), + profession: member._zvanie, + })); + +export const presentHistoryItems = (historyItems: History) => + historyItems.records.map((item) => ({ + name: item._name, + year: item._god, + description: item._opisanie, })); export const presentDiscounts = (discounts: Discount) => @@ -50,7 +70,7 @@ export const presentStations = (stations: Station) => electricCharge: station._propanCopy || false, miniMarket: station._zaryadnayaStanci || false, toilet: station._miniMarketCop || false, - region: !isEmpty(station._region) ? station._region[0].name : null, + region: presentSelect(station._region), image: presentImage(station._foto), })); diff --git a/src/app/api-utlities/requests/about-us-page.request.ts b/src/app/api-utlities/requests/about-us-page.request.ts new file mode 100644 index 0000000..2504158 --- /dev/null +++ b/src/app/api-utlities/requests/about-us-page.request.ts @@ -0,0 +1,6 @@ +import { historyRequest, teamRequest } from './common'; + +export const aboutUsPageRequest = { + ...teamRequest, + ...historyRequest, +}; diff --git a/src/app/api-utlities/requests/common.ts b/src/app/api-utlities/requests/common.ts index ff001c0..30d6abd 100644 --- a/src/app/api-utlities/requests/common.ts +++ b/src/app/api-utlities/requests/common.ts @@ -76,3 +76,25 @@ export const textsRequest = { }, }, }; + +export const teamRequest = { + _komanda: { + records: { + _foto: { + url: true, + }, + _zvanie: true, + _name: true, + }, + }, +}; + +export const historyRequest = { + _istoriya: { + records: { + _name: true, + _god: true, + _opisanie: true, + }, + }, +}; diff --git a/src/app/api/pages/about-us/route.ts b/src/app/api/pages/about-us/route.ts new file mode 100644 index 0000000..fbba11c --- /dev/null +++ b/src/app/api/pages/about-us/route.ts @@ -0,0 +1,24 @@ +import { + presentHistoryItems, + presentTeamMembers, +} from '@/app/api-utlities/presenters'; +import { aboutUsPageRequest } from '@/app/api-utlities/requests/about-us-page.request'; +import { requestTaylor } from '@/app/api-utlities/utilities/taylor.client'; + +import { validationErrorHandler } from '../../middlewares/error-handler.middleware'; + +const routeHandler = async () => { + const response = await requestTaylor(aboutUsPageRequest); + + return new Response( + JSON.stringify({ + team: presentTeamMembers(response.data._komanda), + history: presentHistoryItems(response.data._istoriya), + }), + { + headers: { 'Content-Type': 'application/json' }, + }, + ); +}; + +export const GET = validationErrorHandler(routeHandler);