Read Controller
16 November 2023
Pada Alurkerja Java, terdapat class ReadController yang dapat digunakan untuk menampilkan data dari table views.
ReadController merupakan controller yang khusus digunakan untuk menampilkan data yang bersifat Read Only, sehingga tidak perlu menggunakan CrudController.
ReadController memiliki 3 buah endpoint yaitu endpoint untuk mendapatkan spesifikasi, endpoint untuk menampilkan list, dan endpoint untuk menampilkan detail. ReadController membutuhkan 4 parameter yaitu Entity/Views, DTO, Service, dan Repository.
Cara Menggunakan ReadController
Membuat Entity
Sample Code
@Getter
@Entity
@Immutable
@Subselect("select u.id, \n" +
"u.id_ext, \n" +
"u.email as user_email, \n" +
"u.name as user_name, \n" +
"u.created_date,\n" +
"p.code position_code, \n" +
"case \n" +
"\twhen p is null then u.position\n" +
"\telse p.name\n" +
"end position_name, \n" +
"lo.name as location, \n" +
"la.name as layer, \n" +
"p.caretaker, p.use_caretaker \n" +
"from users u \n" +
"left join position p on u.id_ext = p.user_id_ext \n" +
"left join users_location lo on u.location_code = lo.code \n" +
"left join users_layer la on u.layer_code = la.code \n" +
"where u.email is not null and u.delete_at is null and p.delete_at is null")
public class DataUser {
@Column(name = "id")
private UUID id;
@Column(name = "created_date")
private Date createdDate;
@Column(name = "position_code")
private String code;
@Column(name = "position_name")
private String name;
@Column(name = "user_email")
private String userEmail;
@Column(name = "user_name")
private String userName;
@Column(name = "location")
private String location;
@Column(name = "layer")
private String layer;
@Column(name = "caretaker")
private String caretaker;
@Column(name = "use_caretaker")
private Boolean useCaretaker;
}
Membuat DTO
Buatlah sebuah class DTO yang extend BaseDto
Sample Code
import com.alurkerja.spec.entity.BaseDto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class DataUserDto extends BaseDto<DataUser, DataUserDto> {
private String code;
private String name;
private String userName;
}
Membuat Spesification
Buatlah sebuah class Spesification yang extend GenericSearchSpecification
Sample Code
import com.alurkerja.core.repository.search.GenericSearchSpecification;
public class DataUserSpesification extends GenericSearchSpecification<DataUser, DataUserDto> {
public DataUserSpesification(DataUserDto dto) {
super(dto);
}
@Override
public void buildSpecification(DataUserDto dto) {
this.defaultFilter(dto, "userName");
this.defaultSearch(dto, "userName");
}
}
Membuat Repository
Buatlah sebuah class repository yang extend CrudRepository
Sample Code
import com.alurkerja.core.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface DataUserRepository extends CrudRepository<DataUser> {
}
Membuat Service
Buatlah sebuah class service yang extend ReadService
Sample Code
import com.alurkerja.auth.service.AuthenticationService;
import com.alurkerja.core.service.ReadOnlyService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class DataUserService extends ReadService<DataUser, DataUserDto, DataUserRepository> {
protected DataUserService(DataUserRepository simpleJpaRepository) {
super(simpleJpaRepository);
}
@Override
public String getCurrentUser() {
return null;
}
@Override
public String getCurrentGroup() {
return null;
}
@Override
public String getCurrentOrganization() {
return null;
}
@Override
public Specification<DataUser> instantiateSpecification(DataUserDto dto) {
return new DataUserSpesification(dto);
}
}
Membuat Controller
Buatlah sebuah class Controller yang extend ReadController
Sample Code
import com.alurkerja.core.controller.ReadController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/crud/data-user")
public class DataUserController extends ReadController<DataUser, DataUserDto, DataUserService, DataUserRepository> {
protected DataUserController(DataUserService dataUserService) {
super(dataUserService);
}
}
Daftar Endpoint pada ReadController
| Aksi | Metode | URl |
|---|---|---|
| Spec | GET | {{baseUrl}}/crud/data-user/spec |
| List | GET | {{baseUrl}}/crud/data-user |
| Detail | GET | {{baseUrl}}/crud/data-user/{id} |
Table diatas Merupakan endpoint yang tersedia pada
DataUserControlleryang extendReadController