# Usuário (/docs/servicos/auth/usuario)

> 4 funções do TermoAuth para usuário.

{/* Gerado por scripts/gerar_paginas_dos_sdks.ts a partir dos pacotes termo_core. Não edite à mão. */}

<Tabs groupId="linguagem" persist items={["TypeScript", "Rust"]}>
<Tab value="TypeScript">

```ts
// npm install termo_core --save-exact
import * as auth from "termo_core/auth";
// ou: import { auth } from "termo_core";
```

</Tab>
<Tab value="Rust">

```toml title="Cargo.toml"
termo_core = { version = "=0.1.15", default-features = false, features = ["auth"] }
```

</Tab>
</Tabs>

| Função | Rota | O que faz |
| --- | --- | --- |
| [`buscar_paginador_usuario`](#buscar_paginador_usuario) | `GET /usuario` | Lista usuários com paginação |
| [`buscar_auto_complete_usuario`](#buscar_auto_complete_usuario) | `GET /usuario/autocomplete` | Lista básica de usuários para seleção |
| [`buscar_pelo_filtro_usuario`](#buscar_pelo_filtro_usuario) | `GET /usuario/filtro` | Busca usuários por filtro |
| [`buscar_pelo_id_usuario`](#buscar_pelo_id_usuario) | `GET /usuario/{id}` | Busca um usuário pelo id |

## `buscar_paginador_usuario` [#buscar_paginador_usuario]

<Rota metodo="GET" caminho="/usuario" credencial />

Lista usuários com paginação

Só master. Os mais recentes vêm primeiro. `pagina` começa em 1 (padrão 1); `tamanho` tem padrão 10 e máximo 500. `busca` procura no nome e no e-mail; `perfil` é `colaborador` ou `cliente`.

<Tabs groupId="linguagem" persist items={["TypeScript", "Rust"]}>
<Tab value="TypeScript">

```ts
function buscar_paginador_usuario(
  credencial_de_acesso: CredencialDeAcesso,
  parametros: ParametrosDeBuscarPaginadorUsuario = {},
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.PaginaUsuario>
```

```ts title="Exemplo"
import { CredencialDeAcesso } from "termo_core";
import { buscar_paginador_usuario } from "termo_core/auth";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_paginador_usuario(credencial_de_acesso, { pagina: 1 });
```

</Tab>
<Tab value="Rust">

```rust
pub async fn buscar_paginador_usuario(
    credencial_de_acesso: &CredencialDeAcesso,
    parametros: &ParametrosDeBuscarPaginadorUsuario,
) -> Result<tipos::PaginaUsuario, ErroAoChamarServico>
```

```rust title="Exemplo"
let credencial_de_acesso = termo_core::CredencialDeAcesso::token_do_usuario_logado(token_do_usuario);

let resposta = termo_core::auth::buscar_paginador_usuario(
    &credencial_de_acesso,
    &termo_core::auth::ParametrosDeBuscarPaginadorUsuario { pagina: Some(1), ..Default::default() },
)
.await?;
```

</Tab>
</Tabs>

**Argumentos**

<TypeTable
  type={{
    "credencial_de_acesso": { type: "CredencialDeAcesso", required: true, description: "Token do usuário logado ou do aplicativo. · Rust: &CredencialDeAcesso" },
    "parametros.pagina": { type: "number", required: false, description: "Rust: Option<i64>" },
    "parametros.tamanho": { type: "number", required: false, description: "Rust: Option<i64>" },
    "parametros.perfil": { type: "string", required: false, description: "Rust: Option<String>" },
    "parametros.busca": { type: "string", required: false, description: "Rust: Option<String>" },
    "opcoes_da_chamada": { type: "OpcoesDaChamada", required: false, description: "Só no TypeScript: sinal_de_cancelamento e tempo_limite_em_milissegundos (padrão 30 s)." },
  }}
/>

**Retorno**: `Promise<tipos.PaginaUsuario>` · Rust: `Result<tipos::PaginaUsuario, ErroAoChamarServico>` · veja [`PaginaUsuario`](#tipo-paginausuario).

## `buscar_auto_complete_usuario` [#buscar_auto_complete_usuario]

<Rota metodo="GET" caminho="/usuario/autocomplete" credencial />

Lista básica de usuários para seleção

Só master. Devolve só id, nome e e-mail, em ordem alfabética, para escolher um usuário. `pagina` começa em 1 (padrão 1); `tamanho` tem padrão 10. `busca` procura no nome e no e-mail; `perfil` é `colaborador` ou `cliente`.

<Tabs groupId="linguagem" persist items={["TypeScript", "Rust"]}>
<Tab value="TypeScript">

```ts
function buscar_auto_complete_usuario(
  credencial_de_acesso: CredencialDeAcesso,
  parametros: ParametrosDeBuscarAutoCompleteUsuario = {},
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.PaginaUsuarioAutoComplete>
```

```ts title="Exemplo"
import { CredencialDeAcesso } from "termo_core";
import { buscar_auto_complete_usuario } from "termo_core/auth";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_auto_complete_usuario(credencial_de_acesso, { busca: "..." });
```

</Tab>
<Tab value="Rust">

```rust
pub async fn buscar_auto_complete_usuario(
    credencial_de_acesso: &CredencialDeAcesso,
    parametros: &ParametrosDeBuscarAutoCompleteUsuario,
) -> Result<tipos::PaginaUsuarioAutoComplete, ErroAoChamarServico>
```

```rust title="Exemplo"
let credencial_de_acesso = termo_core::CredencialDeAcesso::token_do_usuario_logado(token_do_usuario);

let resposta = termo_core::auth::buscar_auto_complete_usuario(
    &credencial_de_acesso,
    &termo_core::auth::ParametrosDeBuscarAutoCompleteUsuario { busca: Some("...".to_string()), ..Default::default() },
)
.await?;
```

</Tab>
</Tabs>

**Argumentos**

<TypeTable
  type={{
    "credencial_de_acesso": { type: "CredencialDeAcesso", required: true, description: "Token do usuário logado ou do aplicativo. · Rust: &CredencialDeAcesso" },
    "parametros.busca": { type: "string", required: false, description: "Rust: Option<String>" },
    "parametros.perfil": { type: "string", required: false, description: "Rust: Option<String>" },
    "parametros.pagina": { type: "number", required: false, description: "Rust: Option<i64>" },
    "parametros.tamanho": { type: "number", required: false, description: "Rust: Option<i64>" },
    "opcoes_da_chamada": { type: "OpcoesDaChamada", required: false, description: "Só no TypeScript: sinal_de_cancelamento e tempo_limite_em_milissegundos (padrão 30 s)." },
  }}
/>

**Retorno**: `Promise<tipos.PaginaUsuarioAutoComplete>` · Rust: `Result<tipos::PaginaUsuarioAutoComplete, ErroAoChamarServico>` · veja [`PaginaUsuarioAutoComplete`](#tipo-paginausuarioautocomplete).

## `buscar_pelo_filtro_usuario` [#buscar_pelo_filtro_usuario]

<Rota metodo="GET" caminho="/usuario/filtro" credencial />

Busca usuários por filtro

Só master. Devolve todos os usuários que casam com o filtro, sem paginação, em ordem alfabética. `busca` procura no nome e no e-mail; `perfil` é `colaborador` ou `cliente`.

<Tabs groupId="linguagem" persist items={["TypeScript", "Rust"]}>
<Tab value="TypeScript">

```ts
function buscar_pelo_filtro_usuario(
  credencial_de_acesso: CredencialDeAcesso,
  parametros: ParametrosDeBuscarPeloFiltroUsuario = {},
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<Array<tipos.Usuario>>
```

```ts title="Exemplo"
import { CredencialDeAcesso } from "termo_core";
import { buscar_pelo_filtro_usuario } from "termo_core/auth";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_pelo_filtro_usuario(credencial_de_acesso, { busca: "..." });
```

</Tab>
<Tab value="Rust">

```rust
pub async fn buscar_pelo_filtro_usuario(
    credencial_de_acesso: &CredencialDeAcesso,
    parametros: &ParametrosDeBuscarPeloFiltroUsuario,
) -> Result<Vec<tipos::Usuario>, ErroAoChamarServico>
```

```rust title="Exemplo"
let credencial_de_acesso = termo_core::CredencialDeAcesso::token_do_usuario_logado(token_do_usuario);

let resposta = termo_core::auth::buscar_pelo_filtro_usuario(
    &credencial_de_acesso,
    &termo_core::auth::ParametrosDeBuscarPeloFiltroUsuario { busca: Some("...".to_string()), ..Default::default() },
)
.await?;
```

</Tab>
</Tabs>

**Argumentos**

<TypeTable
  type={{
    "credencial_de_acesso": { type: "CredencialDeAcesso", required: true, description: "Token do usuário logado ou do aplicativo. · Rust: &CredencialDeAcesso" },
    "parametros.busca": { type: "string", required: false, description: "Rust: Option<String>" },
    "parametros.perfil": { type: "string", required: false, description: "Rust: Option<String>" },
    "opcoes_da_chamada": { type: "OpcoesDaChamada", required: false, description: "Só no TypeScript: sinal_de_cancelamento e tempo_limite_em_milissegundos (padrão 30 s)." },
  }}
/>

**Retorno**: `Promise<Array<tipos.Usuario>>` · Rust: `Result<Vec<tipos::Usuario>, ErroAoChamarServico>`

## `buscar_pelo_id_usuario` [#buscar_pelo_id_usuario]

<Rota metodo="GET" caminho="/usuario/{id}" credencial />

Busca um usuário pelo id

Quem não é master só consegue buscar o próprio usuário, cujo id é o `sub` do token.

<Tabs groupId="linguagem" persist items={["TypeScript", "Rust"]}>
<Tab value="TypeScript">

```ts
function buscar_pelo_id_usuario(
  credencial_de_acesso: CredencialDeAcesso,
  id: string,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.Usuario>
```

```ts title="Exemplo"
import { CredencialDeAcesso } from "termo_core";
import { buscar_pelo_id_usuario } from "termo_core/auth";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_pelo_id_usuario(credencial_de_acesso, id);
```

</Tab>
<Tab value="Rust">

```rust
pub async fn buscar_pelo_id_usuario(
    credencial_de_acesso: &CredencialDeAcesso,
    id: uuid::Uuid,
) -> Result<tipos::Usuario, ErroAoChamarServico>
```

```rust title="Exemplo"
let credencial_de_acesso = termo_core::CredencialDeAcesso::token_do_usuario_logado(token_do_usuario);

let resposta = termo_core::auth::buscar_pelo_id_usuario(&credencial_de_acesso, id).await?;
```

</Tab>
</Tabs>

**Argumentos**

<TypeTable
  type={{
    "credencial_de_acesso": { type: "CredencialDeAcesso", required: true, description: "Token do usuário logado ou do aplicativo. · Rust: &CredencialDeAcesso" },
    "id": { type: "string", required: true, description: "Parâmetro do caminho da rota. · Rust: uuid::Uuid" },
    "opcoes_da_chamada": { type: "OpcoesDaChamada", required: false, description: "Só no TypeScript: sinal_de_cancelamento e tempo_limite_em_milissegundos (padrão 30 s)." },
  }}
/>

**Retorno**: `Promise<tipos.Usuario>` · Rust: `Result<tipos::Usuario, ErroAoChamarServico>` · veja [`Usuario`](#tipo-usuario).

## Tipos [#tipos]

Tipos usados pelas funções desta página. O nome é o mesmo nos dois pacotes.

### PaginaUsuario [#tipo-paginausuario]

<Tabs groupId="linguagem" persist items={["TypeScript", "Rust"]}>
<Tab value="TypeScript">

```ts
import type { PaginaUsuario } from "termo_core/auth";

export interface PaginaUsuario {
  itens: Array<PaginaUsuarioItensItem>;
  pagina: number;
  tamanho: number;
  total: number;
}
```

</Tab>
<Tab value="Rust">

```rust
use termo_core::auth::PaginaUsuario;

pub struct PaginaUsuario {
    pub itens: Vec<PaginaUsuarioItensItem>,
    pub pagina: i64,
    pub tamanho: i64,
    pub total: i64,
}
```

</Tab>
</Tabs>

### PaginaUsuarioAutoComplete [#tipo-paginausuarioautocomplete]

<Tabs groupId="linguagem" persist items={["TypeScript", "Rust"]}>
<Tab value="TypeScript">

```ts
import type { PaginaUsuarioAutoComplete } from "termo_core/auth";

export interface PaginaUsuarioAutoComplete {
  itens: Array<PaginaUsuarioAutoCompleteItensItem>;
  pagina: number;
  tamanho: number;
  total: number;
}
```

</Tab>
<Tab value="Rust">

```rust
use termo_core::auth::PaginaUsuarioAutoComplete;

pub struct PaginaUsuarioAutoComplete {
    pub itens: Vec<PaginaUsuarioAutoCompleteItensItem>,
    pub pagina: i64,
    pub tamanho: i64,
    pub total: i64,
}
```

</Tab>
</Tabs>

### PaginaUsuarioAutoCompleteItensItem [#tipo-paginausuarioautocompleteitensitem]

<Tabs groupId="linguagem" persist items={["TypeScript", "Rust"]}>
<Tab value="TypeScript">

```ts
import type { PaginaUsuarioAutoCompleteItensItem } from "termo_core/auth";

export interface PaginaUsuarioAutoCompleteItensItem {
  email: string;
  id: string;
  nome: string;
}
```

</Tab>
<Tab value="Rust">

```rust
use termo_core::auth::PaginaUsuarioAutoCompleteItensItem;

pub struct PaginaUsuarioAutoCompleteItensItem {
    pub email: String,
    pub id: uuid::Uuid,
    pub nome: String,
}
```

</Tab>
</Tabs>

### PaginaUsuarioItensItem [#tipo-paginausuarioitensitem]

<Tabs groupId="linguagem" persist items={["TypeScript", "Rust"]}>
<Tab value="TypeScript">

```ts
import type { PaginaUsuarioItensItem } from "termo_core/auth";

export interface PaginaUsuarioItensItem {
  atualizado_em: string;
  bloqueado_ate?: string | null;
  cargo?: string | null;
  cargo_id?: string | null;
  criado_em: string;
  dois_fatores_ativo: boolean;
  e_master: boolean;
  email: string;
  email_verificado: boolean;
  funcao?: string | null;
  funcao_id?: string | null;
  id: string;
  imagem?: string | null;
  master_pelo_ambiente: boolean;
  nome: string;
  perfil: string;
  setor?: string | null;
  setor_id?: string | null;
  tem_senha: boolean;
  ultimo_login_em?: string | null;
}
```

</Tab>
<Tab value="Rust">

```rust
use termo_core::auth::PaginaUsuarioItensItem;

pub struct PaginaUsuarioItensItem {
    pub atualizado_em: chrono::DateTime<chrono::Utc>,
    pub bloqueado_ate: Option<chrono::DateTime<chrono::Utc>>,
    pub cargo: Option<String>,
    pub cargo_id: Option<uuid::Uuid>,
    pub criado_em: chrono::DateTime<chrono::Utc>,
    pub dois_fatores_ativo: bool,
    pub e_master: bool,
    pub email: String,
    pub email_verificado: bool,
    pub funcao: Option<String>,
    pub funcao_id: Option<uuid::Uuid>,
    pub id: uuid::Uuid,
    pub imagem: Option<String>,
    pub master_pelo_ambiente: bool,
    pub nome: String,
    pub perfil: String,
    pub setor: Option<String>,
    pub setor_id: Option<uuid::Uuid>,
    pub tem_senha: bool,
    pub ultimo_login_em: Option<chrono::DateTime<chrono::Utc>>,
}
```

</Tab>
</Tabs>

### Usuario [#tipo-usuario]

<Tabs groupId="linguagem" persist items={["TypeScript", "Rust"]}>
<Tab value="TypeScript">

```ts
import type { Usuario } from "termo_core/auth";

export interface Usuario {
  atualizado_em: string;
  bloqueado_ate?: string | null;
  cargo?: string | null;
  cargo_id?: string | null;
  criado_em: string;
  dois_fatores_ativo: boolean;
  e_master: boolean;
  email: string;
  email_verificado: boolean;
  funcao?: string | null;
  funcao_id?: string | null;
  id: string;
  imagem?: string | null;
  master_pelo_ambiente: boolean;
  nome: string;
  perfil: string;
  setor?: string | null;
  setor_id?: string | null;
  tem_senha: boolean;
  ultimo_login_em?: string | null;
}
```

</Tab>
<Tab value="Rust">

```rust
use termo_core::auth::Usuario;

pub struct Usuario {
    pub atualizado_em: chrono::DateTime<chrono::Utc>,
    pub bloqueado_ate: Option<chrono::DateTime<chrono::Utc>>,
    pub cargo: Option<String>,
    pub cargo_id: Option<uuid::Uuid>,
    pub criado_em: chrono::DateTime<chrono::Utc>,
    pub dois_fatores_ativo: bool,
    pub e_master: bool,
    pub email: String,
    pub email_verificado: bool,
    pub funcao: Option<String>,
    pub funcao_id: Option<uuid::Uuid>,
    pub id: uuid::Uuid,
    pub imagem: Option<String>,
    pub master_pelo_ambiente: bool,
    pub nome: String,
    pub perfil: String,
    pub setor: Option<String>,
    pub setor_id: Option<uuid::Uuid>,
    pub tem_senha: bool,
    pub ultimo_login_em: Option<chrono::DateTime<chrono::Utc>>,
}
```

</Tab>
</Tabs>
