Skip to content

Latest commit

 

History

History
214 lines (171 loc) · 5.84 KB

File metadata and controls

214 lines (171 loc) · 5.84 KB

Master Karyawan REST API

Aplikasi REST API untuk manajemen data karyawan dan jabatan menggunakan Spring Boot, MySQL, dan Hibernate dengan HQL.

Teknologi yang Digunakan

  • Java 24
  • Spring Boot 3.5.3
  • Spring Data JPA dengan Hibernate
  • MySQL Database
  • Lombok
  • Maven

Fitur

  • CRUD operasi untuk data karyawan dan jabatan
  • Pencarian karyawan berdasarkan nama, jabatan, gender, dan nomor induk
  • Pencarian jabatan berdasarkan kode dan nama
  • Semua query menggunakan HQL (Hibernate Query Language)
  • Format respons API yang konsisten
  • Penanganan kesalahan yang baik
  • Soft delete untuk data karyawan dan jabatan

Struktur Database

Aplikasi ini menggunakan dua tabel utama:

Tabel T1_POSITION

Field Tipe Data Keterangan
ID NUMBER Primary Key, Auto Increment
CODE VARCHAR(50) Kode jabatan
NAME VARCHAR(100) Nama jabatan
IS_DELETE NUMBER Flag untuk soft delete (1: dihapus, 0: aktif)

Tabel T2_EMPLOYEE

Field Tipe Data Keterangan
ID NUMBER Primary Key, Auto Increment
NAME VARCHAR(100) Nama karyawan
BIRTH_DATE DATE Tanggal lahir karyawan
POSITION_ID NUMBER Foreign Key ke tabel T1_POSITION
ID_NUMBER NUMBER Nomor induk pegawai
GENDER NUMBER Jenis kelamin (1: Pria, 2: Wanita)
IS_DELETE NUMBER Flag untuk soft delete (1: dihapus, 0: aktif)

Struktur Proyek

Proyek ini mengikuti arsitektur MVC (Model-View-Controller):

  • Model: Representasi data dan logika bisnis
  • Repository: Akses data menggunakan HQL
  • Service: Logika bisnis dan transaksi
  • Controller: Endpoint API REST

Setup Database

  1. Buat database MySQL dengan nama master_karyawan
  2. Konfigurasi koneksi database di application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/master_karyawan
spring.datasource.username=root
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.format_sql=true
spring.sql.init.mode=always
spring.jpa.defer-datasource-initialization=true

Menjalankan Aplikasi

  1. Clone repositori
  2. Pastikan MySQL server berjalan
  3. Build dan jalankan aplikasi:
mvn clean install
mvn spring-boot:run

Aplikasi akan berjalan di http://localhost:8080

API Endpoints

Karyawan API

Metode URL Deskripsi
GET /api/karyawan Mendapatkan semua karyawan aktif
GET /api/karyawan/{id} Mendapatkan karyawan berdasarkan ID
GET /api/karyawan/search/name?name={name} Mencari karyawan berdasarkan nama
GET /api/karyawan/search/position?positionId={positionId} Mencari karyawan berdasarkan ID jabatan
GET /api/karyawan/search/gender?gender={gender} Mencari karyawan berdasarkan gender (1: Pria, 2: Wanita)
GET /api/karyawan/search/idNumber?idNumber={idNumber} Mencari karyawan berdasarkan nomor induk
POST /api/karyawan Membuat karyawan baru
PUT /api/karyawan/{id} Mengupdate karyawan yang ada
DELETE /api/karyawan/{id} Menghapus karyawan (soft delete)

Jabatan API

Metode URL Deskripsi
GET /api/positions Mendapatkan semua jabatan aktif
GET /api/positions/{id} Mendapatkan jabatan berdasarkan ID
GET /api/positions/code/{code} Mendapatkan jabatan berdasarkan kode
GET /api/positions/search?name={name} Mencari jabatan berdasarkan nama
POST /api/positions Membuat jabatan baru
PUT /api/positions/{id} Mengupdate jabatan yang ada
DELETE /api/positions/{id} Menghapus jabatan (soft delete)

Format Request dan Response

Format Request

Contoh Request untuk Membuat Karyawan Baru (POST /api/karyawan)

{
  "name": "John Doe",
  "birthDate": "1990-01-01",
  "position": {
    "id": 1
  },
  "idNumber": 12345678,
  "gender": 1,
  "isDelete": 0
}

Contoh Request untuk Membuat Jabatan Baru (POST /api/positions)

{
  "code": "MGR",
  "name": "Manager",
  "isDelete": 0
}

Format Response

Semua response API menggunakan format yang konsisten:

{
  "success": true,
  "message": "Pesan sukses atau error",
  "data": {},
  "timestamp": "2023-09-20T12:34:56.789"
}

Contoh Response Sukses untuk Karyawan

{
  "success": true,
  "message": "Berhasil mengambil data karyawan",
  "data": {
    "id": 1,
    "name": "Yogi Lestari",
    "birthDate": "1990-02-14",
    "position": {
      "id": 1,
      "code": "SA",
      "name": "System Analyst",
      "isDelete": 0
    },
    "idNumber": 14021990,
    "gender": 1,
    "isDelete": 0
  },
  "timestamp": "2023-09-20T12:34:56.789"
}

Contoh Response Error

{
  "success": false,
  "message": "Karyawan dengan ID 999 tidak ditemukan",
  "data": null,
  "timestamp": "2023-09-20T12:34:56.789"
}

Data Master

Aplikasi ini diinisialisasi dengan data master berikut:

Data Master Jabatan (T1_POSITION)

ID CODE NAME IS_DELETE
1 SA System Analyst 0
2 BPS BPS 0
3 PRG Programmer 0
4 TEST Tester 0
5 HELP Helpdesk 0

Data Master Karyawan (T2_EMPLOYEE)

ID NAME BIRTH_DATE POSITION_ID ID_NUMBER GENDER IS_DELETE
1 Yogi Lestari 1990-02-14 1 14021990 1 0
2 Anggi Setiawan 1991-05-10 5 10051991 1 0
3 Rosiana 1993-04-20 3 20041993 2 0
4 Yudi Ismiaji 1994-01-11 4 11011994 1 0

Penggunaan HQL

Semua query database dalam aplikasi ini menggunakan HQL (Hibernate Query Language) sesuai dengan persyaratan. Contoh implementasi dapat dilihat di KaryawanRepository.java dan PositionRepository.java.