rumahjo/app/api/sitemap/route.js

164 lines
5.3 KiB
JavaScript
Raw Normal View History

2024-09-07 00:46:58 +00:00
// app/api/route.js
import { NextResponse, NextRequest } from "next/server";
import mysql from 'mysql2/promise';
import { func } from "prop-types";
import fs from 'fs';
import path from 'path';
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
};
}
function ubahFormatTanggal(tanggal) {
// Buat objek Date dari string tanggal input
var tanggalObjek = new Date(tanggal);
// Ambil elemen tanggal, bulan, tahun, jam, menit, dan detik
var tahun = tanggalObjek.getUTCFullYear();
var bulan = ('0' + (tanggalObjek.getUTCMonth() + 1)).slice(-2);
var tanggal = ('0' + tanggalObjek.getUTCDate()).slice(-2);
var jam = ('0' + tanggalObjek.getUTCHours()).slice(-2);
var menit = ('0' + tanggalObjek.getUTCMinutes()).slice(-2);
var detik = ('0' + tanggalObjek.getUTCSeconds()).slice(-2);
// Format ulang tanggal
var tanggalFormatBaru = tahun + '-' + bulan + '-' + tanggal + 'T' + jam + ':' + menit + ':' + detik + '+00:00';
return tanggalFormatBaru;
}
Array.prototype.cond = function (search = '', name = '') {
if (search != '') {
if (typeof search == 'number') {
search = search.toString().toLowerCase();
} else {
search = search.toLowerCase();
}
var data = this;
return data.filter(function (dat) {
if (typeof dat == 'object') {
var g = dat[name];
var numcek = 0;
if (g != null) {
if (typeof g == 'number') {
g = g.toString().toLowerCase();
} else {
g = g.toLowerCase();
}
if (numcek == 0) {
if (g == search) {
numcek = 1;
}
}
}
if (numcek == 1) {
return dat;
}
} else {
if (dat != null) {
if (typeof dat == 'number') {
var dats = dat.toString().toLowerCase();
if (dats == search) {
return dat
}
} else {
if (dat.toLowerCase() == search) {
return dat
}
}
}
}
})
} else {
return [];
}
}
// Handles GET requests to /api
export async function GET(req, Response) {
// create the connection to database
const connection = await mysql.createConnection(DB_CONF);
try{
const query = `
SELECT uid_user, concat('map-',uid_user,'.xml') url, min(userlog) log FROM listing GROUP BY uid_user;
SELECT uid_user, concat('produk/', slug) url, userlog log FROM listing WHERE email <> 'rumahjo123@gmail.com AND approval=1'
`
const [parentData] = await connection.query(query);
const [parent, xmldata] = parentData;
const pathLoc = path.join('public','sitemap.xml');
let parentXml = `<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://rumahjo.com/main.xml</loc>
</sitemap>
${parent.map(function (m) {
return `
<sitemap>
<loc>https://rumahjo.com/${m.url}</loc>
</sitemap>
`
}).join('')}
</sitemapindex>
`;
fs.writeFileSync(pathLoc, parentXml,'utf8');
for (let dataPar of parent){
let getData = xmldata.cond(dataPar.uid_user, 'uid_user');
let fileNama = path.join('public', 'map-' + dataPar.uid_user + '.xml' );
let fileData = `<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<!-- created with Free Online Sitemap Generator www.xml-sitemaps.com -->
${getData.map(function (m) {
return `
<url>
<loc>https://rumahjo.com/${m.url}</loc>
<lastmod>${ubahFormatTanggal(new Date())}</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
`
}).join('')}
</urlset>`;
fs.writeFileSync(fileNama, fileData);
}
const value = [];
return NextResponse.json({ message: "created" });
}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" });
}