Như ở một bài viết trước chúng ta chỉ mới đi sơ vê repository trong golang.
Hôm này chúng ta đi sau hơn về repository implement
Mình nhờ thầy mình nói là: repo_implement nó sẽ implement cái interface repository và nó chưa các code làm việc trực tiếp mới database.
Đầu tiên chúng ta cần có repository interface:
trên ý tưởng là đưa data vào để query(WHERE) và nhận về 1 kết quả.
Giờ chúng ta code repo_impl và nó sẽ implement cái func sau:GetVoucherByProductAndUser(ctx context.Context, hunter model.Hunter) (model.Hunter, error)
Các bạn muốn hiểu nt cho mình, mình sẽ chỉ các bạn chỗ học.
Đại loại các bạn bắt trước như thế là nó sẽ chạy.
Giờ chúng ta đi sâu vào hàm GetVoucherByProductAndUser
Mình để ý cái input vào là hunter model.Hunter
thì var hT sẽ có {}
Cón ko có {}
sẽ báo lỗi
GetContext
Chúng ta sử dụng func GetContext:
https://pkg.go.dev/github.com/jmoiron/sqlx#GetContext
GetContext does a QueryRow using the provided Queryer, and scans the resulting row to dest. If dest is scannable, the result must only have one column. Otherwise, StructScan is used. Get will return sql.ErrNoRows like row.Scan would. Any placeholder parameters are replaced with supplied args. An error is returned if the result set is empty.
Như trên GetContext nhận vào 1 dòng query. và kết quả cũng chỉ có 1 dòng xuất ra
Bạn sẽ truyền hunter.UserName
vào chỗ $1
và hunter.Product
vào $2
Đó là từ handler gửi vào repo_imple thông qua hunter
Bạn sẽ thấy sẽ được trả về &hT
Giờ thì bên file handler sẽ gọi xuống repository như thế nào