Tuesday, 5 May 2020

NodeJS# Membuat RestFull API Dengan NodeJS

Semangat menjalankan ibadah puasa...

Postingan kali ini saya akan share sedikit pengetahuan dari hasil belajar membuat RestFull API dengan NodeJs dan MySQL. Ok langsung saja pertama kita buat project baru dengan nama node-api-mysql.

jika teman2 belum tau cara membuat project baru di NodeJs bisa lihat DISINI .
setelah selesai membuat project baru, kita perlu menambahkan beberapa library yaitu :
- mysql
- body-parser
- cors
- rootpath 
- nodemon

lalu buat file baru dengan nama server.js dan isikan source code berikut :


require('rootpath')();
const express    = require('express'),
      port       = process.env.PORT || 7000,
      bodyParser = require('body-parser'),
      cors       = require('cors'),
      basicAuth  = require('./app/auth/basic-auth'),
      routes     = require('./app/routes');
      const app = express();


app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(basicAuth);
app.use(cors());
routes(app);

app.get('/', (reqres=>{    
    res.json({'status':true,'message':'Node JS API V.01'});
})

app.listen(port);
console.log('NodeJS-API running in port : ' + port);

struktur project bisa dilihat seperti berikut :



Authentication
untuk authentication disini saya menggunakan basic auth, berikut source code pada folder auth :

- basic-auth.js

const userService = require('./user.service');

module.exports = basicAuth;

async function basicAuth(reqresnext) {
    
    if (req.path === '/users/authenticate') {
        return next();
    }

    // check basic auth
    if (!req.headers.authorization || req.headers.authorization.indexOf('Basic ') === -1) {
        const data = {
            'status' : false,
            'message' : 'You are not authorized'
        };
        return res.status(401).json(data);
    }    

    //Verifikasi auth
    const base64Credentials =  req.headers.authorization.split(' ')[1];
    const credentials = Buffer.from(base64Credentials'base64').toString('ascii');
    const [usernamepassword] = credentials.split(':');

    const user = await userService.authenticate({ usernamepassword });
    
    if (!user) {
        const data = {
            'status' : false,
            'message' : 'Invalid Authentication Credentials'
        };
        return res.status(401).json(data);
    }else{
        
    }
    
    req.user = user
    next();
}


- user.service.js 

// users hardcoded for simplicity, store in a db for production applications
const users = [
        { id: 1username: 'test'password: 'test'firstName: 'Test'lastName: 'User' },
        { id: 2username: '+6287763098298'password: '12345678'firstName: 'Test'lastName: 'User' }
    ];

const userLogin = [];    

module.exports = {
    authenticate
};

async function authenticate({ usernamepassword }) {
       const user = users.find(u => u.username === username && u.password === password);
    if (user) {
        const { password, ...userWithoutPassword } = user;
        return userWithoutPassword;
    }
}


lalu index.js yang ada didalam folder routes, nanti semua routing akan dimasukkan disini, sebagai contoh disini saya membuat satu routing yaitu siswa

'use strict';

module.exports = function(app) {
    var dataSiswa = require('../controller/masterdata/siswaController');
    
    //Route Siswa
    app.route('/siswa').get(dataSiswa.getSiswa);

    
};



Controller
di dalam controller->masterdata tambahkan siswaController.js

'use strict';

const response   = require('../../response');

exports.getSiswa = async function(reqres){
    response.ok('Data siswa'res)
};

siswaController.js ini dipanggil dari routing


tambahkan file response.js

'use strict';

exports.ok = function(valuesres) {
  var data = {
      'status': true,
      'data': values
  };
  res.json(data);
  res.end();
};

exports.error = function(messageres){
    const data = {
      'status' : false,
      'message' : message
    };
    res.json(data);
    res.end();
};
 

jika sudah coba jalankan server dengan command : nodemon server.js, maka akan terlihat seperti berikut : 

untuk mencoba API-nya jalankan menggunakan postman



klik send 

 
Jika menggunakan password atau username yang belum ada maka response-nya seperti berikut :


untuk proses pembuatan CRUD akan saya share di postingan selanjutnya.

Terimakasih :D

Monday, 10 February 2020

SAP ABAP Hyperlink


REPORT ZHPYERLINK.

WRITE 'Open in browser' HOTSPOT ON.

AT LINE-SELECTION.

  CL_GUI_FRONTEND_SERVICES=>EXECUTE(
    EXPORTING
      DOCUMENT               'https://drive.google.com/open?id=18pmIJqE2jTUoK3BCrNji9MjtYMhudG-2'
      OPERATION              'OPEN'
    EXCEPTIONS
      CNTL_ERROR             1
      ERROR_NO_GUI           2
      BAD_PARAMETER          3
      FILE_NOT_FOUND         4
      PATH_NOT_FOUND         5
      FILE_EXTENSION_UNKNOWN 6
      ERROR_EXECUTE_FAILED   7
      SYNCHRONOUS_FAILED     8
      NOT_SUPPORTED_BY_GUI   9
         ).
  IF SY-SUBRC NE 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

Friday, 24 January 2020

Belajar ReactJS Untuk Pemula Part-1

React JS merupakan javascript library yang di kembangkan oleh facebook, React JS kini semakin populer dikalangan para frontend developer, react js bersifat composable user interface dimana kita dapat membagi berbagai user interface kedalam beberapa komponen.

Kenapa Harus React JS?
1. Cepat & Efisien
proses rendering jauh lebih cepat dengan react js, karena react js memungkin kita untuk membangun virtual DOM dan menghostingnya didalam memory, dengan begitu setiap kali ada perubahan di dalam DOM aktualnya, Virtual DOM akan secara otomatis berubah seketika sehingga tidak mengganggu kinerja dari aplikasi/website.

2. Reusable
memungkinkan kita untuk menggunakan kembali sebuah komponen yang sudah kita buat.

3. Mudah dalam menulis komponen
React js memanfaat JSX yang merupakan sebuah extensi untuk javascript dimana kita dapat menuliskan kode HTML didalam javascript

Masih terdapat beberapa lagi keuntungan menggunakan React JS,, dan bisa dipelajari di beberapa sumber yang membahas React JS lebih dalam atau langsung buka dokumentasinya DISINI.


sekian sharing kali ini, penulis juga masih belajar dari awal tentang React JS :D

Tuesday, 21 January 2020

Membuat Management User Akses

Pada postingan kali ini saya akan sharing contoh pembuatan management user akses pada sebuah system / aplikasi yang kita buat, pada contoh ini ada beberapa master data yang dibutuhkan yaitu : 
- Master data user
master data user ini berisi user login (username dan password)  
- Master data role
master data ini berisi role, dimana role ini berfungsi untuk mengatur menu apa saja yang bisa di akses didalam role ini, dan nanti role ini akan di assign ke userid tertentu. 
- Master data menu
master data menu ini berisi menu-menu yang ada didalam aplikasi
- Master data grouping menu
master data grouping ini berfungsi untuk mengelompokkan menu ini masuk group apa, satu menu hanya boleh dimasukkan kedalam satu group.
- Data Assignment User to Role
data ini berisi user dan role, role apa saja yang diberikan kepada user terdapat di data ini .
- Data Assignment Menu to Role
data ini berisi menu apa saja yang ada didalam sebuah role
- Data App Assignment Menu to Menu Group 
data untuk pengelompokkan menu, misalkan menu create PO dan create PR masuk group Procurement, terus menu Terima Barang masuk ke group Logistic dst.

pada contoh ini adalah aplikasi berbasis web yang dibuat dengan salah satu framework javascript yaitu SAPUI5 mungkin terdengar asing ya :D, untuk backend menggunakan Codeignter dan database menggunakan MySQL.

ok lansung saja, untuk tampilan loginnya kurang lebih seperti gambar dibawah, disini saya login menggunakan user yang memiliki hak akses untuk melakukan management user.


halaman utama setelah login 




Create user, pilih menu create user lalu klik execute lalu akan muncul halaman create user seperti berikut : 

setelah memasukkan data user, klik tombol create yang ada dibawah, setelah klik create akan muncul informasi seperti berikut.



create role
setelah create user, selanjutnya membuat role, pada menu pilih create role lalu klik execute


isi nama role dan deskripsi lalu klik create, untuk melihat list role klik tombok display role



selanjutnya coba login dengan user baru yang sudah dibuat tadi : USER1


 
belum ada menu yang muncul, karena user blum di assign role.
List Menu
berikut adalah daftar menu yang ada didalam aplikasi yang sudah dibuat
List Menu Grouping


Master Data Menu Grouping



List Menu Grouping Assignment



Assign User Role
pilih menu Assign User to Role lalu klik execute, akan masuk ke halaman assign user to role seperti berikut :
Klik Assign dan lihat hasilnya dengan klik tombol Display user role,



Assign App Menu to Role
ini berfungsi untuk menempelkan menu kedalam sebuah role, didalam satu role bisa ditempelkan lebih dari satu menu, dan setiap user yang diberikan role tersebut akan dapat mengakses semua menu yang ada didalam role tersebut.

  
setelah itu coba login lagi dengan USER1 tadi, otomatis akan muncul menu create PR di halaman utama USER1



selanjutnya coba tambahkan menu baru kedalam role ADMROLE, 

   

ada 2 menu yang ditambahkan kedalam role ADMROLE, yaitu menu create PO dan menu Terima Barang, dan di halaman utama USER1 akan muncul seperti berikut :


kurang lebih seperti itulah salah satu cara management user akses pada sebuah aplikasi, dengan cara seperti ini bisa lebih flexible untuk mengatur akses user dalam sebuah aplikasi yang kita buat. 

sekian sharing kali ini semoga membarikan gambaran cara membuat management user akses dan semoga bermanfaat.

:D 

Saturday, 18 January 2020

Android : Belajar Kotlin Untuk Pemula Part-3


Ini adalah postingan pertama saya di tahun 2020, sudah lama tidak update tulisan di blog ini, pada postingan kali ini saya akan sharing tentang function didalam kotlin, langsung saja, pada activity main layout seperti berikut  


<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity">

    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical"        android:layout_centerInParent="true"        >

        <EditText            android:id="@+id/editText1"            android:hint="Input 1"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:inputType="number">

        </EditText>

        <EditText            android:id="@+id/editText2"            android:hint="Input 2"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:inputType="number">

        </EditText>

        <Button            android:id="@+id/btnSUM"            android:hint="+"            android:layout_width="match_parent"            android:layout_height="wrap_content">

        </Button>
    </LinearLayout>
</RelativeLayout>


Lalu pada MainActivity.kt seperti berikut  :


package com.ketik.toekang.kotlin_function

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import android.widget.Toast.*
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    
    // Deklarasi Function
    fun sumNumber(a: Int, b:Int):Int{
        return a + b
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btnSUM.setOnClickListener {            Toast.makeText(this, ""+sumNumber(editText1.text.toString().toInt(),editText2.text.toString().toInt()),
                Toast.LENGTH_SHORT).show()
        }    }
}


Jika sudah silahkan dicoba jalankan aplikasinya, sekian sharing singkat ini semoga bermanfaat.

Belajar SAP ABAP RAP

  Belajar SAP ABAP RAP: Pengenalan dan Konsep Dasar Restful ABAP Programming Model Kalau kamu seorang ABAPer yang mulai terjun ke dunia SAP...