Sabtu, 02 Juni 2018

Membuat Layanan RestFull API Codeigniter Serial Studi Kasus Perpustakaan Part 4

Halo Sobat Coding Library 

Pada Part 4 ini kita akan melakukan implementasi management transaksi di mana transaksi yang di maksud pada part ini ialah implementasi registrasi atau transaksi peminjaman buku pada layanan Web  Services Resfull API dengan Framework Codeigniter,

Kembali lagi saya ingatkan untuk teman-teman yang melihat halaman ini pada kesan pertama silahkan teman-teman kunjungi Part 1 agar dapat mengikuti proses pembuatan hingga sampai di part ke 4 ini.

Membuat Table
 
USE perpustakaan
CREATE TABLE sys_pinjam_h(
    pinjam_id varchar(20) primary key,
    pinjam_date date, 
    pinjam_sdate date, 
    pinjam_edate date,
    app_token varchar(60)
);

CREATE TABLE sys_pinjam_d(
 id int AUTO_INCREMENT PRIMARY key,
    pinjam_id varchar(20),
    books_id varchar(10),
    back_status enum('Y','N') DEFAULT 'N'
);

CREATE TABLE pinjam_temp(
  id int AUTO_INCREMENT PRIMARY key,
  books_id varchar(10),
  app_token varchar(60)
);

CREATE TABLE sys_seqno
(
  ltrno varchar(20),
  rtrno int,
  trno varchar(5)
)

Create File Helper (dalam folder helpers > global_helper.php)
<?php
 function create_id($param='', $tipe){
     $CI =& get_instance();
        $qry='SELECT COUNT(*) as hasil from sys_seqno where ltrno="'.$param.'" and trno="'.$tipe.'"';
        $query = $CI->db->query($qry);
        $row = $query->row();
         if ($row->hasil == 0) {
           $CI->db->query('INSERT INTO sys_seqno values("'.$param.'",1,"'.$tipe.'")');
        } else {

             $CI->db->query('UPDATE sys_seqno set rtrno=rtrno+1 where ltrno="'.$param.'" and trno="'.$tipe.'"');
        }

        $qry = "SELECT * FROM sys_seqno where ltrno='$param' and  trno='$tipe'";
        $query = $CI->db->query($qry);
        $rs = $query->row();
        if ($rs->rtrno < 10) {
            $ID = $param . '0000' . $rs->rtrno;
        } else if ($rs->rtrno >= 10 && $rs->rtrno <= 99) {
            $ID = $param . '000' . $rs->rtrno;
        } else if ($rs->rtrno >= 100 && $rs->rtrno <= 999) {
            $ID = $param . '00' . $rs->rtrno;
        } else if ($rs->rtrno >= 1000 && $rs->rtrno <= 9999) {
            $ID = $param . '0' . $rs->rtrno;
        }
        return $ID;
    }
 ?>

Buat Sebuah Controller (dalam folder api > Pinjam.php)

<?php
/**
 *
 */
require APPPATH . 'libraries/REST_Controller.php';
class Pinjam extends REST_Controller
{

  function __construct()
  {
    parent::__construct();
    $this->load->model('validation/model','val');
    $this->load->model('buku/buku_m','book');
    $this->load->model('pinjam/pinjam_m','pinjam');
    $this->load->helper('global');
  }

