Boa tarde.
Estou com uma dúvida referente a criação de classes controller. Tenho duas classes, UsersController e ClientController, ambas estendem da classe BaseController. Minha BaseController implementa os métodos de CRUD que são comuns as duas classes filhas e as próximas que forem surgindo no desenvolvimento.
No meu modelo de negocio, tanto os clientes quanto usuários podem ter contas que acessam com email e senha, sendo assim preciso criar métodos como createPassword, resetPassword que são comuns a estas duas classes.
Não posso criar estes métodos em BaseController porque as outras classes futuras não utilizarão. Pensei em criar uma accountController e passar o model do recurso que quero trabalhar (users ou clients), porém meu app trabalha com rotas e para cada rota chamo o controller específico. Como fazer para disponibilizar estes métodos para meus dois recursos, sem precisar duplicar código escrevendo os mesmos métodos nas duas classes controller?
OBS: minha aplicação é uma api node + express utilizando TS.
Abaixo uma parte do código.
UserController
export class UsersController extends BaseController {
constructor(_repository: UsersRepository) {
super(_repository)
}
}
const userRepository = new UsersRepository(UserModel)
export default new UsersController(userRepository)
BaseController
export class BaseController {
constructor(private _repository: BaseRepository) { }
. . .
}
users-router
const router = Router()
router.get('/', controller.findAll.bind(controller));
router.get('/:id', controller.findById.bind(controller));
router.post('/', multer.single('image'), /*dataValidator,*/ uploadAvatar.default.sendUploadToGCS, controller.create.bind(controller));
router.put('/:id', controller.update.bind(controller));
router.delete('/:id', controller.delete.bind(controller));
export { router };