AC

Vamos implementar na nossa rede social um sistema de grupos. Onde nos grupos haverão membros e esses membros terão cargos. Para o controle de permissões do que o membro pode fazer no grupo, teremos os seguintes cargos:

  1. Administrador (administrator): Tem permissão total no grupo, inclusive de alterar configurações e promover outros administradores;
  2. Moderador (moderator): Pode gerenciar membros e mensagens no grupo, além de poder promover membros à colaboradores;
  3. Colaborador (colaborator): Pode adicionar novos membros ao grupo;
  4. Membro (member): Pode enviar mensagens no grupo.

Os cargos mais altos têm também as permissões dos cargos mais baixos. Todos os administradores têm igual poder no grupo, sendo todos juntos “donos” do grupo. Como é possível que todos os administradores saiam de um grupo e, assim, o grupo fique sem administradores; vamos adicionar uma permissão especial de um moderador poder se promover para administrador caso não haja nenhum administrador no grupo. Assim garantindo que o grupo possa continuar funcionando mesmo que os administradores atuais abandonem ele.


Na API, os seguintes endpoints serão adicionados para o gerenciamento de grupos e membros:

POST /groups

Cria um novo grupo.

Exemplo de request:

{
    "name": "My Group",
    "description": "..."
}

POST /groups/{group_id}/members

Adiciona um novo membro ao grupo. Onde:

Exemplo de request:

{
    "user_id": 123456,
    "role": "member"
}

POST /groups/{group_id}/quit

Remove sua própria conta do grupo.

POST /groups/{group_id}/promote

Somente o cargo moderator pode usar esse endpoint. Onde se o grupo não tiver mais nenhum membro com o cargo administrator, o moderador poderá se promover à administrador usando esse endpoint.

Se houver pelo menos um membro de cargo administrator no grupo, então nada será feito por esse endpoint.

POST /groups/{group_id}/members/{user_id}/ban

Bane o membro do grupo. O cargo moderator e acima tem permissão para usar esse endpoint.

POST /groups/{group_id}/members/{user_id}/kick

Remove o membro do grupo. O cargo moderator e acima tem permissão para usar esse endpoint.

POST /groups/{group_id}/members/{user_id}/silence

Silencia o membro pela quantidade de dias especificados. O cargo moderator e acima tem permissão para usar esse endpoint.

Exemplo de request:

{
    "days": 1
}

PATCH /groups/{group_id}/members/{user_id}

Altera o cargo do membro no grupo. O cargo administrator tem permissão para usar esse endpoint sem restrições. O cargo moderator pode somente alterar o cargo para colaborator ou member. Outros cargos não podem usar esse endpoint.

Exemplo de request:

{
    "role": "colaborator"
}