Skip to content
This repository has been archived by the owner on Apr 7, 2024. It is now read-only.

Commit

Permalink
feat: add MXIKSearch interface
Browse files Browse the repository at this point in the history
  • Loading branch information
azabroflovski committed May 11, 2022
1 parent 8e5684e commit 6467364
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 42 deletions.
23 changes: 22 additions & 1 deletion src/api/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
import { createHttpClient } from '../shared'
import { AxiosResponse } from 'axios'

import {
MXIKSearchParamsObj,
MXIKSearchSymbolResponseObj
} from '../typings'

export const http = createHttpClient({
baseURL: process.ENV.API_URL // see .env
baseURL: 'https://tasnif.soliq.uz/api' // see .env
})

/**
* Search items via keyword
* @param keyword {string}
* @param size {number}
* @returns {AxiosResponse}
*/
export function MXIKSearchSymbol({ keyword = '', limit = 20 }: MXIKSearchParamsObj): Promise<AxiosResponse<MXIKSearchSymbolResponseObj>> {
return http.get('cls-api/mxik/search-symbol', {
params: {
search_text: keyword,
size: limit,
}
})
}
21 changes: 21 additions & 0 deletions src/lib/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { MXIKSearchSymbol } from '../api'
import { MXIKSearchOptionsObj, MXIKSearchResponseObj } from '../typings'

export async function MXIKSearch(keyword: string, { limit }: MXIKSearchOptionsObj): Promise<MXIKSearchResponseObj> {
try {
const { data: response } = await MXIKSearchSymbol({ keyword, limit })

return {
items: response.data.content,
pagination: {
totalPages: response.data.totalPages,
totalItems: response.data.totalElements,
perPage: response.data.size,
isFirstPage: response.data.first,
isLastPage: response.data.last,
}
}
} catch (error) {
throw error
}
}
12 changes: 7 additions & 5 deletions src/main.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import './style.css'
import { MXIKSearch } from './lib'

// Usage example
const response = await MXIKSearch('футболка', { limit: 10 })
console.log(response)

const app = document.querySelector<HTMLDivElement>('#app')!

app.innerHTML = `
<h1>Hello Vite!</h1>
<a href="https://vitejs.dev/guide/features.html" target="_blank">Documentation</a>
`
const app = document.querySelector<HTMLDivElement>('#app')!
app.innerHTML = `<h1>mxik</h1>`
92 changes: 56 additions & 36 deletions src/typings/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,52 +14,72 @@ export interface MXIKPageableObj {
}

export interface NXIKItemUnitObj {
id: number,
name: string,
nameUz: string,
nameRu: string,
nameEng?: string,
nameLatin?: string,
unit: string,
commonUnitsId: number,
difference?: string,
id: number
name: string
nameUz: string
nameRu: string
nameEng?: string
nameLatin?: string
unit: string
commonUnitsId: number
difference?: string
description?: string
}

export interface MXIKItemObj {
mxikCode: string,
groupName: string,
className: string,
positionName: string,
subPositionName: string,
brandName: string | null,
attributeName: string | null,
unitCode: number,
unitName: string,
commonUnitCode: number,
commonUnitName: string,
internationalCode: number | null,
units: NXIKItemUnitObj[],
myProduct: number,
mxikCode: string
groupName: string
className: string
positionName: string
subPositionName: string
brandName: string | null
attributeName: string | null
unitCode: number
unitName: string
commonUnitCode: number
commonUnitName: string
internationalCode: number | null
units: NXIKItemUnitObj[]
myProduct: number
packages?: string | null
}

export interface MXIKResponseObj {
success: boolean,
code: number,
reason: 'ok' | 'error',
export interface MXIKSearchSymbolResponseObj {
success: boolean
code: number
reason: 'ok' | 'error'
data: {
content: MXIKItemObj[],
content: MXIKItemObj[]
pageable: MXIKPageableObj
last: boolean,
totalPages: number,
totalElements: number,
last: boolean
totalPages: number
totalElements: number
sort: MXIKSortObj
first: boolean,
numberOfElements: number,
size: number,
number: number,
first: boolean
numberOfElements: number
size: number
number: number
empty: boolean
},
}
errors: string | null
}

export interface MXIKSearchParamsObj {
keyword: string
limit?: number
}

export interface MXIKSearchOptionsObj {
limit?: number
}

export interface MXIKSearchResponseObj {
items: MXIKItemObj[]
pagination: {
totalPages: number
totalItems: number
perPage: number
isFirstPage: boolean
isLastPage: boolean
}
}

0 comments on commit 6467364

Please sign in to comment.