Bom, no whaticket temos a possibilidade de criar vários usuarios, o problema é que se quisermos que um usuario não acesse mais o sistema, a unica possibilidade que temos é de excluir o usuario do sistema, só que fazendo isso acabamos perdendendo a rastreabilidade de saber quais tickets aquele usuario atendeu, as mensagens..
Por isso, resolvi ensinar e implementar no whaticket a função de desabilitar e habilitar os usuarios, fazendo assim o controle permitindo ou não o usuario entrar dentro do sistema!!
Para fazer isso, você precisa seguir os passos abaixo:
no backend você vai criar uma nova migration, onde ira criar uma nova coluna na tabela Users:
CAMINHO: Backend > src > database > 20240610205545-add-status-to-users.ts
import { QueryInterface, DataTypes } from "sequelize";
module.exports = {
up: async (queryInterface: QueryInterface) => {
await queryInterface.addColumn("Users", "status", {
type: DataTypes.ENUM,
values: ["Ativo", "Inativo"],
allowNull: false,
defaultValue: "Ativo",
});
},
down: async (queryInterface: QueryInterface) => {
await queryInterface.removeColumn("Users", "status");
}
};
Após fazer isso, você precisa ir na Model Users e inserir essa coluna:
CAMINHO: Backend > Src > models > Users.ts
@Column(DataType.ENUM("Ativo", "Inativo"))
status: "Ativo" | "Inativo";
CAMINHO: Backend > Src > helpers> SerializeUser.ts
Dentro de:
interface SerializedUser {
Inserir:
Dentro de:
export const SerializeUser = (user: User): SerializedUser => {
Inserir:
status: user.status,
Agora, precisamos incluir essa nova coluna nos metodos do controller de Usuarios:
CAMINHO: Backend > Src > Controllers > UserController.ts
Nessa linha:
const { email, password, name, profile, queueIds, whatsappId} = req.body;
Alterar para:
const { email, password, name, profile, queueIds, whatsappId, status } = req.body;
Dentro de:
const user = await CreateUserService({
Incluir:
Agora precisamos incluir a coluna de status nos Services de Usuarios.
CAMINHO: Backend > Src > Services > UserServices > AuthUserService.ts
Abaixo da linha:
if (!(await user.checkPassword(password))) {
throw new AppError("ERR_INVALID_CREDENTIALS", 401);
}
Iremos inserir:
// Verificar se o usuário está ativo
if (user.status !== 'Ativo') {
throw new AppError("ERR_USER_NOT_ACTIVE", 401);
}
CAMINHO: Backend > Src > Services > UserServices > CreateUserService.ts
Dentro de:
interface Request {
Dentro de:
const CreateUserService = async ({
Inserir:
Altere a linha:
await schema.validate({ email, password, name });
Para:
await schema.validate({ email, password, name, status });
Dentro de:
const user = await User.create(
Inserir:
CAMINHO: Backend > Src > Services > UserServices > ListUsersService.ts
Altere a linha:
attributes: ["name", "id", "email", "profile", "createdAt"],
Para:
attributes: ["name", "id", "email", "profile", "createdAt", "status"],
CAMINHO: Backend > Src > Services > UserServices > UpdateUserService.ts
Dentro de:
const schema = Yup.object().shape({
Inserir:
Alterar a linha:
const { email, password, profile, name, queueIds = [], whatsappId } = userData;
Para:
const { email, password, profile, status, name, queueIds = [], whatsappId } = userData;
Alterar a linha:
await schema.validate({ email, password, profile, name });
Para:
await schema.validate({ email, password, profile, name, status });
Agora que alteramos no BACKEND precisamos alterar algumas coisas no FRONTEND:
CAMINHO: Frontend > Src > pages > Users > index.js
Abaixo da linha:
<TableCell align="center">
{i18n.t("users.table.whatsapp")}
</TableCell>
Incluir:
<TableCell align="center">
{i18n.t("users.table.status")}
</TableCell>
Abaixo da Linha:
<TableCell align="center">{user.whatsapp?.name}</TableCell>
Incluir:
<TableCell align="center">{user.status}</TableCell>
Agora precisamos incluir o SELECT no MODAL para editar e criar usuarios.
CAMINHO: Frontend > Src > Components > UserModal > index.js
Abaixo do FormControl de Permissões do Usuario, adicionar a linha abaixo:
<Field
as={Select}
label={i18n.t("userModal.form.status")}
name="status"
variant="outlined"
margin="dense"
fullWidth
>
<MenuItem value="Ativo">{i18n.t("userModal.form.active")}</MenuItem>
<MenuItem value="Inativo">{i18n.t("userModal.form.inactive")}</MenuItem>
</Field>
Quanto a traducoes, basta inserir dentro de:
CAMINHO: Frontend > Src >Translate > Languages > pt.js