rumahjo/app/pages/api/[...name]/route.js
2024-09-07 07:46:58 +07:00

97 lines
3.1 KiB
JavaScript

// app/api/route.js
import { NextResponse, NextRequest } from "next/server";
import mysql from 'mysql2/promise';
import { func } from "prop-types";
import { DB_CONF } from "@/app/library/configDatabase";
function paramsToObject(req) {
let reqq = req.nextUrl.searchParams.entries()
let entries = reqq;
const result = {}
for (const [key, value] of entries) { // each 'entry' is a [key, value] tupple
result[key] = value;
}
let ordering = {}
let limitation = {}
let condition = {}
let having = {}
let notlike = []
Object.keys(result).forEach((s, i) => {
if (s == 'limit' || s == 'start') {
limitation[s] = result[s];
} else if (s == 'order' || s == 'ascdesc') {
ordering[s] = result[s];
}
else if (s == 'd') {
having['judul'] = result[s];
having['deskrisi'] = result[s];
}
else if (s == 'q') {
having['judul'] = result[s];
having['deskrisi'] = result[s];
}
else if (s == 'n') {
notlike = JSON.parse(atob(result[s]));
}
else {
condition[s] = result[s].replace(/\~/g,'&');
}
});
return {
limitation: limitation,
ordering: ordering,
condition: condition,
notlike: notlike,
having: having
};
}
// Handles GET requests to /api
export async function GET(req, Response) {
// create the connection to database
let params = await paramsToObject(req);
let { limit, start } = params.limitation;
let { order, ascdesc } = params.ordering;
const connection = await mysql.createConnection(DB_CONF);
try {
const query = `
SELECT * FROM v_listing
${(function () {
let d = Object.keys(params.condition);
if (d.length > 0) {
return ` WHERE ${d.map((c) => {
return ` ${c} = "${params.condition[c]}" `;
}).join(' AND ')} ${params.notlike.length>0? `
AND (${params.notlike.map(function(c){
return ` \`${c[0]}\` <> "${c[1]}" `
}).join(' AND ')})
`:``} `
}
return "";
})()}
GROUP BY uniqid ${(function () {
let d = Object.keys(params.having);
if (d.length > 0) {
return ` HAVING ${d.map((c) => {
return ` ${c} LIKE "%${params.having[c]}%" `;
}).join(' OR ')} `
}
return "";
})()} ORDER BY ${order ? order : 'uniqid'} ${ascdesc ? ascdesc : 'DESC'} LIMIT ${start}, ${limit}`
const value = [];
const [data] = await connection.query(query);
connection.end();
return NextResponse.json({ message: data });
} catch (error) {
return NextResponse.json({ status: 500, message: error.message });
}
}
// Handles POST requests to /api
export async function POST(req) {
return NextResponse.json({ message: "Hello World" });
}