Usecase clean architecture implementation