Merge branch 'from-WP2-to-WC3'
Some checks failed
Deploy / build-and-deploy (push) Failing after 39s

This commit is contained in:
Veselov 2025-07-28 15:29:38 +03:00
commit c5603e6789
12 changed files with 8266 additions and 12437 deletions

18910
api/Api.ts

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +0,0 @@
import api from '~/api/instance'
export const getProductList = () =>
api.wp.v2ProductList()

View File

@ -0,0 +1,4 @@
import api from '~/api/instance'
export const getProductsDetail = async (productId: number) =>
await api.wc.v1ProductsDetail(productId)

View File

@ -1 +1 @@
export * from './getProductList' export * from './getProductsDetail'

View File

@ -1,14 +1,77 @@
import { Api } from '~/api/Api' import { Api } from '~/api/Api'
const requestUrl = 'https://wp.koptilnya.xyz/wp-json'
const consumerKey = 'ck_8b5477a1573ce6038ef1367f25d95cede1de4559'
const consumerSecret = 'cs_d0ccaa93e8efe4f76eef0b70c9828a58fc53459f'
const authString = `${consumerKey}:${consumerSecret}`
const encodedAuth = btoa(unescape(encodeURIComponent(authString)))
// Создаем инстанс API
const api = new Api({ const api = new Api({
baseUrl: String('https://wp.koptilnya.xyz/wp-json'), baseUrl: requestUrl,
securityWorker: (securityData) => {
return {
headers: {
'Authorization': `Basic ${encodedAuth}`,
'Content-Type': 'application/json',
},
}
},
}) })
// Модифицируем методы API
Object.keys(api.wc).forEach((namespace) => {
const namespaceObj = api.wc[namespace]
Object.keys(namespaceObj).forEach((methodName) => {
const originalMethod = namespaceObj[methodName]
namespaceObj[methodName] = async function (...args: any[]) {
try {
// Добавляем заголовки аутентификации
const lastArg = args[args.length - 1]
const options = typeof lastArg === 'object' ? lastArg : {}
const modifiedOptions = {
...options,
headers: {
...(options.headers || {}),
Authorization: `Basic ${encodedAuth}`,
},
}
const modifiedArgs = typeof lastArg === 'object'
? [...args.slice(0, -1), modifiedOptions]
: [...args, modifiedOptions]
const response = await originalMethod.apply(this, modifiedArgs)
// Получаем тело ответа и парсим JSON
const data = await response.json()
return data
}
catch (error) {
console.error(`API Error in ${namespace}.${methodName}:`, error)
throw error
}
}
})
})
// Переопределяем базовый request
const nativeRequest = api.request const nativeRequest = api.request
api.request = async function (...args) { api.request = async function (...args) {
const response = await nativeRequest.call(api, ...args) try {
return await response.json() const response = await nativeRequest.call(api, ...args)
const data = await response.json()
return data
}
catch (error) {
console.error('API Request Error:', error)
throw error
}
} }
export default api export default api

View File

@ -1 +1 @@
export * from './useGetProductList' export * from './useGetProductsDetail'

View File

@ -1,9 +0,0 @@
import { useQuery } from '@tanstack/vue-query'
import { getProductList } from '~/api/endpoints'
export const useGetProductList = () => {
return useQuery({
queryKey: ['get-product-list'],
queryFn: () => getProductList(),
})
}

View File

@ -0,0 +1,14 @@
import { useQuery } from '@tanstack/vue-query'
import { unref, watch } from 'vue'
import { getProductsDetail } from '~/api/endpoints'
export const useGetProductsDetail = (productId: MaybeRef<number>) => {
const q = useQuery({
queryKey: ['get-products-detail', unref(productId)],
queryFn: () => getProductsDetail(unref(productId)),
})
watch(() => productId, () => q.refetch())
return q
}

View File

@ -1,14 +0,0 @@
import { useAsyncData } from '#app'
export function useGetProducts() {
return useAsyncData(
'products',
async () => {
const response = await $fetch('https://wp.koptilnya.xyz/wp-json/wp/v2/product')
return response
},
{
server: false,
},
)
}

View File

@ -19,7 +19,6 @@
"@nuxt/ui": "3.2.0", "@nuxt/ui": "3.2.0",
"@tanstack/vue-query": "^5.75.5", "@tanstack/vue-query": "^5.75.5",
"@vueuse/core": "^13.1.0", "@vueuse/core": "^13.1.0",
"axios": "^1.10.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"decimal.js": "^10.5.0", "decimal.js": "^10.5.0",
"nuxt": "^3.17.6", "nuxt": "^3.17.6",

View File

@ -1,14 +1,20 @@
<template> <template>
<div> <div>
productsData
<pre> <pre>
{{ productsData }} {{ productsData?.images?.filter(img => img?.src?.includes(colorVariants.blackCottonPolyester)) }}
</pre> </pre>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { useGetProductList } from '~/api/queries' import { useGetProductsDetail } from '~/api/queries'
const { data: productsData } = useGetProductList() const { data: productsData } = useGetProductsDetail(79)
const colorVariants = {
beigeCottonPolyester: 'beige_cotton-polyester_',
blackCotton: 'black_cotton_',
greyCottonPolyester: 'grey_cotton-polyester_',
blackCottonPolyester: 'black_cotton-polyester_',
}
</script> </script>

1660
yarn.lock

File diff suppressed because it is too large Load Diff