Skip to main content

CRUD Operations

Dokumentasi generic CRUD (Create, Read, Update, Delete) functions.

Create

Save

Menyimpan record baru ke database.

func Save(model interface{}) interface{}

Penggunaan:

user := models.User{
Name: "John Doe",
Email: "john@example.com",
}

err := repository.Save(&user)
if err != nil {
// Handle error
}

// user.ID sudah ter-populate setelah save

Upsert

Insert atau Update berdasarkan conflict pada kolom id.

func Upsert(model interface{}) error

Penggunaan:

user := models.User{
ID: existingID, // Jika exists, akan update
Name: "Updated Name",
Email: "updated@example.com",
}

err := repository.Upsert(&user)

SQL Generated:

INSERT INTO users (id, name, email) 
VALUES ($1, $2, $3)
ON CONFLICT (id) DO UPDATE SET
name = $2,
email = $3

Read

Get

Mengambil semua records.

func Get(model interface{}) interface{}

Penggunaan:

var users []models.User
err := repository.Get(&users)

GetOne

Mengambil single record (first).

func GetOne(model interface{}) interface{}

Penggunaan:

var user models.User
err := repository.GetOne(&user)

GetById

Mengambil record berdasarkan ID.

func GetById(model interface{}, id any) error

Penggunaan:

var user models.User
err := repository.GetById(&user, "550e8400-e29b-41d4-a716-446655440000")
if err != nil {
// User not found or error
}

GetOneNew

Mengambil record berdasarkan kolom dan value tertentu.

func GetOneNew(model interface{}, column string, value string) interface{}

Penggunaan:

var user models.User
err := repository.GetOneNew(&user, "email", "john@example.com")

GetWithFilter

Mengambil records dengan filter is_deleted = false.

func GetWithFilter(model interface{}) interface{}

Penggunaan:

var users []models.User
err := repository.GetWithFilter(&users)
// Hanya return users yang belum di-delete

GetByNoPegawai

Mengambil record berdasarkan nomor pegawai.

func GetByNoPegawai(model interface{}, no_pegawai any) error

Penggunaan:

var pengguna models.Pengguna
err := repository.GetByNoPegawai(&pengguna, "123456")

CheckByNoPegawai

Mengecek apakah record dengan nomor pegawai exists.

func CheckByNoPegawai(model interface{}, no_pegawai any) bool

Penggunaan:

var pengguna models.Pengguna
exists := repository.CheckByNoPegawai(&pengguna, "123456")
if exists {
// Pengguna sudah terdaftar
}

CountDataByNoPegawai

Menghitung jumlah record berdasarkan nomor pegawai.

func CountDataByNoPegawai(model interface{}, no_pegawai any) int

Penggunaan:

var pengguna models.Pengguna
count := repository.CountDataByNoPegawai(&pengguna, "123456")

Update

Update

Update record (menggunakan Save).

func Update(model interface{}) error

Penggunaan:

var user models.User
repository.GetById(&user, id)

user.Name = "Updated Name"
err := repository.Update(&user)

SetBy

Update kolom tertentu dengan UserID dari token.

func SetBy(id, columnName, tableName, auth string) interface{}

Penggunaan:

repository.SetBy(
recordID,
"updated_by",
"users",
authHeader,
)

SetByNoPegawai

Update kolom berdasarkan nomor pegawai.

func SetByNoPegawai(noPegawai, columnName, tableName, auth string) interface{}

Delete

DeleteById

Hard delete record berdasarkan ID.

func DeleteById(model interface{}, id any) interface{}

Penggunaan:

var user models.User
err := repository.DeleteById(&user, id)
warning

Hard delete akan menghapus record secara permanen. Gunakan SoftDeleteById untuk soft delete.

SoftDeleteById

Soft delete (set is_deleted = true).

func SoftDeleteById(model interface{}) error

Penggunaan:

var user models.User
repository.GetById(&user, id)

user.IsDeleted = true
err := repository.SoftDeleteById(&user)

BulkDeleteById

Delete multiple records berdasarkan kolom.

func BulkDeleteById(model interface{}, column string, value string) interface{}

Penggunaan:

var user models.User
err := repository.BulkDeleteById(&user, "department_id", "123")
// Delete semua users dengan department_id = 123

Summary Table

FunctionOperationType
SaveCreateSingle
UpsertCreate/UpdateSingle
GetRead AllMultiple
GetOneRead FirstSingle
GetByIdRead by IDSingle
GetOneNewRead by ColumnSingle
GetWithFilterRead (not deleted)Multiple
UpdateUpdateSingle
SetByUpdate ColumnSingle
DeleteByIdHard DeleteSingle
SoftDeleteByIdSoft DeleteSingle
BulkDeleteByIdHard DeleteMultiple