  function temp_post(){
    $id = $this->post('id');
    $token = $this->post('app_token');
    $valid = $this->val->cek_token($token);
    if ($token==""){
   $this->response(array('status'=>false,'error' =>'Invalid Aktifitas, Tidak memiliki Akses'),REST_Controller::HTTP_OK);
  }else if($valid==true){
   $this->response(array('status'=>true,'response'=>$this->pinjam->save_temp($id,$token)), REST_Controller::HTTP_OK);
  }else{
   $this->response(array('status'=>false,'error' =>'Not Found'),REST_Controller::HTTP_OK);
  }
  }
  function temp_delete(){
    $id = $this->delete('id');
    $token = $this->delete('app_token');
    $valid = $this->val->cek_token($token);
    if ($token==""){
   $this->response(array('status'=>false,'error' =>'Invalid Aktifitas, Tidak memiliki Akses'),REST_Controller::HTTP_OK);
  }else if($valid==true){
   $this->response(array('status'=>true,'response'=>$this->pinjam->delete_temp($id)), REST_Controller::HTTP_OK);
  }else{
   $this->response(array('status'=>false,'error' =>'Not Found'),REST_Controller::HTTP_OK);
  }
  }
  function save_post(){
    $pdate = $this->post('pdate');
    $psdate = $this->post('sdate');
    $pedate = $this->post('edate');
    $token = $this->post('app_token');
    $valid = $this->val->cek_token($token);
    $pinjam_id =create_id('PJ'.date('Ym'), 'PJM');
    if ($token==""){
      $this->response(array('status'=>false,'error' =>'Invalid Aktifitas, Tidak memiliki Akses'),REST_Controller::HTTP_OK);
    }else if($valid==true){
      $this->response(array('status'=>true,'response'=>$this->pinjam->save_tr_pinjam($pinjam_id, $pdate, $psdate, $pedate,$token)), REST_Controller::HTTP_OK);
    }else{
      $this->response(array('status'=>false,'error' =>'Not Found'),REST_Controller::HTTP_OK);
    }


  }
}

Buat Sebuah Model (dalam folder pinjam>Pinjam_m.php)
<?php

/**
 *
 */
class Pinjam_m extends CI_Model

{

  function __construct()
  {
    parent::__construct();
  }

  function save_temp($books_id, $token){
    $this->db->where('books_id', $books_id);
    $this->db->where('app_token', $token);
    $count = $this->db->count_all_results('pinjam_temp');
    if($count > 0){
      return "Buku Sudah Ditambahkan sebelumnya";
    }else{
          $arrayName = array('books_id' => $books_id, 'app_token' => $token);
          $this->db->insert('pinjam_temp', $arrayName);
          return "Buku Berhasil Ditambahkan";
    }
  }

  function delete_temp($id){
      $this->db->where('id',$id);
      $this->db->delete('pinjam_temp');
      return "Berhasil Dihapus";
  }

  function save_tr_pinjam($pinjam_id,$pdate, $psdate, $pedate, $token){

      $arrayName = array('pinjam_id' =>$pinjam_id ,'pinjam_date'=>$pdate,
                        'pinjam_sdate'=>$psdate, 'pinjam_edate'=>$pedate,
                        'app_token'=>$token );
      $this->db->insert('sys_pinjam_h', $arrayName);
      $this->save_detail($pinjam_id,$token);
      return "Transaksi Pinjam Berhasil";
  }
  function save_detail($p1, $p2)
  {
    $this->db->select('*')->from('pinjam_temp')->where('app_token',$p2);
    $query = $this->db->get();
    $data=array();
  if($query->num_rows() >0 ){
      foreach ($query->result() as $row) {
          $data[] = array('pinjam_id'=>$p1,
                          'books_id' => $row->books_id,
                          'back_status'=>'N');

   }
   $query->free_result();
   $this->db->insert_batch('sys_pinjam_d', $data);
      $this->deltemp($p2);
  }
  }
  function deltemp($value='')
  {
    $this->db->where('app_token',$value);
    $this->db->delete('pinjam_temp');

  }
}

Menjalan Layanan Restfull di Postman
diharapkan ikuti langkah tahapan berikut
  • Penyimpanan Temporary
   id dan app_token teman-teman sesuaikan dengan data yang di buat , disarankan masukan lebih dari satu id misalkan BK0001,BK0002, BK0003 agar lebih terasa progressnya,
 NB : Dalam pengimputan temporary tidak bisa input dua kode yang sama, jika sudah di masukkan ke temporary maka informasi yang tampil adalah "data sudah ada".
  • Menyimpan Data Transaksi
