DEV Community

Cover image for Membuat starter pack project dan sistem autentikasi secara singkat menggunakan AI
dino
dino

Posted on

Membuat starter pack project dan sistem autentikasi secara singkat menggunakan AI

Dalam era teknologi saat ini, perkembangan AI berlangsung sangat pesat dan telah menjadi salah satu tren terbesar di dunia programming. Beberapa AI, seperti ChatGPT dan GitHub Copilot, telah menjadi pendamping yang sangat baik bagi programmer/developer. Teknologi ini dapat membantu dalam berbagai tugas sehari-hari, seperti merancang struktur database, memperbaiki bug, membuat fungsi yang lebih efisien, dan masih banyak lagi.

Kali ini, saya mencoba membuat sistem autentikasi dan proyek awal dengan bantuan dua tools AI, yaitu ChatGPT dan GitHub Copilot. Dengan kedua tools tersebut, proses pembuatan proyek awal dan sistem autentikasi menjadi jauh lebih cepat. Bahkan, dalam waktu singkat, saya sudah dapat membuatnya beserta unit test.

Sejauh ini, saya menggunakan TypeScript sebagai bahasa utama dalam pengembangan sistem autentikasi ini.

Tahap awal pembuatan project menggunakan github copilot

Pada tahap awal pembuatan proyek, saya menggunakan GitHub Copilot dengan prompt "buatkan starter pack untuk project Express.js dengan TypeScript." Tidak lama setelah itu, GitHub Copilot langsung membuat struktur direktori untuk proyek Express.js dengan TypeScript.

generate awal typescript

Selanjutnya, saya mengimplementasikan hasilnya ke dalam folder proyek. Beberapa folder beserta file yang diperlukan berhasil ter-generate dengan baik. Setelah itu, saya mencoba menjalankan server, dan semuanya berjalan dengan lancar.

run server awal typescript

Saya kemudian melakukan beberapa penyesuaian agar struktur proyek sesuai dengan kebutuhan.

Dengan bantuan GitHub Copilot, dalam waktu singkat saya sudah memiliki starter pack yang proper untuk membangun sistem autentikasi. Ini menghemat banyak waktu karena saya tidak perlu lagi mencari starter pack yang sesuai secara manual di GitHub—cukup dengan satu kali generate, hasilnya sudah bisa langsung digunakan.

Membuat struktur database untuk sistem autentikasi menggunakan chatgpt

Untuk membuat struktur database sistem autentikasi, saya menggunakan ChatGPT. Kenapa memilih ChatGPT? Karena saya sudah lebih terbiasa menggunakannya untuk menghasilkan struktur database. Meskipun sebenarnya, GitHub Copilot juga bisa digunakan untuk keperluan ini, jadi pemilihannya tergantung selera masing-masing.

Saya menggunakan prompt "struktur database untuk membuat API authentication," dan ChatGPT langsung menghasilkan struktur database yang dibutuhkan. Beberapa tabel yang tergenerate antara lain:

  • users
  • password_resets
  • roles
  • permissions
  • role_user
  • permission_role

schema database autentikasi

Dengan struktur database ini, kita sudah memiliki dasar yang cukup untuk membangun sistem autentikasi dengan fitur-fitur seperti:

  • Login user
  • Registrasi
  • Reset password
  • RBAC (Role-Based Access Control) untuk mengatur hak akses pengguna

Menambahkan konfigurasi database menggunakan sqlite3

sqlite database

Untuk konfigurasi database, saya menggunakan SQLite3 karena proyek ini masih sederhana. SQLite3 cukup praktis karena disimpan secara lokal, dan jika nantinya ingin dikembangkan lebih lanjut, konfigurasi database ini bisa dengan mudah dipindahkan ke sistem yang lebih proper, seperti MySQL atau PostgreSQL.

Saya menggunakan GitHub Copilot dengan prompt "tambahkan pada project ini konfigurasi database dengan SQLite3," dan secara otomatis, Copilot menghasilkan file konfigurasi serta panduan instalasi library yang dibutuhkan.

Pada tahap ini, saya diminta untuk memilih metode ORM antara Knex dan Sequelize di Node.js. Jika melihat popularitasnya di npm, Knex tampaknya lebih banyak digunakan, jadi saya memutuskan untuk memakai Knex sebagai ORM.

Selanjutnya, saya menggunakan GitHub Copilot untuk mengenerate konfigurasi migration dan seeder dengan prompt "buatkan konfigurasi migration dan seeder pada Knex." Hasilnya, file knexfile.js otomatis tergenerate dan siap diimplementasikan ke dalam folder proyek.

knex config file

Membuat migration menggunakan github copilot berdasarkan struktur database yang telah di generate

Selanjutnya, kita membuat migration menggunakan GitHub Copilot untuk mengenerate migration berdasarkan struktur database yang telah dibuat sebelumnya.

Dari hasil generate sebelumnya, ChatGPT telah menghasilkan query SQL yang bisa digunakan untuk membuat tabel-tabel yang diperlukan. Query tersebut kemudian digunakan sebagai dasar dalam prompt untuk mengenerate migration untuk setiap tabel.

Sebagai contoh, saya menggunakan prompt berikut untuk membuat migration tabel users:

