111 lines
3.2 KiB
JavaScript
111 lines
3.2 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 limitation = {}
|
||
|
let condition = {}
|
||
|
let having = {}
|
||
|
Object.keys(result).forEach((s,i)=>{
|
||
|
if(s == 'limit' || s == 'start'){
|
||
|
limitation[s] = result[s];
|
||
|
}else if(s == 'd' ){
|
||
|
having['judul'] = result[s];
|
||
|
having['deskrisi'] = result[s];
|
||
|
} else {
|
||
|
condition[s] = result[s];
|
||
|
}
|
||
|
})
|
||
|
|
||
|
return {
|
||
|
limitation: limitation,
|
||
|
condition: condition,
|
||
|
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;
|
||
|
const connection = await mysql.createConnection(DB_CONF);
|
||
|
try{
|
||
|
const query = `SELECT * FROM user
|
||
|
${(function(){
|
||
|
let d = Object.keys(params.condition);
|
||
|
if(d.length > 0){
|
||
|
return ` WHERE ${d.map((c)=>{
|
||
|
return ` ${c} = "${params.condition[c]}" `;
|
||
|
}).join(' OR ')} LIMIT 1 `
|
||
|
}
|
||
|
return "";
|
||
|
})()}`
|
||
|
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 });
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Array.prototype.ToUpdate = function (table = 'test', wht = 'kode') {
|
||
|
var s = this;
|
||
|
if (s.length > 0) {
|
||
|
var y = Object.keys(s[0]);
|
||
|
var x = '';
|
||
|
x += 'UPDATE ';
|
||
|
x += '`'+table+'`';
|
||
|
x += ' aa , ( ';
|
||
|
x += 'SELECT ';
|
||
|
x += y.map(function (g) {
|
||
|
return `a.${g}`;
|
||
|
});
|
||
|
x += ' FROM (';
|
||
|
x += s.map(function (w) {
|
||
|
var f = ` SELECT `;
|
||
|
f += y.map(function (q) {
|
||
|
if (w[q]){
|
||
|
return `"${w[q].toString().replace(/\"/g, "\\\"")}" \`${q}\``;
|
||
|
}else{
|
||
|
return `null \`${q}\``
|
||
|
}
|
||
|
}).join(",");
|
||
|
return f;
|
||
|
}).join("\n UNION ALL \n")
|
||
|
x += ') a ) bb SET ';
|
||
|
x += y.map(function (c) {
|
||
|
return ` aa.${c} = bb.${c}`
|
||
|
}).join(',');
|
||
|
x += ' WHERE ';
|
||
|
if (Array.isArray(wht)) {
|
||
|
x += wht.map(function (whtx) {
|
||
|
return ` aa.${whtx} = bb.${whtx} `;
|
||
|
}).join(" AND ");
|
||
|
} else {
|
||
|
x += ` aa.${wht} = bb.${wht} `;
|
||
|
}
|
||
|
return x;
|
||
|
} else {
|
||
|
return [];
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// Handles POST requests to /api
|
||
|
export async function POST(req) {
|
||
|
let body = await req.json();
|
||
|
let update = [body].ToUpdate('user', 'uniqid');
|
||
|
const connection = await mysql.createConnection(DB_CONF);
|
||
|
const [data] = await connection.query(update);
|
||
|
return NextResponse.json({ message: data });
|
||
|
}
|