mkdir cli_app_2
cd cli_app_2
npm init
licensi MIT
npm install --save inquirer
npm install prisma
npx prisma init
tambahkan type modul
dan script start
sehingga kita bisa node start
//package.json
{
"name": "cli_app_2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module", //tambahkan ini
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start":"node index.js" //dan ini
},
"author": "andiismail",
"license": "MIT",
"dependencies": {
"inquirer": "^9.1.4",
"prisma": "^4.6.1"
}
}
selanjutnya kita akan buat index.js
//index.js
import inquirer from "inquirer";
console.clear()
console.log(`
===================================
APlikasi Cli 2
===================================
`)
jalankan aplikasi dengan mengetikkan npm start
selanjutnya kita gunakan prisma
//index.js
import inquirer from "inquirer";
console.clear()
console.log(`
===================================
APlikasi Cli 2
===================================
`)
//kasih pilhan mau login atau mau register
inquirer.prompt([
{
name : "option",
message : "silahkan pilih : ",
type : "list",
choices : ["login", "register"]
}
])
.then((ans)=>{
console.log(ans.option)
})
.catch((err)=>{
console.error(err)
})
berhasil menampilkan option login da register
agar tidak menggunakan kata ans ketika memunculkan option terus maka kita akan menjadikan option sebagai objek ans
//index.js
import inquirer from "inquirer";
console.clear()
console.log(`
===================================
APlikasi Cli 2
===================================
`)
//kasih pilhan mau login atau mau register
inquirer.prompt([
{
name : "option",
message : "silahkan pilih : ",
type : "list",
choices : ["login", "register", "exit"]
}
])
.then((ans)=>{
//console.log(ans.option)
const {option} = ans
console.log(option)
})
.catch((err)=>{
console.error(err)
})
hasilnya
selanjutnya kita akan menggunakan pengkondisian
//index.js
import inquirer from "inquirer";
console.clear()
console.log(`
===================================
APlikasi Cli 2
===================================
`)
//kasih pilhan mau login atau mau register
inquirer.prompt([
{
name : "option",
message : "silahkan pilih : ",
type : "list",
choices : ["login", "register", "exit"]
}
])
.then((ans)=>{
//pengkondisian
const {option} = ans
//gunakan if
if(option==="login"){
console.clear()
console.log("kamu memilih login")
return
}
if(option==="register"){
console.clear()
console.log("kamu memilih register")
return
}
console.clear()
console.log("terimakasih...")
})
.catch((err)=>{
console.error(err)
})
selanjutnya kita akan buat function function yang kan memanggil console log yang telah kit buat sebelumnya.
`//function login
function login (){
console.clear()
console.log("kamu memilih Login")
}
function resgister (){
console.clear()
console.log("kamu memilih Register")
}`
//index.js
import inquirer from "inquirer";
console.clear()
console.log(`
===================================
APlikasi Cli 2
===================================
`)
//kasih pilhan mau login atau mau register
inquirer.prompt([
{
name : "option",
message : "silahkan pilih : ",
type : "list",
choices : ["login", "register", "exit"]
}
])
.then((ans)=>{
//destruct option objek dari ans
const {option} = ans
//gunakan if
if(option==="login"){
return login()
}
if(option==="register"){
return resgister()
}
exit()
})
.catch((err)=>{
console.error(err)
})
//function login
function login (){
console.clear()
console.log("kamu memilih Login")
}
function resgister (){
console.clear()
console.log("kamu memilih Register")
}
function exit (){
console.clear()
console.log("Terimakasih...")
}
hasilnya sama aja. selanjutnya kita akan buat database nya dengan prisma.
kita ganti databse url di file .env
DATABASE_URL="file:./db.sqlite"
selanjutnya kita ke schema prisma
//schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
model Users {
//col name type option
id Int @id @default(autoincrement())
username String @unique
password String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
npx prisma generate
npx prisma db push
npx prisma studio
//package.json
{
"name": "cli_app_2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js"
},
"author": "andiismail",
"license": "MIT",
"dependencies": {
"@prisma/client": "^4.6.1",
"inquirer": "^9.1.4",
"prisma": "^4.6.1"
}
}
selanjutnya kita buat file connection.js di prisma
//connection.js
import { PrismaClient } from "@prisma/client"
const db = new PrismaClient()
export default db
selanjutnya kita ke index.js
//index.js
import inquirer from "inquirer";
import db from "./prisma/connection.js"
console.clear()
console.log(`
===================================
APlikasi Cli 2
===================================
`)
//kasih pilhan mau login atau mau register
inquirer.prompt([
{
name : "option",
message : "silahkan pilih : ",
type : "list",
choices : ["login", "register", "exit"]
}
])
.then((ans)=>{
//destruct option objek dari ans
const {option} = ans
//gunakan if
if(option==="login"){
return login()
}
if(option==="register"){
return register()
}
exit()
})
.catch((err)=>{
console.error(err)
})
//function login
function login(){
console.clear()
console.log("kamu memilih login")
}
//function register
function register (){
console.clear()
//console.log("kamu memilih Login")
//kita masukkan inquirer disini
inquirer.prompt([
{
name : "username",
message : "Masukkan username"
},
{
name : "password",
message : "Masukkan password",
type : "password"
}
])
.then((ans)=>{
const {username, password} = ans
//masukan data ke database
db.users.create({
data : {
username : username,
password : password
}
})
.then((res)=>[
console.log("data berhasil di simpan..")
])
.catch((err)=>{
console.error(err.message)
})
})
}
function exit (){
console.clear()
console.log("Terimakasih...")
}
prisma studio bisa tambah, edit dan hapus barang item
permasalahan password kita belum di eskripsi kita bisa menggunaka bcrypt.js
npm i bcryptjs
kita buat folder baru namanya utils
//hashPassword.js
import bcrypt from "bcryptjs"
/**
*
* @param {string} password
* @returns
*/
export function hashPassword(password){
const salt = bcrypt.genSaltSync(10)
const saltPassword = bcrypt.hashSync(password, salt)
return saltPassword
}
kita import hashPassword.js ke index.js
//masukan data ke database
db.users.create({
data : {
username : username,
password : hashPassword(password)
}
})
//index.js
import inquirer from "inquirer";
import db from "./prisma/connection.js"
import {hashPassword} from './utils/hashPassword.js'
console.clear()
console.log(`
===================================
APlikasi Cli 2
===================================
`)
//kasih pilhan mau login atau mau register
inquirer.prompt([
{
name : "option",
message : "silahkan pilih : ",
type : "list",
choices : ["login", "register", "exit"]
}
])
.then((ans)=>{
//destruct option objek dari ans
const {option} = ans
//gunakan if
if(option==="login"){
return login()
}
if(option==="register"){
return register()
}
exit()
})
.catch((err)=>{
console.error(err)
})
//function login
function login(){
console.clear()
console.log("kamu memilih login")
}
//function register
function register (){
console.clear()
//console.log("kamu memilih Login")
//kita masukkan inquirer disini
inquirer.prompt([
{
name : "username",
message : "Masukkan username"
},
{
name : "password",
message : "Masukkan password",
type : "password"
}
])
.then((ans)=>{
const {username, password} = ans
//masukan data ke database
db.users.create({
data : {
username : username,
password : hashPassword(password)
}
})
.then((res)=>[
console.log("data berhasil di simpan..")
])
.catch((err)=>{
console.error(err.message)
})
})
}
function exit (){
console.clear()
console.log("Terimakasih...")
}
selesai register. selanjutnya kita akan buat login encrypt passwordnya. di hashPassword kita buat sebuah compare password karena passwordnya sudah berubah tidak seperti awal.
//hashPassword.js
import bcrypt from "bcryptjs"
/**
*
* @param {string} password
* @returns
*/
export function hashPassword(password){
const salt = bcrypt.genSaltSync(10)
const saltPassword = bcrypt.hashSync(password, salt)
return saltPassword
}
//compare password
/**
* compare password dari databse
* cara munculinnya garing bintang dua
* @param {string} inputPassword
* @param {string} dbPassword
* @returns {boolean}
*/
export function comparePassword(inputPassword, dbPassword){
return bcrypt.compareSync(inputPassword, dbPassword) //boolean
}
//index.js
import inquirer from "inquirer";
import db from "./prisma/connection.js"
import {hashPassword, comparePassword} from './utils/hashPassword.js'
console.clear()
console.log(`
===================================
APlikasi Cli 2
===================================
`)
//kasih pilhan mau login atau mau register
inquirer.prompt([
{
name : "option",
message : "silahkan pilih : ",
type : "list",
choices : ["login", "register", "exit"]
}
])
.then((ans)=>{
//destruct option objek dari ans
const {option} = ans
//gunakan if
if(option==="login"){
return login()
}
if(option==="register"){
return register()
}
exit()
})
.catch((err)=>{
console.error(err)
})
//function login
function login(){
console.clear()
//console.log("kamu memilih login") //mulai dari sini
inquirer.prompt([
{
name : 'username',
message : 'masukan username'
},
{
name : 'password',
message : 'masukkan password : ',
type : 'password'
}
])
.then(async(ans)=>{
const {username, password} = ans
const getUserData = await db.users.findUnique({
where : {
username : username
}
})
//jika username tidak ditemukan
if(!getUserData){
return console.log("username tidak ditemukan")
}
//compare passwordnya
const tryComparePassword = await comparePassword(password, getUserData.password)
//jika password tidak seusai
if(!tryComparePassword){
return console.log("password salah..")
}
//semua sesuai
console.log(`
=====================================
SELAMAT DATANG ${getUserData.username}
=====================================
`)
})
}
//function register
function register (){
console.clear()
//console.log("kamu memilih Login")
//kita masukkan inquirer disini
inquirer.prompt([
{
name : "username",
message : "Masukkan username"
},
{
name : "password",
message : "Masukkan password",
type : "password"
}
])
.then((ans)=>{
const {username, password} = ans
//masukan data ke database
db.users.create({
data : {
username : username,
password : hashPassword(password)
}
})
.then((res)=>[
console.log("data berhasil di simpan..")
])
.catch((err)=>{
console.error(err.message)
})
})
}
function exit (){
console.clear()
console.log("Terimakasih...")
}
Terimakasih.
Top comments (0)