summaryrefslogtreecommitdiff
path: root/src-migrate/pages/api
diff options
context:
space:
mode:
authortrisusilo48 <tri.susilo@altama.co.id>2024-07-10 15:58:51 +0700
committertrisusilo48 <tri.susilo@altama.co.id>2024-07-10 15:58:51 +0700
commit2e3c726bc8217f3960cfecec44b81303b03de72b (patch)
tree1b85ced7f61f3e4c3f1f27b577b37aa161615065 /src-migrate/pages/api
parent2b3bd9c0a454dbad69ce29cee877bfb1fca5dfa6 (diff)
parenta99bf6480eea556e53b85e6db45f3b8c2361e693 (diff)
Merge branch 'release' into development
# Conflicts: # src/pages/shop/product/variant/[slug].jsx
Diffstat (limited to 'src-migrate/pages/api')
-rw-r--r--src-migrate/pages/api/product-variant/[id].tsx53
-rw-r--r--src-migrate/pages/api/product-variant/[id]/promotion/[category].tsx49
-rw-r--r--src-migrate/pages/api/product-variant/[id]/promotion/highlight.tsx58
-rw-r--r--src-migrate/pages/api/promotion-program/[id].tsx42
4 files changed, 202 insertions, 0 deletions
diff --git a/src-migrate/pages/api/product-variant/[id].tsx b/src-migrate/pages/api/product-variant/[id].tsx
new file mode 100644
index 00000000..955fde6a
--- /dev/null
+++ b/src-migrate/pages/api/product-variant/[id].tsx
@@ -0,0 +1,53 @@
+import moment from "moment";
+import { NextApiRequest, NextApiResponse } from "next";
+import { SolrResponse } from "~/types/solr";
+
+const SOLR_HOST = process.env.SOLR_HOST as string
+
+export default async function handler(req: NextApiRequest, res: NextApiResponse) {
+ const variantId = req.query.id as string
+ let price_tier = 'tier1'
+
+ let auth = req.cookies.auth ? JSON.parse(req.cookies.auth) : null
+ if (auth?.pricelist) price_tier = auth.pricelist
+
+ if (req.method === 'GET') {
+ const queryParams = new URLSearchParams({ q: `id:${variantId}` })
+ const response = await fetch(`${SOLR_HOST}/solr/variants/select?${queryParams.toString()}`)
+ const data: SolrResponse<any[]> = await response.json()
+
+ if (data.response.numFound === 0) {
+ res.status(404).json({ error: 'Variant not found' })
+ return
+ }
+
+ const variant = await map(data.response.docs[0], price_tier)
+
+ res.status(200).json({ data: variant })
+ }
+}
+
+const map = async (variant: any, price_tier: string) => {
+ const data: any = {}
+ const price = variant[`price_${price_tier}_v2_f`] || 0
+
+ data.id = parseInt(variant.id)
+ data.parent_id = variant.template_id_i
+ data.display_name = variant.display_name_s
+ data.image = variant.image_s
+ data.name = variant.name_s
+ data.default_code = variant.default_code_s
+ data.price = { discount_percentage: 0, price, price_discount: price }
+
+ return data
+}
+
+const checkIsFlashsale = (variant: any) => {
+ const endDateStr = variant.flashsale_end_date_s || null
+ if (!endDateStr) return false
+
+ const now = moment()
+ const endDate = moment(endDateStr, 'YYYY-MM-DD HH:mm:ss')
+
+ return variant.flashsale_id_i > 0 && now.isSameOrBefore(endDate)
+} \ No newline at end of file
diff --git a/src-migrate/pages/api/product-variant/[id]/promotion/[category].tsx b/src-migrate/pages/api/product-variant/[id]/promotion/[category].tsx
new file mode 100644
index 00000000..8da0d9a3
--- /dev/null
+++ b/src-migrate/pages/api/product-variant/[id]/promotion/[category].tsx
@@ -0,0 +1,49 @@
+import { NextApiRequest, NextApiResponse } from "next";
+import { SolrResponse } from "~/types/solr";
+
+const SOLR_HOST = process.env.SOLR_HOST as string
+
+export default async function handler(req: NextApiRequest, res: NextApiResponse) {
+ const productId = req.query.id as string
+ const category = req.query.category as string
+
+ if (req.method === 'GET') {
+ const queryParams = new URLSearchParams({ q: `product_ids:${productId}` })
+ queryParams.append('fq', `type_value_s:${category}`)
+ queryParams.append('fq', `active_b:true`)
+
+ const response = await fetch(`${SOLR_HOST}/solr/promotion_program_lines/select?${queryParams.toString()}`)
+ const data: SolrResponse<any[]> = await response.json()
+
+ const promotions = await map(data.response.docs)
+ res.status(200).json({ data: promotions })
+ }
+}
+
+const map = async (promotions: any[]) => {
+ const result = []
+
+ for (const promotion of promotions) {
+ const data: any = {}
+
+ data.id = promotion.id
+ data.program_id = promotion.program_id_i
+ data.name = promotion.name_s
+ data.type = {
+ value: promotion.type_value_s,
+ label: promotion.type_label_s,
+ }
+ data.limit = promotion.package_limit_i
+ data.limit_user = promotion.package_limit_user_i
+ data.limit_trx = promotion.package_limit_trx_i
+ data.price = promotion.price_f
+ data.total_qty = promotion.total_qty_i
+
+ data.products = JSON.parse(promotion.products_s)
+ data.free_products = JSON.parse(promotion.free_products_s)
+
+ result.push(data)
+ }
+
+ return result
+} \ No newline at end of file
diff --git a/src-migrate/pages/api/product-variant/[id]/promotion/highlight.tsx b/src-migrate/pages/api/product-variant/[id]/promotion/highlight.tsx
new file mode 100644
index 00000000..c4acacf1
--- /dev/null
+++ b/src-migrate/pages/api/product-variant/[id]/promotion/highlight.tsx
@@ -0,0 +1,58 @@
+import { NextApiRequest, NextApiResponse } from "next";
+import { SolrResponse } from "~/types/solr";
+
+const SOLR_HOST = process.env.SOLR_HOST as string
+
+export default async function handler(req: NextApiRequest, res: NextApiResponse) {
+ const productId = req.query.id as string
+
+ if (req.method === 'GET') {
+ const types = ['bundling', 'discount_loading', 'merchandise']
+ const queryParams = new URLSearchParams({
+ q: `product_ids:${productId}`,
+ rows: '1'
+ })
+
+ let programs: any[] = []
+
+ for (const type of types) {
+ queryParams.set('fq', `type_value_s:${type}`)
+ queryParams.append('fq', `active_b:true`)
+
+ const response = await fetch(`${SOLR_HOST}/solr/promotion_program_lines/select?${queryParams.toString()}`)
+ const data: SolrResponse<any[]> = await response.json()
+ programs.push(...data.response.docs)
+ }
+
+ programs = await extractPrograms(programs)
+ res.status(200).json({ data: programs })
+ }
+}
+
+const extractPrograms = async (programs: any[]) => {
+ const result = []
+
+ for (const program of programs) {
+ const data: any = {}
+
+ data.id = program.id
+ data.program_id = program.program_id_i
+ data.name = program.name_s
+ data.type = {
+ value: program.type_value_s,
+ label: program.type_label_s,
+ }
+ data.limit = program.package_limit_i
+ data.limit_user = program.package_limit_user_i
+ data.limit_trx = program.package_limit_trx_i
+ data.price = program.price_f
+ data.total_qty = program.total_qty_i
+
+ data.products = JSON.parse(program.products_s)
+ data.free_products = JSON.parse(program.free_products_s)
+
+ result.push(data)
+ }
+
+ return result
+} \ No newline at end of file
diff --git a/src-migrate/pages/api/promotion-program/[id].tsx b/src-migrate/pages/api/promotion-program/[id].tsx
new file mode 100644
index 00000000..c509b802
--- /dev/null
+++ b/src-migrate/pages/api/promotion-program/[id].tsx
@@ -0,0 +1,42 @@
+import { NextApiRequest, NextApiResponse } from "next";
+import { SolrResponse } from "~/types/solr";
+
+const SOLR_HOST = process.env.SOLR_HOST as string
+
+export default async function handler(req: NextApiRequest, res: NextApiResponse) {
+ const id = req.query.id as string
+
+ if (req.method === 'GET') {
+ const queryParams = new URLSearchParams({ q: `id:${id}` })
+ const response = await fetch(`${SOLR_HOST}/solr/promotion_programs/select?${queryParams.toString()}`)
+ const data: SolrResponse<any[]> = await response.json()
+
+ if (data.response.numFound === 0) {
+ res.status(404).json({ error: 'Program not found' })
+ return
+ }
+
+ const program = await map(data.response.docs[0])
+
+ res.status(200).json({ data: program })
+ }
+}
+
+const map = async (program: any) => {
+ const data: any = {}
+
+ data.id = program.id
+ data.name = program.name_s
+ data.start_time = program.start_time_s
+ data.end_time = program.end_time_s
+ data.applies_to = program.applies_to_s
+ data.time_left = (new Date(data.end_time).getTime() - new Date().getTime()) / 1000
+
+ // const duration = moment.duration(data.time_left, 'seconds')
+ // const days = duration.days()
+ // const hours = duration.hours()
+ // const minutes = duration.minutes()
+ // const seconds = duration.seconds()
+
+ return data
+} \ No newline at end of file