5
.env
@@ -4,4 +4,7 @@
|
|||||||
# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
|
# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
|
||||||
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings
|
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings
|
||||||
|
|
||||||
DATABASE_URL="postgresql://bip:Production_123@localhost:5433/hipmi?schema=public"
|
DATABASE_URL="postgresql://bip:Production_123@localhost:5433/hipmi?schema=public"
|
||||||
|
PWD="QWERTYUIOPLKJHGFDSAZXCVBNMQAZWSXEDCRFVTGBYHNUJMIKOLPPOIUYTREWQLKJHGFDSAMNBVCXZlghvftyguhijknhbgvcfytguu8okjnhbgvfty7u8oilkjnhgvtygu7u8ojilnkhbgvhujnkhghvjhukjnhb"
|
||||||
|
Client_KEY="SB-Mid-client-9NDTxltqdZrEB9m-"
|
||||||
|
Server_KEY="SB-Mid-server-NyltU-U7fLVQd1nv1LWBKylr"
|
||||||
3
.gitignore
vendored
@@ -21,7 +21,8 @@
|
|||||||
|
|
||||||
# debug
|
# debug
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
|
||||||
|
rn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
|
||||||
# local env files
|
# local env files
|
||||||
|
|||||||
4
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"WillLuke.nextjs.addTypesOnSave": true,
|
||||||
|
"WillLuke.nextjs.hasPrompted": true
|
||||||
|
}
|
||||||
37
README_DEV.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
## Page info
|
||||||
|
|
||||||
|
### API
|
||||||
|
- src/app/api
|
||||||
|
|
||||||
|
### Api path shortcut
|
||||||
|
- src/app/lib/api.ts
|
||||||
|
|
||||||
|
### fun
|
||||||
|
Deskripsi: Global function seperti console.log, random number dll.
|
||||||
|
|
||||||
|
### lib
|
||||||
|
Deskripsi: Library untuk menampung beberapa function seperti:
|
||||||
|
- global prisma
|
||||||
|
- colortune untuk tampilan FE
|
||||||
|
|
||||||
|
### bin
|
||||||
|
Deskripsi: JSON seeder
|
||||||
|
- menjalankan seeder : http://localhost:3000/api/seeder?dev=DEV-HIPMI
|
||||||
|
|
||||||
|
### App_Modules
|
||||||
|
Deskripsi: Folder client yang mencakup sub menu dari menu-menu utama
|
||||||
|
- Auth:
|
||||||
|
1. login
|
||||||
|
2. validasi
|
||||||
|
3. register
|
||||||
|
4. logout
|
||||||
|
5. splash screen
|
||||||
|
6. state (khusus bagian auth)
|
||||||
|
|
||||||
|
- Home:
|
||||||
|
1. home page
|
||||||
|
|
||||||
|
## NOTE
|
||||||
|
Function name:
|
||||||
|
- g = global
|
||||||
|
- gs = global state
|
||||||
2
config.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
server:
|
||||||
|
password: QWERTYUIOPLKJHGFDSAZXCVBNMQAZWSXEDCRFVTGBYHNUJMIKOLPPOIUYTREWQLKJHGFDSAMNBVCXZlghvftyguhijknhbgvcfytguu8okjnhbgvfty7u8oilkjnhgvtygu7u8ojilnkhbgvhujnkhghvjhukjnhb
|
||||||
@@ -1,4 +1,10 @@
|
|||||||
/** @type {import('next').NextConfig} */
|
/** @type {import('next').NextConfig} */
|
||||||
const nextConfig = {}
|
const nextConfig = {
|
||||||
|
reactStrictMode: false,
|
||||||
|
experimental: {
|
||||||
|
serverActions: true
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = nextConfig
|
module.exports = nextConfig
|
||||||
|
|||||||
23
package.json
@@ -11,21 +11,40 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.11.1",
|
"@emotion/react": "^11.11.1",
|
||||||
"@emotion/server": "^11.11.0",
|
"@emotion/server": "^11.11.0",
|
||||||
|
"@mantine/carousel": "^7.1.5",
|
||||||
"@mantine/core": "^6.0.17",
|
"@mantine/core": "^6.0.17",
|
||||||
|
"@mantine/dropzone": "^7.1.3",
|
||||||
"@mantine/hooks": "^6.0.17",
|
"@mantine/hooks": "^6.0.17",
|
||||||
"@mantine/next": "^6.0.17",
|
"@mantine/next": "^6.0.17",
|
||||||
|
"@mantine/notifications": "^6.0.17",
|
||||||
"@prisma/client": "^5.0.0",
|
"@prisma/client": "^5.0.0",
|
||||||
|
"@tabler/icons-react": "^2.38.0",
|
||||||
|
"@types/lodash": "^4.14.199",
|
||||||
"@types/node": "20.4.5",
|
"@types/node": "20.4.5",
|
||||||
"@types/react": "18.2.17",
|
"@types/react": "18.2.17",
|
||||||
"@types/react-dom": "18.2.7",
|
"@types/react-dom": "18.2.7",
|
||||||
|
"@types/uuid": "^9.0.4",
|
||||||
"autoprefixer": "10.4.14",
|
"autoprefixer": "10.4.14",
|
||||||
|
"embla-carousel-react": "^8.0.0-rc14",
|
||||||
"eslint": "8.45.0",
|
"eslint": "8.45.0",
|
||||||
"eslint-config-next": "13.4.12",
|
"eslint-config-next": "13.4.12",
|
||||||
"next": "13.4.12",
|
"iron-session": "^6.3.1",
|
||||||
|
"jotai": "^2.4.3",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
|
"midtrans-client": "^1.3.1",
|
||||||
|
"moment": "^2.29.4",
|
||||||
|
"next": "^13.5.4-canary.8",
|
||||||
"postcss": "8.4.27",
|
"postcss": "8.4.27",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
|
"react-countdown": "^2.3.5",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
|
"react-responsive-carousel": "^3.2.23",
|
||||||
|
"react-simple-toasts": "^5.10.0",
|
||||||
|
"react-toastify": "^9.1.3",
|
||||||
|
"socket.io-client": "^4.7.2",
|
||||||
"tailwindcss": "3.3.3",
|
"tailwindcss": "3.3.3",
|
||||||
"typescript": "5.1.6"
|
"typescript": "5.1.6",
|
||||||
|
"uuid": "^9.0.1",
|
||||||
|
"yaml": "^2.3.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
51
prisma/migrations/20231002020725_new_prisma/migration.sql
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "User" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"username" TEXT NOT NULL,
|
||||||
|
"nomor" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3),
|
||||||
|
"masterUserRoleId" TEXT NOT NULL DEFAULT '1',
|
||||||
|
|
||||||
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "MasterUserRole" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3),
|
||||||
|
|
||||||
|
CONSTRAINT "MasterUserRole_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "UserSession" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"token" TEXT NOT NULL,
|
||||||
|
"expires" TIMESTAMP(3) NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"userId" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "UserSession_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "User_nomor_key" ON "User"("nomor");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "UserSession_userId_key" ON "UserSession"("userId");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "User" ADD CONSTRAINT "User_masterUserRoleId_fkey" FOREIGN KEY ("masterUserRoleId") REFERENCES "MasterUserRole"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "UserSession" ADD CONSTRAINT "UserSession_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Profile" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"email" TEXT NOT NULL,
|
||||||
|
"alamat" TEXT NOT NULL,
|
||||||
|
"jenisKelamin" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"userId" TEXT,
|
||||||
|
"imagesId" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "Profile_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Images" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"url" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "Images_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Profile_email_key" ON "Profile"("email");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Profile_userId_key" ON "Profile"("userId");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Profile_imagesId_key" ON "Profile"("imagesId");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Profile" ADD CONSTRAINT "Profile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Profile" ADD CONSTRAINT "Profile_imagesId_fkey" FOREIGN KEY ("imagesId") REFERENCES "Images"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
257
prisma/migrations/20231219030550_transaksi_sukses/migration.sql
Normal file
@@ -0,0 +1,257 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Katalog" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"namaBisnis" TEXT NOT NULL,
|
||||||
|
"alamatKantor" TEXT NOT NULL,
|
||||||
|
"tlpn" TEXT NOT NULL,
|
||||||
|
"deskripsi" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"profileId" TEXT,
|
||||||
|
"masterBidangBisnisId" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Katalog_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "MasterBidangBisnis" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "MasterBidangBisnis_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Investasi" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"title" TEXT NOT NULL,
|
||||||
|
"targetDana" TEXT NOT NULL,
|
||||||
|
"hargaLembar" TEXT NOT NULL,
|
||||||
|
"totalLembar" TEXT NOT NULL,
|
||||||
|
"roi" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"countDown" TIMESTAMP(3),
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||||
|
"authorId" TEXT,
|
||||||
|
"catatan" TEXT,
|
||||||
|
"sisaLembar" TEXT NOT NULL,
|
||||||
|
"lembarTerbeli" TEXT DEFAULT '0',
|
||||||
|
"progress" TEXT DEFAULT '0',
|
||||||
|
"masterPeriodeDevidenId" TEXT,
|
||||||
|
"masterPembagianDevidenId" TEXT,
|
||||||
|
"masterPencarianInvestorId" TEXT,
|
||||||
|
"imagesId" TEXT,
|
||||||
|
"masterStatusInvestasiId" TEXT DEFAULT '2',
|
||||||
|
"masterProgresInvestasiId" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "Investasi_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "MasterPencarianInvestor" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "MasterPencarianInvestor_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "MasterPeriodeDeviden" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "MasterPeriodeDeviden_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "MasterPembagianDeviden" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "MasterPembagianDeviden_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "MasterStatusInvestasi" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"color" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "MasterStatusInvestasi_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "ProspektusInvestasi" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"url" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"investasiId" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "ProspektusInvestasi_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "DokumenInvestasi" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"title" TEXT NOT NULL,
|
||||||
|
"url" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"investasiId" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "DokumenInvestasi_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "BeritaInvestasi" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"title" TEXT NOT NULL,
|
||||||
|
"deskripsi" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||||
|
"imagesId" TEXT,
|
||||||
|
"investasiId" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "BeritaInvestasi_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "MasterBank" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"norek" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "MasterBank_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "MasterProgresInvestasi" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "MasterProgresInvestasi_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "TransaksiInvestasi" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"investasiId" TEXT NOT NULL,
|
||||||
|
"authorId" TEXT NOT NULL,
|
||||||
|
"namaBank" TEXT,
|
||||||
|
"nomorRekening" TEXT,
|
||||||
|
"token" TEXT,
|
||||||
|
"redirect_url" TEXT,
|
||||||
|
"quantity" TEXT NOT NULL,
|
||||||
|
"price" TEXT NOT NULL,
|
||||||
|
"gross_amount" TEXT NOT NULL,
|
||||||
|
"merchant_name" TEXT NOT NULL,
|
||||||
|
"status_code" TEXT,
|
||||||
|
"status_message" TEXT,
|
||||||
|
"transaction_id" TEXT,
|
||||||
|
"order_id" TEXT,
|
||||||
|
"payment_type" TEXT,
|
||||||
|
"transaction_time" TEXT,
|
||||||
|
"transaction_status" TEXT,
|
||||||
|
"fraud_status" TEXT,
|
||||||
|
"pdf_url" TEXT,
|
||||||
|
"finish_redirect_url" TEXT,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||||
|
"masterStatusTransaksiInvestasiId" TEXT DEFAULT '1',
|
||||||
|
|
||||||
|
CONSTRAINT "TransaksiInvestasi_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "MasterStatusTransaksiInvestasi" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"color" TEXT,
|
||||||
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "MasterStatusTransaksiInvestasi_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Investasi_imagesId_key" ON "Investasi"("imagesId");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "ProspektusInvestasi_investasiId_key" ON "ProspektusInvestasi"("investasiId");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Katalog" ADD CONSTRAINT "Katalog_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "Profile"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Katalog" ADD CONSTRAINT "Katalog_masterBidangBisnisId_fkey" FOREIGN KEY ("masterBidangBisnisId") REFERENCES "MasterBidangBisnis"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_masterPeriodeDevidenId_fkey" FOREIGN KEY ("masterPeriodeDevidenId") REFERENCES "MasterPeriodeDeviden"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_masterPembagianDevidenId_fkey" FOREIGN KEY ("masterPembagianDevidenId") REFERENCES "MasterPembagianDeviden"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_masterPencarianInvestorId_fkey" FOREIGN KEY ("masterPencarianInvestorId") REFERENCES "MasterPencarianInvestor"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_imagesId_fkey" FOREIGN KEY ("imagesId") REFERENCES "Images"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_masterStatusInvestasiId_fkey" FOREIGN KEY ("masterStatusInvestasiId") REFERENCES "MasterStatusInvestasi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Investasi" ADD CONSTRAINT "Investasi_masterProgresInvestasiId_fkey" FOREIGN KEY ("masterProgresInvestasiId") REFERENCES "MasterProgresInvestasi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "ProspektusInvestasi" ADD CONSTRAINT "ProspektusInvestasi_investasiId_fkey" FOREIGN KEY ("investasiId") REFERENCES "Investasi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "DokumenInvestasi" ADD CONSTRAINT "DokumenInvestasi_investasiId_fkey" FOREIGN KEY ("investasiId") REFERENCES "Investasi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "BeritaInvestasi" ADD CONSTRAINT "BeritaInvestasi_imagesId_fkey" FOREIGN KEY ("imagesId") REFERENCES "Images"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "BeritaInvestasi" ADD CONSTRAINT "BeritaInvestasi_investasiId_fkey" FOREIGN KEY ("investasiId") REFERENCES "Investasi"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "TransaksiInvestasi" ADD CONSTRAINT "TransaksiInvestasi_investasiId_fkey" FOREIGN KEY ("investasiId") REFERENCES "Investasi"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "TransaksiInvestasi" ADD CONSTRAINT "TransaksiInvestasi_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "TransaksiInvestasi" ADD CONSTRAINT "TransaksiInvestasi_masterStatusTransaksiInvestasiId_fkey" FOREIGN KEY ("masterStatusTransaksiInvestasiId") REFERENCES "MasterStatusTransaksiInvestasi"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
3
prisma/migrations/migration_lock.toml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Please do not edit this file manually
|
||||||
|
# It should be added in your version-control system (i.e. Git)
|
||||||
|
provider = "postgresql"
|
||||||
@@ -9,5 +9,347 @@ datasource db {
|
|||||||
provider = "postgresql"
|
provider = "postgresql"
|
||||||
url = env("DATABASE_URL")
|
url = env("DATABASE_URL")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
model User {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
username String @unique
|
||||||
|
nomor String @unique
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime? @default(now())
|
||||||
|
updatedAt DateTime? @updatedAt
|
||||||
|
MasterUserRole MasterUserRole @relation(fields: [masterUserRoleId], references: [id])
|
||||||
|
masterUserRoleId String @default("1")
|
||||||
|
UserSession UserSession?
|
||||||
|
Profile Profile?
|
||||||
|
Investasi Investasi[]
|
||||||
|
TransaksiInvestasi TransaksiInvestasi[]
|
||||||
|
Donasi Donasi[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model MasterUserRole {
|
||||||
|
id String @id
|
||||||
|
name String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime? @default(now())
|
||||||
|
updatedAt DateTime? @updatedAt
|
||||||
|
User User[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model UserSession {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
token String
|
||||||
|
expires DateTime
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
User User @relation(fields: [userId], references: [id])
|
||||||
|
userId String @unique
|
||||||
|
}
|
||||||
|
|
||||||
|
model Profile {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
email String @unique
|
||||||
|
alamat String
|
||||||
|
jenisKelamin String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
User User? @relation(fields: [userId], references: [id])
|
||||||
|
userId String? @unique
|
||||||
|
ImageProfile Images? @relation(fields: [imagesId], references: [id])
|
||||||
|
imagesId String? @unique
|
||||||
|
Katalog Katalog[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model Images {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
url String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
Profile Profile?
|
||||||
|
Investasi Investasi?
|
||||||
|
BeritaInvestasi BeritaInvestasi[]
|
||||||
|
Donasi Donasi?
|
||||||
|
CeritaDonasi Donasi_Cerita[]
|
||||||
|
Donasi_TemporaryCreate Donasi_TemporaryCreate[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model Katalog {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
namaBisnis String
|
||||||
|
alamatKantor String
|
||||||
|
tlpn String
|
||||||
|
deskripsi String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
Profile Profile? @relation(fields: [profileId], references: [id])
|
||||||
|
profileId String?
|
||||||
|
MasterBidangBisnis MasterBidangBisnis @relation(fields: [masterBidangBisnisId], references: [id])
|
||||||
|
masterBidangBisnisId String
|
||||||
|
}
|
||||||
|
|
||||||
|
model MasterBidangBisnis {
|
||||||
|
id String @id
|
||||||
|
name String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
Katalog Katalog[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------- INVESTASI --------------------- //
|
||||||
|
// Table investasi / saham
|
||||||
|
model Investasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
title String
|
||||||
|
targetDana String
|
||||||
|
hargaLembar String
|
||||||
|
totalLembar String
|
||||||
|
roi String
|
||||||
|
active Boolean @default(true)
|
||||||
|
|
||||||
|
countDown DateTime?
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
author User? @relation(fields: [authorId], references: [id])
|
||||||
|
authorId String?
|
||||||
|
catatan String?
|
||||||
|
sisaLembar String
|
||||||
|
lembarTerbeli String? @default("0")
|
||||||
|
progress String? @default("0")
|
||||||
|
|
||||||
|
MasterPeriodeDeviden MasterPeriodeDeviden? @relation(fields: [masterPeriodeDevidenId], references: [id])
|
||||||
|
masterPeriodeDevidenId String?
|
||||||
|
MasterPembagianDeviden MasterPembagianDeviden? @relation(fields: [masterPembagianDevidenId], references: [id])
|
||||||
|
masterPembagianDevidenId String?
|
||||||
|
MasterPencarianInvestor MasterPencarianInvestor? @relation(fields: [masterPencarianInvestorId], references: [id])
|
||||||
|
masterPencarianInvestorId String?
|
||||||
|
ImageInvestasi Images? @relation(fields: [imagesId], references: [id])
|
||||||
|
imagesId String? @unique
|
||||||
|
|
||||||
|
MasterStatusInvestasi MasterStatusInvestasi? @relation(fields: [masterStatusInvestasiId], references: [id])
|
||||||
|
masterStatusInvestasiId String? @default("2")
|
||||||
|
ProspektusInvestasi ProspektusInvestasi?
|
||||||
|
BeritaInvestasi BeritaInvestasi[]
|
||||||
|
DokumenInvestasi DokumenInvestasi[]
|
||||||
|
TransaksiInvestasi TransaksiInvestasi[]
|
||||||
|
MasterProgresInvestasi MasterProgresInvestasi? @relation(fields: [masterProgresInvestasiId], references: [id])
|
||||||
|
masterProgresInvestasiId String?
|
||||||
|
}
|
||||||
|
|
||||||
|
model MasterPencarianInvestor {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
investasi Investasi[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model MasterPeriodeDeviden {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
investasi Investasi[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model MasterPembagianDeviden {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
investasi Investasi[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model MasterStatusInvestasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
color String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
investasi Investasi[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model ProspektusInvestasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
url String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
investasi Investasi? @relation(fields: [investasiId], references: [id])
|
||||||
|
investasiId String? @unique
|
||||||
|
}
|
||||||
|
|
||||||
|
model DokumenInvestasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
title String
|
||||||
|
url String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
|
investasi Investasi? @relation(fields: [investasiId], references: [id])
|
||||||
|
investasiId String?
|
||||||
|
}
|
||||||
|
|
||||||
|
model BeritaInvestasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
title String
|
||||||
|
deskripsi String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
ImageBerita Images? @relation(fields: [imagesId], references: [id])
|
||||||
|
imagesId String?
|
||||||
|
investasi Investasi @relation(fields: [investasiId], references: [id])
|
||||||
|
investasiId String
|
||||||
|
}
|
||||||
|
|
||||||
|
model MasterBank {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
norek String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
}
|
||||||
|
|
||||||
|
model MasterProgresInvestasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
Investasi Investasi[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model TransaksiInvestasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
Investasi Investasi @relation(fields: [investasiId], references: [id])
|
||||||
|
investasiId String
|
||||||
|
Author User @relation(fields: [authorId], references: [id])
|
||||||
|
authorId String
|
||||||
|
|
||||||
|
namaBank String?
|
||||||
|
nomorRekening String?
|
||||||
|
token String?
|
||||||
|
redirect_url String?
|
||||||
|
quantity String
|
||||||
|
price String
|
||||||
|
gross_amount String
|
||||||
|
merchant_name String
|
||||||
|
status_code String?
|
||||||
|
status_message String?
|
||||||
|
transaction_id String?
|
||||||
|
order_id String?
|
||||||
|
payment_type String?
|
||||||
|
transaction_time String?
|
||||||
|
transaction_status String?
|
||||||
|
fraud_status String?
|
||||||
|
pdf_url String?
|
||||||
|
finish_redirect_url String?
|
||||||
|
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
MasterStatusTransaksiInvestasi MasterStatusTransaksiInvestasi? @relation(fields: [masterStatusTransaksiInvestasiId], references: [id])
|
||||||
|
masterStatusTransaksiInvestasiId String? @default("1")
|
||||||
|
}
|
||||||
|
|
||||||
|
model MasterStatusTransaksiInvestasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
color String?
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
TransaksiInvestasi TransaksiInvestasi[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------- DONASI --------------------- //
|
||||||
|
model Donasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
title String
|
||||||
|
target String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
publishTime DateTime?
|
||||||
|
catatan String?
|
||||||
|
|
||||||
|
Author User? @relation(fields: [authorId], references: [id])
|
||||||
|
authorId String?
|
||||||
|
imageDonasi Images? @relation(fields: [imagesId], references: [id])
|
||||||
|
imagesId String? @unique
|
||||||
|
CeritaDonasi Donasi_Cerita?
|
||||||
|
DonasiMaster_Ketegori DonasiMaster_Kategori? @relation(fields: [donasiMaster_KategoriId], references: [id])
|
||||||
|
donasiMaster_KategoriId String?
|
||||||
|
DonasiMaster_Durasi DonasiMaster_Durasi? @relation(fields: [donasiMaster_DurasiId], references: [id])
|
||||||
|
donasiMaster_DurasiId String?
|
||||||
|
DonasiMaster_Status DonasiMaster_StatusDonasi? @relation(fields: [donasiMaster_StatusDonasiId], references: [id])
|
||||||
|
donasiMaster_StatusDonasiId String? @default("2")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Donasi_TemporaryCreate {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
title String
|
||||||
|
target String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
imageDonasiTemporary Images? @relation(fields: [imagesId], references: [id])
|
||||||
|
imagesId String? @unique
|
||||||
|
kategori DonasiMaster_Kategori? @relation(fields: [donasiMaster_KategoriId], references: [id])
|
||||||
|
donasiMaster_KategoriId String?
|
||||||
|
durasi DonasiMaster_Durasi? @relation(fields: [donasiMaster_DurasiId], references: [id])
|
||||||
|
donasiMaster_DurasiId String?
|
||||||
|
}
|
||||||
|
|
||||||
|
model DonasiMaster_Kategori {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
Donasi Donasi[]
|
||||||
|
Donasi_TemporaryCreate Donasi_TemporaryCreate[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model DonasiMaster_Durasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
Donasi Donasi[]
|
||||||
|
Donasi_TemporaryCreate Donasi_TemporaryCreate[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model Donasi_Cerita {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
pembukaan String
|
||||||
|
cerita String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
|
imageCeritaDonasi Images? @relation(fields: [imagesId], references: [id])
|
||||||
|
imagesId String? @unique
|
||||||
|
Donasi Donasi? @relation(fields: [donasiId], references: [id])
|
||||||
|
donasiId String? @unique
|
||||||
|
}
|
||||||
|
|
||||||
|
model DonasiMaster_StatusDonasi {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
name String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
Donasi Donasi[]
|
||||||
|
}
|
||||||
|
|||||||
BIN
public/aset/avatar.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/aset/donasi/bukti.jpg
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
public/aset/dummy_file.pdf
Normal file
BIN
public/aset/global/no_img.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/aset/investasi/home-hipmi.png
Normal file
|
After Width: | Height: | Size: 291 KiB |
BIN
public/aset/investasi/logo-crowd-panjang.png
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
public/aset/investasi/logo-crowd.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
BIN
public/aset/logo/logo-hipmi round white.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/aset/logo/logo-hipmi round.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
public/aset/logo/logo-hipmi.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
public/aset/no-file.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
public/aset/no-img.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/aset/pdf-icon.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/donasi/image/454e636f-9631-45cd-99ae-27efdb44be91.jpeg
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/donasi/image/4e1a2302-5471-4a95-a79c-0fbe3c3f0677.jpeg
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/donasi/image/7d8d0898-4c8a-470f-afde-755d6133425f.jpeg
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/donasi/image/84a72cf5-1b0e-47f8-bca9-763edef28c0b.jpeg
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/donasi/image/b9b270aa-f0db-42a6-822e-a35b6b28c883.jpeg
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/donasi/image/bf8c9bae-e3c9-4d33-89ec-9a88c3740da8.jpeg
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
public/donasi/image/c6b8d269-7e15-4711-81e0-35d1d2f757dc.jpeg
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
public/donasi/image/c77f246e-d572-4acb-9b41-0b9e5d973e69.jpg
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
public/donasi/image/ddd5a80a-f5d9-4483-8fe0-5216c372a536.jpg
Normal file
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
BIN
public/file/06714b9b-5ed3-44df-b512-36110c5b91dd.pdf
Normal file
BIN
public/file/0bfd9239-0853-42d9-bb7f-681adbec25ae.pdf
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/file/3ece02cd-8472-42ee-9721-356041bcd655.pdf
Normal file
|
After Width: | Height: | Size: 217 KiB |
BIN
public/file/5ef5daeb-0ef7-47d4-847d-a201ff0bd818.pdf
Normal file
BIN
public/file/6e9274d3-5c39-47ee-bf7c-114189618dff.pdf
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/file/c8904500-c9fd-40e4-a500-7ccb9fb48eb5.pdf
Normal file
BIN
public/file/e1366e3c-26c3-4939-8503-0ac3e2e68f03.pdf
Normal file
1
public/file/index.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Image for file
|
||||||
BIN
public/investasi/0815b390-ff1c-4139-a67f-ff4603b9e2ca.png
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/investasi/24c94a56-5563-4a2e-a401-b5f771d9ba12.png
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/investasi/2756d89c-0156-4252-920a-443d25ead85e.png
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/investasi/4297c21c-529d-4f71-bb52-b2fcb60a2bac.png
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/investasi/59b1d508-1b64-46f2-99c2-a43f268a2a86.jpeg
Normal file
|
After Width: | Height: | Size: 217 KiB |
BIN
public/investasi/83fd7d43-e40d-4a4c-bdff-bd7eeb75ac04.jpeg
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
public/investasi/d5b525d2-f460-4b0e-af8a-02b9c21a972e.png
Normal file
|
After Width: | Height: | Size: 202 KiB |
BIN
public/investasi/ddf1e9c2-92f0-4885-b467-01cc35d1bf46.png
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/investasi/ed305bf4-65e1-441a-a8bb-2d815a6e49c1.png
Normal file
|
After Width: | Height: | Size: 268 KiB |
BIN
public/investasi/f3e7698b-44de-4dc5-9238-65196abc4fe7.png
Normal file
|
After Width: | Height: | Size: 263 KiB |
1
public/investasi/index.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
// Image for investasi
|
||||||
36
src/app/api/auth/login/route.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
|
import { myConsole } from "@/app/fun/my_console";
|
||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
|
||||||
|
|
||||||
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
|
export async function POST(req: Request) {
|
||||||
|
if (req.method === "POST") {
|
||||||
|
const body = await req.json();
|
||||||
|
// console.log(body);
|
||||||
|
|
||||||
|
if (body.nomor === "1234567890") {
|
||||||
|
return NextResponse.json({
|
||||||
|
success: true,
|
||||||
|
status: 200,
|
||||||
|
message: "Login Success",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
await fetch(
|
||||||
|
`https://wa.wibudev.com/code?nom=${body.nomor}&text=Masukan Kode OTP:${body.otp}`
|
||||||
|
);
|
||||||
|
return NextResponse.json({
|
||||||
|
body,
|
||||||
|
status: 200,
|
||||||
|
message: "Login Success",
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
return NextResponse.json({ status: 500, message: "Server Error !!!" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NextResponse.json({ success: false });
|
||||||
|
}
|
||||||
12
src/app/api/auth/logout/route.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { cookies } from "next/headers";
|
||||||
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
|
export async function GET() {
|
||||||
|
cookies().set({
|
||||||
|
name: "ssn",
|
||||||
|
value: "",
|
||||||
|
maxAge: 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
return NextResponse.json({ status: 200, message: "Logout" });
|
||||||
|
}
|
||||||
59
src/app/api/auth/register/route.ts
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
import { sealData } from "iron-session";
|
||||||
|
import { myConsole } from "@/app/fun/my_console";
|
||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { data } from "autoprefixer";
|
||||||
|
import { NextResponse } from "next/server";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
import { getConfig } from "@/bin/config";
|
||||||
|
|
||||||
|
import fs from "fs";
|
||||||
|
import yaml from "yaml";
|
||||||
|
const config = yaml.parse(fs.readFileSync("config.yaml").toString());
|
||||||
|
|
||||||
|
export async function POST(req: Request) {
|
||||||
|
if (req.method === "POST") {
|
||||||
|
const body = await req.json();
|
||||||
|
// MyConsole(body);
|
||||||
|
|
||||||
|
const cekUsername = await prisma.user.findUnique({
|
||||||
|
where: {
|
||||||
|
username: body.username,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
myConsole(cekUsername);
|
||||||
|
|
||||||
|
if (cekUsername)
|
||||||
|
return NextResponse.json({ status: 400, message: "Username sudah ada" });
|
||||||
|
|
||||||
|
const data = await prisma.user.create({
|
||||||
|
data: {
|
||||||
|
username: body.username,
|
||||||
|
nomor: body.nomor,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
const seal = await sealData(
|
||||||
|
JSON.stringify({
|
||||||
|
id: data.id,
|
||||||
|
username: data.username,
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
password: await config.server.password,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
cookies().set({
|
||||||
|
name: "ssn",
|
||||||
|
value: seal,
|
||||||
|
maxAge: 60 * 60 * 24 * 7,
|
||||||
|
});
|
||||||
|
|
||||||
|
return NextResponse.json({ status: 201 });
|
||||||
|
}
|
||||||
|
|
||||||
|
return NextResponse.json({ success: true });
|
||||||
|
}
|
||||||
|
return NextResponse.json({ success: false });
|
||||||
|
}
|
||||||
59
src/app/api/auth/validasi/route.ts
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
import { myConsole } from "@/app/fun/my_console";
|
||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { NextResponse } from "next/server";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
import { sealData, unsealData } from "iron-session";
|
||||||
|
import { getConfig } from "@/bin/config";
|
||||||
|
import yaml from "yaml";
|
||||||
|
import fs from "fs";
|
||||||
|
import { revalidatePath } from "next/cache";
|
||||||
|
const config = yaml.parse(fs.readFileSync("config.yaml").toString());
|
||||||
|
|
||||||
|
export async function POST(req: Request) {
|
||||||
|
|
||||||
|
if (req.method === "POST") {
|
||||||
|
const body = await req.json();
|
||||||
|
|
||||||
|
|
||||||
|
const data = await prisma.user.findUnique({
|
||||||
|
where: {
|
||||||
|
nomor: body.nomor,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
id: true,
|
||||||
|
nomor: true,
|
||||||
|
username: true,
|
||||||
|
active: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
myConsole(data)
|
||||||
|
|
||||||
|
if (!data) return NextResponse.json({ status: 404 });
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
const res = await sealData(
|
||||||
|
JSON.stringify({
|
||||||
|
id: data.id,
|
||||||
|
username: data.username,
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
password: (await config.server.password),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
cookies().set({
|
||||||
|
name: "ssn",
|
||||||
|
value: res,
|
||||||
|
maxAge: 60 * 60 * 24 * 7,
|
||||||
|
});
|
||||||
|
|
||||||
|
revalidatePath("/dev/home")
|
||||||
|
|
||||||
|
return NextResponse.json({ status: 200, data });
|
||||||
|
}
|
||||||
|
|
||||||
|
return NextResponse.json({ success: true });
|
||||||
|
}
|
||||||
|
return NextResponse.json({ success: false });
|
||||||
|
}
|
||||||
32
src/app/api/donasi/gambar/[id]/route.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import fs from "fs";
|
||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
req: NextRequest,
|
||||||
|
{ params }: { params: { id: string } }
|
||||||
|
) {
|
||||||
|
const get = await prisma.images.findUnique({
|
||||||
|
where: {
|
||||||
|
id: params.id,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
url: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!fs.existsSync(`./public/donasi/image/${get?.url}`)) {
|
||||||
|
const notFile = fs.readFileSync("./public/aset/global/no_img.png");
|
||||||
|
return new NextResponse(notFile, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const file = fs.readFileSync(`./public/donasi/image/${get?.url}`);
|
||||||
|
return new NextResponse(file, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
34
src/app/api/donasi/gambar_cerita/[id]/route.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import fs from "fs";
|
||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
req: NextRequest,
|
||||||
|
{ params }: { params: { id: string } }
|
||||||
|
) {
|
||||||
|
|
||||||
|
const get = await prisma.images.findUnique({
|
||||||
|
where: {
|
||||||
|
id: params.id,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
url: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
if (!fs.existsSync(`./public/donasi/image_cerita/${get?.url}`)) {
|
||||||
|
const notFile = fs.readFileSync("./public/aset/global/no_img.png");
|
||||||
|
return new NextResponse(notFile, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const file = fs.readFileSync(`./public/donasi/image_cerita/${get?.url}`);
|
||||||
|
return new NextResponse(file, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
23
src/app/api/donasi/image/[url]/route.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import fs from "fs";
|
||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
req: NextRequest,
|
||||||
|
{ params }: { params: { url: string } }
|
||||||
|
) {
|
||||||
|
if (!fs.existsSync(`./public/donasi/image/${params.url}`)) {
|
||||||
|
const notFile = fs.readFileSync("./public/aset/global/no_img.png");
|
||||||
|
return new NextResponse(notFile, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const file = fs.readFileSync(`./public/donasi/image/${params.url}`);
|
||||||
|
return new NextResponse(file, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
25
src/app/api/donasi/image_cerita/[url]/route.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
import fs from "fs"
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
req: NextRequest,
|
||||||
|
{ params }: { params: { url: string } }
|
||||||
|
) {
|
||||||
|
|
||||||
|
if (!fs.existsSync(`./public/donasi/image_cerita/${params.url}`)) {
|
||||||
|
const notFile = fs.readFileSync("./public/aset/global/no_img.png");
|
||||||
|
return new NextResponse(notFile, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const file = fs.readFileSync(`./public/donasi/image_cerita/${params.url}`);
|
||||||
|
return new NextResponse(file, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
1
src/app/api/donasi/index.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# Test
|
||||||
22
src/app/api/investasi/dokumen/[id]/route.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
import fs from "fs";
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
req: NextRequest,
|
||||||
|
{ params }: { params: { id: string } }
|
||||||
|
) {
|
||||||
|
const data = await prisma.dokumenInvestasi.findUnique({
|
||||||
|
where: { id: params.id },
|
||||||
|
select: {
|
||||||
|
url: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const file = fs.readFileSync(`./public/file/${data?.url}`);
|
||||||
|
return new NextResponse(file, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/pdf",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
33
src/app/api/investasi/gambar/[id]/route.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
import fs from "fs";
|
||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
req: NextRequest,
|
||||||
|
{ params }: { params: { id: string } }
|
||||||
|
) {
|
||||||
|
|
||||||
|
const data = await prisma.images.findUnique({
|
||||||
|
where: {
|
||||||
|
id: params.id,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
url: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!fs.existsSync(`./public/investasi/${data?.url}`)) {
|
||||||
|
const fl = fs.readFileSync(`./public/aset/no-img.png`);
|
||||||
|
return new NextResponse(fl, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const fl = fs.readFileSync(`./public/investasi/${data?.url}`);
|
||||||
|
return new NextResponse(fl, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
9
src/app/api/investasi/midtrans/[id]/route.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
|
||||||
|
export async function POST(req: NextRequest, {params}: {params: {id: any}}) {
|
||||||
|
|
||||||
|
const body = await req.json()
|
||||||
|
console.log(body)
|
||||||
|
|
||||||
|
return NextResponse.json({ status: 200, message: "OK", data: body });
|
||||||
|
}
|
||||||
23
src/app/api/investasi/prospektus/[id]/route.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
import fs from "fs";
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
req: NextRequest,
|
||||||
|
{ params }: { params: { id: string } }
|
||||||
|
) {
|
||||||
|
// console.log(params.id)
|
||||||
|
const data = await prisma.prospektusInvestasi.findUnique({
|
||||||
|
where: { id: params.id },
|
||||||
|
select: {
|
||||||
|
url: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const file = fs.readFileSync(`./public/file/${data?.url}`);
|
||||||
|
return new NextResponse(file, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/pdf",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
22
src/app/api/profile/foto/[name]/route.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
import fs from "fs";
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
req: NextRequest,
|
||||||
|
{ params }: { params: { name: string } }
|
||||||
|
) {
|
||||||
|
if (!fs.existsSync(`./public/img/${params.name}`)) {
|
||||||
|
const fl = fs.readFileSync(`./public/aset/avatar.png`);
|
||||||
|
return new NextResponse(fl, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const fl = fs.readFileSync(`./public/img/${params.name}`);
|
||||||
|
return new NextResponse(fl, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
236
src/app/api/seeder/route.ts
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { NextResponse } from "next/server";
|
||||||
|
import userRole from "../../../bin/seeder/user_role.json";
|
||||||
|
import bidangBisnis from "../../../bin/seeder/bidang_bisnis.json";
|
||||||
|
import pencarianInvestor from "./../../../bin/seeder/investasi/pencarian_investor.json";
|
||||||
|
import periodeDeviden from "./../../../bin/seeder/investasi/periode_deviden.json";
|
||||||
|
import pembagianDeviden from "./../../../bin/seeder/investasi/pembagian_deviden.json";
|
||||||
|
import statusInvestasi from "./../../../bin/seeder/investasi/status_investasi.json";
|
||||||
|
import namaBank from "./../../../bin/seeder/investasi/nama_bank.json";
|
||||||
|
import statusTransaksiInvestasi from "./../../../bin/seeder/investasi/status_transaksi_investasi.json";
|
||||||
|
import jenisProgres from "../../../bin/seeder/investasi/master_progres.json";
|
||||||
|
import userSeeder from "../../../bin/seeder/user_seeder.json";
|
||||||
|
import donasi_status from "../../../bin/seeder/donasi/master_status.json";
|
||||||
|
import donasi_kategori from "../../../bin/seeder/donasi/master_kategori.json";
|
||||||
|
import donasi_durasi from "../../../bin/seeder/donasi/master_durasi.json";
|
||||||
|
|
||||||
|
export async function GET(req: Request) {
|
||||||
|
const dev = new URL(req.url).searchParams.get("dev");
|
||||||
|
if (dev === "DEV-HIPMI") {
|
||||||
|
for (let i of userRole) {
|
||||||
|
const data = await prisma.masterUserRole.upsert({
|
||||||
|
where: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i of userSeeder) {
|
||||||
|
await prisma.user.upsert({
|
||||||
|
where: {
|
||||||
|
nomor: i.nomor,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
nomor: i.nomor,
|
||||||
|
username: i.name,
|
||||||
|
masterUserRoleId: i.masterUserRoleId,
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
nomor: i.nomor,
|
||||||
|
username: i.name,
|
||||||
|
masterUserRoleId: i.masterUserRoleId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i of bidangBisnis) {
|
||||||
|
await prisma.masterBidangBisnis.upsert({
|
||||||
|
where: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i of pencarianInvestor) {
|
||||||
|
await prisma.masterPencarianInvestor.upsert({
|
||||||
|
where: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i of pembagianDeviden) {
|
||||||
|
await prisma.masterPembagianDeviden.upsert({
|
||||||
|
where: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i of periodeDeviden) {
|
||||||
|
await prisma.masterPeriodeDeviden.upsert({
|
||||||
|
where: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i of statusInvestasi) {
|
||||||
|
await prisma.masterStatusInvestasi.upsert({
|
||||||
|
where: {
|
||||||
|
id: i.id,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: i.id,
|
||||||
|
name: i.name,
|
||||||
|
color: i.color,
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
id: i.id,
|
||||||
|
name: i.name,
|
||||||
|
color: i.color,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i of namaBank) {
|
||||||
|
await prisma.masterBank.upsert({
|
||||||
|
where: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
norek: i.norek.toString(),
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
id: i.id.toString(),
|
||||||
|
name: i.name,
|
||||||
|
norek: i.norek.toString(),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i of statusTransaksiInvestasi) {
|
||||||
|
await prisma.masterStatusTransaksiInvestasi.upsert({
|
||||||
|
where: {
|
||||||
|
id: i.id,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: i.id,
|
||||||
|
name: i.name,
|
||||||
|
color: i.color,
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
id: i.id,
|
||||||
|
name: i.name,
|
||||||
|
color: i.color,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i of jenisProgres) {
|
||||||
|
await prisma.masterProgresInvestasi.upsert({
|
||||||
|
where: {
|
||||||
|
id: i.id,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: i.id,
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
name: i.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let d of donasi_status) {
|
||||||
|
await prisma.donasiMaster_StatusDonasi.upsert({
|
||||||
|
where: {
|
||||||
|
id: d.id,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: d.id,
|
||||||
|
name: d.name,
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
name: d.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let d of donasi_kategori) {
|
||||||
|
await prisma.donasiMaster_Kategori.upsert({
|
||||||
|
where: {
|
||||||
|
id: d.id,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: d.id,
|
||||||
|
name: d.name,
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
name: d.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let d of donasi_durasi) {
|
||||||
|
await prisma.donasiMaster_Durasi.upsert({
|
||||||
|
where: {
|
||||||
|
id: d.id,
|
||||||
|
},
|
||||||
|
create: {
|
||||||
|
id: d.id,
|
||||||
|
name: d.name,
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
name: d.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return NextResponse.json({ success: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
return NextResponse.json({ success: false });
|
||||||
|
}
|
||||||
9
src/app/dev/admin/award/main/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { Admin_Award } from "@/app_modules/admin/award";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Admin_Award />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
9
src/app/dev/admin/award/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import Admin_Award from "@/app_modules/admin/award/main";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Admin_Award />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
9
src/app/dev/admin/donasi/detail/publish/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { AdminDonasi_DetailPublish } from "@/app_modules/admin/donasi";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<AdminDonasi_DetailPublish />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
9
src/app/dev/admin/donasi/detail/review/[id]/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { AdminDonasi_DetailReview } from "@/app_modules/admin/donasi";
|
||||||
|
import { AdminDonasi_getById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
|
||||||
|
|
||||||
|
export default async function Page({params}: {params: {id: string}}) {
|
||||||
|
// console.log(params.id)
|
||||||
|
const dataReview = await AdminDonasi_getById(params.id)
|
||||||
|
// console.log(dataReview)
|
||||||
|
return <AdminDonasi_DetailReview dataReview={dataReview as any}/>
|
||||||
|
}
|
||||||
20
src/app/dev/admin/donasi/main/page.tsx
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import { AdminDonasi_Main } from "@/app_modules/admin/donasi";
|
||||||
|
import AdminDonasi_funCountByStatus from "@/app_modules/admin/donasi/fun/count/fun_count_donasi_by_status";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
const countPublish = await AdminDonasi_funCountByStatus("1");
|
||||||
|
const countReview = await AdminDonasi_funCountByStatus("2");
|
||||||
|
const countDraft = await AdminDonasi_funCountByStatus("3");
|
||||||
|
const countReject = await AdminDonasi_funCountByStatus("4");
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<AdminDonasi_Main
|
||||||
|
countPublish={countPublish as number}
|
||||||
|
countReview={countReview as number}
|
||||||
|
countDraft={countDraft as number}
|
||||||
|
countReject={countReject as number}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
10
src/app/dev/admin/donasi/table/publish/page.tsx
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import { AdminDonasi_TablePublish } from "@/app_modules/admin/donasi";
|
||||||
|
import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_donasi_by_status";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
const listPublish = await AdminDonasi_getByStatus("1")
|
||||||
|
// console.log(listPublish)
|
||||||
|
return<>
|
||||||
|
<AdminDonasi_TablePublish listPublish={listPublish as any}/>
|
||||||
|
</>
|
||||||
|
}
|
||||||
10
src/app/dev/admin/donasi/table/reject/page.tsx
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import { AdminDonasi_TableReject } from "@/app_modules/admin/donasi";
|
||||||
|
import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_donasi_by_status";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
const dataReject = await AdminDonasi_getByStatus("4")
|
||||||
|
// console.log(dataReject)
|
||||||
|
return<>
|
||||||
|
<AdminDonasi_TableReject dataReject={dataReject as any}/>
|
||||||
|
</>
|
||||||
|
}
|
||||||
9
src/app/dev/admin/donasi/table/review/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { AdminDonasi_TableReview } from "@/app_modules/admin/donasi";
|
||||||
|
import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_donasi_by_status";
|
||||||
|
import { getToken_UserId } from "@/app_modules/fun/get_user_token";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
const listReview = await AdminDonasi_getByStatus("2");
|
||||||
|
// console.log(listReview);
|
||||||
|
return <AdminDonasi_TableReview listReview={listReview as any} />;
|
||||||
|
}
|
||||||
16
src/app/dev/admin/investasi/bukti_transfer/layout.tsx
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { Admin_LayoutBuktiTransferInvestasi } from "@/app_modules/admin/investasi";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
export default async function Layout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Admin_LayoutBuktiTransferInvestasi>
|
||||||
|
{children}
|
||||||
|
</Admin_LayoutBuktiTransferInvestasi>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
9
src/app/dev/admin/investasi/bukti_transfer/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { Admin_BuktiTransferInvestasi } from "@/app_modules/admin/investasi";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Admin_BuktiTransferInvestasi />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
10
src/app/dev/admin/investasi/halaman_aksi/[id]/layout.tsx
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
|
||||||
|
import { Admin_LayoutHalamanAksi } from "@/app_modules/admin/investasi";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
export default async function Layout({ children }: { children: React.ReactNode }) {
|
||||||
|
return <>
|
||||||
|
<Admin_LayoutHalamanAksi>{children}</Admin_LayoutHalamanAksi>
|
||||||
|
</>;
|
||||||
|
}
|
||||||
10
src/app/dev/admin/investasi/halaman_aksi/[id]/page.tsx
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import { Admin_HalamanAksi } from "@/app_modules/admin/investasi";
|
||||||
|
|
||||||
|
export default async function Page({params}:{params: {id: string}}) {
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Admin_HalamanAksi idInves={params.id} />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
16
src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { Admin_KonfirmasiInvestasi } from "@/app_modules/admin/investasi";
|
||||||
|
import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
|
||||||
|
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
|
||||||
|
|
||||||
|
|
||||||
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
|
const dataInvestasi = await getOneInvestasiById(params.id)
|
||||||
|
const dataUser = await funGetUserProfile(dataInvestasi?.authorId as any)
|
||||||
|
// console.log(dataUser)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Admin_KonfirmasiInvestasi dataInvestasi={dataInvestasi as any} dataUser={dataUser as any} />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
32
src/app/dev/admin/investasi/main/page.tsx
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import { Admin_Investasi } from "@/app_modules/admin/investasi";
|
||||||
|
import Admin_CountStatusInvestasi from "@/app_modules/admin/investasi/fun/count_status";
|
||||||
|
import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi";
|
||||||
|
import Admin_getPublishProgresInvestasi from "@/app_modules/admin/investasi/fun/get_publish_progres";
|
||||||
|
import Admin_getTotalInvestasiByUser from "@/app_modules/admin/investasi/fun/get_total_investasi_by_user";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
const listInvestasi = await Admin_funGetAllInvestasi();
|
||||||
|
const countDraft = await Admin_CountStatusInvestasi(1);
|
||||||
|
const countReview = await Admin_CountStatusInvestasi(2);
|
||||||
|
const countPublish = await Admin_CountStatusInvestasi(3);
|
||||||
|
const countReject = await Admin_CountStatusInvestasi(4);
|
||||||
|
const totalInvestasiByUser = await Admin_getTotalInvestasiByUser()
|
||||||
|
const publishProgres = await Admin_getPublishProgresInvestasi()
|
||||||
|
// console.log(targetTerbesar)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Admin_Investasi
|
||||||
|
listInvestasi={listInvestasi as any}
|
||||||
|
countDraft={countDraft}
|
||||||
|
countReview={countReview}
|
||||||
|
countPublish={countPublish}
|
||||||
|
countReject={countReject}
|
||||||
|
totalInvestasiByUser={totalInvestasiByUser}
|
||||||
|
publishProgres={publishProgres}
|
||||||
|
|
||||||
|
/>
|
||||||
|
{/* <pre>{JSON.stringify(totalInvestasiByUser, null,2)}</pre> */}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
16
src/app/dev/admin/investasi/status_transfer/layout.tsx
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { Admin_LayoutStatusTransferInvesatasi } from "@/app_modules/admin/investasi";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
export default async function Layout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Admin_LayoutStatusTransferInvesatasi>
|
||||||
|
{children}
|
||||||
|
</Admin_LayoutStatusTransferInvesatasi>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
8
src/app/dev/admin/investasi/status_transfer/page.tsx
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { Admin_StatusTransferInvesatasi } from "@/app_modules/admin/investasi";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
return<>
|
||||||
|
<Admin_StatusTransferInvesatasi/>
|
||||||
|
</>
|
||||||
|
|
||||||
|
}
|
||||||
10
src/app/dev/admin/investasi/table_status/publish/page.tsx
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import { Admin_TablePublishInvestasi } from "@/app_modules/admin/investasi";
|
||||||
|
import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
const listInvestasi = await Admin_funGetAllInvestasi();
|
||||||
|
|
||||||
|
return<>
|
||||||
|
<Admin_TablePublishInvestasi dataInvestsi={listInvestasi as any}/>
|
||||||
|
</>
|
||||||
|
}
|
||||||
10
src/app/dev/admin/investasi/table_status/reject/page.tsx
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import { Admin_TableRejectInvestasi } from "@/app_modules/admin/investasi";
|
||||||
|
import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
const dataInvestsi = await Admin_funGetAllInvestasi()
|
||||||
|
return <>
|
||||||
|
<Admin_TableRejectInvestasi dataInvestsi={dataInvestsi as any}/>
|
||||||
|
|
||||||
|
</>
|
||||||
|
}
|
||||||
9
src/app/dev/admin/investasi/table_status/review/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { Admin_TableReviewInvestasi } from "@/app_modules/admin/investasi";
|
||||||
|
import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
const dataInvestsi = await Admin_funGetAllInvestasi()
|
||||||
|
return <>
|
||||||
|
<Admin_TableReviewInvestasi dataInvestsi={dataInvestsi as any}/>
|
||||||
|
</>
|
||||||
|
}
|
||||||
14
src/app/dev/admin/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import { AdminLayout } from "@/app_modules/admin/main";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
export default async function Layout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<AdminLayout>{children}</AdminLayout>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
5
src/app/dev/admin/main/dashboard/page.tsx
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { AdminMain } from "@/app_modules/admin/main";
|
||||||
|
|
||||||
|
export default async function Page() {
|
||||||
|
return <AdminMain />;
|
||||||
|
}
|
||||||
14
src/app/dev/auth/login/page.tsx
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import { Login } from "@/app_modules/auth";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
|
||||||
|
export default function Page() {
|
||||||
|
const c = cookies().getAll();
|
||||||
|
const tkn = c;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{/* {JSON.stringify(tkn)} */}
|
||||||
|
<Login />;
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
5
src/app/dev/auth/register/page.tsx
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { Register } from "@/app_modules/auth";
|
||||||
|
|
||||||
|
export default function Page() {
|
||||||
|
return <Register />;
|
||||||
|
}
|
||||||