Untuk penyimpanan data transaksi asumsikan menggunakan token yang sama,  agar tidak terjadi error proses pada layanan web services Ini.


 NB: pada layanan web service ini tidak mencantumkan parameter id pinjam, karena id pinjam akan di generate secara otomatis dengan fungsi yang ada pada file global_helper.php tinggal memanggil fungsi yang ada pada file helper tersebut
dan hasilnya pada mysql akan terbentuk data peminjaman yaitu sys_pinjam_h dan sys_pinjam_d, juga pada sys_seqno yang di create melalui helper, juga akan menghapus data temporary berdasarkan app_token,


Sampai disini kita telah berhasil membuat layanan web service untuk melakukan transaksi peminjaman buku, mungkin teman-teman saya kasih PR sedikit dengan Soal sebagai berikut :
  1. Berapakah perhitungan buku setiap row atau setiap bukunya?
  2. lakukanlah update qty pada data buku di layanan webservices setelah transaksi peminjaman selesai jika anda sudah mendapatkan jawaban soal pertama.
Selamat mencoba, dan kita akan lanjutkan pada serial part selanjutnya yaitu melakukan transaksi pengembalian buku, yang nantikan akan diperhitungan telat saat pengembalian,


Jumat, 01 Juni 2018

Membuat Layanan RestFull API Codeigniter Serial Studi Kasus Perpustakaan Part 3

Kembali lagi di Coding Library,

Di Part 3 ini kita akan melakukan implementasi membuat layanan Web Services tentunya kita akan membuat tabel pada database yang sebelumnya telah kita buat. oh ya buat teman-teman yang hanya melihat halaman ini pada kesan pertama saya berharap teman-teman juga mengikuti sejak awal pembuatan atau konfigurasi RestFull API dengan Framework Codeigniter dan Library codeigniter Rest_server di Part 1  dan juga membuat authentikasi pada Part 2 dan silahkan teman-teman lanjut ke Part ini.

Baiklah teman-teman silahkan copy script membuat table berikut, namun saya menyarankan untuk mngetik langsung agar teman-teman bisa faham betul membuat table dengan script sql.

USE perpustakaan;
CREATE TABLE sys_category(
 books_cat_id varchar(5) PRIMARY KEY,
    book_cat_name varchar(30)
);
INSERT INTO sys_category VALUES('KS', 'Computer & Sains');
CREATE TABLE sys_publisher(
 publisher_id int AUTO_INCREMENT PRIMARY KEY,
    publisher_name varchar(100)
);
INSERT INTO sys_publisher VALUES(null,'BOOKS PUBLISHER');
CREATE TABLE sys_books
(
  books_id varchar(10) PRIMARY KEY,
  books_title varchar(100),
  books_cat_id varchar(5),
  books_description text,
  books_year varchar(4),
  books_qty int,
  publisher_id int 
);

Sekarang teman-teman buatkan sebuah file controller>api> dengan nama Books.php


