Ativar e Desativar Usuarios - Whaticket

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:
status: string;

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:
status,
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 {
Inserir:
status?: string;
Dentro de:
interface Response {
Inserir:
status?: string;
Dentro de:
const CreateUserService = async ({
Inserir:
status = "Ativo",
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:
status,
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:
interface UserData {
Inserir:
status?: string;
Dentro de:
interface Response {
Inserir:
status: string;
Dentro de:
const schema = Yup.object().shape({
Inserir:
status: Yup.string()
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 });
Dentro de:
await user.update({
Inserir:
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