CRUD

Pada bab ini kita akan melengkapi method Users.Create, Users.View, Users.Update dan Users.Delete

Create

  • Karena membutuhkan beberapa validasi dan hashing password, create user akan ditangani menggunakan usecase.

  • Pertama kita siapkan model-nya terlebih dahulu. Edit file models/user.go dan tambahkan method Create.

// Create new user
func (u *User) Create(db *sql.DB) error {
    const query = `
        INSERT INTO users (username, password, email, is_active, created, updated)
        VALUES (?, ?, ?, 0, NOW(), NOW())
    `
    stmt, err := db.Prepare(query)
    if err != nil {
        return err
    }

    defer stmt.Close()

    res, err := stmt.Exec(u.Username, u.Password, u.Email)
    if err != nil {
        return err
    }

    id, err := res.LastInsertId()
    if err != nil {
        return err
    }

    u.ID = uint64(id)

    return nil
}
  • Untuk response kita sudah ada file payloads/response/user_response.go dan tidak perlu ada perubahan. Namun yang kita perlukan adalah payload untuk menangani request. Buatlah file payloads/request/user_request.go yang berfungsi untuk menerima json body dari request, kemudian mengconvertnya menjadi model.

  • Selanjutnya kita buat file usecases/user_usecase.go untuk interaksi dan validasi pembuatan user baru.

  • Terakhir, ubah method Users.Create di file controllers/users.go

Read

  • Tambahkan method func (u *User) Get(db *sql.DB) error pada file models/user.go

  • Ubah method View pada file controllers/users.go menjadi

Update

  • Tambahkan method func (u *User) Update(db *sql.DB) error pada file models/user.go

  • Tambahkan type UserRequest struct{} pada file payloads/request/user_request.go dan method Transform untuk reference UserRequest

  • Ubah method Update pada file controllers/users.go

Delete

  • Tambahkan method func (u *User) Delete(db *sql.DB) error pada file models/user.go

  • Ubah method Delete pada file controllers/users.go

Last updated

Was this helpful?