<?php
/**
 *
 */
 require APPPATH . 'libraries/REST_Controller.php';
 class Books extends REST_Controller
 {

  function __construct()
  {
    parent::__construct();
    $this->load->model('validation/model','val');
    $this->load->model('buku/buku_m','book');

  }

  function index_get(){
    $token=$this->get('app_token');
    $id=$this->get('id');
  $valid = $this->val->cek_token($token);
  if ($token==""){
   $this->response(array('status'=>false,'error' =>'Invalid Aktifitas, Tidak memiliki Akses'),REST_Controller::HTTP_OK);
  }else if($valid==true){
   $this->response(array('status'=>true,'response'=>$this->book->get_books($id)), REST_Controller::HTTP_OK);
  }else{
   $this->response(array('status'=>false,'error' =>'Not Found'),REST_Controller::HTTP_OK);
  }
  }

  function index_post()
  {
      $books_id= $this->post('p1');
      $books_title= $this->post('p2');
      $books_cat_id= $this->post('p3');
      $books_description= $this->post('p4');
      $books_year= $this->post('p5');
      $books_qty= $this->post('p6');
      $publisher_id= $this->post('p7');
      if($books_id=="" || $books_title=="" || $books_cat_id=="" || $books_description=="" || $books_year=="" || $books_qty=="" || $publisher_id==""){
          $this->response('Mohon Lengkapi data', REST_Controller::HTTP_OK);
      }else{
          $arrayName = array('books_id' => $books_id,
                              'books_title' => $books_title,
                              'books_cat_id' => $books_cat_id,
                              'books_description' => $books_description,
                              'books_year' => $books_year,
                              'books_qty' => $books_qty,
                              'publisher_id'=> $publisher_id,
                            );
          $this->db->insert('sys_books',$arrayName);
          $this->response('Sukses', REST_Controller::HTTP_OK);
    }
  }
  function index_put()
  {
      $books_id= $this->put('p1');
      $books_title= $this->put('p2');
      $books_cat_id= $this->put('p3');
      $books_description= $this->put('p4');
      $books_year= $this->put('p5');
      $books_qty= $this->put('p6');
      $publisher_id= $this->put('p7');
      if($books_id=="" || $books_title=="" || $books_cat_id=="" || $books_description=="" || $books_year=="" || $books_qty=="" || $publisher_id==""){
          $this->response('Mohon Lengkapi data', REST_Controller::HTTP_OK);
      }else{
          $arrayName = array(
                              'books_title' => $books_title,
                              'books_cat_id' => $books_cat_id,
                              'books_description' => $books_description,
                              'books_year' => $books_year,
                              'books_qty' => $books_qty,
                              'publisher_id'=> $publisher_id,
                            );
          $this->db->where('books_id',$books_id);
          $this->db->update('sys_books',$arrayName);
          $this->response('Update Success', REST_Controller::HTTP_OK);
    }
  }

  function index_delete()
  {
      $books_id= $this->delete('p1');
      $this->db->where('books_id',$books_id);
      $delete =$this->db->delete('sys_books');
      if($delete){
          $this->response('Delete Sukses', 201);
      }else{
        $this->response('Error Delete',502);
      }
  }
}

Buat sebuah folder buku pada model dan buatkan sebuah file dengan nama Buku_m.php copy kan script model sebagai berikut :

<?php
/**
*
*/
class Buku_m extends CI_Model
{

 function __construct()
 {
  parent ::__construct();
 }
 function get_books($value='')
 {
  if($value !=''){
   $this->db->where('sys_books.books_id',$value);
  }
  $this->db->select(
'sys_books.books_id,sys_books.books_title,
sys_category.book_cat_name,sys_books.books_description,
sys_books.books_year,sys_books.books_qty,
sys_publisher.publisher_name');
  $this->db->from('sys_books');
  $this->db->join('sys_category','sys_books.books_cat_id=sys_category.books_cat_id');
  $this->db->join('sys_publisher','sys_books.publisher_id =sys_publisher.publisher_id');
  $query = $this->db->get();

  if($query->num_rows() >0 ){
   return $query->result_array();
  }

 }

}

Silahkan teman-teman melakukan registrasi buku dengan tools Postman pada controller Books.php dengan metode POST seperti pada gambar berikut ini : 
 silahkan ulangi registrasi pada postman dengan nilai p1=BK002

setelah itu kita coba uji menampilkan data dengan metode GET tanpa books_id atau parameter id seperti gambar berikut dan perlu diingatkan tanpa token user tidak bisa melihat data yang di request :
 Berikut hasil apabila kita melakukan request dengan book_id atau parameter id di Postman

sampai disini kita sudah selesai membuat Layanan Restfull API untuk proses input data buku, diharapkan teman-teman bisa melakukan hal yang sama pada data Anggota jadi pada part berikutnya kita hanya membahasa masalah transaksi Pinjam dan  Juga pengembalian Buku.

oke teman-teman selamat mencoba dan sukses selalu, 
sampai jupa di part selanjutnya