[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)

Como trabalhar com controllers que serão utilizados pelo domínio principal e pelos subdomínios

[Finalizado Pelo Aluno]

Allex Carvalho
Criador Allex Carvalho 23/02/2022

Boa noite,

Como ficam os controllers que serão usados para ambas aplicações (tenants e subdomínios)? Um exemplo é para controle de cidades. A empresa será vinculada a uma cidade. Assim como os clientes também serão vinculados a uma cidade. Estou seguindo este curso e o Larafood. Lá separou os controllers nas pastas site, admin e api. Aqui neste curso, tenant e e soltos na raíz. Gostaria de manter a organização de pastas, porém, para os módulos que serão de ambas aplicações não estou conseguindo encaixar no seu devido local.

Outra situação é referente a edição da empresa. Gostaria de ter um formulário onde a empresa pudesse atualizar seus dados. Neste caso, usa o mesmo controller e view com controle de permissões? E sobre a conexão, como ficaria para alterar a conexão para o domínio principal para sincronizar as alterações também no domínio principal e depois voltar para a conexão referente ao subdomínio?

Manager Carlos Ferreira 23/02/2022

Olá, Allex!
Tudo bem?

1) A relação aqui é um pouco diferente, pensa em atores com ações diferentes dentro do sistema.

Um ator tem por objetivo gerenciar os tenants (apenas isso).

O outro, tem como objetivo utilizar os recursos do sistema.

Eles terão o mesmo papel dentro do sistema?
Se forma alguma.

Ah, mas meu admin precisa também controlar algo que o tenant controla, como lidar?
Resposta: Esse admin não seria um tenant?
Sim, se ele vai desempenhar uma ação de um tenant, logo ele é um tenant também, logo precisa cadastrar um novo tenant para fazer isso.

Porque o papel do ator um é apenas trabalhar com a administração dos tenants (empresas)

----

2) Pergunta bastante interessante amigo.

Você tem algumas opções.

Você pode ter o formulário com os dados da empresa para que ela possa atualizar, até aqui tranquilo, certo?

Uma alternativa é deixar a action deste formulário para a sua URL principal, assim já vai conectar nela. E lá você nas validações você valida também se o usuário está tentando atualizar os seus próprios dados, e não dados de outros tenants.

action="{{ config('tenants.url_main') }}"

Pegou a ideia amigo?

Carlos Ferreira
Criador Allex Carvalho 23/02/2022

Sobre a resposta 1, a dúvida é para não duplicar controllers em pastas diferentes, como:

app/Http/Controllers/Tenant/CityController
app/Http/Controllers/System/CityController

Em ambas situações, existirá um CRUD, onde terá opção de pesquisar e se necessário inserir a cidade através de uma consulta pelo ViaCEP ou por um formulário, editar e excluir uma cidade. A tabela cidade relacionará com empresa, clientes, fornecedores. Em comum no domínio principal e subdomínio, será só a tabela empresa, porém, existe a necessidade de ter este controller também para tenant. Esse é um exemplo, existem outros controllers que existem em ambas aplicações.

Allex Carvalho
Manager Carlos Ferreira 23/02/2022

Se analisar os princípios do SOLID ter 2 controllers "duplicados" não seria o real problema, errado seria por exemplo, um controller estender do outro.

O que eu te respondo neste caso amigo?
Cria um service layer (app/Services/SeuServiceAqui) e injeta no construtor dos controllers esse service, e use os métodos dele, assim você centraliza o conteúdo duplicado em um só lugar, e não fere os princípios do SOLID.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!