Modul 3 Membuat Backend Dengan Nuxt Js
Modul 3 Membuat Backend Dengan Nuxt Js
Arti perintah di atas adalah, kita akan membuat aplikasi NUXT dengan perintah
standart npx yaitu create-nuxt-app adapun nuxt-nimkalian adalah nama
folder project aplikasi kita. Jika perintah tersebut dijalankan, maka akan muncul
beberapa pertanyaan, silahkan kalian sesuaikan seperti pada tabel berikut ini:
Question Answer
Project name:
Tekan ENTER
Pilih Javascript karena kita akan menggunakan Bahasa pemprograman nya adalah
Javascript
Pilih Packet managernya yang di gunakan adalah Npm
Kita pilih UI Frameworknya adalah Bootstrap Vue, untuk di lain kesempatan kalian
bisa belajar paket UI yang lain
Template Engine yang digunakan adalah HTML
Axios merupakan library opensource yang digunakan untuk request data melalui http. Axios
terkenal dengan keunggulannya yaitu ringan, promised-based, mendukung async dan awai
untuk kode yang asinkronus. Pada Axios kita juga bisa intercept dan membatalkan request.
Axios sangat mudah digunakan.
Linting Tools dengan enter saja
Untuk memilih ini kita harus terlebih dahulu mengintall node.js atau kalo di hosting
cari hosting yang sudah menyediakan node.js
Tidak semua hosting menyediakan node.js
Jalankan lagi
Daftar Module
Setelah proses installasi berhasil, langkah selanjutnya adalah melakukan konfigurasi
kedalam nuxt dengan menambahkan beberapa module untuk kebutuhan aplikasi
kita, berikut daftar module yang akan kita tambahkan:
Module untuk
mempermudah
1. dalam pembuatan
Nuxt Auth https://auth.nuxtjs.org/
sebuah Auth atau
otentikasi di dalam
aplikasi Nuxt.js.
Module untuk
membuat multi atau
Nuxt https://github.com/spektrummedia/nuxt-
2. single select
MultiSelect vue-multiselect
dropdown di Vue Js
dengan mudah.
NO. Module URL KETERANGAN
Module untuk
Sweet
3. https://github.com/avil13/vue-sweetalert membuat alert lebih
Alert2
mudah dan baik.
Module untuk
menampilkan text
CKEDITOR https://github.com/blowstack/ckeditor- editor, yang akan kita
4.
Nuxt nuxt gunakan untuk
menulis sebuah
konten artikel.
Jika proses pemasangan module sudah selesai, silahkan buka file yang
bernama nuxt.config.js kemudian rubah meenjadi seperti berikut ini:
modules: [
// https://go.nuxtjs.dev/bootstrap
'bootstrap-vue/nuxt',
// https://go.nuxtjs.dev/axios
'@nuxtjs/axios',
//https://auth.nuxtjs.org/
'@nuxtjs/auth-next',
],
Kemudian tambahkan baris kode dibawah ini tepat dibawah konfigurasi di atas:
auth: {
strategies: {
local: {
token: {
property: 'token',
required: true,
type: 'Bearer'
},
user: {
property: 'user',
// autoFetch: true
},
endpoints: {
login: {
url: '/api/admin/login',
method: 'post'
},
logout: {
url: '/api/admin/logout',
method: 'post'
},
user: {
url: '/api/admin/user',
method: 'get'
}
}
}
},
redirect: {
login: '/',
logout: '/',
callback: '/',
home: '/admin/dashboard'
}
},
Dari penambahan jenis strategi otentikasi di atas, kita fokus pada bagian endpoints,
dimana di dalamnya terdapat beberapa konfigurasi, yaitu :
ENDPOINT /
NAMA METHOD KETERANGAN
URL
callback /login
Silahkan tunggu proses installasinya sampai selesai. Dan disini kita tidak perlu
melakukan konfigurasi di dalam file nuxt.config.js, karena nantinya kita akan
langsung panggil module tersebut di dalam component yang membutuhkannya.
Admin-Lte
Integrasi CSS &Js
Pada langkah kali ini, kita akan melakukan customisasi template dashboard. Disini
kami menggunakan template Admin-lte, AdminLTE adalah salah satu template
yang sering digunakan oleh web developer sebagai template backend pada
proyek yang sering dikerjakan. Jadi Admin LTE ini adalah sebuah dashboard
Administrator yang dibuat menggunakan framework bootstrap yang merupakan
framework css yang paling banyak digunakan.
langsung saja kita lakukan integrasi Admin-lte ke dalam project nuxt kita. Silahkan
kalian unduh asset yang akan di gunakan pada dashboard kita melalui tautan berikut
ini:
https://github.com/saintnetarf/admin-lte
Silahkan download file tersebut, maka kita akan mendapati dua folder dengan nama
css dan js:
1. CSS
Silahkan kalian buat folder baru bernama assets didalam root folder project kita/
sejajar dengan file nuxt.config.js, dan letakkan folder css kedalam
folder assets yang baru saja kita buat. Maka akan menjadi seperti dibawah ini:
2. JS
Langsung saja kita tempatkan folder js yang kita download sebelumnya ke dalam
folder static. Maka akan menjadi seperti dibawah ini:
Konfigurasi CSS&Js
Langkah terakhir adalah melakukan konfigurasi folder css dan js tersebut kedalam
file nuxt.config.js.
Dari perubahan kode di atas, kita menambahkan array script, yang mana di dalanya
kita memanggil 3 file JavaScript yang berada di dalam folder static/js, ketiga file
tersebut adalah :
/js/jquery/jquery.min.js
/js/bootstrap/js/bootstrap.bundle.min.js
/js/adminlte.min.js
Sekarang untuk integrasi asset JavaScript sudah selesai, dan kita akan lanjutkan
untuk integrasi asset CSS-nya. Masih di file yang sama yaitu nuxt.config.js,
silahkan cari kode berikut ini :
css: [
],
Di atas kita menambahkan 2 file CSS dari folder assets/css, kedua file tersebut
adalah :
/css/fontawesome-free/css/all.min.css
/css/adminlte.min.css
Sampai disini maka kita sudah berhasil melakukan integrasi file-file assets dari
template dashboard AdminLTE3 di dalam project Nuxt.js. Sampai disini, maka
keseluruhan isi dari file nuxt.config.js seperti ini lengkapnya:
export default {
// Target Deployment
target: 'server',
// SSR
ssr: true,
// Modules: https://go.nuxtjs.dev/config-modules
modules: [
// https://go.nuxtjs.dev/bootstrap
'bootstrap-vue/nuxt',
// https://go.nuxtjs.dev/axios
'@nuxtjs/axios',
//https://auth.nuxtjs.org/
'@nuxtjs/auth-next',
//https://github.com/spektrummedia/nuxt-vue-multiselect
'nuxt-multiselect',
//https://github.com/avil13/vue-sweetalert2
'vue-sweetalert2/nuxt',
],
auth: {
strategies: {
local: {
token: {
property: 'token',
required: true,
type: 'Bearer'
},
user: {
property: 'user',
// autoFetch: true
},
endpoints: {
login: {
url: '/api/admin/login',
method: 'post'
},
logout: {
url: '/api/admin/logout',
method: 'post'
},
user: {
url: '/api/admin/user',
method: 'get'
}
}
}
},
redirect: {
login: '/',
logout: '/',
callback: '/',
home: '/admin/dashboard'
}
},
Sampai saat ini, kita sudah berhasil menambahkan & konfigurasi beberapa module
ke dalam project nuxt kita.
Note:
Pertama kita akan membuat layout terlebih dahulu, layout ini digunakan untuk
induk template dari halaman view login nantinya. Silahkan buat folder baru dengan
nama layouts pada root project, kemudian di dalam folder tersebut silahkan
buat file baru dengan nama auth.vue dan masukkan kode berikut ini di dalamnya.
<template>
<div class="hold-transition login-page">
<div class="login-box">
<!-- /.login-logo -->
<Nuxt />
<!-- /.card -->
</div>
</div>
</template>
<script>
export default {
//middleware auth
middleware: 'auth',
}
</script>
<style>
body {
font-family: 'Quicksand', sans-serif;
}
.login-page {
background-color: #ccdcec !important;
}
.card-info.card-outline {
border-top: 3px solid #186399;
}
.btn-info {
color: #fff;
background-color: #186399;
border-color: #186399;
box-shadow: none;
}
.btn-info:hover {
color: #fff;
background-color: #12466B;
border-color: #12466B;
box-shadow: none;
}
</style>
Di dalam template, kita menambahkan kode <Nuxt />, dimana kode tersebut akan
digunakan untuk merender sebuah view yang akan menggunakan layout ini.
Langkah berikutnya adalah membuat sebuah view atau component yang akan kita
gunakan untuk proses autentikasi. Silahkan buat file baru dengan
nama index.vue dan lettakkan file tersebut didalam folder pages, kemudian edit
menggunakan code editor file tersebut lalu tempelkan kode berikut ini kedalam file
tersebut
<template>
<div class="card card-outline card-info">
<div class="card-header text-center">
<nuxt-link to="/" class="h1 font-weight-bold text-dark">SIDESA</nuxt-link>
<div><i>SISTEM INFORMASI DESA</i></div>
</div>
<div class="card-body">
<div v-if="validation.message" class="mt-2">
<b-alert show variant="danger">{{ validation.message }}</b-alert>
</div>
<form @submit.prevent="login">
<div class="form-group">
<label class="font-weight-bold text-uppercase">Email address</label>
<input type="email" v-model="user.email" :class="{ 'is-invalid':
validation.email }" class="form-control"
placeholder="Masukkan Alamat Email">
</div>
<div v-if="validation.email" class="mt-2">
<b-alert show variant="danger">{{ validation.email[0] }}</b-alert>
</div>
<div class="form-group">
<label class="font-weight-bold text-uppercase">Password</label>
<input type="password" v-model="user.password" :class="{ 'is-invalid':
validation.password }"
class="form-control" placeholder="Masukkan Password">
</div>
<div v-if="validation.password" class="mt-2">
<b-alert show variant="danger">{{ validation.password[0] }}</b-alert>
</div>
<script>
export default {
//layout
layout: 'auth',
//meta
head() {
return {
title: 'Login | Prodi TI - Sistem Informasi Desa',
}
},
data() {
return {
//state user
user: {
email: '',
password: '',
},
//validation
validation: []
}
},
methods: {
async login() {
await this.$auth.loginWith('local', {
data: {
email: this.user.email,
password: this.user.password
}
})
.then(() => {
//redirect
this.$router.push({
name: 'admin-dashboard'
})
})
.catch(error => {
//assign validation
this.validation = error.response.data
})
}
}
</script>
<style>
</style>
Untuk state user kita jadikan sebuah array, yang di dalamnya memiliki 2 key lagi,
yaitu email dan password. State ini akan kita gunakan untuk menampung isi data yang
dikirm melalui input form. Sedangkan untuk state validation akan kita gunakan untuk
menampung sebuah response error validasi yang di dapatkan dari Rest API.
kemudian kita membuat sebuah method yang bernama login dan di dalamnya kita
melakukan sebuah proses auentikasi menggunakan module nuxt auth.
await this.$auth.loginWith('local', {
data: {
email: this.user.email,
password: this.user.password
}
})
Jika dari proses aurtentikasi di atas berhasil, maka kita akan melakukan redirect ke
dalam sebuah route yang bernama admin-dashboard.
.then(() => {
//redirect
this.$router.push({
name: 'admin-dashboard'
})
})
Tapi jika proses autentikasi di atas gagal, maka kita akan melakukan assign
response dari Rest API ke dalam state validation.
//assign validation
this.validation = error.response.data
Di dalam template, untuk form action kita arahkan ke dalam method yang
bernama login, dimana method tersebut yang sudah kita buat di atas.
<form @submit.prevent="login">
//...
</form>
Input Email
<input type="email" v-model="user.email" :class="{ 'is-invalid': validation.email
}" class="form-control" placeholder="Masukkan Alamat Email">
Input Password
<input type="password" v-model="user.password" :class="{ 'is-invalid':
validation.password }" class="form-control" placeholder="Masukkan Password">
Untuk menampilkan error validasi, kita bisa dengan seperti berikut ini :
<div v-if="validation.email" class="mt-2">
<b-alert show variant="danger">{{ validation.email[0] }}</b-alert>
</div>
{{ validation.password[0] }}
Slicing Layout Dashboard
Slicing header Component
Tujuan slicing adalah agar mempermudah dalam pemanggilan component yang
akan digunakan secara berulang-ulang didalam beberapa page, dalam hal ini kita
akan membagi dua component yaitu, component header dan component sidebar.
Oke kita mulai dengan slicing header component. Silahkan buat folder baru dengan
nama admin di dalam folder components dan di dalam folder admin tersebut silahkan
buat file baru dengan nama header.vue, kemudian masukkan kode berikut ke-dalam
file header.vue:
<template>
<nav class="main-header navbar navbar-expand navbar-white navbar-light">
<!-- Left navbar links -->
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i
class="fas fa-bars"></i></a>
</li>
</ul>
<script>
export default {
computed: {
user() {
return this.$auth.user
}
},
methods: {
async logout() {
//logout auth
await this.$auth.logout()
}
}
</script>
<style>
</style>
yang perlu difahami dalam listing code diatas adalah, kita membuat sebuah
properti computed, yang mana di dalamnya bertujuan untuk mendapatkan
data user yang sedang login.
computed: {
user() {
return this.$auth.user
}
},
Dan di dalam method logout ini kita melakukan destroy data user yang
sedang login menggunakan kode berikut ini :
//logout auth
await this.$auth.logout()
Jika proses logout berhasil, maka kita kembalikan ke dalam route login atau ke
halaman page login.
//redirect route login
this.$router.push({
name: 'login'
})
Slicing SidebarComponent
Sidebar adalah kolom atau space yang berada di area samping konten website,
space ini akan kita gunakan untuk menampilkan daftar menu yang terdapat didalam
aplikasi back-end kita nantinya seperti menu ,Dashboard, Data Post, Data
Comment, Dan lain sebagainya. Silahkan kalian buat sebuah file dengan
nama sidebar.vue, file ini terletak didalam folder components/admin. Masukkan baris
kode berikut ke dalam file sidebar.vue yang baru saja dibuat.
<template>
<!-- Sidebar Menu -->
<nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview"
role="menu" data-accordion="false">
<li class="nav-item">
<nuxt-link :to="{ name: 'admin-dashboard' }" class="nav-link">
<i class="nav-icon fas fa-tachometer-alt"></i>
<p>
Dashboard
</p>
</nuxt-link>
</li>
<li class="nav-header">
<h6>CONTENT</h6>
</li>
<li class="nav-item">
<nuxt-link :to="{ name: 'admin-category' }" class="nav-link">
<i class="nav-icon fas fa-tags"></i>
<p>
Categories
</p>
</nuxt-link>
</li>
<li class="nav-item">
<nuxt-link :to="{ name: 'admin-post' }" class="nav-link">
<i class="nav-icon fas fa-book-open"></i>
<p>
Posts
</p>
</nuxt-link>
</li>
<li class="nav-item">
<nuxt-link :to="{ name: 'admin-saran' }" class="nav-link">
<i class="nav-icon fas fa-bacon"></i>
<p>
Saran
</p>
</nuxt-link>
</li>
<li class="nav-header">
<h6>SETTING</h6>
</li>
<li class="nav-item">
<nuxt-link :to="{ name: 'admin-user' }" class="nav-link">
<i class="nav-icon fas fa-users"></i>
<p>
Users
</p>
</nuxt-link>
</li>
<li class="nav-item">
<nuxt-link :to="{ name: 'admin-profile' }" class="nav-link">
<i class="nav-icon fas fa-book-open"></i>
<p>
Set Profile Group
</p>
</nuxt-link>
</li>
<li class="nav-item">
<nuxt-link :to="{ name: 'admin-informasi' }" class="nav-link">
<i class="nav-icon fas fa-book-open"></i>
<p>
Set Informasi Group
</p>
</nuxt-link>
</li>
<li class="nav-item">
<nuxt-link :to="{ name: 'admin-statistik' }" class="nav-link">
<i class="nav-icon fas fa-book-open"></i>
<p>
Set Statistik Group
</p>
</nuxt-link>
</li>
</ul>
</nav>
<!-- /.sidebar-menu -->
</template>
<script>
export default {
}
</script>
<style scoped>
a.nuxt-link-active {
background-color: rgba(255, 255, 255, .1);
}
</style>
Yang perlu diperhatikan adalah pada baris <nuxt-link :to="{ name: 'admin-
informasi' }" class="nav-link"> kita akan melakukan routing, dimana ketika button
dengan nama Set Informasi Group kita klik, maka kita akan dialihkan ke halaman
pengaturan Informasi, dalam hal ini akan kita bahas pada sesi berikutnya.
Set Admin Page
Setelah berhasil membuat component Header dan juga Sidebar, sekarang kita
lanjutkan membuat layout untuk halaman admin. Pada langkah ini, kita akan
memanggil kedua component tersebut dengan menggunakan syntax berikut :
<script>
import Header from '@/components/admin/header.vue'
import Sidebar from '@/components/admin/sidebar.vue'
export default {
//middleware auth
middleware: 'auth',
components: {
Header,
Sidebar
}
}
</script>
Silahkan kalian buat file baru dengan nama admin.vue di dalam folder layouts,
setelah itu masukkan kode berikut ini:
<template>
<footer class="main-footer">
<div class="float-right d-none d-sm-block">
<b>Version</b> 0.0.1
</div>
<strong>Copyright © 2022 - Prodi TI Poliban.</strong> All rights
reserved.
</footer>
<aside class="control-sidebar control-sidebar-dark">
</aside>
</div>
</div>
</template>
<script>
import Header from '@/components/admin/header.vue'
import Sidebar from '@/components/admin/sidebar.vue'
export default {
//middleware auth
middleware: 'auth',
components: {
Header,
Sidebar
}
}
</script>
<style>
.wrapper,
.content-wrapper {
background-color: #ccdcec !important;
}
</style>
Sampai pada langkah kali ini, kita sudah berhasil membuat beberapa slicing
page yang akan di gunakan secara berkelanjutan didalam
beberapa page berikutnya.
Note:
Dashboard
Layout Main Dashboard
Main dashboard disini berfungsi sebagai halaman utama ketika user sudah berhasil
login, maka akan dialihkan kedalam halaman ini, halaman ini akan menampilkan
data statistik seperti jumlah user, jumlah post, jumlah komentar, dan juga jumlah
saran yang masuk. Pertama, silahkan buat folder baru dengan nama admin di
dalam folder pages dan di dalam folder admin silahkan buat folder baru lagi dengan
nama dashboard, setelah itu silahkan buat file di dalamnya dengan nama index.vue,
silahkan buka file tersebut, kemudian masukkan kode berikut ini :
<template>
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<section class="content-header">
<div class="container-fluid">
</div>
</section>
<section class="content">
<div class="row">
<div class="col-md-3 col-sm-6 col-12">
<div class="info-box">
<span class="info-box-icon bg-info"><i class="fa fa-users"></i></span>
<div class="info-box-content">
<span class="info-box-text">USERS</span>
<span>
<hr>
</span>
<span class="info-box-number">{{ users }}</span>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 col-12">
<div class="info-box">
<span class="info-box-icon bg-success"><i class="fa fa-
folder"></i></span>
<div class="info-box-content">
<span class="info-box-text">CATEGORIES</span>
<span>
<hr>
</span>
<span class="info-box-number">{{ categories }}</span>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 col-12">
<div class="info-box">
<span class="info-box-icon bg-primary"><i class="fa fa-book-
open"></i></span>
<div class="info-box-content">
<span class="info-box-text">POSTS</span>
<span>
<hr>
</span>
<span class="info-box-number">{{ posts }}</span>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 col-12">
<div class="info-box">
<span class="info-box-icon bg-danger"><i class="fa fa-
comments"></i></span>
<div class="info-box-content">
<span class="info-box-text">COMMENTS</span>
<span>
<hr>
</span>
<span class="info-box-number">{{ comments }}</span>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 col-12">
<div class="info-box">
<span class="info-box-icon bg-danger"><i class="fa fa-
comment"></i></span>
<div class="info-box-content">
<span class="info-box-text">SARAN MASUK</span>
<span>
<hr>
</span>
<span class="info-box-number">{{ sarans }}</span>
</div>
</div>
</div>
</div>
</section>
</div>
</template>
<script>
export default {
//layout
layout: 'admin',
//meta
head() {
return {
title: 'Dashboard - Android Corners - Sistem Informasi Desa',
}
},
//fetching dashboard
const dashboard = await $axios.$get('/api/admin/dashboard')
return {
'users': dashboard.data.users,
'posts': dashboard.data.posts,
'categories': dashboard.data.categories,
'comments': dashboard.data.comments,
'sarans': dashboard.data.sarans,
}
},
}
</script>
<style>
</style>
pada listing kode diatas, kita menggunakan beberapa components pendukung yang
sudah disediakan oleh bootstrap yaitu font awesome. Library ini berfungsi untuk
mempermudah dalam membuat sebuah icon hanya cukup menambahkan masing-
masing code icons yang hendak digunakan, seperti contoh kita akan menggunakan
icons user, maka cukup memasukkan syntax fa fa-users ke dalam class tersebut.
Kemudian berbicara tentang tag script pada kode baris diatas adalah, pertama kita
melakukan export halaman admin yang sudah kita buat sebelumnya, yang
mana page ini sudah include pada dua components sebelumnya
yaitu component header dan juga component sidebar, ini lah salah satu keuntungan
dalam melakukan slicing component yang bersifat re-usable .
didalam hook asyncData kita melakukan fetching data ke-dalam sebuah Restful API
yang sudah kita buat melalui laravel sebelumnya
dengan endpoint /api/admin/dashboard menggunakan Axios dengan method GET.
//fetching dashboard
const dashboard = await $axios.$get('/api/admin/dashboard')
Kemudian kita return dengan menjadikan beberapa key, yang mana isinya di
dapatkan dari hasil response Rest API dashboard kita sebelumnya yang didalam
Rest APi tersebut terdapat function count, kemudian kita re-presentasikan data itu ke
dalam page dashboard.
return {
'users': dashboard.data.users,
'posts': dashboard.data.posts,
'categories': dashboard.data.categories,
'comments': dashboard.data.comments,
'sarans': dashboard.data.sarans,
}
Setelah itu, kita cukup memanggil nama key yang ada di dalam return tersebut ke
dalam layout dashboard template.
<span class="info-box-number">{{ users }}</span>
<span class="info-box-number">{{ categories }}</span>
<span class="info-box-number">{{ posts }}</span>
<span class="info-box-number">{{ comments }}</span>
<span class="info-box-number">{{ sarans }}</span>
1. jalankan server, disini kami menggunakan Xampp, pastikan mysql dalam keadaan
on, karena dalam prosesnya kita akan melakukan koneksi dengan database
2. Masuk pada direktori project laravel, kemudian ketik perintah php artisan
serve untuk menjalankan laravel kita untuk kebutuhan RESTFUL API agar bisa di
konsumsi oleh nuxt js.
3. masuk pada direktori nuxt project kemudian buka melalui terminal/cmd/Git masukkan
perintah npm run start untuk menjalankan aplikasi kita, secara default kita bisa
melihat project kita melalui http//localhost:3000/.
Jika muncul error seperti ini
-- --------------------------------------------------------
-- Host: 127.0.0.1
-- --------------------------------------------------------
INSERT INTO `categories` (`id`, `image`, `name`, `slug`, `created_at`, `updated_at`) VALUES
INSERT INTO `comments` (`id`, `post_id`, `name`, `email`, `comment`, `created_at`, `updated_at`) VALUES
INSERT INTO `informasis` (`id`, `image`, `title`, `content`, `created_at`, `updated_at`) VALUES
INSERT INTO `posts` (`id`, `title`, `slug`, `category_id`, `user_id`, `content`, `image`, `description`, `created_at`,
`updated_at`) VALUES
(6, 'Kesehatan Adalah Segalanya', 'kesehatan-adalah-segalanya', 3, 1, 'Badan sehat jiwa sehat itu yang
kami inginkan', 'yhJmToPQhWpASP2YvdUq70bcwro7aGwogF3w8d21.jpg', 'Cara sehat dengan sederhana',
'2022-07-29 00:02:14', '2022-07-29 00:02:14'),
(7, 'Cara Buat Roti Pisang Cokelat Keju, Enak dan Empuk', 'cara-buat-roti-pisang-cokelat-keju-enak-
dan-empuk', 8, 1, '<p>Cara Buat Roti Pisang Cokelat Keju, Enak dan Empuk</p>',
'bxSCwR3EPckf2h14nN4nXhOp2KRyuCHl2WYsd5ce.jpg', 'Cara Buat Roti Pisang Cokelat Keju, Enak dan Empuk',
'2022-07-29 00:21:35', '2022-11-18 01:49:11'),
(8, 'Pembangunan irigasi Desa', 'pembangunan-irigasi-desa', 2, 1, 'Salah satu updaya kami dalam
menangani banjir yang terjadi di beberapa titik desa adalah akan melakukan proses pemetaan saluran irigasi
desa,\nhal ini bertujuan agar keluar masuk air di dalam pemukiman warga bisa terkendali dan hal ini akan
meminimalisir terjadinya banjir', 'mKTXlMFWQeP2idFnKSc59e2AX57Xpx22HuZXIe2B.jpg', 'Pemetaan Lokasi
Saluran Air', '2022-08-15 10:16:07', '2022-08-15 10:16:07'),
(9, 'Program Ekonomi Desa', 'program-ekonomi-desa', 7, 1, 'Beberapa sumber pangan yang terdapat
di desa Sidomulyo adalah sebagai berikut\n<br>\n1) Bertani di Ladang Sawah\n<br>\n2) Berkebun\n<br>\n3)
Bercocok Tanam\n<br>\n4) Berjualan\n<br>\n5) Peternakan\n<br>\n6) Pertanian\n<br>\n7)
Perikanan\n<br>\n\nKami akan berusaha memberikan beberapa penyuluhan terhadap Masyarakat desa
sidomulyo melalui \nbeberapa pertemuan(Seminar Desa) untuk meningkatkan SDM desa Sidomulyo',
'bnrjElYsOcqjF9fSQ33B52OWAOocexiFv6FJBVoF.jpg', 'Dongkrak Ekonomi Desa agar Maju', '2022-08-15
10:21:30', '2022-08-15 10:21:30'),
(10, 'Tahlil Kubro', 'tahlil-kubro', 4, 1, 'Bp. Imam Siswanto ikut serta dalam acara Tahlil Kubro yang
didalamnya terdapat beberapa rangkaian acara, diantara nya adalah acara santunan anak yatim\nacara ini
termasuk acara rutin desa, dimana dilakukan satu tahun satu kali tepatnya pada bulan Suro (Muharram)',
'fgS7CM85rPtXQ5dG1Giscn4CzjrdINmfLwCylkWc.png', 'Acara rutinan pada bulan Suro', '2022-08-15 10:28:19',
'2022-08-15 10:28:19'),
(11, 'Jaga Desa', 'jaga-desa', 6, 1, '<p>Kami membuka ruang lebar untuk setiap warga ketika hendak
melakukan penjagaan terhadap desa, dengan tujuan agar kemanan desa tetap terjaga</p>',
'fgxEKPJTxHlYIUm0XPtUN5DBLOuRd8JrGWWLgZSs.jpg', 'Keamanan Desa, Harus di Utamakan!', '2022-08-15
10:31:57', '2022-11-18 01:49:53'),
(13, 'Posyandu Desa', 'posyandu-desa', 3, 1, 'Posyandu adalah jenis pelayanan kepada anak berupa
penimbangan untuk memantau pertumbuhan anak. Manfaat Posyandu ialah memberikan layanan kesehatan
ibu dan anak, KB, imunisasi, gizi, dan penanggulangan diare.\n<br>\n1. Penimbangan Balita: Penimbangan
balita dilakukan tiap bulan di posyandu. Penimbangan secara rutin di posyandu untuk pemantauan
pertumbuhan dan mendeteksi sedini mungkin penyimpangan pertumbuhan balita. Dari penimbangan yang
kemudian dicatat di KMS, dari data tersebut dapat diketahui status pertumbuhan balita, apabila
penyelenggaraan posyandu baik maka upaya untuk pemenuhan dasar pertumbuhan anak akan baik
pula.\n<br>\nKMS adalah kartu untuk mencatat dan memantau pekembangan balita dengan melihat garis
pertumbuhan berat badan anak dari bulan ke bulan. Pada KMS dapat diketahui status pertumbuhan
anaknya.\n<br>\n2. Imunisasi \nDi posyandu balita akan mendapatkan layanan imunisasi. \nMacam imunisasi
yang diberikan di posyandu adalah \n- BCG untuk mencegah penyakit TBC.\n- DPT untuk mencegah penyakit
difteri, pertusis (batuk rejan), tetanus.\n- Polio untuk mencegah penyakit kelumpuhan.\n- Hepatitis B untuk
mencegah penyakit hepatitis B (penyakit kuning).\n<br>\n3. Peningkatan Gizi \nDengan adanya posyandu
yang sasaran utamanya bayi dan balita, sangat tepat untuk meningkatkan gizi balita. Peningkatan gizi balita di
posyandu yang dilakukan oleh kader berupa memberikan penyuluhan tentang ASI, status gizi balita, MPASI,
Imunisasi, Vitamin A, stimulasi tumbuh kembang anak, diare pada balita.\n<br>\n4. Penanggulangan diare
\nPenyediaan oralit di posyandu. Melakukan rujukan pada penderita diare yang menunjukan tanda bahaya di
Puskesmas. Memberikan penyuluhan penggulangan diare oleh kader posyandu.',
'lG28jJvTKwUTkTfpPpaGrSndpuJzw1pAYYU2g639.jpg', 'Tingkatkan Kesehatan Warga', '2022-08-15 10:36:38',
'2022-08-15 10:36:38'),
(14, 'Kotak Saran', 'kotak-saran', 1, 1, 'Dengan adanya fitur ini, kami sangat memberikan luang bagi
setiap warga untuk mengusulkan bebrapa gagasan dengan tujuan agar desa bisa berbenah dan menuju desa
maju dan mandiri', 'qjYqtlHAhokhzGVnLvvZj1An22T1TqGikyjBqUHg.jpg', 'Warga bebas mengirim Kritik Dan
Saran', '2022-08-15 10:39:25', '2022-08-15 10:39:25'),
INSERT INTO `profils` (`id`, `image`, `title`, `content`, `created_at`, `updated_at`) VALUES
(9, 'Prodi TI', 'test kirim saran', '2022-11-18 07:34:43', '2022-11-18 07:34:43'),
(13, 'Arifin Noor Asyikin', 'Semangat belajar coodingnya', '2022-12-25 06:36:47', '2022-12-25
06:36:47');
INSERT INTO `users` (`id`, `name`, `email`, `email_verified_at`, `password`, `remember_token`, `created_at`,
`updated_at`) VALUES
(1, 'Teknik Informatika', '[email protected]', NULL,
'$2y$10$7aF3qBmU7CL1AXoypW.VMe90e0tzq2BDUGWpu.yXeBFgW1Oqnz4fS', NULL, NULL, NULL),