4 tuần thì chạy được thế này cũng ổn. Nhưng nếu cần review thêm thì:
1. package name
package name không ai viết hoa cả, vd companyDAO => companydao. lỗi này lên sonarqube quét là dính issue ngay.
package name cũng hạn chế dùng underscore
, nó chỉ dùng trong 2 trường hợp, 1 là package name có java keyword như int, thì phải sửa thành int, hoặc domain name có hyphen - như my-company.com thì sửa package thành com.my_company. Tất nhiên điều này không phải bắt buộc.
2. Controller
Không ai query trực tiếp sql trong controller (đây là style bên PHP hồi trước, hoặc hồi còn dùng JSP nhiều). Code phải qua ít nhất 1 level Service nữa (Controller > Service > DAO) hoặc phải 2 level (Controller > Service > Data Service > DAO)
Controller nên code rất đơn giản, tầm 4 line là đủ (gọi service call thôi)
SQL không được dùng String concatenation, nếu không sẽ bị dính SQLInjection.
Sao POST request thì không có Transactional mà GET request lại có?
Transactional ở Controller sẽ rất nguy hiểm, vì mỗi lần method được gọi thì app sẽ tạo thêm 1 connection mới đến database server. Gọi tầm 5 lần/s, khoảng 10s là server hết database connection và return error. Cái này có nhiều kiểu code, ví dụ như resilience4j. Hoặc đẩy Transaction xuống Service layer và dùng Cache (Cái này code bạn chưa có)
3. DAO
DAO giờ dùng JPA cho nhanh, bạn không phải code nhiều SQL. Bạn mix cả 2 loại đọc khá khó.
Nên dùng Mapstruct để chuyển đổi object giữa DTO, Domain với Entity. Bạn sẽ không phải gọi .setxxx() nhiều.
4. Test
Thiếu Unit Test, Integration Test
Tạm thời thế đã
Repo với code java khá chuẩn thì mình thấy có bạn Đấng Tối Cao
![Laugh :LOL: :LOL:](https://data.voz.vn/styles/next/xenforo/smilies/popo/laugh.png?v=01)
.