buatkan migration untuk table 
--- 
CREATE TABLE users (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    email_verified_at TIMESTAMP NULL DEFAULT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Enter fullscreen mode Exit fullscreen mode

Dengan prompt ini, GitHub Copilot berhasil mengenerate file migration untuk tabel users dengan baik. Setelah itu, saya cukup menjalankan perintah knex migrate:latest, dan tabel users otomatis dibuat di database.

migration knex

Selanjutnya, saya mengimplementasikan semua query untuk dijadikan file migration. Namun, ada beberapa error yang terjadi dalam proses ini, sehingga saya perlu menyesuaikan kembali file migration agar semuanya berjalan dengan lancar.

Membuat seeder user admin

Untuk dapat login ke aplikasi, kita membutuhkan user pertama sebagai admin. Oleh karena itu, kita perlu membuat seeder menggunakan GitHub Copilot.

Proses pembuatan seeder ini mirip dengan pembuatan migration, tetapi saya ingin menambahkan role admin pada user yang dibuat. Oleh karena itu, saya menggunakan prompt berikut:

buatkan seeder untuk user dengan role admin dengan sekema sebagai berikut:
--- 
CREATE TABLE users (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    email_verified_at TIMESTAMP NULL DEFAULT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);  

CREATE TABLE roles (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);  

CREATE TABLE role_user (
    user_id BIGINT UNSIGNED NOT NULL,
    role_id BIGINT UNSIGNED NOT NULL,
    PRIMARY KEY (user_id, role_id),
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE
);
Enter fullscreen mode Exit fullscreen mode

Dengan menyertakan tabel users, roles, dan role_user dalam prompt, GitHub Copilot dapat mengenerate seeder sesuai dengan kebutuhan kita.

seeder knex

Setelah file seeder berhasil tergenerate, saya mengimplementasikannya ke dalam folder proyek dan menjalankan perintah berikut knex seed:run. Setelah perintah dieksekusi, seeder berhasil dijalankan, dan kini kita sudah memiliki user awal dengan role admin untuk login ke sistem autentikasi.

Implementasi sistem autentikasi menggunakan github copilot

Setelah database dan seeder siap, kita lanjut ke implementasi sistem autentikasi pada proyek. Untuk menjaga struktur kode yang bersih dan terorganisir, saya memutuskan untuk menggunakan repository pattern. Dengan cara ini, kita dapat memisahkan persistence logic dari controller.

Langkah pertama adalah membuat file AuthRepository di dalam folder repositories. Di dalam file AuthRepository, saya membuat fungsi login. Saya menggunakan GitHub Copilot dengan prompt "buatkan fungsi login menggunakan JWT," dan Copilot secara otomatis menghasilkan fungsi login di file AuthRepository, lengkap dengan fungsi untuk AuthController dan route.

Sebelum itu, kita perlu menginstall library JWT dan bcrypt sesuai dengan petunjuk dari GitHub Copilot.

Setelah itu, saya mengimplementasikan kode tersebut ke dalam folder proyek dan menjalankan endpoint login. Saya mencoba login menggunakan email dan password yang telah disediakan dalam seeder. Hasilnya, login berhasil dengan response token JWT yang diterima.

fungsi login repository auth

fungsi login controller auth

Dengan keberhasilan login ini, kita sudah tahu pola dasar untuk membuat fungsi lainnya, seperti reset password dan registrasi. Kita hanya perlu menggunakan prompt otomatis dari GitHub Copilot untuk menghasilkan fungsi-fungsi tersebut.

Contoh prompt untuk fitur-fitur lain:

  • Registrasi: "buatkan fungsi registrasi"
  • Reset Password:
implement reset password dengan mekanisme tabel ini
---
CREATE TABLE password_resets (
email VARCHAR(255) NOT NULL,
token VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Enter fullscreen mode Exit fullscreen mode

registrasi dan reset password fungsi

registrasi dan reset password fungsi reposory

Membuat unittest

Untuk memastikan bahwa kode yang kita tulis berjalan sesuai harapan dan tetap bekerja dengan benar setelah dilakukan perubahan atau pengembangan lebih lanjut, kita perlu membuat unit test.

Langkah pertama adalah menginstal library dan melakukan konfigurasi unit test pada proyek. Saya menggunakan GitHub Copilot dengan prompt "tambahkan unittest," dan Copilot menyarankan untuk menginstal library Jest. Setelah itu, Copilot juga otomatis mengenerate file jest.config.js yang bisa langsung kita implementasikan ke dalam folder proyek.

jest config file

Setelah konfigurasi Jest selesai, kita bisa mulai membuat unit test. Untuk membuat unit test pertama, saya menggunakan prompt "Buatkan unittest untuk fungsi login." GitHub Copilot langsung menggenerate file unit test yang sesuai dengan yang kita inginkan. Kemudian, saya mengimplementasikan file tersebut ke dalam folder proyek.

unittest fungsi login

Untuk menjalankan unit test, kita cukup menggunakan perintah jest

Jika ada error, saya sesuaikan kembali kode unit testnya dengan bantuan GitHub Copilot untuk memperbaiki masalah yang muncul. Setelah berhasil menjalankan unit test untuk fungsi login, kita dapat melanjutkan untuk membuat unit test bagi fungsi lainnya, seperti registrasi dan reset password.

Jika terjadi masalah lagi, kita bisa menggunakan file test yang sudah berhasil untuk referensi. Cukup sesuaikan dengan file test pertama dan jalankan kembali unit test-nya, seharusnya semuanya sudah berjalan dengan baik.

Kesimpulan

Pada era ini, AI sangat membantu dalam proses pengembangan sebuah proyek. Yang sebelumnya, tanpa AI, kita mungkin membutuhkan waktu berjam-jam atau bahkan berhari-hari untuk menyelesaikannya. Dengan bantuan AI, kita bisa membuat aplikasi yang proper dan dapat digunakan dalam waktu yang sangat singkat.

Namun, ada baiknya jika kita juga mengerti secara teknis mengenai kode yang dibuat oleh AI. Dengan pemahaman tersebut, kita bisa lebih mudah mengidentifikasi dan memperbaiki masalah yang mungkin muncul, sehingga proses pengembangan dapat berjalan lebih lancar dan efektif.

Top comments (0)