From b7cfd130a58577f022390fbe723f8b2e06c2a0d3 Mon Sep 17 00:00:00 2001 From: "Gabriel R. Antunes" Date: Tue, 29 Oct 2024 19:11:39 +0000 Subject: [PATCH] feat(api-service): implement business-logic resources up to 07-horario-academico --- api-service/src/app.controller.ts | 2 +- .../rules/types/IAuthzStatement.ts | 78 + .../00-00-base/arquivo/arquivo.controller.ts | 2 +- .../cidade/cidade.controller.ts | 2 +- .../estado/estado.controller.ts | 2 +- .../autenticacao.controller.ts | 2 +- .../usuario/usuario.controller.ts | 2 +- .../ambiente/ambiente.controller.ts | 2 +- .../02-ambientes/bloco/bloco.controller.ts | 2 +- .../02-ambientes/campus/campus.controller.ts | 2 +- .../reserva/reserva.controller.ts | 2 +- .../03-autorizacao/autorizacao.controller.ts | 2 +- .../perfil/perfil.controller.ts | 2 +- .../curso/curso.controller.ts | 2 +- .../disciplina/disciplina.controller.ts | 2 +- .../modalidade/modalidade.controller.ts | 2 +- .../nivel-formacao.controller.ts | 2 +- ...erta-formacao-nivel-formacao.controller.ts | 2 +- .../oferta-formacao-nivel-formacao.service.ts | 2 +- .../oferta-formacao.controller.ts | 2 +- .../calendario-letivo.controller.ts | 2 +- .../dia-calendario.controller.ts | 2 +- .../05-calendario/etapa/etapa.controller.ts | 2 +- .../05-calendario/evento/evento.controller.ts | 2 +- ...-formacao-intervalo-de-tempo.controller.ts | 4 +- ...rade-horario-oferta-formacao.controller.ts | 2 +- .../aula/aula.controller.ts | 2 +- .../diario-professor.controller.ts | 2 +- .../diario/diario.controller.ts | 2 +- .../turma/turma.controller.ts | 2 +- ...ario-preferencia-agrupamento.controller.ts | 2 +- .../disponibilidade-dia.controller.ts | 78 + .../disponibilidade-dia.module.ts | 13 + .../disponibilidade-dia.resolver.ts | 62 + .../disponibilidade-dia.service.ts | 329 + .../disponibilidade.controller.ts | 2 +- .../horario-academico.module.ts | 13 +- .../horario-gerado-aula.controller.ts | 2 +- .../horario-gerado.controller.ts | 2 +- .../professor-disponibilidade.controller.ts | 80 + .../professor-disponibilidade.module.ts | 14 + .../professor-disponibilidade.resolver.ts | 71 + .../professor-disponibilidade.service.ts | 308 + .../turma-disponibilidade.controller.ts | 80 + .../turma-disponibilidade.module.ts | 14 + .../turma-disponibilidade.resolver.ts | 71 + .../turma-disponibilidade.service.ts | 308 + .../gerar-horario.controller.ts | 2 +- .../database/context/database-context.core.ts | 4 + .../http/swagger/SetupSwaggerDocument.ts | 47 +- .../src/http/generated/LadesaApiClient.ts | 48 +- .../src/http/generated/schemas.gen.ts | 472 ++ .../src/http/generated/services.gen.ts | 284 +- .../src/http/generated/types.gen.ts | 335 + integrations/openapi-json/generated.json | 5763 ++++++++++------- 55 files changed, 6121 insertions(+), 2421 deletions(-) create mode 100644 api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.controller.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.module.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.resolver.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.service.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.controller.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.module.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.resolver.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.service.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.controller.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.module.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.resolver.ts create mode 100644 api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.service.ts diff --git a/api-service/src/app.controller.ts b/api-service/src/app.controller.ts index d8defa92..b9c5b488 100644 --- a/api-service/src/app.controller.ts +++ b/api-service/src/app.controller.ts @@ -2,7 +2,7 @@ import { Controller, Get } from "@nestjs/common"; import { ApiResponse, ApiTags } from "@nestjs/swagger"; import { AppService } from "./app.service"; -@ApiTags("Base") +@ApiTags("base") @Controller() export class AppController { constructor(private readonly appService: AppService) {} diff --git a/api-service/src/business-logic/authorization/rules/types/IAuthzStatement.ts b/api-service/src/business-logic/authorization/rules/types/IAuthzStatement.ts index 1f598721..9b50c766 100644 --- a/api-service/src/business-logic/authorization/rules/types/IAuthzStatement.ts +++ b/api-service/src/business-logic/authorization/rules/types/IAuthzStatement.ts @@ -506,6 +506,72 @@ export type IAuthzStatementDisponibilidadeFind = IBaseAuthzFilter<"disponibilida // ===================== +export type IAuthzStatementDisponibilidadeDiaCreate = IBaseAuthzCheck< + "disponibilidade_dia:create", + { + dto: LadesaTypings.DisponibilidadeDiaCreateOperationInput; + } +>; +export type IAuthzStatementDisponibilidadeDiaUpdate = IBaseAuthzFilter< + "disponibilidade_dia:update", + { + dto: LadesaTypings.DisponibilidadeDiaUpdateByIdOperationInput; + } +>; +export type IAuthzStatementDisponibilidadeDiaDelete = IBaseAuthzFilter< + "disponibilidade_dia:delete", + { + dto: LadesaTypings.DisponibilidadeDiaFindOneInputView; + } +>; +export type IAuthzStatementDisponibilidadeDiaFind = IBaseAuthzFilter<"disponibilidade_dia:find">; + +// ===================== + +export type IAuthzStatementTurmaDisponibilidadeCreate = IBaseAuthzCheck< + "turma_disponibilidade:create", + { + dto: LadesaTypings.TurmaDisponibilidadeCreateOperationInput; + } +>; +export type IAuthzStatementTurmaDisponibilidadeUpdate = IBaseAuthzFilter< + "turma_disponibilidade:update", + { + dto: LadesaTypings.TurmaDisponibilidadeUpdateByIdOperationInput; + } +>; +export type IAuthzStatementTurmaDisponibilidadeDelete = IBaseAuthzFilter< + "turma_disponibilidade:delete", + { + dto: LadesaTypings.TurmaDisponibilidadeFindOneInputView; + } +>; +export type IAuthzStatementTurmaDisponibilidadeFind = IBaseAuthzFilter<"turma_disponibilidade:find">; + +// ===================== + +export type IAuthzStatementProfessorDisponibilidadeCreate = IBaseAuthzCheck< + "professor_disponibilidade:create", + { + dto: LadesaTypings.ProfessorDisponibilidadeCreateOperationInput; + } +>; +export type IAuthzStatementProfessorDisponibilidadeUpdate = IBaseAuthzFilter< + "professor_disponibilidade:update", + { + dto: LadesaTypings.ProfessorDisponibilidadeUpdateByIdOperationInput; + } +>; +export type IAuthzStatementProfessorDisponibilidadeDelete = IBaseAuthzFilter< + "professor_disponibilidade:delete", + { + dto: LadesaTypings.ProfessorDisponibilidadeFindOneInputView; + } +>; +export type IAuthzStatementProfessorDisponibilidadeFind = IBaseAuthzFilter<"professor_disponibilidade:find">; + +// ===================== + export type IAuthzStatementDiarioPreferenciaAgrupamentoCreate = IBaseAuthzCheck< "diario_preferencia_agrupamento:create", { @@ -595,6 +661,9 @@ export type IAuthzStatementCheck = | IAuthzStatementEtapaCreate | IAuthzStatementAulaCreate | IAuthzStatementDisponibilidadeCreate + | IAuthzStatementDisponibilidadeDiaCreate + | IAuthzStatementTurmaDisponibilidadeCreate + | IAuthzStatementProfessorDisponibilidadeCreate | IAuthzStatementDiarioPreferenciaAgrupamentoCreate | IAuthzStatementHorarioGeradoCreate | IAuthzStatementHorarioGeradoAulaCreate; @@ -673,6 +742,15 @@ export type IAuthzStatementFilter = | IAuthzStatementDisponibilidadeUpdate | IAuthzStatementDisponibilidadeFind | IAuthzStatementDisponibilidadeDelete + | IAuthzStatementDisponibilidadeDiaUpdate + | IAuthzStatementDisponibilidadeDiaFind + | IAuthzStatementDisponibilidadeDiaDelete + | IAuthzStatementTurmaDisponibilidadeUpdate + | IAuthzStatementTurmaDisponibilidadeFind + | IAuthzStatementTurmaDisponibilidadeDelete + | IAuthzStatementProfessorDisponibilidadeUpdate + | IAuthzStatementProfessorDisponibilidadeFind + | IAuthzStatementProfessorDisponibilidadeDelete | IAuthzStatementDiarioPreferenciaAgrupamentoUpdate | IAuthzStatementDiarioPreferenciaAgrupamentoFind | IAuthzStatementDiarioPreferenciaAgrupamentoDelete diff --git a/api-service/src/business-logic/resources/00-00-base/arquivo/arquivo.controller.ts b/api-service/src/business-logic/resources/00-00-base/arquivo/arquivo.controller.ts index 7ba5199e..7cea1dac 100644 --- a/api-service/src/business-logic/resources/00-00-base/arquivo/arquivo.controller.ts +++ b/api-service/src/business-logic/resources/00-00-base/arquivo/arquivo.controller.ts @@ -5,7 +5,7 @@ import { Controller, Get, Param, Query, type StreamableFile } from "@nestjs/comm import { ApiTags } from "@nestjs/swagger"; import { ArquivoService } from "./arquivo.service"; -@ApiTags("Arquivos") +@ApiTags("arquivos") @Controller("/arquivos") export class ArquivoController { constructor(private arquivoService: ArquivoService) {} diff --git a/api-service/src/business-logic/resources/00-01-base-lugares/cidade/cidade.controller.ts b/api-service/src/business-logic/resources/00-01-base-lugares/cidade/cidade.controller.ts index 96c22d53..aa6fefc7 100644 --- a/api-service/src/business-logic/resources/00-01-base-lugares/cidade/cidade.controller.ts +++ b/api-service/src/business-logic/resources/00-01-base-lugares/cidade/cidade.controller.ts @@ -7,7 +7,7 @@ import { Controller, Get } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { CidadeService } from "./cidade.service"; -@ApiTags("Cidades") +@ApiTags("cidades") @Controller("/base/cidades") export class CidadeController { constructor(private cidadeService: CidadeService) {} diff --git a/api-service/src/business-logic/resources/00-01-base-lugares/estado/estado.controller.ts b/api-service/src/business-logic/resources/00-01-base-lugares/estado/estado.controller.ts index c312a90c..c5fad2a6 100644 --- a/api-service/src/business-logic/resources/00-01-base-lugares/estado/estado.controller.ts +++ b/api-service/src/business-logic/resources/00-01-base-lugares/estado/estado.controller.ts @@ -7,7 +7,7 @@ import { Controller, Get } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { EstadoService } from "./estado.service"; -@ApiTags("Estados") +@ApiTags("estados") @Controller("/base/estados") export class EstadoController { constructor(private estadoService: EstadoService) {} diff --git a/api-service/src/business-logic/resources/01-autenticacao/autenticacao.controller.ts b/api-service/src/business-logic/resources/01-autenticacao/autenticacao.controller.ts index 1952d673..c01fd455 100644 --- a/api-service/src/business-logic/resources/01-autenticacao/autenticacao.controller.ts +++ b/api-service/src/business-logic/resources/01-autenticacao/autenticacao.controller.ts @@ -8,7 +8,7 @@ import { Controller, Get, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { AutenticacaoService } from "./autenticacao.service"; -@ApiTags("Autenticacao") +@ApiTags("autenticacao") @Controller("/autenticacao") export class AutenticacaoController { constructor(private readonly autenticacaoService: AutenticacaoService) {} diff --git a/api-service/src/business-logic/resources/01-autenticacao/usuario/usuario.controller.ts b/api-service/src/business-logic/resources/01-autenticacao/usuario/usuario.controller.ts index 12745c5d..e9891fc9 100644 --- a/api-service/src/business-logic/resources/01-autenticacao/usuario/usuario.controller.ts +++ b/api-service/src/business-logic/resources/01-autenticacao/usuario/usuario.controller.ts @@ -8,7 +8,7 @@ import { ApiTags } from "@nestjs/swagger"; import { UsuarioService } from "./usuario.service"; @Controller("/usuarios") -@ApiTags("Usuarios") +@ApiTags("usuarios") export class UsuarioController { constructor(private usuarioService: UsuarioService) {} diff --git a/api-service/src/business-logic/resources/02-ambientes/ambiente/ambiente.controller.ts b/api-service/src/business-logic/resources/02-ambientes/ambiente/ambiente.controller.ts index 143b6ebd..cd25fd47 100644 --- a/api-service/src/business-logic/resources/02-ambientes/ambiente/ambiente.controller.ts +++ b/api-service/src/business-logic/resources/02-ambientes/ambiente/ambiente.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Param, ParseUUIDPipe, Patch, Post, Put, Upload import { ApiTags } from "@nestjs/swagger"; import { AmbienteService } from "./ambiente.service"; -@ApiTags("Ambientes") +@ApiTags("ambientes") @Controller("/ambientes") export class AmbienteController { constructor(private ambienteService: AmbienteService) {} diff --git a/api-service/src/business-logic/resources/02-ambientes/bloco/bloco.controller.ts b/api-service/src/business-logic/resources/02-ambientes/bloco/bloco.controller.ts index d8b310dc..cf35fb0c 100644 --- a/api-service/src/business-logic/resources/02-ambientes/bloco/bloco.controller.ts +++ b/api-service/src/business-logic/resources/02-ambientes/bloco/bloco.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Param, ParseUUIDPipe, Patch, Post, Put, Upload import { ApiTags } from "@nestjs/swagger"; import { BlocoService } from "./bloco.service"; -@ApiTags("Blocos") +@ApiTags("blocos") @Controller("/blocos") export class BlocoController { constructor(private blocoService: BlocoService) {} diff --git a/api-service/src/business-logic/resources/02-ambientes/campus/campus.controller.ts b/api-service/src/business-logic/resources/02-ambientes/campus/campus.controller.ts index e0da82a8..15796f86 100644 --- a/api-service/src/business-logic/resources/02-ambientes/campus/campus.controller.ts +++ b/api-service/src/business-logic/resources/02-ambientes/campus/campus.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { CampusService } from "./campus.service"; -@ApiTags("Campi") +@ApiTags("campi") @Controller("/campi") export class CampusController { constructor(private campusService: CampusService) {} diff --git a/api-service/src/business-logic/resources/02-ambientes/reserva/reserva.controller.ts b/api-service/src/business-logic/resources/02-ambientes/reserva/reserva.controller.ts index 4e4326fe..16ee7a00 100644 --- a/api-service/src/business-logic/resources/02-ambientes/reserva/reserva.controller.ts +++ b/api-service/src/business-logic/resources/02-ambientes/reserva/reserva.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { ReservaService } from "./reserva.service"; -@ApiTags("Reservas") +@ApiTags("reservas") @Controller("/reservas") export class ReservaController { constructor(private reservaService: ReservaService) {} diff --git a/api-service/src/business-logic/resources/03-autorizacao/autorizacao.controller.ts b/api-service/src/business-logic/resources/03-autorizacao/autorizacao.controller.ts index c98c7e1b..6ec19cda 100644 --- a/api-service/src/business-logic/resources/03-autorizacao/autorizacao.controller.ts +++ b/api-service/src/business-logic/resources/03-autorizacao/autorizacao.controller.ts @@ -2,7 +2,7 @@ import { Controller } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { AutorizacaoService } from "./autorizacao.service"; -@ApiTags("Autorizacao") +@ApiTags("autorizacao") @Controller("/autorizacao") export class AutorizacaoController { constructor(readonly autorizacaoService: AutorizacaoService) {} diff --git a/api-service/src/business-logic/resources/03-autorizacao/perfil/perfil.controller.ts b/api-service/src/business-logic/resources/03-autorizacao/perfil/perfil.controller.ts index 28f9e065..dedff6a7 100644 --- a/api-service/src/business-logic/resources/03-autorizacao/perfil/perfil.controller.ts +++ b/api-service/src/business-logic/resources/03-autorizacao/perfil/perfil.controller.ts @@ -8,7 +8,7 @@ import { ApiTags } from "@nestjs/swagger"; import { PerfilService } from "./perfil.service"; @Controller("/vinculos") -@ApiTags("Vinculos") +@ApiTags("perfis") export class PerfilController { constructor(private vinculoService: PerfilService) {} diff --git a/api-service/src/business-logic/resources/04-ensino-institucional/curso/curso.controller.ts b/api-service/src/business-logic/resources/04-ensino-institucional/curso/curso.controller.ts index 29b8df1d..86882d3b 100644 --- a/api-service/src/business-logic/resources/04-ensino-institucional/curso/curso.controller.ts +++ b/api-service/src/business-logic/resources/04-ensino-institucional/curso/curso.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Param, ParseUUIDPipe, Patch, Post, Put, Upload import { ApiTags } from "@nestjs/swagger"; import { CursoService } from "./curso.service"; -@ApiTags("Cursos") +@ApiTags("cursos") @Controller("/cursos") export class CursoController { constructor(private cursoService: CursoService) {} diff --git a/api-service/src/business-logic/resources/04-ensino-institucional/disciplina/disciplina.controller.ts b/api-service/src/business-logic/resources/04-ensino-institucional/disciplina/disciplina.controller.ts index 5633e5d5..1c2f0428 100644 --- a/api-service/src/business-logic/resources/04-ensino-institucional/disciplina/disciplina.controller.ts +++ b/api-service/src/business-logic/resources/04-ensino-institucional/disciplina/disciplina.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Param, ParseUUIDPipe, Patch, Post, Put, Upload import { ApiTags } from "@nestjs/swagger"; import { DisciplinaService } from "./disciplina.service"; -@ApiTags("Disciplinas") +@ApiTags("disciplinas") @Controller("/disciplinas") export class DisciplinaController { constructor(private disciplinaService: DisciplinaService) {} diff --git a/api-service/src/business-logic/resources/04-ensino-institucional/modalidade/modalidade.controller.ts b/api-service/src/business-logic/resources/04-ensino-institucional/modalidade/modalidade.controller.ts index 45ba489c..f4b4396b 100644 --- a/api-service/src/business-logic/resources/04-ensino-institucional/modalidade/modalidade.controller.ts +++ b/api-service/src/business-logic/resources/04-ensino-institucional/modalidade/modalidade.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { ModalidadeService } from "./modalidade.service"; -@ApiTags("Modalidades") +@ApiTags("modalidades") @Controller("/modalidades") export class ModalidadeController { constructor(private modalidadeService: ModalidadeService) {} diff --git a/api-service/src/business-logic/resources/04-ensino-institucional/nivel-formacao/nivel-formacao.controller.ts b/api-service/src/business-logic/resources/04-ensino-institucional/nivel-formacao/nivel-formacao.controller.ts index 56597343..35a2add0 100644 --- a/api-service/src/business-logic/resources/04-ensino-institucional/nivel-formacao/nivel-formacao.controller.ts +++ b/api-service/src/business-logic/resources/04-ensino-institucional/nivel-formacao/nivel-formacao.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { NivelFormacaoService } from "./nivel-formacao.service"; -@ApiTags("NivelFormacao") +@ApiTags("niveis-formacoes") @Controller("/niveis-formacoes") export class NivelFormacaoController { constructor(private nivelformacaoService: NivelFormacaoService) {} diff --git a/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao-nivel-formacao/oferta-formacao-nivel-formacao.controller.ts b/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao-nivel-formacao/oferta-formacao-nivel-formacao.controller.ts index 3d264410..f0bd4bc9 100644 --- a/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao-nivel-formacao/oferta-formacao-nivel-formacao.controller.ts +++ b/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao-nivel-formacao/oferta-formacao-nivel-formacao.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { OfertaFormacaoNivelFormacaoService } from "./oferta-formacao-nivel-formacao.service"; -@ApiTags("OfertaFormacaoNivelFormacao") +@ApiTags("ofertas-formacoes-niveis-formacoes") @Controller("/ofertas-formacoes-niveis-formacoes") export class OfertaFormacaoNivelFormacaoController { constructor(private ofertaFormacaoNivelFormacaoService: OfertaFormacaoNivelFormacaoService) {} diff --git a/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao-nivel-formacao/oferta-formacao-nivel-formacao.service.ts b/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao-nivel-formacao/oferta-formacao-nivel-formacao.service.ts index d331b7b2..3bfe908c 100644 --- a/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao-nivel-formacao/oferta-formacao-nivel-formacao.service.ts +++ b/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao-nivel-formacao/oferta-formacao-nivel-formacao.service.ts @@ -245,7 +245,7 @@ export class OfertaFormacaoNivelFormacaoService { this.ofertaFormacaoNivelFormacaoRepository.createQueryBuilder(aliasOfertaFormacaoNivelFormacao), ); - const dtoOfertaFormacaoNivelFormacao = pick(dto.body, ["nome", "slug"]); + const dtoOfertaFormacaoNivelFormacao = pick(dto.body, []); const ofertaFormacaoNivelFormacao = { id: currentOfertaFormacaoNivelFormacao.id, diff --git a/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao/oferta-formacao.controller.ts b/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao/oferta-formacao.controller.ts index 9a28389a..5bfdae79 100644 --- a/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao/oferta-formacao.controller.ts +++ b/api-service/src/business-logic/resources/04-ensino-institucional/oferta-formacao/oferta-formacao.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { OfertaFormacaoService } from "./oferta-formacao.service"; -@ApiTags("OfertaFormacao") +@ApiTags("ofertas-formacoes") @Controller("/ofertas-formacoes") export class OfertaFormacaoController { constructor(private ofertaFormacaoService: OfertaFormacaoService) {} diff --git a/api-service/src/business-logic/resources/05-calendario/calendario-letivo/calendario-letivo.controller.ts b/api-service/src/business-logic/resources/05-calendario/calendario-letivo/calendario-letivo.controller.ts index 240e2d97..9d4950bd 100644 --- a/api-service/src/business-logic/resources/05-calendario/calendario-letivo/calendario-letivo.controller.ts +++ b/api-service/src/business-logic/resources/05-calendario/calendario-letivo/calendario-letivo.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { CalendarioLetivoService } from "./calendario-letivo.service"; -@ApiTags("Calendarios Letivos") +@ApiTags("calendarios-letivos") @Controller("/calendarios-letivos") export class CalendarioLetivoController { constructor(private calendarioLetivoService: CalendarioLetivoService) {} diff --git a/api-service/src/business-logic/resources/05-calendario/dia-calendario/dia-calendario.controller.ts b/api-service/src/business-logic/resources/05-calendario/dia-calendario/dia-calendario.controller.ts index 39035b0a..9960770d 100644 --- a/api-service/src/business-logic/resources/05-calendario/dia-calendario/dia-calendario.controller.ts +++ b/api-service/src/business-logic/resources/05-calendario/dia-calendario/dia-calendario.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { DiaCalendarioService } from "./dia-calendario.service"; -@ApiTags("Dias Calendario") +@ApiTags("dias-calendarios") @Controller("/dias-calendario") export class DiaCalendarioController { constructor(private diaCalendarioService: DiaCalendarioService) {} diff --git a/api-service/src/business-logic/resources/05-calendario/etapa/etapa.controller.ts b/api-service/src/business-logic/resources/05-calendario/etapa/etapa.controller.ts index 9f14f13e..fcbb4436 100644 --- a/api-service/src/business-logic/resources/05-calendario/etapa/etapa.controller.ts +++ b/api-service/src/business-logic/resources/05-calendario/etapa/etapa.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { EtapaService } from "./etapa.service"; -@ApiTags("Etapas") +@ApiTags("etapas") @Controller("/etapas") export class EtapaController { constructor(private etapaService: EtapaService) {} diff --git a/api-service/src/business-logic/resources/05-calendario/evento/evento.controller.ts b/api-service/src/business-logic/resources/05-calendario/evento/evento.controller.ts index cae5f2ec..fd189fde 100644 --- a/api-service/src/business-logic/resources/05-calendario/evento/evento.controller.ts +++ b/api-service/src/business-logic/resources/05-calendario/evento/evento.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { EventoService } from "./evento.service"; -@ApiTags("Eventos") +@ApiTags("eventos") @Controller("/eventos") export class EventoController { constructor(private eventoService: EventoService) {} diff --git a/api-service/src/business-logic/resources/05-calendario/grade-horario-oferta-formacao-intervalo-de-tempo/grade-horario-oferta-formacao-intervalo-de-tempo.controller.ts b/api-service/src/business-logic/resources/05-calendario/grade-horario-oferta-formacao-intervalo-de-tempo/grade-horario-oferta-formacao-intervalo-de-tempo.controller.ts index d00eecb4..490753a2 100644 --- a/api-service/src/business-logic/resources/05-calendario/grade-horario-oferta-formacao-intervalo-de-tempo/grade-horario-oferta-formacao-intervalo-de-tempo.controller.ts +++ b/api-service/src/business-logic/resources/05-calendario/grade-horario-oferta-formacao-intervalo-de-tempo/grade-horario-oferta-formacao-intervalo-de-tempo.controller.ts @@ -7,8 +7,8 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { GradeHorarioOfertaFormacaoIntervaloDeTempoService } from "./grade-horario-oferta-formacao-intervalo-de-tempo.service"; -@ApiTags("GradeHorarioOfertaFormacaoIntervaloDeTempo") -@Controller("/grades-horario-ofertas-formacao-intervalos-de-tempo") +@ApiTags("grades-horarios-ofertas-formacoes-intervalos-de-tempo") +@Controller("/grades-horarios-ofertas-formacoes-intervalos-de-tempo") export class GradeHorarioOfertaFormacaoIntervaloDeTempoController { constructor(private gradeHorarioOfertaFormacaoIntervaloDeTempoService: GradeHorarioOfertaFormacaoIntervaloDeTempoService) {} diff --git a/api-service/src/business-logic/resources/05-calendario/grade-horario-oferta-formacao/grade-horario-oferta-formacao.controller.ts b/api-service/src/business-logic/resources/05-calendario/grade-horario-oferta-formacao/grade-horario-oferta-formacao.controller.ts index f7658778..4adeee32 100644 --- a/api-service/src/business-logic/resources/05-calendario/grade-horario-oferta-formacao/grade-horario-oferta-formacao.controller.ts +++ b/api-service/src/business-logic/resources/05-calendario/grade-horario-oferta-formacao/grade-horario-oferta-formacao.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { GradeHorarioOfertaFormacaoService } from "./grade-horario-oferta-formacao.service"; -@ApiTags("GradeHorarioOfertaFormacao") +@ApiTags("grades-horarios-ofertas-formacoes") @Controller("/grades-horarios-ofertas-formacoes") export class GradeHorarioOfertaFormacaoController { constructor(private gradeHorarioOfertaFormacaoService: GradeHorarioOfertaFormacaoService) {} diff --git a/api-service/src/business-logic/resources/06-ensino-discente/aula/aula.controller.ts b/api-service/src/business-logic/resources/06-ensino-discente/aula/aula.controller.ts index 66ac4d45..3fa215ec 100644 --- a/api-service/src/business-logic/resources/06-ensino-discente/aula/aula.controller.ts +++ b/api-service/src/business-logic/resources/06-ensino-discente/aula/aula.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { AulaService } from "./aula.service"; -@ApiTags("Aulas") +@ApiTags("aulas") @Controller("/aulas") export class AulaController { constructor(private aulaService: AulaService) {} diff --git a/api-service/src/business-logic/resources/06-ensino-discente/diario-professor/diario-professor.controller.ts b/api-service/src/business-logic/resources/06-ensino-discente/diario-professor/diario-professor.controller.ts index 328d68b1..39049ec2 100644 --- a/api-service/src/business-logic/resources/06-ensino-discente/diario-professor/diario-professor.controller.ts +++ b/api-service/src/business-logic/resources/06-ensino-discente/diario-professor/diario-professor.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { DiarioProfessorService } from "./diario-professor.service"; -@ApiTags("DiarioProfessor") +@ApiTags("diario-professor") @Controller("/diario-professor") export class DiarioProfessorController { constructor(private diarioProfessorService: DiarioProfessorService) {} diff --git a/api-service/src/business-logic/resources/06-ensino-discente/diario/diario.controller.ts b/api-service/src/business-logic/resources/06-ensino-discente/diario/diario.controller.ts index fb905dfa..6e19f96b 100644 --- a/api-service/src/business-logic/resources/06-ensino-discente/diario/diario.controller.ts +++ b/api-service/src/business-logic/resources/06-ensino-discente/diario/diario.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { DiarioService } from "./diario.service"; -@ApiTags("Diarios") +@ApiTags("diarios") @Controller("/diarios") export class DiarioController { constructor(private diarioService: DiarioService) {} diff --git a/api-service/src/business-logic/resources/06-ensino-discente/turma/turma.controller.ts b/api-service/src/business-logic/resources/06-ensino-discente/turma/turma.controller.ts index f523bb1f..a97ff889 100644 --- a/api-service/src/business-logic/resources/06-ensino-discente/turma/turma.controller.ts +++ b/api-service/src/business-logic/resources/06-ensino-discente/turma/turma.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Param, ParseUUIDPipe, Patch, Post, Put, Upload import { ApiTags } from "@nestjs/swagger"; import { TurmaService } from "./turma.service"; -@ApiTags("Turmas") +@ApiTags("turmas") @Controller("/turmas") export class TurmaController { constructor(private turmaService: TurmaService) {} diff --git a/api-service/src/business-logic/resources/07-horario-academico/diario-preferencia-agrupamento/diario-preferencia-agrupamento.controller.ts b/api-service/src/business-logic/resources/07-horario-academico/diario-preferencia-agrupamento/diario-preferencia-agrupamento.controller.ts index 3d68aa6c..276d1e7e 100644 --- a/api-service/src/business-logic/resources/07-horario-academico/diario-preferencia-agrupamento/diario-preferencia-agrupamento.controller.ts +++ b/api-service/src/business-logic/resources/07-horario-academico/diario-preferencia-agrupamento/diario-preferencia-agrupamento.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { DiarioPreferenciaAgrupamentoService } from "./diario-preferencia-agrupamento.service"; -@ApiTags("Diarios Preferencia Agrupamento") +@ApiTags("diarios-preferencia-agrupamento") @Controller("/diarios-preferencia-agrupamento") export class DiarioPreferenciaAgrupamentoController { constructor(private diarioPreferenciaAgrupamentoService: DiarioPreferenciaAgrupamentoService) {} diff --git a/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.controller.ts b/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.controller.ts new file mode 100644 index 00000000..1f9a00e9 --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.controller.ts @@ -0,0 +1,78 @@ +import { CombinedInput } from "@/business-logic/standards"; +import { Operation } from "@/business-logic/standards/especificacao/business-logic"; +import { type AccessContext, AccessContextHttp } from "@/infrastructure/access-context"; +import * as LadesaTypings from "@ladesa-ro/especificacao"; +import { Tokens } from "@ladesa-ro/especificacao"; +import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; +import { ApiTags } from "@nestjs/swagger"; +import { DisponibilidadeDiaService } from "./disponibilidade-dia.service"; + +@ApiTags("diarios-preferencia-agrupamento") +@Controller("/diarios-preferencia-agrupamento") +export class DisponibilidadeDiaController { + constructor(private disponibilidadeDiaService: DisponibilidadeDiaService) {} + + @Get("/") + @Operation(Tokens.DisponibilidadeDiaList) + async disponibilidadeDiaFindAll( + @AccessContextHttp() clientAccess: AccessContext, + @CombinedInput() + dto: LadesaTypings.DisponibilidadeDiaListOperationInput, + ): Promise { + return this.disponibilidadeDiaService.disponibilidadeDiaFindAll(clientAccess, dto); + } + + // + + @Get("/:id") + @Operation(Tokens.DisponibilidadeDiaFindOneById) + async disponibilidadeDiaFindById( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() + dto: LadesaTypings.DisponibilidadeDiaFindOneByIdOperationOutput, + ) { + return this.disponibilidadeDiaService.disponibilidadeDiaFindByIdStrict(accessContext, { id: dto.params.id }); + } + + // + + @Post("/") + @Operation(Tokens.DisponibilidadeDiaCreate) + async disponibilidadeDiaCreate( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() + dto: LadesaTypings.DisponibilidadeDiaCreateOperationInput, + ) { + return this.disponibilidadeDiaService.disponibilidadeDiaCreate(accessContext, dto); + } + + // + + @Patch("/:id") + @Operation(Tokens.DisponibilidadeDiaUpdateOneById) + async disponibilidadeDiaUpdate( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() + dto: LadesaTypings.DisponibilidadeDiaUpdateByIdOperationInput, + ) { + return this.disponibilidadeDiaService.disponibilidadeDiaUpdate(accessContext, dto); + } + + // + + @Delete("/:id") + @Operation(Tokens.DisponibilidadeDiaDeleteOneById) + async disponibilidadeDiaDeleteOneById( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() + dto: LadesaTypings.DisponibilidadeDiaDeleteByIdOperationInput, + ) { + return this.disponibilidadeDiaService.disponibilidadeDiaDeleteOneById(accessContext, { id: dto.params.id }); + } + + // +} diff --git a/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.module.ts b/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.module.ts new file mode 100644 index 00000000..a3d090d7 --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.module.ts @@ -0,0 +1,13 @@ +import { DisponibilidadeModule } from "@/business-logic/resources/07-horario-academico/disponibilidade/disponibilidade.module"; +import { Module } from "@nestjs/common"; +import { DisponibilidadeDiaController } from "./disponibilidade-dia.controller"; +import { DisponibilidadeDiaResolver } from "./disponibilidade-dia.resolver"; +import { DisponibilidadeDiaService } from "./disponibilidade-dia.service"; + +@Module({ + imports: [DisponibilidadeModule], + providers: [DisponibilidadeDiaService, DisponibilidadeDiaResolver], + controllers: [DisponibilidadeDiaController], + exports: [DisponibilidadeDiaService], +}) +export class DisponibilidadeDiaModule {} diff --git a/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.resolver.ts b/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.resolver.ts new file mode 100644 index 00000000..7e6826a3 --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.resolver.ts @@ -0,0 +1,62 @@ +import { CombinedInput } from "@/business-logic/standards"; +import { Operation } from "@/business-logic/standards/especificacao/business-logic"; +import { type AccessContext, AccessContextGraphQl } from "@/infrastructure/access-context"; +import * as LadesaTypings from "@ladesa-ro/especificacao"; +import { Tokens } from "@ladesa-ro/especificacao"; +import { Resolver } from "@nestjs/graphql"; +import { DisponibilidadeDiaService } from "./disponibilidade-dia.service"; + +@Resolver() +export class DisponibilidadeDiaResolver { + constructor(private disponibilidadeDiaService: DisponibilidadeDiaService) {} + // + @Operation(Tokens.DisponibilidadeDiaList) + async disponibilidadeDiaFindAll( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() + dto: LadesaTypings.DisponibilidadeDiaListOperationInput, + ) { + return this.disponibilidadeDiaService.disponibilidadeDiaFindAll(accessContext, dto); + } + // + @Operation(Tokens.DisponibilidadeDiaFindOneById) + async disponibilidadeDiaFindOneById( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() + dto: LadesaTypings.DisponibilidadeDiaFindOneByIdOperationOutput, + ) { + return this.disponibilidadeDiaService.disponibilidadeDiaFindByIdStrict(accessContext, { id: dto.params.id }); + } + // + @Operation(Tokens.DisponibilidadeDiaCreate) + async disponibilidadeDiaCreate( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() + dto: LadesaTypings.DisponibilidadeDiaCreateOperationInput, + ) { + return this.disponibilidadeDiaService.disponibilidadeDiaCreate(accessContext, dto); + } + // + @Operation(Tokens.DisponibilidadeDiaUpdateOneById) + async disponibilidadeDiaUpdate( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() + dto: LadesaTypings.DisponibilidadeDiaUpdateByIdOperationInput, + ) { + return this.disponibilidadeDiaService.disponibilidadeDiaUpdate(accessContext, dto); + } + // + @Operation(Tokens.DisponibilidadeDiaDeleteOneById) + async disponibilidadeDiaOneById( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() + dto: LadesaTypings.DisponibilidadeDiaDeleteByIdOperationInput, + ) { + return this.disponibilidadeDiaService.disponibilidadeDiaDeleteOneById(accessContext, { id: dto.params.id }); + } +} diff --git a/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.service.ts b/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.service.ts new file mode 100644 index 00000000..d8a627bc --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.service.ts @@ -0,0 +1,329 @@ +import { IntervaloDeTempoService } from "@/business-logic/resources/00-00-base/intervalo-de-tempo/intervalo-de-tempo.service"; +import { DisponibilidadeService } from "@/business-logic/resources/07-horario-academico/disponibilidade/disponibilidade.service"; +import { QbEfficientLoad } from "@/business-logic/standards/ladesa-spec/QbEfficientLoad"; +import { LadesaPaginatedResultDto, LadesaSearch } from "@/business-logic/standards/ladesa-spec/search/search-strategies"; +import type { AccessContext } from "@/infrastructure/access-context"; +import { paginateConfig } from "@/infrastructure/fixtures"; +import { DatabaseContextService } from "@/infrastructure/integrations/database"; +import type { DisponibilidadeDiaEntity } from "@/infrastructure/integrations/database/typeorm/entities"; +import * as LadesaTypings from "@ladesa-ro/especificacao"; +import { Injectable, NotFoundException } from "@nestjs/common"; +import { has, map, pick } from "lodash"; +import { FilterOperator } from "nestjs-paginate"; + +// ============================================================================ + +const aliasDisponibilidadeDia = "disponibilidade_dia"; + +// ============================================================================ + +@Injectable() +export class DisponibilidadeDiaService { + constructor( + private databaseContext: DatabaseContextService, + private disponibilidadeService: DisponibilidadeService, + private intervaloDeTempoService: IntervaloDeTempoService, + ) {} + + get disponibilidadeDiaRepository() { + return this.databaseContext.disponibilidadeDiaRepository; + } + + // + + async disponibilidadeDiaFindAll( + accessContext: AccessContext, + dto: LadesaTypings.DisponibilidadeDiaListOperationInput | null = null, + selection?: string[] | boolean, + ): Promise { + // ========================================================= + + const qb = this.disponibilidadeDiaRepository.createQueryBuilder(aliasDisponibilidadeDia); + + // ========================================================= + + await accessContext.applyFilter("disponibilidade_dia:find", qb, aliasDisponibilidadeDia, null); + + // ========================================================= + + const paginated = await LadesaSearch("#/", dto, qb, { + ...paginateConfig, + select: [ + // + "id", + // + "rrule", + // + "disponibilidade.id", + "disponibilidade.dataInicio", + "disponibilidade.dataFim", + // + "intervaloDeTempo.id", + "intervaloDeTempo.periodoInicio", + "intervaloDeTempo.periodoFim", + ], + sortableColumns: [ + // + "disponibilidade.dataInicio", + "disponibilidade.dataFim", + // + "intervaloDeTempo.periodoInicio", + "intervaloDeTempo.periodoFim", + ], + searchableColumns: [ + // + "id", + // + "rrule", + // + "disponibilidade.dataInicio", + "disponibilidade.dataFim", + // + "intervaloDeTempo.periodoInicio", + "intervaloDeTempo.periodoFim", + ], + relations: { + disponibilidade: true, + intervaloDeTempo: true, + }, + defaultSortBy: [], + filterableColumns: { + "disponibilidade.id": [FilterOperator.EQ], + "intervaloDeTempo.id": [FilterOperator.EQ], + }, + }); + + // ========================================================= + + qb.select([]); + QbEfficientLoad(LadesaTypings.Tokens.DisponibilidadeDiaFindOneResultView, qb, aliasDisponibilidadeDia, selection); + + // ========================================================= + + const pageItemsView = await qb.andWhereInIds(map(paginated.data, "id")).getMany(); + paginated.data = paginated.data.map((paginated) => pageItemsView.find((i) => i.id === paginated.id)!); + + // ========================================================= + + return LadesaPaginatedResultDto(paginated); + } + + async disponibilidadeDiaFindById( + accessContext: AccessContext, + dto: LadesaTypings.DisponibilidadeDiaFindOneInputView, + selection?: string[] | boolean, + ): Promise { + // ========================================================= + + const qb = this.disponibilidadeDiaRepository.createQueryBuilder(aliasDisponibilidadeDia); + + // ========================================================= + + await accessContext.applyFilter("disponibilidade_dia:find", qb, aliasDisponibilidadeDia, null); + + // ========================================================= + + qb.andWhere(`${aliasDisponibilidadeDia}.id = :id`, { + id: dto.id, + }); + + // ========================================================= + + qb.select([]); + QbEfficientLoad(LadesaTypings.Tokens.DisponibilidadeDiaFindOneResultView, qb, aliasDisponibilidadeDia, selection); + // ========================================================= + + const disponibilidadeDia = await qb.getOne(); + + // ========================================================= + + return disponibilidadeDia; + } + + async disponibilidadeDiaFindByIdStrict(accessContext: AccessContext, dto: LadesaTypings.DisponibilidadeDiaFindOneInputView, selection?: string[] | boolean) { + const disponibilidadeDia = await this.disponibilidadeDiaFindById(accessContext, dto, selection); + + if (!disponibilidadeDia) { + throw new NotFoundException(); + } + + return disponibilidadeDia; + } + + async disponibilidadeDiaFindByIdSimple( + accessContext: AccessContext, + id: LadesaTypings.DisponibilidadeDiaFindOneInputView["id"], + selection?: string[], + ): Promise { + // ========================================================= + + const qb = this.disponibilidadeDiaRepository.createQueryBuilder(aliasDisponibilidadeDia); + + // ========================================================= + + await accessContext.applyFilter("disponibilidade_dia:find", qb, aliasDisponibilidadeDia, null); + + // ========================================================= + + qb.andWhere(`${aliasDisponibilidadeDia}.id = :id`, { id }); + + // ========================================================= + + qb.select([]); + QbEfficientLoad(LadesaTypings.Tokens.DisponibilidadeDiaFindOneResultView, qb, aliasDisponibilidadeDia, selection); + + // ========================================================= + + const disponibilidadeDia = await qb.getOne(); + + // ========================================================= + + return disponibilidadeDia; + } + + async disponibilidadeDiaFindByIdSimpleStrict(accessContext: AccessContext, id: LadesaTypings.DisponibilidadeDiaFindOneInputView["id"], selection?: string[]) { + const disponibilidadeDia = await this.disponibilidadeDiaFindByIdSimple(accessContext, id, selection); + + if (!disponibilidadeDia) { + throw new NotFoundException(); + } + + return disponibilidadeDia; + } + + // + + async disponibilidadeDiaCreate(accessContext: AccessContext, dto: LadesaTypings.DisponibilidadeDiaCreateOperationInput) { + // ========================================================= + + await accessContext.ensurePermission("disponibilidade_dia:create", { dto }); + + // ========================================================= + + const dtoDisponibilidadeDia = pick(dto.body, ["rrule"]); + + const disponibilidadeDia = this.disponibilidadeDiaRepository.create(); + + this.disponibilidadeDiaRepository.merge(disponibilidadeDia, { + ...dtoDisponibilidadeDia, + }); + + // ========================================================= + + if (dto.body.disponibilidade) { + const disponibilidade = await this.disponibilidadeService.disponibilidadeFindByIdStrict(accessContext, dto.body.disponibilidade); + + this.disponibilidadeDiaRepository.merge(disponibilidadeDia, { + disponibilidade: { + id: disponibilidade.id, + }, + }); + } + + if (dto.body.intervaloDeTempo) { + const intervalo = await this.intervaloDeTempoService.intervaloCreateOrUpdate(accessContext, dto.body.intervaloDeTempo); + + this.disponibilidadeDiaRepository.merge(disponibilidadeDia, { + intervaloDeTempo: { + id: intervalo!.id, + }, + }); + } + + // ========================================================= + + await this.disponibilidadeDiaRepository.save(disponibilidadeDia); + + // ========================================================= + + return this.disponibilidadeDiaFindByIdStrict(accessContext, { + id: disponibilidadeDia.id, + }); + } + + async disponibilidadeDiaUpdate(accessContext: AccessContext, dto: LadesaTypings.DisponibilidadeDiaUpdateByIdOperationInput) { + // ========================================================= + + const currentDisponibilidadeDia = await this.disponibilidadeDiaFindByIdStrict(accessContext, { + id: dto.params.id, + }); + + // ========================================================= + + await accessContext.ensurePermission("disponibilidade_dia:update", { dto }, dto.params.id, this.disponibilidadeDiaRepository.createQueryBuilder(aliasDisponibilidadeDia)); + + const dtoDisponibilidadeDia = pick(dto.body, ["diaSemanaIso", "aulasSeguidas", "dataInicio", "dataFim"]); + + const disponibilidadeDia = { + id: currentDisponibilidadeDia.id, + } as DisponibilidadeDiaEntity; + + this.disponibilidadeDiaRepository.merge(disponibilidadeDia, { + ...dtoDisponibilidadeDia, + }); + + // ========================================================= + + if (has(dto.body, "disponibilidade") && dto.body.disponibilidade !== undefined) { + const disponibilidade = await this.disponibilidadeService.disponibilidadeFindByIdStrict(accessContext, dto.body.disponibilidade); + + this.disponibilidadeDiaRepository.merge(disponibilidadeDia, { + disponibilidade: { + id: disponibilidade.id, + }, + }); + } + + if (has(dto.body, "intervaloDeTempo") && dto.body.intervaloDeTempo !== undefined) { + const intervaloDeTempo = await this.intervaloDeTempoService.intervaloCreateOrUpdate(accessContext, dto.body.intervaloDeTempo!); + + this.disponibilidadeDiaRepository.merge(disponibilidadeDia, { + intervaloDeTempo: { + id: intervaloDeTempo!.id, + }, + }); + } + + // ========================================================= + + await this.disponibilidadeDiaRepository.save(disponibilidadeDia); + + // ========================================================= + + return this.disponibilidadeDiaFindByIdStrict(accessContext, { + id: disponibilidadeDia.id, + }); + } + + // + + async disponibilidadeDiaDeleteOneById(accessContext: AccessContext, dto: LadesaTypings.DisponibilidadeDiaFindOneInputView) { + // ========================================================= + + await accessContext.ensurePermission("disponibilidade_dia:delete", { dto }, dto.id, this.disponibilidadeDiaRepository.createQueryBuilder(aliasDisponibilidadeDia)); + + // ========================================================= + + const disponibilidadeDia = await this.disponibilidadeDiaFindByIdStrict(accessContext, dto); + + // ========================================================= + + if (disponibilidadeDia) { + await this.disponibilidadeDiaRepository + .createQueryBuilder(aliasDisponibilidadeDia) + .update() + .set({ + dateDeleted: "NOW()", + }) + .where("id = :disponibilidadeDiaId", { + disponibilidadeDiaId: disponibilidadeDia.id, + }) + .andWhere("dateDeleted IS NULL") + .execute(); + } + + // ========================================================= + + return true; + } +} diff --git a/api-service/src/business-logic/resources/07-horario-academico/disponibilidade/disponibilidade.controller.ts b/api-service/src/business-logic/resources/07-horario-academico/disponibilidade/disponibilidade.controller.ts index 4fbbc1ba..034a1adc 100644 --- a/api-service/src/business-logic/resources/07-horario-academico/disponibilidade/disponibilidade.controller.ts +++ b/api-service/src/business-logic/resources/07-horario-academico/disponibilidade/disponibilidade.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { DisponibilidadeService } from "./disponibilidade.service"; -@ApiTags("Disponibilidades") +@ApiTags("disponibilidades") @Controller("/disponibilidades") export class DisponibilidadeController { constructor(private disponibilidadeService: DisponibilidadeService) {} diff --git a/api-service/src/business-logic/resources/07-horario-academico/horario-academico.module.ts b/api-service/src/business-logic/resources/07-horario-academico/horario-academico.module.ts index 70cbbb59..d5201817 100644 --- a/api-service/src/business-logic/resources/07-horario-academico/horario-academico.module.ts +++ b/api-service/src/business-logic/resources/07-horario-academico/horario-academico.module.ts @@ -1,3 +1,6 @@ +import { DisponibilidadeDiaModule } from "@/business-logic/resources/07-horario-academico/disponibilidade-dia/disponibilidade-dia.module"; +import { ProfessorDisponibilidadeModule } from "@/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.module"; +import { TurmaDisponibilidadeModule } from "@/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.module"; import { Module } from "@nestjs/common"; import { DiarioPreferenciaAgrupamentoModule } from "./diario-preferencia-agrupamento/diario-preferencia-agrupamento.module"; import { DisponibilidadeModule } from "./disponibilidade/disponibilidade.module"; @@ -5,6 +8,14 @@ import { HorarioGeradoAulaModule } from "./horario-gerado-aula/horario-gerado-au import { HorarioGeradoModule } from "./horario-gerado/horario-gerado.module"; @Module({ - imports: [DisponibilidadeModule, DiarioPreferenciaAgrupamentoModule, HorarioGeradoModule, HorarioGeradoAulaModule], + imports: [ + DisponibilidadeModule, + DisponibilidadeDiaModule, + TurmaDisponibilidadeModule, + ProfessorDisponibilidadeModule, + DiarioPreferenciaAgrupamentoModule, + HorarioGeradoModule, + HorarioGeradoAulaModule, + ], }) export class HorarioAcademicoModule {} diff --git a/api-service/src/business-logic/resources/07-horario-academico/horario-gerado-aula/horario-gerado-aula.controller.ts b/api-service/src/business-logic/resources/07-horario-academico/horario-gerado-aula/horario-gerado-aula.controller.ts index 7ab06339..cf3bdf95 100644 --- a/api-service/src/business-logic/resources/07-horario-academico/horario-gerado-aula/horario-gerado-aula.controller.ts +++ b/api-service/src/business-logic/resources/07-horario-academico/horario-gerado-aula/horario-gerado-aula.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { HorarioGeradoAulaService } from "./horario-gerado-aula.service"; -@ApiTags("Horarios Gerados Aula") +@ApiTags("horarios-gerados-aula") @Controller("/horarios-gerados-aula") export class HorarioGeradoAulaController { constructor(private horarioGeradoAulaService: HorarioGeradoAulaService) {} diff --git a/api-service/src/business-logic/resources/07-horario-academico/horario-gerado/horario-gerado.controller.ts b/api-service/src/business-logic/resources/07-horario-academico/horario-gerado/horario-gerado.controller.ts index 565d1fd0..89dc35da 100644 --- a/api-service/src/business-logic/resources/07-horario-academico/horario-gerado/horario-gerado.controller.ts +++ b/api-service/src/business-logic/resources/07-horario-academico/horario-gerado/horario-gerado.controller.ts @@ -7,7 +7,7 @@ import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { HorarioGeradoService } from "./horario-gerado.service"; -@ApiTags("Horarios gerados") +@ApiTags("horarios-gerados") @Controller("/horarios-gerados") export class HorarioGeradoController { constructor(private horarioGeradoService: HorarioGeradoService) {} diff --git a/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.controller.ts b/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.controller.ts new file mode 100644 index 00000000..17388abf --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.controller.ts @@ -0,0 +1,80 @@ +import { CombinedInput } from "@/business-logic/standards"; +import { Operation } from "@/business-logic/standards/especificacao/business-logic"; +import { type AccessContext, AccessContextHttp } from "@/infrastructure/access-context"; +import * as LadesaTypings from "@ladesa-ro/especificacao"; +import { Tokens } from "@ladesa-ro/especificacao"; +import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; +import { ApiTags } from "@nestjs/swagger"; +import { ProfessorDisponibilidadeService } from "./professor-disponibilidade.service"; + +@ApiTags("professores-disponibilidades") +@Controller("/professores-disponibilidades") +export class ProfessorDisponibilidadeController { + constructor(private professorDisponibilidadeService: ProfessorDisponibilidadeService) {} + + // + + @Get("/") + @Operation(Tokens.ProfessorDisponibilidadeList) + async professorDisponibilidadeFindAll( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.ProfessorDisponibilidadeListOperationInput, + ): Promise { + return this.professorDisponibilidadeService.professorDisponibilidadeFindAll(accessContext, dto); + } + + // + + @Get("/:id") + @Operation(Tokens.ProfessorDisponibilidadeFindOneById) + async professorDisponibilidadeFindById( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.ProfessorDisponibilidadeFindOneByIdOperationOutput, + ) { + return this.professorDisponibilidadeService.professorDisponibilidadeFindByIdStrict(accessContext, { + id: dto.params.id, + }); + } + + // + + @Post("/") + @Operation(Tokens.ProfessorDisponibilidadeCreate) + async professorDisponibilidadeCreate( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.ProfessorDisponibilidadeCreateOperationInput, + ) { + return this.professorDisponibilidadeService.professorDisponibilidadeCreate(accessContext, dto); + } + + // + + @Patch("/:id") + @Operation(Tokens.ProfessorDisponibilidadeUpdateOneById) + async professorDisponibilidadeUpdate( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.ProfessorDisponibilidadeUpdateByIdOperationInput, + ) { + return this.professorDisponibilidadeService.professorDisponibilidadeUpdate(accessContext, dto); + } + + // + + @Delete("/:id") + @Operation(Tokens.ProfessorDisponibilidadeDeleteOneById) + async professorDisponibilidadeDeleteOneById( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.ProfessorDisponibilidadeDeleteByIdOperationInput, + ) { + return this.professorDisponibilidadeService.professorDisponibilidadeDeleteOneById(accessContext, { + id: dto.params.id, + }); + } + + // +} diff --git a/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.module.ts b/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.module.ts new file mode 100644 index 00000000..97407f6a --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.module.ts @@ -0,0 +1,14 @@ +import { PerfilModule } from "@/business-logic/resources/03-autorizacao/perfil/perfil.module"; +import { DisponibilidadeModule } from "@/business-logic/resources/07-horario-academico/disponibilidade/disponibilidade.module"; +import { Module } from "@nestjs/common"; +import { ProfessorDisponibilidadeController } from "./professor-disponibilidade.controller"; +import { ProfessorDisponibilidadeResolver } from "./professor-disponibilidade.resolver"; +import { ProfessorDisponibilidadeService } from "./professor-disponibilidade.service"; + +@Module({ + imports: [PerfilModule, DisponibilidadeModule], + controllers: [ProfessorDisponibilidadeController], + providers: [ProfessorDisponibilidadeService, ProfessorDisponibilidadeResolver], + exports: [ProfessorDisponibilidadeService], +}) +export class ProfessorDisponibilidadeModule {} diff --git a/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.resolver.ts b/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.resolver.ts new file mode 100644 index 00000000..ca9a14c6 --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.resolver.ts @@ -0,0 +1,71 @@ +import { CombinedInput, graphqlExtractSelection } from "@/business-logic/standards"; +import { Operation } from "@/business-logic/standards/especificacao/business-logic"; +import { type AccessContext, AccessContextGraphQl } from "@/infrastructure/access-context"; +import * as LadesaTypings from "@ladesa-ro/especificacao"; +import { Tokens } from "@ladesa-ro/especificacao"; +import { Info as GqlInfo, Resolver as GqlResolver } from "@nestjs/graphql"; +import type { GraphQLResolveInfo } from "graphql"; +import { ProfessorDisponibilidadeService } from "./professor-disponibilidade.service"; + +@GqlResolver() +export class ProfessorDisponibilidadeResolver { + constructor( + // + private professorDisponibilidadeService: ProfessorDisponibilidadeService, + ) {} + // + @Operation(Tokens.ProfessorDisponibilidadeList) + async professorDisponibilidadeFindAll( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.ProfessorDisponibilidadeListOperationInput, + @GqlInfo() info: GraphQLResolveInfo, + ) { + return this.professorDisponibilidadeService.professorDisponibilidadeFindAll(accessContext, dto, graphqlExtractSelection(info, "paginated")); + } + // + @Operation(Tokens.ProfessorDisponibilidadeFindOneById) + async professorDisponibilidadeFindOneById( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.ProfessorDisponibilidadeFindOneByIdOperationOutput, + @GqlInfo() info: GraphQLResolveInfo, + ) { + return this.professorDisponibilidadeService.professorDisponibilidadeFindByIdStrict( + accessContext, + { + id: dto.params.id, + }, + ["id", ...graphqlExtractSelection(info)], + ); + } + // + @Operation(Tokens.ProfessorDisponibilidadeCreate) + async professorDisponibilidadeCreate( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.ProfessorDisponibilidadeCreateOperationInput, + ) { + return this.professorDisponibilidadeService.professorDisponibilidadeCreate(accessContext, dto); + } + + @Operation(Tokens.ProfessorDisponibilidadeUpdateOneById) + async professorDisponibilidadeUpdate( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.ProfessorDisponibilidadeUpdateByIdOperationInput, + ) { + return this.professorDisponibilidadeService.professorDisponibilidadeUpdate(accessContext, dto); + } + + @Operation(Tokens.ProfessorDisponibilidadeDeleteOneById) + async professorDisponibilidadeDeleteOneById( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.ProfessorDisponibilidadeDeleteByIdOperationInput, + ) { + return this.professorDisponibilidadeService.professorDisponibilidadeDeleteOneById(accessContext, { + id: dto.params.id, + }); + } +} diff --git a/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.service.ts b/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.service.ts new file mode 100644 index 00000000..6540d8ec --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/professor-disponibilidade/professor-disponibilidade.service.ts @@ -0,0 +1,308 @@ +import { PerfilService } from "@/business-logic/resources/03-autorizacao/perfil/perfil.service"; +import { DisponibilidadeService } from "@/business-logic/resources/07-horario-academico/disponibilidade/disponibilidade.service"; +import { QbEfficientLoad } from "@/business-logic/standards/ladesa-spec/QbEfficientLoad"; +import { LadesaPaginatedResultDto, LadesaSearch } from "@/business-logic/standards/ladesa-spec/search/search-strategies"; +import type { AccessContext } from "@/infrastructure/access-context"; +import { paginateConfig } from "@/infrastructure/fixtures"; +import { DatabaseContextService } from "@/infrastructure/integrations/database"; +import type { ProfessorDisponibilidadeEntity } from "@/infrastructure/integrations/database/typeorm/entities"; +import * as LadesaTypings from "@ladesa-ro/especificacao"; +import { Injectable, NotFoundException } from "@nestjs/common"; +import { has, map, pick } from "lodash"; +import { FilterOperator } from "nestjs-paginate"; + +// ============================================================================ + +const aliasProfessorDisponibilidade = "professor_disponibilidade"; + +// ============================================================================ + +@Injectable() +export class ProfessorDisponibilidadeService { + constructor( + private databaseContext: DatabaseContextService, + private perfilService: PerfilService, + private disponibilidadeService: DisponibilidadeService, + ) {} + + get professorDisponibilidadeRepository() { + return this.databaseContext.professorDisponibilidadeRepository; + } + + // + + async professorDisponibilidadeFindAll( + accessContext: AccessContext, + dto: LadesaTypings.ProfessorDisponibilidadeListOperationInput | null = null, + selection?: string[], + ): Promise { + // ========================================================= + + const qb = this.professorDisponibilidadeRepository.createQueryBuilder(aliasProfessorDisponibilidade); + + // ========================================================= + + await accessContext.applyFilter("professor_disponibilidade:find", qb, aliasProfessorDisponibilidade, null); + + // ========================================================= + + const paginated = await LadesaSearch("#/", dto, qb, { + ...paginateConfig, + select: [ + // + "id", + // + "dateCreated", + // + ], + relations: { + perfil: true, + disponibilidade: true, + }, + sortableColumns: [ + // + "dateCreated", + ], + searchableColumns: [ + // + "id", + // + ], + defaultSortBy: [["dateCreated", "ASC"]], + filterableColumns: { + "perfil.id": [FilterOperator.EQ], + "disponibilidade.id": [FilterOperator.EQ], + }, + }); + + // ========================================================= + + qb.select([]); + QbEfficientLoad(LadesaTypings.Tokens.ProfessorDisponibilidadeView, qb, aliasProfessorDisponibilidade, selection); + + // ========================================================= + + const pageItemsView = await qb.andWhereInIds(map(paginated.data, "id")).getMany(); + paginated.data = paginated.data.map((paginated) => pageItemsView.find((i) => i.id === paginated.id)!); + + // ========================================================= + + return LadesaPaginatedResultDto(paginated); + } + + async professorDisponibilidadeFindById( + accessContext: AccessContext | null, + dto: LadesaTypings.ProfessorDisponibilidadeFindOneInputView, + selection?: string[], + ): Promise { + // ========================================================= + + const qb = this.professorDisponibilidadeRepository.createQueryBuilder(aliasProfessorDisponibilidade); + + // ========================================================= + + if (accessContext) { + await accessContext.applyFilter("professor_disponibilidade:find", qb, aliasProfessorDisponibilidade, null); + } + + // ========================================================= + + qb.andWhere(`${aliasProfessorDisponibilidade}.id = :id`, { id: dto.id }); + + // ========================================================= + + qb.select([]); + QbEfficientLoad(LadesaTypings.Tokens.ProfessorDisponibilidadeView, qb, aliasProfessorDisponibilidade, selection); + + // ========================================================= + + const professorDisponibilidade = await qb.getOne(); + + // ========================================================= + + return professorDisponibilidade; + } + + async professorDisponibilidadeFindByIdStrict(accessContext: AccessContext, dto: LadesaTypings.ProfessorDisponibilidadeFindOneInputView, selection?: string[]) { + const professorDisponibilidade = await this.professorDisponibilidadeFindById(accessContext, dto, selection); + + if (!professorDisponibilidade) { + throw new NotFoundException(); + } + + return professorDisponibilidade; + } + + async professorDisponibilidadeFindByIdSimple( + accessContext: AccessContext, + id: LadesaTypings.ProfessorDisponibilidadeFindOneInputView["id"], + selection?: string[], + ): Promise { + // ========================================================= + + const qb = this.professorDisponibilidadeRepository.createQueryBuilder(aliasProfessorDisponibilidade); + + // ========================================================= + + await accessContext.applyFilter("professor_disponibilidade:find", qb, aliasProfessorDisponibilidade, null); + + // ========================================================= + + qb.andWhere(`${aliasProfessorDisponibilidade}.id = :id`, { id }); + + // ========================================================= + + qb.select([]); + QbEfficientLoad(LadesaTypings.Tokens.ProfessorDisponibilidadeView, qb, aliasProfessorDisponibilidade, selection); + + // ========================================================= + + const professorDisponibilidade = await qb.getOne(); + + // ========================================================= + + return professorDisponibilidade; + } + + async professorDisponibilidadeFindByIdSimpleStrict(accessContext: AccessContext, id: LadesaTypings.ProfessorDisponibilidadeFindOneInputView["id"], selection?: string[]) { + const professorDisponibilidade = await this.professorDisponibilidadeFindByIdSimple(accessContext, id, selection); + + if (!professorDisponibilidade) { + throw new NotFoundException(); + } + + return professorDisponibilidade; + } + + // + + async professorDisponibilidadeCreate(accessContext: AccessContext, dto: LadesaTypings.ProfessorDisponibilidadeCreateOperationInput) { + // ========================================================= + + await accessContext.ensurePermission("professor_disponibilidade:create", { dto }); + + // ========================================================= + + const dtoProfessorDisponibilidade = pick(dto.body, []); + + const professorDisponibilidade = this.professorDisponibilidadeRepository.create(); + + this.professorDisponibilidadeRepository.merge(professorDisponibilidade, { + ...dtoProfessorDisponibilidade, + }); + + // ========================================================= + + if (dto.body.perfil) { + const perfil = await this.perfilService.perfilFindByIdStrict(accessContext, dto.body.perfil); + + this.professorDisponibilidadeRepository.merge(professorDisponibilidade, { + perfil: { + id: perfil.id, + }, + }); + } + + // ========================================================= + + if (dto.body.disponibilidade) { + const disponibilidade = await this.disponibilidadeService.disponibilidadeFindByIdSimpleStrict(accessContext, dto.body.disponibilidade.id); + + this.professorDisponibilidadeRepository.merge(professorDisponibilidade, { + disponibilidade: { + id: disponibilidade.id, + }, + }); + } + + // ========================================================= + + await this.professorDisponibilidadeRepository.save(professorDisponibilidade); + + // ========================================================= + + return this.professorDisponibilidadeFindByIdStrict(accessContext, { id: professorDisponibilidade.id }); + } + + async professorDisponibilidadeUpdate(accessContext: AccessContext, dto: LadesaTypings.ProfessorDisponibilidadeUpdateByIdOperationInput) { + // ========================================================= + + const currentProfessorDisponibilidade = await this.professorDisponibilidadeFindByIdStrict(accessContext, { + id: dto.params.id, + }); + + // ========================================================= + + await accessContext.ensurePermission("professor_disponibilidade:update", { dto }, dto.params.id, this.professorDisponibilidadeRepository.createQueryBuilder(aliasProfessorDisponibilidade)); + + const dtoProfessorDisponibilidade = pick(dto.body, []); + + const professorDisponibilidade = { + id: currentProfessorDisponibilidade.id, + }; + + this.professorDisponibilidadeRepository.merge(professorDisponibilidade, { + ...dtoProfessorDisponibilidade, + }); + + // ========================================================= + + if (has(dto.body, "perfil") && dto.body.perfil !== undefined) { + const perfil = dto.body.perfil && (await this.perfilService.perfilFindByIdStrict(accessContext, dto.body.perfil)); + + this.professorDisponibilidadeRepository.merge(professorDisponibilidade, { + perfil: perfil && { + id: perfil.id, + }, + }); + } + + if (has(dto.body, "disponibilidade") && dto.body.disponibilidade !== undefined) { + const disponibilidade = dto.body.disponibilidade && (await this.disponibilidadeService.disponibilidadeFindByIdSimpleStrict(accessContext, dto.body.disponibilidade.id)); + + this.professorDisponibilidadeRepository.merge(professorDisponibilidade, { + disponibilidade: disponibilidade && { + id: disponibilidade.id, + }, + }); + } + + // ========================================================= + + await this.professorDisponibilidadeRepository.save(professorDisponibilidade); + + // ========================================================= + + return this.professorDisponibilidadeFindByIdStrict(accessContext, { id: professorDisponibilidade.id }); + } + + // + + async professorDisponibilidadeDeleteOneById(accessContext: AccessContext, dto: LadesaTypings.ProfessorDisponibilidadeFindOneInputView) { + // ========================================================= + + await accessContext.ensurePermission("professor_disponibilidade:delete", { dto }, dto.id, this.professorDisponibilidadeRepository.createQueryBuilder(aliasProfessorDisponibilidade)); + + // ========================================================= + + const professorDisponibilidade = await this.professorDisponibilidadeFindByIdStrict(accessContext, dto); + + // ========================================================= + + if (professorDisponibilidade) { + await this.professorDisponibilidadeRepository + .createQueryBuilder(aliasProfessorDisponibilidade) + .update() + .set({ + dateDeleted: "NOW()", + }) + .where("id = :professorDisponibilidadeId", { professorDisponibilidadeId: professorDisponibilidade.id }) + .andWhere("dateDeleted IS NULL") + .execute(); + } + + // ========================================================= + + return true; + } +} diff --git a/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.controller.ts b/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.controller.ts new file mode 100644 index 00000000..31f0ca91 --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.controller.ts @@ -0,0 +1,80 @@ +import { CombinedInput } from "@/business-logic/standards"; +import { Operation } from "@/business-logic/standards/especificacao/business-logic"; +import { type AccessContext, AccessContextHttp } from "@/infrastructure/access-context"; +import * as LadesaTypings from "@ladesa-ro/especificacao"; +import { Tokens } from "@ladesa-ro/especificacao"; +import { Controller, Delete, Get, Patch, Post } from "@nestjs/common"; +import { ApiTags } from "@nestjs/swagger"; +import { TurmaDisponibilidadeService } from "./turma-disponibilidade.service"; + +@ApiTags("turmas-disponibilidades") +@Controller("/turmas-disponibilidades") +export class TurmaDisponibilidadeController { + constructor(private turmaDisponibilidadeService: TurmaDisponibilidadeService) {} + + // + + @Get("/") + @Operation(Tokens.TurmaDisponibilidadeList) + async turmaDisponibilidadeFindAll( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.TurmaDisponibilidadeListOperationInput, + ): Promise { + return this.turmaDisponibilidadeService.turmaDisponibilidadeFindAll(accessContext, dto); + } + + // + + @Get("/:id") + @Operation(Tokens.TurmaDisponibilidadeFindOneById) + async turmaDisponibilidadeFindById( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.TurmaDisponibilidadeFindOneByIdOperationOutput, + ) { + return this.turmaDisponibilidadeService.turmaDisponibilidadeFindByIdStrict(accessContext, { + id: dto.params.id, + }); + } + + // + + @Post("/") + @Operation(Tokens.TurmaDisponibilidadeCreate) + async turmaDisponibilidadeCreate( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.TurmaDisponibilidadeCreateOperationInput, + ) { + return this.turmaDisponibilidadeService.turmaDisponibilidadeCreate(accessContext, dto); + } + + // + + @Patch("/:id") + @Operation(Tokens.TurmaDisponibilidadeUpdateOneById) + async turmaDisponibilidadeUpdate( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.TurmaDisponibilidadeUpdateByIdOperationInput, + ) { + return this.turmaDisponibilidadeService.turmaDisponibilidadeUpdate(accessContext, dto); + } + + // + + @Delete("/:id") + @Operation(Tokens.TurmaDisponibilidadeDeleteOneById) + async turmaDisponibilidadeDeleteOneById( + // + @AccessContextHttp() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.TurmaDisponibilidadeDeleteByIdOperationInput, + ) { + return this.turmaDisponibilidadeService.turmaDisponibilidadeDeleteOneById(accessContext, { + id: dto.params.id, + }); + } + + // +} diff --git a/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.module.ts b/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.module.ts new file mode 100644 index 00000000..216c85c0 --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.module.ts @@ -0,0 +1,14 @@ +import { TurmaModule } from "@/business-logic/resources/06-ensino-discente/turma/turma.module"; +import { DisponibilidadeModule } from "@/business-logic/resources/07-horario-academico/disponibilidade/disponibilidade.module"; +import { Module } from "@nestjs/common"; +import { TurmaDisponibilidadeController } from "./turma-disponibilidade.controller"; +import { TurmaDisponibilidadeResolver } from "./turma-disponibilidade.resolver"; +import { TurmaDisponibilidadeService } from "./turma-disponibilidade.service"; + +@Module({ + imports: [TurmaModule, DisponibilidadeModule], + controllers: [TurmaDisponibilidadeController], + providers: [TurmaDisponibilidadeService, TurmaDisponibilidadeResolver], + exports: [TurmaDisponibilidadeService], +}) +export class TurmaDisponibilidadeModule {} diff --git a/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.resolver.ts b/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.resolver.ts new file mode 100644 index 00000000..0ad70451 --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.resolver.ts @@ -0,0 +1,71 @@ +import { CombinedInput, graphqlExtractSelection } from "@/business-logic/standards"; +import { Operation } from "@/business-logic/standards/especificacao/business-logic"; +import { type AccessContext, AccessContextGraphQl } from "@/infrastructure/access-context"; +import * as LadesaTypings from "@ladesa-ro/especificacao"; +import { Tokens } from "@ladesa-ro/especificacao"; +import { Info as GqlInfo, Resolver as GqlResolver } from "@nestjs/graphql"; +import type { GraphQLResolveInfo } from "graphql"; +import { TurmaDisponibilidadeService } from "./turma-disponibilidade.service"; + +@GqlResolver() +export class TurmaDisponibilidadeResolver { + constructor( + // + private turmaDisponibilidadeService: TurmaDisponibilidadeService, + ) {} + // + @Operation(Tokens.TurmaDisponibilidadeList) + async turmaDisponibilidadeFindAll( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.TurmaDisponibilidadeListOperationInput, + @GqlInfo() info: GraphQLResolveInfo, + ) { + return this.turmaDisponibilidadeService.turmaDisponibilidadeFindAll(accessContext, dto, graphqlExtractSelection(info, "paginated")); + } + // + @Operation(Tokens.TurmaDisponibilidadeFindOneById) + async turmaDisponibilidadeFindOneById( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.TurmaDisponibilidadeFindOneByIdOperationOutput, + @GqlInfo() info: GraphQLResolveInfo, + ) { + return this.turmaDisponibilidadeService.turmaDisponibilidadeFindByIdStrict( + accessContext, + { + id: dto.params.id, + }, + ["id", ...graphqlExtractSelection(info)], + ); + } + // + @Operation(Tokens.TurmaDisponibilidadeCreate) + async turmaDisponibilidadeCreate( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.TurmaDisponibilidadeCreateOperationInput, + ) { + return this.turmaDisponibilidadeService.turmaDisponibilidadeCreate(accessContext, dto); + } + + @Operation(Tokens.TurmaDisponibilidadeUpdateOneById) + async turmaDisponibilidadeUpdate( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.TurmaDisponibilidadeUpdateByIdOperationInput, + ) { + return this.turmaDisponibilidadeService.turmaDisponibilidadeUpdate(accessContext, dto); + } + + @Operation(Tokens.TurmaDisponibilidadeDeleteOneById) + async turmaDisponibilidadeDeleteOneById( + // + @AccessContextGraphQl() accessContext: AccessContext, + @CombinedInput() dto: LadesaTypings.TurmaDisponibilidadeDeleteByIdOperationInput, + ) { + return this.turmaDisponibilidadeService.turmaDisponibilidadeDeleteOneById(accessContext, { + id: dto.params.id, + }); + } +} diff --git a/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.service.ts b/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.service.ts new file mode 100644 index 00000000..0134f7e1 --- /dev/null +++ b/api-service/src/business-logic/resources/07-horario-academico/turma-disponibilidade/turma-disponibilidade.service.ts @@ -0,0 +1,308 @@ +import { TurmaService } from "@/business-logic/resources/06-ensino-discente/turma/turma.service"; +import { DisponibilidadeService } from "@/business-logic/resources/07-horario-academico/disponibilidade/disponibilidade.service"; +import { QbEfficientLoad } from "@/business-logic/standards/ladesa-spec/QbEfficientLoad"; +import { LadesaPaginatedResultDto, LadesaSearch } from "@/business-logic/standards/ladesa-spec/search/search-strategies"; +import type { AccessContext } from "@/infrastructure/access-context"; +import { paginateConfig } from "@/infrastructure/fixtures"; +import { DatabaseContextService } from "@/infrastructure/integrations/database"; +import type { TurmaDisponibilidadeEntity } from "@/infrastructure/integrations/database/typeorm/entities"; +import * as LadesaTypings from "@ladesa-ro/especificacao"; +import { Injectable, NotFoundException } from "@nestjs/common"; +import { has, map, pick } from "lodash"; +import { FilterOperator } from "nestjs-paginate"; + +// ============================================================================ + +const aliasTurmaDisponibilidade = "turma_disponibilidade"; + +// ============================================================================ + +@Injectable() +export class TurmaDisponibilidadeService { + constructor( + private databaseContext: DatabaseContextService, + private turmaService: TurmaService, + private disponibilidadeService: DisponibilidadeService, + ) {} + + get turmaDisponibilidadeRepository() { + return this.databaseContext.turmaDisponibilidadeRepository; + } + + // + + async turmaDisponibilidadeFindAll( + accessContext: AccessContext, + dto: LadesaTypings.TurmaDisponibilidadeListOperationInput | null = null, + selection?: string[], + ): Promise { + // ========================================================= + + const qb = this.turmaDisponibilidadeRepository.createQueryBuilder(aliasTurmaDisponibilidade); + + // ========================================================= + + await accessContext.applyFilter("turma_disponibilidade:find", qb, aliasTurmaDisponibilidade, null); + + // ========================================================= + + const paginated = await LadesaSearch("#/", dto, qb, { + ...paginateConfig, + select: [ + // + "id", + // + "dateCreated", + // + ], + relations: { + turma: true, + disponibilidade: true, + }, + sortableColumns: [ + // + "dateCreated", + ], + searchableColumns: [ + // + "id", + // + ], + defaultSortBy: [["dateCreated", "ASC"]], + filterableColumns: { + "turma.id": [FilterOperator.EQ], + "disponibilidade.id": [FilterOperator.EQ], + }, + }); + + // ========================================================= + + qb.select([]); + QbEfficientLoad(LadesaTypings.Tokens.TurmaDisponibilidadeView, qb, aliasTurmaDisponibilidade, selection); + + // ========================================================= + + const pageItemsView = await qb.andWhereInIds(map(paginated.data, "id")).getMany(); + paginated.data = paginated.data.map((paginated) => pageItemsView.find((i) => i.id === paginated.id)!); + + // ========================================================= + + return LadesaPaginatedResultDto(paginated); + } + + async turmaDisponibilidadeFindById( + accessContext: AccessContext | null, + dto: LadesaTypings.TurmaDisponibilidadeFindOneInputView, + selection?: string[], + ): Promise { + // ========================================================= + + const qb = this.turmaDisponibilidadeRepository.createQueryBuilder(aliasTurmaDisponibilidade); + + // ========================================================= + + if (accessContext) { + await accessContext.applyFilter("turma_disponibilidade:find", qb, aliasTurmaDisponibilidade, null); + } + + // ========================================================= + + qb.andWhere(`${aliasTurmaDisponibilidade}.id = :id`, { id: dto.id }); + + // ========================================================= + + qb.select([]); + QbEfficientLoad(LadesaTypings.Tokens.TurmaDisponibilidadeView, qb, aliasTurmaDisponibilidade, selection); + + // ========================================================= + + const turmaDisponibilidade = await qb.getOne(); + + // ========================================================= + + return turmaDisponibilidade; + } + + async turmaDisponibilidadeFindByIdStrict(accessContext: AccessContext, dto: LadesaTypings.TurmaDisponibilidadeFindOneInputView, selection?: string[]) { + const turmaDisponibilidade = await this.turmaDisponibilidadeFindById(accessContext, dto, selection); + + if (!turmaDisponibilidade) { + throw new NotFoundException(); + } + + return turmaDisponibilidade; + } + + async turmaDisponibilidadeFindByIdSimple( + accessContext: AccessContext, + id: LadesaTypings.TurmaDisponibilidadeFindOneInputView["id"], + selection?: string[], + ): Promise { + // ========================================================= + + const qb = this.turmaDisponibilidadeRepository.createQueryBuilder(aliasTurmaDisponibilidade); + + // ========================================================= + + await accessContext.applyFilter("turma_disponibilidade:find", qb, aliasTurmaDisponibilidade, null); + + // ========================================================= + + qb.andWhere(`${aliasTurmaDisponibilidade}.id = :id`, { id }); + + // ========================================================= + + qb.select([]); + QbEfficientLoad(LadesaTypings.Tokens.TurmaDisponibilidadeView, qb, aliasTurmaDisponibilidade, selection); + + // ========================================================= + + const turmaDisponibilidade = await qb.getOne(); + + // ========================================================= + + return turmaDisponibilidade; + } + + async turmaDisponibilidadeFindByIdSimpleStrict(accessContext: AccessContext, id: LadesaTypings.TurmaDisponibilidadeFindOneInputView["id"], selection?: string[]) { + const turmaDisponibilidade = await this.turmaDisponibilidadeFindByIdSimple(accessContext, id, selection); + + if (!turmaDisponibilidade) { + throw new NotFoundException(); + } + + return turmaDisponibilidade; + } + + // + + async turmaDisponibilidadeCreate(accessContext: AccessContext, dto: LadesaTypings.TurmaDisponibilidadeCreateOperationInput) { + // ========================================================= + + await accessContext.ensurePermission("turma_disponibilidade:create", { dto }); + + // ========================================================= + + const dtoTurmaDisponibilidade = pick(dto.body, []); + + const turmaDisponibilidade = this.turmaDisponibilidadeRepository.create(); + + this.turmaDisponibilidadeRepository.merge(turmaDisponibilidade, { + ...dtoTurmaDisponibilidade, + }); + + // ========================================================= + + if (dto.body.turma) { + const turma = await this.turmaService.turmaFindByIdSimpleStrict(accessContext, dto.body.turma.id); + + this.turmaDisponibilidadeRepository.merge(turmaDisponibilidade, { + turma: { + id: turma.id, + }, + }); + } + + // ========================================================= + + if (dto.body.disponibilidade) { + const disponibilidade = await this.disponibilidadeService.disponibilidadeFindByIdSimpleStrict(accessContext, dto.body.disponibilidade.id); + + this.turmaDisponibilidadeRepository.merge(turmaDisponibilidade, { + disponibilidade: { + id: disponibilidade.id, + }, + }); + } + + // ========================================================= + + await this.turmaDisponibilidadeRepository.save(turmaDisponibilidade); + + // ========================================================= + + return this.turmaDisponibilidadeFindByIdStrict(accessContext, { id: turmaDisponibilidade.id }); + } + + async turmaDisponibilidadeUpdate(accessContext: AccessContext, dto: LadesaTypings.TurmaDisponibilidadeUpdateByIdOperationInput) { + // ========================================================= + + const currentTurmaDisponibilidade = await this.turmaDisponibilidadeFindByIdStrict(accessContext, { + id: dto.params.id, + }); + + // ========================================================= + + await accessContext.ensurePermission("turma_disponibilidade:update", { dto }, dto.params.id, this.turmaDisponibilidadeRepository.createQueryBuilder(aliasTurmaDisponibilidade)); + + const dtoTurmaDisponibilidade = pick(dto.body, []); + + const turmaDisponibilidade = { + id: currentTurmaDisponibilidade.id, + }; + + this.turmaDisponibilidadeRepository.merge(turmaDisponibilidade, { + ...dtoTurmaDisponibilidade, + }); + + // ========================================================= + + if (has(dto.body, "turma") && dto.body.turma !== undefined) { + const turma = dto.body.turma && (await this.turmaService.turmaFindByIdSimpleStrict(accessContext, dto.body.turma.id)); + + this.turmaDisponibilidadeRepository.merge(turmaDisponibilidade, { + turma: turma && { + id: turma.id, + }, + }); + } + + if (has(dto.body, "disponibilidade") && dto.body.disponibilidade !== undefined) { + const disponibilidade = dto.body.disponibilidade && (await this.disponibilidadeService.disponibilidadeFindByIdSimpleStrict(accessContext, dto.body.disponibilidade.id)); + + this.turmaDisponibilidadeRepository.merge(turmaDisponibilidade, { + disponibilidade: disponibilidade && { + id: disponibilidade.id, + }, + }); + } + + // ========================================================= + + await this.turmaDisponibilidadeRepository.save(turmaDisponibilidade); + + // ========================================================= + + return this.turmaDisponibilidadeFindByIdStrict(accessContext, { id: turmaDisponibilidade.id }); + } + + // + + async turmaDisponibilidadeDeleteOneById(accessContext: AccessContext, dto: LadesaTypings.TurmaDisponibilidadeFindOneInputView) { + // ========================================================= + + await accessContext.ensurePermission("turma_disponibilidade:delete", { dto }, dto.id, this.turmaDisponibilidadeRepository.createQueryBuilder(aliasTurmaDisponibilidade)); + + // ========================================================= + + const turmaDisponibilidade = await this.turmaDisponibilidadeFindByIdStrict(accessContext, dto); + + // ========================================================= + + if (turmaDisponibilidade) { + await this.turmaDisponibilidadeRepository + .createQueryBuilder(aliasTurmaDisponibilidade) + .update() + .set({ + dateDeleted: "NOW()", + }) + .where("id = :turmaDisponibilidadeId", { turmaDisponibilidadeId: turmaDisponibilidade.id }) + .andWhere("dateDeleted IS NULL") + .execute(); + } + + // ========================================================= + + return true; + } +} diff --git a/api-service/src/business-logic/resources/08-gerar-horario/gerar-horario.controller.ts b/api-service/src/business-logic/resources/08-gerar-horario/gerar-horario.controller.ts index 242ac27b..81ae093c 100644 --- a/api-service/src/business-logic/resources/08-gerar-horario/gerar-horario.controller.ts +++ b/api-service/src/business-logic/resources/08-gerar-horario/gerar-horario.controller.ts @@ -2,7 +2,7 @@ import { Controller, Get } from "@nestjs/common"; import { ApiTags } from "@nestjs/swagger"; import { GerarHorarioService } from "./gerar-horario.service"; -@ApiTags("Gerar Horario") +@ApiTags("gerar-horario") @Controller("/gerar-horario") export class GerarHorarioController { constructor(private gerarHorarioService: GerarHorarioService) {} diff --git a/api-service/src/infrastructure/integrations/database/context/database-context.core.ts b/api-service/src/infrastructure/integrations/database/context/database-context.core.ts index 33b9bf6a..c59c38b6 100644 --- a/api-service/src/infrastructure/integrations/database/context/database-context.core.ts +++ b/api-service/src/infrastructure/integrations/database/context/database-context.core.ts @@ -235,6 +235,10 @@ export class DatabaseContext { return repositories.createTurmaDisponibilidadeRepository(this.ds); } + get professorDisponibilidadeRepository() { + return repositories.createProfessorDisponibilidadeRepository(this.ds); + } + get diarioPreferenciaAgrupamentoRepository() { return repositories.createDiarioPreferenciaAgrupamentoRepository(this.ds); } diff --git a/api-service/src/infrastructure/integrations/http/swagger/SetupSwaggerDocument.ts b/api-service/src/infrastructure/integrations/http/swagger/SetupSwaggerDocument.ts index 8e731163..fd8af3aa 100644 --- a/api-service/src/infrastructure/integrations/http/swagger/SetupSwaggerDocument.ts +++ b/api-service/src/infrastructure/integrations/http/swagger/SetupSwaggerDocument.ts @@ -10,30 +10,41 @@ export function SetupSwaggerDocument(configService: IConfig | null = null) { config.addBearerAuth(); - config.addTag("Base", "Ladesa - Base"); + config.addTag("base", "Base"); - config.addTag("Arquivos", "Armazenamento / Arquivos"); + config.addTag("arquivos", "Base / Armazenamento / Arquivos"); + config.addTag("estados", "Base / Lugares / Estados"); + config.addTag("cidades", "Base / Lugares / Estados / Cidades"); - config.addTag("Autenticacao"); - config.addTag("Usuarios", "Autenticação / Usuários"); + config.addTag("autenticacao"); + config.addTag("usuarios", "Autenticação / Usuários"); - config.addTag("Estados", "Ambientes / Estados"); - config.addTag("Cidades", "Ambientes / Cidades"); - config.addTag("Campi", "Ambientes / Campi"); - config.addTag("Blocos", "Ambientes / Campi / Blocos"); - config.addTag("Ambientes", "Ambientes / Campi / Blocos / Ambiente"); - config.addTag("Reservas", "Ambientes / Campi / Blocos / Ambiente / Reservas"); + config.addTag("campi", "Ambientes / Campi"); + config.addTag("blocos", "Ambientes / Campi / Blocos"); + config.addTag("ambientes", "Ambientes / Campi / Blocos / Ambiente"); + config.addTag("reservas", "Ambientes / Campi / Blocos / Ambiente / Reservas"); - config.addTag("Vinculos", "Autenticação / Usuários / Vínculos"); + config.addTag("perfis", "Autorização / Usuários / Perfis"); - config.addTag("Modalidades", "Ensino / Modalidade"); - config.addTag("Cursos", "Ensino / Cursos"); - config.addTag("Disciplinas", "Ensino / Disciplinas"); - config.addTag("Turmas", "Ensino / Turmas"); - config.addTag("Diarios", "Ensino / Diarios"); - config.addTag("DiarioProfessor", "Ensino / Diário Professor"); + config.addTag("niveis-formacoes", "Ensino Institucional / Níveis de Formações"); + config.addTag("modalidades", "Ensino Institucional / Modalidades"); + config.addTag("ofertas-formacoes", "Ensino Institucional / Ofertas de Formações"); + config.addTag("ofertas-formacoes-niveis-formacoes", "Ensino Institucional / Ofertas de Formações / Níveis de Formação"); + config.addTag("cursos", "Ensino Institucional / Cursos"); + config.addTag("disciplinas", "Ensino Institucional / Disciplinas"); - config.addTag("Calendarios Letivos", "Calendario / Calendarios Letivos"); + config.addTag("grades-horarios-ofertas-formacoes", "Calendário / Grades de Horário para Ofertas de Formações"); + config.addTag("grades-horarios-ofertas-formacoes-intervalos-de-tempo", "Calendário / Grades de Horário para Ofertas de Formações / Intervalos de Tempo"); + + config.addTag("calendarios-letivos", "Calendário / Calendarios Letivos"); + config.addTag("dias-calendarios", "Calendário / Calendarios Letivos / Dias"); + config.addTag("etapas", "Calendário / Calendarios Letivos / Etapas"); + config.addTag("eventos", "Calendário / Calendarios Letivos / Eventos"); + + config.addTag("turmas", "Ensino Discente / Turmas"); + config.addTag("diarios", "Ensino Discente / Diarios"); + config.addTag("diarios-professor", "Ensino Discente / Professores em Diários"); + config.addTag("aulas", "Ensino Discente / Aulas"); if (configService) { const prefix = configService.getRuntimePrefix(); diff --git a/integrations/npm/api-client-fetch/src/http/generated/LadesaApiClient.ts b/integrations/npm/api-client-fetch/src/http/generated/LadesaApiClient.ts index 4e058174..1df2a0db 100644 --- a/integrations/npm/api-client-fetch/src/http/generated/LadesaApiClient.ts +++ b/integrations/npm/api-client-fetch/src/http/generated/LadesaApiClient.ts @@ -16,24 +16,26 @@ import { CursosService } from "./services.gen"; import { DiarioProfessorService } from "./services.gen"; import { DiariosService } from "./services.gen"; import { DiariosPreferenciaAgrupamentoService } from "./services.gen"; -import { DiasCalendarioService } from "./services.gen"; +import { DiasCalendariosService } from "./services.gen"; import { DisciplinasService } from "./services.gen"; import { DisponibilidadesService } from "./services.gen"; import { EstadosService } from "./services.gen"; import { EtapasService } from "./services.gen"; import { EventosService } from "./services.gen"; -import { GradeHorarioOfertaFormacaoService } from "./services.gen"; -import { GradeHorarioOfertaFormacaoIntervaloDeTempoService } from "./services.gen"; +import { GradesHorariosOfertasFormacoesService } from "./services.gen"; +import { GradesHorariosOfertasFormacoesIntervalosDeTempoService } from "./services.gen"; import { HorariosGeradosService } from "./services.gen"; import { HorariosGeradosAulaService } from "./services.gen"; import { ModalidadesService } from "./services.gen"; -import { NivelFormacaoService } from "./services.gen"; -import { OfertaFormacaoService } from "./services.gen"; -import { OfertaFormacaoNivelFormacaoService } from "./services.gen"; +import { NiveisFormacoesService } from "./services.gen"; +import { OfertasFormacoesService } from "./services.gen"; +import { OfertasFormacoesNiveisFormacoesService } from "./services.gen"; +import { PerfisService } from "./services.gen"; +import { ProfessoresDisponibilidadesService } from "./services.gen"; import { ReservasService } from "./services.gen"; import { TurmasService } from "./services.gen"; +import { TurmasDisponibilidadesService } from "./services.gen"; import { UsuariosService } from "./services.gen"; -import { VinculosService } from "./services.gen"; type HttpRequestConstructor = new (config: OpenAPIConfig) => BaseHttpRequest; @@ -51,24 +53,26 @@ export class LadesaApiClient { public readonly diarioProfessor: DiarioProfessorService; public readonly diarios: DiariosService; public readonly diariosPreferenciaAgrupamento: DiariosPreferenciaAgrupamentoService; - public readonly diasCalendario: DiasCalendarioService; + public readonly diasCalendarios: DiasCalendariosService; public readonly disciplinas: DisciplinasService; public readonly disponibilidades: DisponibilidadesService; public readonly estados: EstadosService; public readonly etapas: EtapasService; public readonly eventos: EventosService; - public readonly gradeHorarioOfertaFormacao: GradeHorarioOfertaFormacaoService; - public readonly gradeHorarioOfertaFormacaoIntervaloDeTempo: GradeHorarioOfertaFormacaoIntervaloDeTempoService; + public readonly gradesHorariosOfertasFormacoes: GradesHorariosOfertasFormacoesService; + public readonly gradesHorariosOfertasFormacoesIntervalosDeTempo: GradesHorariosOfertasFormacoesIntervalosDeTempoService; public readonly horariosGerados: HorariosGeradosService; public readonly horariosGeradosAula: HorariosGeradosAulaService; public readonly modalidades: ModalidadesService; - public readonly nivelFormacao: NivelFormacaoService; - public readonly ofertaFormacao: OfertaFormacaoService; - public readonly ofertaFormacaoNivelFormacao: OfertaFormacaoNivelFormacaoService; + public readonly niveisFormacoes: NiveisFormacoesService; + public readonly ofertasFormacoes: OfertasFormacoesService; + public readonly ofertasFormacoesNiveisFormacoes: OfertasFormacoesNiveisFormacoesService; + public readonly perfis: PerfisService; + public readonly professoresDisponibilidades: ProfessoresDisponibilidadesService; public readonly reservas: ReservasService; public readonly turmas: TurmasService; + public readonly turmasDisponibilidades: TurmasDisponibilidadesService; public readonly usuarios: UsuariosService; - public readonly vinculos: VinculosService; public readonly request: BaseHttpRequest; @@ -102,23 +106,25 @@ export class LadesaApiClient { this.diarioProfessor = new DiarioProfessorService(this.request); this.diarios = new DiariosService(this.request); this.diariosPreferenciaAgrupamento = new DiariosPreferenciaAgrupamentoService(this.request); - this.diasCalendario = new DiasCalendarioService(this.request); + this.diasCalendarios = new DiasCalendariosService(this.request); this.disciplinas = new DisciplinasService(this.request); this.disponibilidades = new DisponibilidadesService(this.request); this.estados = new EstadosService(this.request); this.etapas = new EtapasService(this.request); this.eventos = new EventosService(this.request); - this.gradeHorarioOfertaFormacao = new GradeHorarioOfertaFormacaoService(this.request); - this.gradeHorarioOfertaFormacaoIntervaloDeTempo = new GradeHorarioOfertaFormacaoIntervaloDeTempoService(this.request); + this.gradesHorariosOfertasFormacoes = new GradesHorariosOfertasFormacoesService(this.request); + this.gradesHorariosOfertasFormacoesIntervalosDeTempo = new GradesHorariosOfertasFormacoesIntervalosDeTempoService(this.request); this.horariosGerados = new HorariosGeradosService(this.request); this.horariosGeradosAula = new HorariosGeradosAulaService(this.request); this.modalidades = new ModalidadesService(this.request); - this.nivelFormacao = new NivelFormacaoService(this.request); - this.ofertaFormacao = new OfertaFormacaoService(this.request); - this.ofertaFormacaoNivelFormacao = new OfertaFormacaoNivelFormacaoService(this.request); + this.niveisFormacoes = new NiveisFormacoesService(this.request); + this.ofertasFormacoes = new OfertasFormacoesService(this.request); + this.ofertasFormacoesNiveisFormacoes = new OfertasFormacoesNiveisFormacoesService(this.request); + this.perfis = new PerfisService(this.request); + this.professoresDisponibilidades = new ProfessoresDisponibilidadesService(this.request); this.reservas = new ReservasService(this.request); this.turmas = new TurmasService(this.request); + this.turmasDisponibilidades = new TurmasDisponibilidadesService(this.request); this.usuarios = new UsuariosService(this.request); - this.vinculos = new VinculosService(this.request); } } diff --git a/integrations/npm/api-client-fetch/src/http/generated/schemas.gen.ts b/integrations/npm/api-client-fetch/src/http/generated/schemas.gen.ts index ca0ada4c..ec976156 100644 --- a/integrations/npm/api-client-fetch/src/http/generated/schemas.gen.ts +++ b/integrations/npm/api-client-fetch/src/http/generated/schemas.gen.ts @@ -4827,6 +4827,478 @@ export const $DisponibilidadeInputUpdateView = { }, } as const; +export const $DisponibilidadeDiaFindOneResultView = { + type: "object", + properties: { + id: { + type: "string", + nullable: false, + description: "Identificador do registro (uuid).", + $schema: "https://json-schema.org/draft/2020-12/schema", + $id: "ladesa://schemas/v3/generics/uuid.json", + format: "uuid", + }, + rrule: { + type: "string", + nullable: false, + description: "Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar.", + }, + intervaloDeTempo: { + nullable: false, + description: "Visão FindOne de um Intervalo de Tempo.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/IntervaloDeTempoFindOneResultView", + }, + ], + }, + disponibilidade: { + nullable: false, + description: "Visão FindOne de uma Disponibilidade.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/DisponibilidadeFindOneResultView", + }, + ], + }, + dateCreated: { + type: "string", + nullable: false, + description: "Data e hora da criação do registro.", + $schema: "https://json-schema.org/draft/2020-12/schema", + $id: "ladesa://schemas/v3/generics/date_time.json", + format: "date-time", + }, + dateUpdated: { + type: "string", + nullable: false, + description: "Data e hora da alteração do registro.", + $schema: "https://json-schema.org/draft/2020-12/schema", + $id: "ladesa://schemas/v3/generics/date_time.json", + format: "date-time", + }, + dateDeleted: { + type: "string", + nullable: true, + description: "Data e hora da exclusão do registro.", + $schema: "https://json-schema.org/draft/2020-12/schema", + format: "date-time", + }, + }, + required: ["id", "rrule", "intervaloDeTempo", "disponibilidade", "dateCreated", "dateUpdated", "dateDeleted"], +} as const; + +export const $DisponibilidadeDiaListResultView = { + type: "object", + properties: { + meta: { + nullable: false, + description: "Metadados da busca.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/PaginatedResultMetaView", + }, + ], + }, + data: { + nullable: false, + description: "Visão FindOne de um DisponibilidadeDia.", + kind: "type", + type: "array", + items: { + $ref: "#/components/schemas/DisponibilidadeDiaFindOneResultView", + }, + }, + links: { + nullable: false, + description: "Links da busca.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/PaginatedResultLinksView", + }, + ], + }, + }, + required: ["meta", "data", "links"], +} as const; + +export const $DisponibilidadeFindOneInputView = { + type: "object", + properties: { + id: { + type: "string", + nullable: false, + description: "Identificador do registro (uuid).", + $schema: "https://json-schema.org/draft/2020-12/schema", + $id: "ladesa://schemas/v3/generics/uuid.json", + format: "uuid", + "x-unispec-constraint-entity-exists": "Disponibilidade", + }, + }, + required: ["id"], +} as const; + +export const $DisponibilidadeDiaInputCreateView = { + type: "object", + properties: { + rrule: { + type: "string", + nullable: false, + description: "Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar.", + }, + intervaloDeTempo: { + nullable: false, + description: "Dados de entrada para um Intervalo de Tempo.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/IntervaloDeTempoInputView", + }, + ], + }, + disponibilidade: { + nullable: false, + description: "Dados de entrada para encontrar uma Disponibilidade por ID.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/DisponibilidadeFindOneInputView", + }, + ], + }, + }, + required: ["rrule", "intervaloDeTempo", "disponibilidade"], +} as const; + +export const $DisponibilidadeDiaInputUpdateView = { + type: "object", + properties: { + rrule: { + type: "string", + nullable: false, + description: "Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar.", + }, + intervaloDeTempo: { + nullable: false, + description: "Dados de entrada para um Intervalo de Tempo.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/IntervaloDeTempoInputView", + }, + ], + }, + disponibilidade: { + nullable: false, + description: "Dados de entrada para encontrar uma Disponibilidade por ID.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/DisponibilidadeFindOneInputView", + }, + ], + }, + }, +} as const; + +export const $TurmaDisponibilidadeFindOneResultView = { + type: "object", + properties: { + id: { + type: "string", + nullable: false, + description: "Identificador do registro (uuid).", + $schema: "https://json-schema.org/draft/2020-12/schema", + $id: "ladesa://schemas/v3/generics/uuid.json", + format: "uuid", + }, + disponibilidade: { + nullable: false, + description: "Visão FindOne de uma Disponibilidade.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/DisponibilidadeFindOneResultView", + }, + ], + }, + turma: { + nullable: false, + description: "Visão FindOne de uma Turma.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/TurmaFindOneResultView", + }, + ], + }, + dateCreated: { + type: "string", + nullable: false, + description: "Data e hora da criação do registro.", + $schema: "https://json-schema.org/draft/2020-12/schema", + $id: "ladesa://schemas/v3/generics/date_time.json", + format: "date-time", + }, + dateUpdated: { + type: "string", + nullable: false, + description: "Data e hora da alteração do registro.", + $schema: "https://json-schema.org/draft/2020-12/schema", + $id: "ladesa://schemas/v3/generics/date_time.json", + format: "date-time", + }, + dateDeleted: { + type: "string", + nullable: true, + description: "Data e hora da exclusão do registro.", + $schema: "https://json-schema.org/draft/2020-12/schema", + format: "date-time", + }, + }, + required: ["id", "disponibilidade", "turma", "dateCreated", "dateUpdated", "dateDeleted"], +} as const; + +export const $TurmaDisponibilidadeListResultView = { + type: "object", + properties: { + meta: { + nullable: false, + description: "Metadados da busca.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/PaginatedResultMetaView", + }, + ], + }, + data: { + nullable: false, + description: "Visão FindOne de uma TurmaDisponibilidade.", + kind: "type", + type: "array", + items: { + $ref: "#/components/schemas/TurmaDisponibilidadeFindOneResultView", + }, + }, + links: { + nullable: false, + description: "Links da busca.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/PaginatedResultLinksView", + }, + ], + }, + }, + required: ["meta", "data", "links"], +} as const; + +export const $TurmaDisponibilidadeInputCreateView = { + type: "object", + properties: { + disponibilidade: { + nullable: false, + description: "Dados de entrada para encontrar uma Disponibilidade por ID.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/DisponibilidadeFindOneInputView", + }, + ], + }, + turma: { + nullable: false, + description: "Dados de entrada para encontrar uma Turma por ID.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/TurmaFindOneInputView", + }, + ], + }, + }, + required: ["disponibilidade", "turma"], +} as const; + +export const $TurmaDisponibilidadeInputUpdateView = { + type: "object", + properties: { + disponibilidade: { + nullable: false, + description: "Dados de entrada para encontrar uma Disponibilidade por ID.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/DisponibilidadeFindOneInputView", + }, + ], + }, + turma: { + nullable: false, + description: "Dados de entrada para encontrar uma Turma por ID.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/TurmaFindOneInputView", + }, + ], + }, + }, +} as const; + +export const $ProfessorDisponibilidadeFindOneResultView = { + type: "object", + properties: { + id: { + type: "string", + nullable: false, + description: "Identificador do registro (uuid).", + $schema: "https://json-schema.org/draft/2020-12/schema", + $id: "ladesa://schemas/v3/generics/uuid.json", + format: "uuid", + }, + disponibilidade: { + nullable: false, + description: "Visão FindOne de uma Disponibilidade.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/DisponibilidadeFindOneResultView", + }, + ], + }, + perfil: { + nullable: false, + description: "Visão FindOne de um Vínculo.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/PerfilFindOneResultView", + }, + ], + }, + dateCreated: { + type: "string", + nullable: false, + description: "Data e hora da criação do registro.", + $schema: "https://json-schema.org/draft/2020-12/schema", + $id: "ladesa://schemas/v3/generics/date_time.json", + format: "date-time", + }, + dateUpdated: { + type: "string", + nullable: false, + description: "Data e hora da alteração do registro.", + $schema: "https://json-schema.org/draft/2020-12/schema", + $id: "ladesa://schemas/v3/generics/date_time.json", + format: "date-time", + }, + dateDeleted: { + type: "string", + nullable: true, + description: "Data e hora da exclusão do registro.", + $schema: "https://json-schema.org/draft/2020-12/schema", + format: "date-time", + }, + }, + required: ["id", "disponibilidade", "perfil", "dateCreated", "dateUpdated", "dateDeleted"], +} as const; + +export const $ProfessorDisponibilidadeListResultView = { + type: "object", + properties: { + meta: { + nullable: false, + description: "Metadados da busca.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/PaginatedResultMetaView", + }, + ], + }, + data: { + nullable: false, + description: "Visão FindOne de uma ProfessorDisponibilidade.", + kind: "type", + type: "array", + items: { + $ref: "#/components/schemas/ProfessorDisponibilidadeFindOneResultView", + }, + }, + links: { + nullable: false, + description: "Links da busca.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/PaginatedResultLinksView", + }, + ], + }, + }, + required: ["meta", "data", "links"], +} as const; + +export const $ProfessorDisponibilidadeInputCreateView = { + type: "object", + properties: { + disponibilidade: { + nullable: false, + description: "Dados de entrada para encontrar uma Disponibilidade por ID.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/DisponibilidadeFindOneInputView", + }, + ], + }, + perfil: { + nullable: false, + description: "Dados de entrada para encontrar um Vínculo por ID.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/PerfilFindOneInputView", + }, + ], + }, + }, + required: ["disponibilidade", "perfil"], +} as const; + +export const $ProfessorDisponibilidadeInputUpdateView = { + type: "object", + properties: { + disponibilidade: { + nullable: false, + description: "Dados de entrada para encontrar uma Disponibilidade por ID.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/DisponibilidadeFindOneInputView", + }, + ], + }, + perfil: { + nullable: false, + description: "Dados de entrada para encontrar um Vínculo por ID.", + kind: "type", + allOf: [ + { + $ref: "#/components/schemas/PerfilFindOneInputView", + }, + ], + }, + }, +} as const; + export const $DiarioPreferenciaAgrupamentoFindOneResultView = { type: "object", properties: { diff --git a/integrations/npm/api-client-fetch/src/http/generated/services.gen.ts b/integrations/npm/api-client-fetch/src/http/generated/services.gen.ts index 67292bad..69aedd77 100644 --- a/integrations/npm/api-client-fetch/src/http/generated/services.gen.ts +++ b/integrations/npm/api-client-fetch/src/http/generated/services.gen.ts @@ -261,6 +261,16 @@ import type { PerfilListResponse, PerfilUpdateOneByIdData, PerfilUpdateOneByIdResponse, + ProfessorDisponibilidadeCreateData, + ProfessorDisponibilidadeCreateResponse, + ProfessorDisponibilidadeDeleteOneByIdData, + ProfessorDisponibilidadeDeleteOneByIdResponse, + ProfessorDisponibilidadeFindOneByIdData, + ProfessorDisponibilidadeFindOneByIdResponse, + ProfessorDisponibilidadeListData, + ProfessorDisponibilidadeListResponse, + ProfessorDisponibilidadeUpdateOneByIdData, + ProfessorDisponibilidadeUpdateOneByIdResponse, ReservaCreateData, ReservaCreateResponse, ReservaDeleteOneByIdData, @@ -275,6 +285,16 @@ import type { TurmaCreateResponse, TurmaDeleteOneByIdData, TurmaDeleteOneByIdResponse, + TurmaDisponibilidadeCreateData, + TurmaDisponibilidadeCreateResponse, + TurmaDisponibilidadeDeleteOneByIdData, + TurmaDisponibilidadeDeleteOneByIdResponse, + TurmaDisponibilidadeFindOneByIdData, + TurmaDisponibilidadeFindOneByIdResponse, + TurmaDisponibilidadeListData, + TurmaDisponibilidadeListResponse, + TurmaDisponibilidadeUpdateOneByIdData, + TurmaDisponibilidadeUpdateOneByIdResponse, TurmaFindOneByIdData, TurmaFindOneByIdResponse, TurmaGetImagemCapaData, @@ -309,7 +329,7 @@ export class BaseService { constructor(public readonly httpRequest: BaseHttpRequest) {} /** - * @returns unknown Olá, Mundo!! + * @returns unknown Olá, Mundo! * @throws ApiError */ public appControllerGetHello(): CancelablePromise { @@ -748,7 +768,7 @@ export class UsuariosService { } } -export class VinculosService { +export class PerfisService { constructor(public readonly httpRequest: BaseHttpRequest) {} /** @@ -1381,7 +1401,7 @@ export class ReservasService { } } -export class NivelFormacaoService { +export class NiveisFormacoesService { constructor(public readonly httpRequest: BaseHttpRequest) {} /** @@ -1615,7 +1635,7 @@ export class ModalidadesService { } } -export class OfertaFormacaoService { +export class OfertasFormacoesService { constructor(public readonly httpRequest: BaseHttpRequest) {} /** @@ -1732,7 +1752,7 @@ export class OfertaFormacaoService { } } -export class OfertaFormacaoNivelFormacaoService { +export class OfertasFormacoesNiveisFormacoesService { constructor(public readonly httpRequest: BaseHttpRequest) {} /** @@ -2298,7 +2318,7 @@ export class CalendariosLetivosService { } } -export class GradeHorarioOfertaFormacaoService { +export class GradesHorariosOfertasFormacoesService { constructor(public readonly httpRequest: BaseHttpRequest) {} /** @@ -2415,7 +2435,7 @@ export class GradeHorarioOfertaFormacaoService { } } -export class GradeHorarioOfertaFormacaoIntervaloDeTempoService { +export class GradesHorariosOfertasFormacoesIntervalosDeTempoService { constructor(public readonly httpRequest: BaseHttpRequest) {} /** @@ -2431,7 +2451,7 @@ export class GradeHorarioOfertaFormacaoIntervaloDeTempoService { public gradeHorarioOfertaFormacaoIntervaloDeTempoList(data: GradeHorarioOfertaFormacaoIntervaloDeTempoListData = {}): CancelablePromise { return this.httpRequest.request({ method: "GET", - url: "/grades-horario-ofertas-formacao-intervalos-de-tempo", + url: "/grades-horarios-ofertas-formacoes-intervalos-de-tempo", query: { page: data.page, limit: data.limit, @@ -2455,7 +2475,7 @@ export class GradeHorarioOfertaFormacaoIntervaloDeTempoService { public gradeHorarioOfertaFormacaoIntervaloDeTempoCreate(data: GradeHorarioOfertaFormacaoIntervaloDeTempoCreateData): CancelablePromise { return this.httpRequest.request({ method: "POST", - url: "/grades-horario-ofertas-formacao-intervalos-de-tempo", + url: "/grades-horarios-ofertas-formacoes-intervalos-de-tempo", body: data.requestBody, mediaType: "application/json", errors: { @@ -2477,7 +2497,7 @@ export class GradeHorarioOfertaFormacaoIntervaloDeTempoService { ): CancelablePromise { return this.httpRequest.request({ method: "GET", - url: "/grades-horario-ofertas-formacao-intervalos-de-tempo/{id}", + url: "/grades-horarios-ofertas-formacoes-intervalos-de-tempo/{id}", path: { id: data.id, }, @@ -2501,7 +2521,7 @@ export class GradeHorarioOfertaFormacaoIntervaloDeTempoService { ): CancelablePromise { return this.httpRequest.request({ method: "PATCH", - url: "/grades-horario-ofertas-formacao-intervalos-de-tempo/{id}", + url: "/grades-horarios-ofertas-formacoes-intervalos-de-tempo/{id}", path: { id: data.id, }, @@ -2526,7 +2546,7 @@ export class GradeHorarioOfertaFormacaoIntervaloDeTempoService { ): CancelablePromise { return this.httpRequest.request({ method: "DELETE", - url: "/grades-horario-ofertas-formacao-intervalos-de-tempo/{id}", + url: "/grades-horarios-ofertas-formacoes-intervalos-de-tempo/{id}", path: { id: data.id, }, @@ -2657,7 +2677,7 @@ export class EventosService { } } -export class DiasCalendarioService { +export class DiasCalendariosService { constructor(public readonly httpRequest: BaseHttpRequest) {} /** @@ -3676,6 +3696,244 @@ export class DiariosPreferenciaAgrupamentoService { } } +export class TurmasDisponibilidadesService { + constructor(public readonly httpRequest: BaseHttpRequest) {} + + /** + * Sem descrição. + * @param data The data for the request. + * @param data.filterTurmaId + * @param data.page Página de consulta. + * @param data.limit Limite da quantidade de resultados por página. + * @param data.search Busca textual. + * @param data.sortBy Ordenação. + * @returns TurmaDisponibilidadeListResultView Resultados da busca a TurmaDisponibilidades. + * @throws ApiError + */ + public turmaDisponibilidadeList(data: TurmaDisponibilidadeListData): CancelablePromise { + return this.httpRequest.request({ + method: "GET", + url: "/turmas-disponibilidades", + query: { + page: data.page, + limit: data.limit, + search: data.search, + sortBy: data.sortBy, + filter_turma_id: data.filterTurmaId, + }, + errors: { + 403: "O solicitante não tem permissão para executar esta ação.", + 404: "Registro não encontrado.", + }, + }); + } + + /** + * Sem descrição. + * @param data The data for the request. + * @param data.requestBody Dados de entrada para a criação de uma TurmaDisponibilidade. + * @returns TurmaDisponibilidadeFindOneResultView Visão FindOne de uma TurmaDisponibilidade. + * @throws ApiError + */ + public turmaDisponibilidadeCreate(data: TurmaDisponibilidadeCreateData): CancelablePromise { + return this.httpRequest.request({ + method: "POST", + url: "/turmas-disponibilidades", + body: data.requestBody, + mediaType: "application/json", + errors: { + 403: "O solicitante não tem permissão para executar esta ação.", + 404: "Registro não encontrado.", + }, + }); + } + + /** + * Sem descrição. + * @param data The data for the request. + * @param data.id Identificador do registro (uuid). + * @returns TurmaDisponibilidadeFindOneResultView Visão FindOne de uma TurmaDisponibilidade. + * @throws ApiError + */ + public turmaDisponibilidadeFindOneById(data: TurmaDisponibilidadeFindOneByIdData): CancelablePromise { + return this.httpRequest.request({ + method: "GET", + url: "/turmas-disponibilidades/{id}", + path: { + id: data.id, + }, + errors: { + 403: "O solicitante não tem permissão para executar esta ação.", + 404: "Registro não encontrado.", + }, + }); + } + + /** + * Sem descrição. + * @param data The data for the request. + * @param data.id Identificador do registro (uuid). + * @param data.requestBody Dados de entrada para a atualização de uma TurmaDisponibilidade. + * @returns TurmaDisponibilidadeFindOneResultView Visão FindOne de uma TurmaDisponibilidade. + * @throws ApiError + */ + public turmaDisponibilidadeUpdateOneById(data: TurmaDisponibilidadeUpdateOneByIdData): CancelablePromise { + return this.httpRequest.request({ + method: "PATCH", + url: "/turmas-disponibilidades/{id}", + path: { + id: data.id, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 403: "O solicitante não tem permissão para executar esta ação.", + 404: "Registro não encontrado.", + }, + }); + } + + /** + * Sem descrição. + * @param data The data for the request. + * @param data.id Identificador do registro (uuid). + * @returns boolean + * @throws ApiError + */ + public turmaDisponibilidadeDeleteOneById(data: TurmaDisponibilidadeDeleteOneByIdData): CancelablePromise { + return this.httpRequest.request({ + method: "DELETE", + url: "/turmas-disponibilidades/{id}", + path: { + id: data.id, + }, + errors: { + 403: "O solicitante não tem permissão para executar esta ação.", + 404: "Registro não encontrado.", + }, + }); + } +} + +export class ProfessoresDisponibilidadesService { + constructor(public readonly httpRequest: BaseHttpRequest) {} + + /** + * Sem descrição. + * @param data The data for the request. + * @param data.filterProfessorId + * @param data.page Página de consulta. + * @param data.limit Limite da quantidade de resultados por página. + * @param data.search Busca textual. + * @param data.sortBy Ordenação. + * @returns ProfessorDisponibilidadeListResultView Resultados da busca a ProfessorDisponibilidades. + * @throws ApiError + */ + public professorDisponibilidadeList(data: ProfessorDisponibilidadeListData): CancelablePromise { + return this.httpRequest.request({ + method: "GET", + url: "/professores-disponibilidades", + query: { + page: data.page, + limit: data.limit, + search: data.search, + sortBy: data.sortBy, + filter_professor_id: data.filterProfessorId, + }, + errors: { + 403: "O solicitante não tem permissão para executar esta ação.", + 404: "Registro não encontrado.", + }, + }); + } + + /** + * Sem descrição. + * @param data The data for the request. + * @param data.requestBody Dados de entrada para a criação de uma ProfessorDisponibilidade. + * @returns ProfessorDisponibilidadeFindOneResultView Visão FindOne de uma ProfessorDisponibilidade. + * @throws ApiError + */ + public professorDisponibilidadeCreate(data: ProfessorDisponibilidadeCreateData): CancelablePromise { + return this.httpRequest.request({ + method: "POST", + url: "/professores-disponibilidades", + body: data.requestBody, + mediaType: "application/json", + errors: { + 403: "O solicitante não tem permissão para executar esta ação.", + 404: "Registro não encontrado.", + }, + }); + } + + /** + * Sem descrição. + * @param data The data for the request. + * @param data.id Identificador do registro (uuid). + * @returns ProfessorDisponibilidadeFindOneResultView Visão FindOne de uma ProfessorDisponibilidade. + * @throws ApiError + */ + public professorDisponibilidadeFindOneById(data: ProfessorDisponibilidadeFindOneByIdData): CancelablePromise { + return this.httpRequest.request({ + method: "GET", + url: "/professores-disponibilidades/{id}", + path: { + id: data.id, + }, + errors: { + 403: "O solicitante não tem permissão para executar esta ação.", + 404: "Registro não encontrado.", + }, + }); + } + + /** + * Sem descrição. + * @param data The data for the request. + * @param data.id Identificador do registro (uuid). + * @param data.requestBody Dados de entrada para a atualização de uma ProfessorDisponibilidade. + * @returns ProfessorDisponibilidadeFindOneResultView Visão FindOne de uma ProfessorDisponibilidade. + * @throws ApiError + */ + public professorDisponibilidadeUpdateOneById(data: ProfessorDisponibilidadeUpdateOneByIdData): CancelablePromise { + return this.httpRequest.request({ + method: "PATCH", + url: "/professores-disponibilidades/{id}", + path: { + id: data.id, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 403: "O solicitante não tem permissão para executar esta ação.", + 404: "Registro não encontrado.", + }, + }); + } + + /** + * Sem descrição. + * @param data The data for the request. + * @param data.id Identificador do registro (uuid). + * @returns boolean + * @throws ApiError + */ + public professorDisponibilidadeDeleteOneById(data: ProfessorDisponibilidadeDeleteOneByIdData): CancelablePromise { + return this.httpRequest.request({ + method: "DELETE", + url: "/professores-disponibilidades/{id}", + path: { + id: data.id, + }, + errors: { + 403: "O solicitante não tem permissão para executar esta ação.", + 404: "Registro não encontrado.", + }, + }); + } +} + export class HorariosGeradosService { constructor(public readonly httpRequest: BaseHttpRequest) {} diff --git a/integrations/npm/api-client-fetch/src/http/generated/types.gen.ts b/integrations/npm/api-client-fetch/src/http/generated/types.gen.ts index 4d9288ff..630b3e0a 100644 --- a/integrations/npm/api-client-fetch/src/http/generated/types.gen.ts +++ b/integrations/npm/api-client-fetch/src/http/generated/types.gen.ts @@ -2343,6 +2343,217 @@ export type DisponibilidadeInputUpdateView = { dataFim?: string | null; }; +export type DisponibilidadeDiaFindOneResultView = { + /** + * Identificador do registro (uuid). + */ + id: string; + /** + * Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar. + */ + rrule: string; + /** + * Visão FindOne de um Intervalo de Tempo. + */ + intervaloDeTempo: IntervaloDeTempoFindOneResultView; + /** + * Visão FindOne de uma Disponibilidade. + */ + disponibilidade: DisponibilidadeFindOneResultView; + /** + * Data e hora da criação do registro. + */ + dateCreated: string; + /** + * Data e hora da alteração do registro. + */ + dateUpdated: string; + /** + * Data e hora da exclusão do registro. + */ + dateDeleted: string | null; +}; + +export type DisponibilidadeDiaListResultView = { + /** + * Metadados da busca. + */ + meta: PaginatedResultMetaView; + /** + * Visão FindOne de um DisponibilidadeDia. + */ + data: Array; + /** + * Links da busca. + */ + links: PaginatedResultLinksView; +}; + +export type DisponibilidadeFindOneInputView = { + /** + * Identificador do registro (uuid). + */ + id: string; +}; + +export type DisponibilidadeDiaInputCreateView = { + /** + * Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar. + */ + rrule: string; + /** + * Dados de entrada para um Intervalo de Tempo. + */ + intervaloDeTempo: IntervaloDeTempoInputView; + /** + * Dados de entrada para encontrar uma Disponibilidade por ID. + */ + disponibilidade: DisponibilidadeFindOneInputView; +}; + +export type DisponibilidadeDiaInputUpdateView = { + /** + * Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar. + */ + rrule?: string; + /** + * Dados de entrada para um Intervalo de Tempo. + */ + intervaloDeTempo?: IntervaloDeTempoInputView; + /** + * Dados de entrada para encontrar uma Disponibilidade por ID. + */ + disponibilidade?: DisponibilidadeFindOneInputView; +}; + +export type TurmaDisponibilidadeFindOneResultView = { + /** + * Identificador do registro (uuid). + */ + id: string; + /** + * Visão FindOne de uma Disponibilidade. + */ + disponibilidade: DisponibilidadeFindOneResultView; + /** + * Visão FindOne de uma Turma. + */ + turma: TurmaFindOneResultView; + /** + * Data e hora da criação do registro. + */ + dateCreated: string; + /** + * Data e hora da alteração do registro. + */ + dateUpdated: string; + /** + * Data e hora da exclusão do registro. + */ + dateDeleted: string | null; +}; + +export type TurmaDisponibilidadeListResultView = { + /** + * Metadados da busca. + */ + meta: PaginatedResultMetaView; + /** + * Visão FindOne de uma TurmaDisponibilidade. + */ + data: Array; + /** + * Links da busca. + */ + links: PaginatedResultLinksView; +}; + +export type TurmaDisponibilidadeInputCreateView = { + /** + * Dados de entrada para encontrar uma Disponibilidade por ID. + */ + disponibilidade: DisponibilidadeFindOneInputView; + /** + * Dados de entrada para encontrar uma Turma por ID. + */ + turma: TurmaFindOneInputView; +}; + +export type TurmaDisponibilidadeInputUpdateView = { + /** + * Dados de entrada para encontrar uma Disponibilidade por ID. + */ + disponibilidade?: DisponibilidadeFindOneInputView; + /** + * Dados de entrada para encontrar uma Turma por ID. + */ + turma?: TurmaFindOneInputView; +}; + +export type ProfessorDisponibilidadeFindOneResultView = { + /** + * Identificador do registro (uuid). + */ + id: string; + /** + * Visão FindOne de uma Disponibilidade. + */ + disponibilidade: DisponibilidadeFindOneResultView; + /** + * Visão FindOne de um Vínculo. + */ + perfil: PerfilFindOneResultView; + /** + * Data e hora da criação do registro. + */ + dateCreated: string; + /** + * Data e hora da alteração do registro. + */ + dateUpdated: string; + /** + * Data e hora da exclusão do registro. + */ + dateDeleted: string | null; +}; + +export type ProfessorDisponibilidadeListResultView = { + /** + * Metadados da busca. + */ + meta: PaginatedResultMetaView; + /** + * Visão FindOne de uma ProfessorDisponibilidade. + */ + data: Array; + /** + * Links da busca. + */ + links: PaginatedResultLinksView; +}; + +export type ProfessorDisponibilidadeInputCreateView = { + /** + * Dados de entrada para encontrar uma Disponibilidade por ID. + */ + disponibilidade: DisponibilidadeFindOneInputView; + /** + * Dados de entrada para encontrar um Vínculo por ID. + */ + perfil: PerfilFindOneInputView; +}; + +export type ProfessorDisponibilidadeInputUpdateView = { + /** + * Dados de entrada para encontrar uma Disponibilidade por ID. + */ + disponibilidade?: DisponibilidadeFindOneInputView; + /** + * Dados de entrada para encontrar um Vínculo por ID. + */ + perfil?: PerfilFindOneInputView; +}; + export type DiarioPreferenciaAgrupamentoFindOneResultView = { /** * Identificador do registro (uuid). @@ -4398,6 +4609,130 @@ export type DiarioPreferenciaAgrupamentoDeleteOneByIdData = { export type DiarioPreferenciaAgrupamentoDeleteOneByIdResponse = boolean; +export type TurmaDisponibilidadeListData = { + filterTurmaId: Array; + /** + * Limite da quantidade de resultados por página. + */ + limit?: number; + /** + * Página de consulta. + */ + page?: number; + /** + * Busca textual. + */ + search?: string; + /** + * Ordenação. + */ + sortBy?: Array; +}; + +export type TurmaDisponibilidadeListResponse = TurmaDisponibilidadeListResultView; + +export type TurmaDisponibilidadeCreateData = { + /** + * Dados de entrada para a criação de uma TurmaDisponibilidade. + */ + requestBody: TurmaDisponibilidadeInputCreateView; +}; + +export type TurmaDisponibilidadeCreateResponse = TurmaDisponibilidadeFindOneResultView; + +export type TurmaDisponibilidadeFindOneByIdData = { + /** + * Identificador do registro (uuid). + */ + id: string; +}; + +export type TurmaDisponibilidadeFindOneByIdResponse = TurmaDisponibilidadeFindOneResultView; + +export type TurmaDisponibilidadeUpdateOneByIdData = { + /** + * Identificador do registro (uuid). + */ + id: string; + /** + * Dados de entrada para a atualização de uma TurmaDisponibilidade. + */ + requestBody: TurmaDisponibilidadeInputUpdateView; +}; + +export type TurmaDisponibilidadeUpdateOneByIdResponse = TurmaDisponibilidadeFindOneResultView; + +export type TurmaDisponibilidadeDeleteOneByIdData = { + /** + * Identificador do registro (uuid). + */ + id: string; +}; + +export type TurmaDisponibilidadeDeleteOneByIdResponse = boolean; + +export type ProfessorDisponibilidadeListData = { + filterProfessorId: Array; + /** + * Limite da quantidade de resultados por página. + */ + limit?: number; + /** + * Página de consulta. + */ + page?: number; + /** + * Busca textual. + */ + search?: string; + /** + * Ordenação. + */ + sortBy?: Array; +}; + +export type ProfessorDisponibilidadeListResponse = ProfessorDisponibilidadeListResultView; + +export type ProfessorDisponibilidadeCreateData = { + /** + * Dados de entrada para a criação de uma ProfessorDisponibilidade. + */ + requestBody: ProfessorDisponibilidadeInputCreateView; +}; + +export type ProfessorDisponibilidadeCreateResponse = ProfessorDisponibilidadeFindOneResultView; + +export type ProfessorDisponibilidadeFindOneByIdData = { + /** + * Identificador do registro (uuid). + */ + id: string; +}; + +export type ProfessorDisponibilidadeFindOneByIdResponse = ProfessorDisponibilidadeFindOneResultView; + +export type ProfessorDisponibilidadeUpdateOneByIdData = { + /** + * Identificador do registro (uuid). + */ + id: string; + /** + * Dados de entrada para a atualização de uma ProfessorDisponibilidade. + */ + requestBody: ProfessorDisponibilidadeInputUpdateView; +}; + +export type ProfessorDisponibilidadeUpdateOneByIdResponse = ProfessorDisponibilidadeFindOneResultView; + +export type ProfessorDisponibilidadeDeleteOneByIdData = { + /** + * Identificador do registro (uuid). + */ + id: string; +}; + +export type ProfessorDisponibilidadeDeleteOneByIdResponse = boolean; + export type HorarioGeradoListData = { /** * Limite da quantidade de resultados por página. diff --git a/integrations/openapi-json/generated.json b/integrations/openapi-json/generated.json index e798daf4..3f6c3976 100644 --- a/integrations/openapi-json/generated.json +++ b/integrations/openapi-json/generated.json @@ -49,7 +49,7 @@ } } }, - "tags": ["Base"] + "tags": ["base"] } }, "/arquivos/{id}": { @@ -127,7 +127,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Arquivos"], + "tags": ["arquivos"], "security": [ { "bearer": [] @@ -212,7 +212,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Estados"], + "tags": ["estados"], "security": [ { "bearer": [] @@ -261,7 +261,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Estados"], + "tags": ["estados"], "security": [ { "bearer": [] @@ -360,7 +360,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Cidades"], + "tags": ["cidades"], "security": [ { "bearer": [] @@ -409,7 +409,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Cidades"], + "tags": ["cidades"], "security": [ { "bearer": [] @@ -443,7 +443,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Autenticacao"], + "tags": ["autenticacao"], "security": [ { "bearer": [] @@ -489,7 +489,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Autenticacao"], + "tags": ["autenticacao"], "security": [ { "bearer": [] @@ -535,7 +535,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Autenticacao"], + "tags": ["autenticacao"], "security": [ { "bearer": [] @@ -581,7 +581,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Autenticacao"], + "tags": ["autenticacao"], "security": [ { "bearer": [] @@ -666,7 +666,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Usuarios"], + "tags": ["usuarios"], "security": [ { "bearer": [] @@ -710,7 +710,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Usuarios"], + "tags": ["usuarios"], "security": [ { "bearer": [] @@ -760,7 +760,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Usuarios"], + "tags": ["usuarios"], "security": [ { "bearer": [] @@ -820,7 +820,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Usuarios"], + "tags": ["usuarios"], "security": [ { "bearer": [] @@ -868,7 +868,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Usuarios"], + "tags": ["usuarios"], "security": [ { "bearer": [] @@ -920,7 +920,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Usuarios"], + "tags": ["usuarios"], "security": [ { "bearer": [] @@ -998,7 +998,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Usuarios"], + "tags": ["usuarios"], "security": [ { "bearer": [] @@ -1050,7 +1050,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Usuarios"], + "tags": ["usuarios"], "security": [ { "bearer": [] @@ -1128,7 +1128,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Usuarios"], + "tags": ["usuarios"], "security": [ { "bearer": [] @@ -1255,7 +1255,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Vinculos"], + "tags": ["perfis"], "security": [ { "bearer": [] @@ -1299,7 +1299,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Vinculos"], + "tags": ["perfis"], "security": [ { "bearer": [] @@ -1412,7 +1412,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Campi"], + "tags": ["campi"], "security": [ { "bearer": [] @@ -1456,7 +1456,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Campi"], + "tags": ["campi"], "security": [ { "bearer": [] @@ -1506,7 +1506,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Campi"], + "tags": ["campi"], "security": [ { "bearer": [] @@ -1566,7 +1566,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Campi"], + "tags": ["campi"], "security": [ { "bearer": [] @@ -1614,7 +1614,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Campi"], + "tags": ["campi"], "security": [ { "bearer": [] @@ -1713,7 +1713,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Blocos"], + "tags": ["blocos"], "security": [ { "bearer": [] @@ -1757,7 +1757,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Blocos"], + "tags": ["blocos"], "security": [ { "bearer": [] @@ -1807,7 +1807,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Blocos"], + "tags": ["blocos"], "security": [ { "bearer": [] @@ -1867,7 +1867,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Blocos"], + "tags": ["blocos"], "security": [ { "bearer": [] @@ -1915,7 +1915,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Blocos"], + "tags": ["blocos"], "security": [ { "bearer": [] @@ -1967,7 +1967,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Blocos"], + "tags": ["blocos"], "security": [ { "bearer": [] @@ -2045,7 +2045,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Blocos"], + "tags": ["blocos"], "security": [ { "bearer": [] @@ -2158,7 +2158,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Ambientes"], + "tags": ["ambientes"], "security": [ { "bearer": [] @@ -2202,7 +2202,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Ambientes"], + "tags": ["ambientes"], "security": [ { "bearer": [] @@ -2252,7 +2252,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Ambientes"], + "tags": ["ambientes"], "security": [ { "bearer": [] @@ -2312,7 +2312,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Ambientes"], + "tags": ["ambientes"], "security": [ { "bearer": [] @@ -2360,7 +2360,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Ambientes"], + "tags": ["ambientes"], "security": [ { "bearer": [] @@ -2412,7 +2412,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Ambientes"], + "tags": ["ambientes"], "security": [ { "bearer": [] @@ -2490,7 +2490,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Ambientes"], + "tags": ["ambientes"], "security": [ { "bearer": [] @@ -2631,7 +2631,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Reservas"], + "tags": ["reservas"], "security": [ { "bearer": [] @@ -2675,7 +2675,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Reservas"], + "tags": ["reservas"], "security": [ { "bearer": [] @@ -2725,7 +2725,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Reservas"], + "tags": ["reservas"], "security": [ { "bearer": [] @@ -2785,7 +2785,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Reservas"], + "tags": ["reservas"], "security": [ { "bearer": [] @@ -2833,7 +2833,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Reservas"], + "tags": ["reservas"], "security": [ { "bearer": [] @@ -2918,7 +2918,7 @@ "description": "Registro não encontrado." } }, - "tags": ["NivelFormacao"], + "tags": ["niveis-formacoes"], "security": [ { "bearer": [] @@ -2962,7 +2962,7 @@ "description": "Registro não encontrado." } }, - "tags": ["NivelFormacao"], + "tags": ["niveis-formacoes"], "security": [ { "bearer": [] @@ -3012,7 +3012,7 @@ "description": "Registro não encontrado." } }, - "tags": ["NivelFormacao"], + "tags": ["niveis-formacoes"], "security": [ { "bearer": [] @@ -3072,7 +3072,7 @@ "description": "Registro não encontrado." } }, - "tags": ["NivelFormacao"], + "tags": ["niveis-formacoes"], "security": [ { "bearer": [] @@ -3120,7 +3120,7 @@ "description": "Registro não encontrado." } }, - "tags": ["NivelFormacao"], + "tags": ["niveis-formacoes"], "security": [ { "bearer": [] @@ -3205,7 +3205,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Modalidades"], + "tags": ["modalidades"], "security": [ { "bearer": [] @@ -3249,7 +3249,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Modalidades"], + "tags": ["modalidades"], "security": [ { "bearer": [] @@ -3299,7 +3299,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Modalidades"], + "tags": ["modalidades"], "security": [ { "bearer": [] @@ -3359,7 +3359,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Modalidades"], + "tags": ["modalidades"], "security": [ { "bearer": [] @@ -3407,7 +3407,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Modalidades"], + "tags": ["modalidades"], "security": [ { "bearer": [] @@ -3492,7 +3492,7 @@ "description": "Registro não encontrado." } }, - "tags": ["OfertaFormacao"], + "tags": ["ofertas-formacoes"], "security": [ { "bearer": [] @@ -3536,7 +3536,7 @@ "description": "Registro não encontrado." } }, - "tags": ["OfertaFormacao"], + "tags": ["ofertas-formacoes"], "security": [ { "bearer": [] @@ -3586,7 +3586,7 @@ "description": "Registro não encontrado." } }, - "tags": ["OfertaFormacao"], + "tags": ["ofertas-formacoes"], "security": [ { "bearer": [] @@ -3646,7 +3646,7 @@ "description": "Registro não encontrado." } }, - "tags": ["OfertaFormacao"], + "tags": ["ofertas-formacoes"], "security": [ { "bearer": [] @@ -3694,7 +3694,7 @@ "description": "Registro não encontrado." } }, - "tags": ["OfertaFormacao"], + "tags": ["ofertas-formacoes"], "security": [ { "bearer": [] @@ -3779,7 +3779,7 @@ "description": "Registro não encontrado." } }, - "tags": ["OfertaFormacaoNivelFormacao"], + "tags": ["ofertas-formacoes-niveis-formacoes"], "security": [ { "bearer": [] @@ -3823,7 +3823,7 @@ "description": "Registro não encontrado." } }, - "tags": ["OfertaFormacaoNivelFormacao"], + "tags": ["ofertas-formacoes-niveis-formacoes"], "security": [ { "bearer": [] @@ -3873,7 +3873,7 @@ "description": "Registro não encontrado." } }, - "tags": ["OfertaFormacaoNivelFormacao"], + "tags": ["ofertas-formacoes-niveis-formacoes"], "security": [ { "bearer": [] @@ -3933,7 +3933,7 @@ "description": "Registro não encontrado." } }, - "tags": ["OfertaFormacaoNivelFormacao"], + "tags": ["ofertas-formacoes-niveis-formacoes"], "security": [ { "bearer": [] @@ -3981,7 +3981,7 @@ "description": "Registro não encontrado." } }, - "tags": ["OfertaFormacaoNivelFormacao"], + "tags": ["ofertas-formacoes-niveis-formacoes"], "security": [ { "bearer": [] @@ -4094,7 +4094,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Cursos"], + "tags": ["cursos"], "security": [ { "bearer": [] @@ -4138,7 +4138,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Cursos"], + "tags": ["cursos"], "security": [ { "bearer": [] @@ -4188,7 +4188,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Cursos"], + "tags": ["cursos"], "security": [ { "bearer": [] @@ -4248,7 +4248,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Cursos"], + "tags": ["cursos"], "security": [ { "bearer": [] @@ -4296,7 +4296,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Cursos"], + "tags": ["cursos"], "security": [ { "bearer": [] @@ -4348,7 +4348,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Cursos"], + "tags": ["cursos"], "security": [ { "bearer": [] @@ -4426,7 +4426,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Cursos"], + "tags": ["cursos"], "security": [ { "bearer": [] @@ -4511,7 +4511,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disciplinas"], + "tags": ["disciplinas"], "security": [ { "bearer": [] @@ -4555,7 +4555,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disciplinas"], + "tags": ["disciplinas"], "security": [ { "bearer": [] @@ -4605,7 +4605,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disciplinas"], + "tags": ["disciplinas"], "security": [ { "bearer": [] @@ -4665,7 +4665,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disciplinas"], + "tags": ["disciplinas"], "security": [ { "bearer": [] @@ -4713,7 +4713,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disciplinas"], + "tags": ["disciplinas"], "security": [ { "bearer": [] @@ -4765,7 +4765,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disciplinas"], + "tags": ["disciplinas"], "security": [ { "bearer": [] @@ -4843,7 +4843,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disciplinas"], + "tags": ["disciplinas"], "security": [ { "bearer": [] @@ -4956,7 +4956,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Calendarios Letivos"], + "tags": ["calendarios-letivos"], "security": [ { "bearer": [] @@ -5000,7 +5000,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Calendarios Letivos"], + "tags": ["calendarios-letivos"], "security": [ { "bearer": [] @@ -5050,7 +5050,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Calendarios Letivos"], + "tags": ["calendarios-letivos"], "security": [ { "bearer": [] @@ -5110,7 +5110,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Calendarios Letivos"], + "tags": ["calendarios-letivos"], "security": [ { "bearer": [] @@ -5158,7 +5158,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Calendarios Letivos"], + "tags": ["calendarios-letivos"], "security": [ { "bearer": [] @@ -5243,7 +5243,7 @@ "description": "Registro não encontrado." } }, - "tags": ["GradeHorarioOfertaFormacao"], + "tags": ["grades-horarios-ofertas-formacoes"], "security": [ { "bearer": [] @@ -5287,7 +5287,7 @@ "description": "Registro não encontrado." } }, - "tags": ["GradeHorarioOfertaFormacao"], + "tags": ["grades-horarios-ofertas-formacoes"], "security": [ { "bearer": [] @@ -5337,7 +5337,7 @@ "description": "Registro não encontrado." } }, - "tags": ["GradeHorarioOfertaFormacao"], + "tags": ["grades-horarios-ofertas-formacoes"], "security": [ { "bearer": [] @@ -5397,7 +5397,7 @@ "description": "Registro não encontrado." } }, - "tags": ["GradeHorarioOfertaFormacao"], + "tags": ["grades-horarios-ofertas-formacoes"], "security": [ { "bearer": [] @@ -5445,7 +5445,7 @@ "description": "Registro não encontrado." } }, - "tags": ["GradeHorarioOfertaFormacao"], + "tags": ["grades-horarios-ofertas-formacoes"], "security": [ { "bearer": [] @@ -5453,7 +5453,7 @@ ] } }, - "/grades-horario-ofertas-formacao-intervalos-de-tempo": { + "/grades-horarios-ofertas-formacoes-intervalos-de-tempo": { "get": { "operationId": "GradeHorarioOfertaFormacaoIntervaloDeTempoList", "summary": "", @@ -5530,7 +5530,7 @@ "description": "Registro não encontrado." } }, - "tags": ["GradeHorarioOfertaFormacaoIntervaloDeTempo"], + "tags": ["grades-horarios-ofertas-formacoes-intervalos-de-tempo"], "security": [ { "bearer": [] @@ -5574,7 +5574,7 @@ "description": "Registro não encontrado." } }, - "tags": ["GradeHorarioOfertaFormacaoIntervaloDeTempo"], + "tags": ["grades-horarios-ofertas-formacoes-intervalos-de-tempo"], "security": [ { "bearer": [] @@ -5582,7 +5582,7 @@ ] } }, - "/grades-horario-ofertas-formacao-intervalos-de-tempo/{id}": { + "/grades-horarios-ofertas-formacoes-intervalos-de-tempo/{id}": { "get": { "operationId": "GradeHorarioOfertaFormacaoIntervaloDeTempoFindOneById", "summary": "", @@ -5624,7 +5624,7 @@ "description": "Registro não encontrado." } }, - "tags": ["GradeHorarioOfertaFormacaoIntervaloDeTempo"], + "tags": ["grades-horarios-ofertas-formacoes-intervalos-de-tempo"], "security": [ { "bearer": [] @@ -5684,7 +5684,7 @@ "description": "Registro não encontrado." } }, - "tags": ["GradeHorarioOfertaFormacaoIntervaloDeTempo"], + "tags": ["grades-horarios-ofertas-formacoes-intervalos-de-tempo"], "security": [ { "bearer": [] @@ -5732,7 +5732,7 @@ "description": "Registro não encontrado." } }, - "tags": ["GradeHorarioOfertaFormacaoIntervaloDeTempo"], + "tags": ["grades-horarios-ofertas-formacoes-intervalos-de-tempo"], "security": [ { "bearer": [] @@ -5831,7 +5831,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Eventos"], + "tags": ["eventos"], "security": [ { "bearer": [] @@ -5875,7 +5875,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Eventos"], + "tags": ["eventos"], "security": [ { "bearer": [] @@ -5925,7 +5925,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Eventos"], + "tags": ["eventos"], "security": [ { "bearer": [] @@ -5985,7 +5985,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Eventos"], + "tags": ["eventos"], "security": [ { "bearer": [] @@ -6033,7 +6033,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Eventos"], + "tags": ["eventos"], "security": [ { "bearer": [] @@ -6132,7 +6132,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Dias Calendario"], + "tags": ["dias-calendarios"], "security": [ { "bearer": [] @@ -6176,7 +6176,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Dias Calendario"], + "tags": ["dias-calendarios"], "security": [ { "bearer": [] @@ -6226,7 +6226,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Dias Calendario"], + "tags": ["dias-calendarios"], "security": [ { "bearer": [] @@ -6286,7 +6286,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Dias Calendario"], + "tags": ["dias-calendarios"], "security": [ { "bearer": [] @@ -6334,7 +6334,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Dias Calendario"], + "tags": ["dias-calendarios"], "security": [ { "bearer": [] @@ -6433,7 +6433,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Etapas"], + "tags": ["etapas"], "security": [ { "bearer": [] @@ -6477,7 +6477,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Etapas"], + "tags": ["etapas"], "security": [ { "bearer": [] @@ -6527,7 +6527,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Etapas"], + "tags": ["etapas"], "security": [ { "bearer": [] @@ -6587,7 +6587,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Etapas"], + "tags": ["etapas"], "security": [ { "bearer": [] @@ -6635,7 +6635,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Etapas"], + "tags": ["etapas"], "security": [ { "bearer": [] @@ -6832,7 +6832,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Turmas"], + "tags": ["turmas"], "security": [ { "bearer": [] @@ -6876,7 +6876,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Turmas"], + "tags": ["turmas"], "security": [ { "bearer": [] @@ -6926,7 +6926,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Turmas"], + "tags": ["turmas"], "security": [ { "bearer": [] @@ -6986,7 +6986,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Turmas"], + "tags": ["turmas"], "security": [ { "bearer": [] @@ -7034,7 +7034,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Turmas"], + "tags": ["turmas"], "security": [ { "bearer": [] @@ -7086,7 +7086,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Turmas"], + "tags": ["turmas"], "security": [ { "bearer": [] @@ -7164,7 +7164,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Turmas"], + "tags": ["turmas"], "security": [ { "bearer": [] @@ -7305,7 +7305,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Diarios"], + "tags": ["diarios"], "security": [ { "bearer": [] @@ -7349,7 +7349,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Diarios"], + "tags": ["diarios"], "security": [ { "bearer": [] @@ -7399,7 +7399,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Diarios"], + "tags": ["diarios"], "security": [ { "bearer": [] @@ -7459,7 +7459,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Diarios"], + "tags": ["diarios"], "security": [ { "bearer": [] @@ -7507,7 +7507,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Diarios"], + "tags": ["diarios"], "security": [ { "bearer": [] @@ -7620,7 +7620,7 @@ "description": "Registro não encontrado." } }, - "tags": ["DiarioProfessor"], + "tags": ["diario-professor"], "security": [ { "bearer": [] @@ -7664,7 +7664,7 @@ "description": "Registro não encontrado." } }, - "tags": ["DiarioProfessor"], + "tags": ["diario-professor"], "security": [ { "bearer": [] @@ -7714,7 +7714,7 @@ "description": "Registro não encontrado." } }, - "tags": ["DiarioProfessor"], + "tags": ["diario-professor"], "security": [ { "bearer": [] @@ -7774,7 +7774,7 @@ "description": "Registro não encontrado." } }, - "tags": ["DiarioProfessor"], + "tags": ["diario-professor"], "security": [ { "bearer": [] @@ -7822,7 +7822,7 @@ "description": "Registro não encontrado." } }, - "tags": ["DiarioProfessor"], + "tags": ["diario-professor"], "security": [ { "bearer": [] @@ -7935,7 +7935,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Aulas"], + "tags": ["aulas"], "security": [ { "bearer": [] @@ -7979,7 +7979,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Aulas"], + "tags": ["aulas"], "security": [ { "bearer": [] @@ -8029,7 +8029,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Aulas"], + "tags": ["aulas"], "security": [ { "bearer": [] @@ -8089,7 +8089,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Aulas"], + "tags": ["aulas"], "security": [ { "bearer": [] @@ -8137,7 +8137,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Aulas"], + "tags": ["aulas"], "security": [ { "bearer": [] @@ -8222,7 +8222,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disponibilidades"], + "tags": ["disponibilidades"], "security": [ { "bearer": [] @@ -8266,7 +8266,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disponibilidades"], + "tags": ["disponibilidades"], "security": [ { "bearer": [] @@ -8316,7 +8316,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disponibilidades"], + "tags": ["disponibilidades"], "security": [ { "bearer": [] @@ -8376,7 +8376,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disponibilidades"], + "tags": ["disponibilidades"], "security": [ { "bearer": [] @@ -8424,7 +8424,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Disponibilidades"], + "tags": ["disponibilidades"], "security": [ { "bearer": [] @@ -8523,7 +8523,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Diarios Preferencia Agrupamento"], + "tags": ["diarios-preferencia-agrupamento"], "security": [ { "bearer": [] @@ -8567,7 +8567,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Diarios Preferencia Agrupamento"], + "tags": ["diarios-preferencia-agrupamento"], "security": [ { "bearer": [] @@ -8617,7 +8617,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Diarios Preferencia Agrupamento"], + "tags": ["diarios-preferencia-agrupamento"], "security": [ { "bearer": [] @@ -8677,7 +8677,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Diarios Preferencia Agrupamento"], + "tags": ["diarios-preferencia-agrupamento"], "security": [ { "bearer": [] @@ -8725,7 +8725,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Diarios Preferencia Agrupamento"], + "tags": ["diarios-preferencia-agrupamento"], "security": [ { "bearer": [] @@ -8733,9 +8733,9 @@ ] } }, - "/horarios-gerados": { + "/turmas-disponibilidades": { "get": { - "operationId": "HorarioGeradoList", + "operationId": "TurmaDisponibilidadeList", "summary": "", "description": "Sem descrição.", "parameters": [ @@ -8788,17 +8788,31 @@ "type": "string" } } + }, + { + "name": "filter_turma_id", + "required": true, + "in": "query", + "kind": "schema", + "schema": { + "type": "array", + "nullable": false, + "items": { + "nullable": false, + "type": "string" + } + } } ], "responses": { "200": { "nullable": false, - "description": "Resultados da busca de HorariosGerados.", + "description": "Resultados da busca a TurmaDisponibilidades.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoListResultView" + "$ref": "#/components/schemas/TurmaDisponibilidadeListResultView" } } } @@ -8810,7 +8824,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Horarios gerados"], + "tags": ["turmas-disponibilidades"], "security": [ { "bearer": [] @@ -8818,18 +8832,18 @@ ] }, "post": { - "operationId": "HorarioGeradoCreate", + "operationId": "TurmaDisponibilidadeCreate", "summary": "", "description": "Sem descrição.", "parameters": [], "requestBody": { "required": true, - "description": "Dados de entrada para a criação de um HorarioGerado.", + "description": "Dados de entrada para a criação de uma TurmaDisponibilidade.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoInputCreateView" + "$ref": "#/components/schemas/TurmaDisponibilidadeInputCreateView" } } } @@ -8837,12 +8851,12 @@ "responses": { "200": { "nullable": false, - "description": "Visão FindOne de um HorarioGerado.", + "description": "Visão FindOne de uma TurmaDisponibilidade.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoFindOneResultView" + "$ref": "#/components/schemas/TurmaDisponibilidadeFindOneResultView" } } } @@ -8854,7 +8868,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Horarios gerados"], + "tags": ["turmas-disponibilidades"], "security": [ { "bearer": [] @@ -8862,9 +8876,9 @@ ] } }, - "/horarios-gerados/{id}": { + "/turmas-disponibilidades/{id}": { "get": { - "operationId": "HorarioGeradoFindOneById", + "operationId": "TurmaDisponibilidadeFindOneById", "summary": "", "description": "Sem descrição.", "parameters": [ @@ -8880,19 +8894,19 @@ "type": "string", "format": "uuid", "description": "Identificador do registro (uuid).", - "x-unispec-constraint-entity-exists": "HorarioGerado" + "x-unispec-constraint-entity-exists": "TurmaDisponibilidade" } } ], "responses": { "200": { "nullable": false, - "description": "Visão FindOne de um HorarioGerado.", + "description": "Visão FindOne de uma TurmaDisponibilidade.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoFindOneResultView" + "$ref": "#/components/schemas/TurmaDisponibilidadeFindOneResultView" } } } @@ -8904,7 +8918,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Horarios gerados"], + "tags": ["turmas-disponibilidades"], "security": [ { "bearer": [] @@ -8912,7 +8926,7 @@ ] }, "patch": { - "operationId": "HorarioGeradoUpdateOneById", + "operationId": "TurmaDisponibilidadeUpdateOneById", "summary": "", "description": "Sem descrição.", "parameters": [ @@ -8928,18 +8942,18 @@ "type": "string", "format": "uuid", "description": "Identificador do registro (uuid).", - "x-unispec-constraint-entity-exists": "HorarioGerado" + "x-unispec-constraint-entity-exists": "TurmaDisponibilidade" } } ], "requestBody": { "required": true, - "description": "Dados de entrada para a atualização de um HorarioGerado.", + "description": "Dados de entrada para a atualização de uma TurmaDisponibilidade.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoInputUpdateView" + "$ref": "#/components/schemas/TurmaDisponibilidadeInputUpdateView" } } } @@ -8947,12 +8961,12 @@ "responses": { "200": { "nullable": false, - "description": "Visão FindOne de um HorarioGerado.", + "description": "Visão FindOne de uma TurmaDisponibilidade.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoFindOneResultView" + "$ref": "#/components/schemas/TurmaDisponibilidadeFindOneResultView" } } } @@ -8964,7 +8978,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Horarios gerados"], + "tags": ["turmas-disponibilidades"], "security": [ { "bearer": [] @@ -8972,7 +8986,7 @@ ] }, "delete": { - "operationId": "HorarioGeradoDeleteOneById", + "operationId": "TurmaDisponibilidadeDeleteOneById", "summary": "", "description": "Sem descrição.", "parameters": [ @@ -8988,7 +9002,7 @@ "type": "string", "format": "uuid", "description": "Identificador do registro (uuid).", - "x-unispec-constraint-entity-exists": "HorarioGerado" + "x-unispec-constraint-entity-exists": "TurmaDisponibilidade" } } ], @@ -9012,7 +9026,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Horarios gerados"], + "tags": ["turmas-disponibilidades"], "security": [ { "bearer": [] @@ -9020,9 +9034,9 @@ ] } }, - "/horarios-gerados-aula": { + "/professores-disponibilidades": { "get": { - "operationId": "HorarioGeradoAulaList", + "operationId": "ProfessorDisponibilidadeList", "summary": "", "description": "Sem descrição.", "parameters": [ @@ -9075,17 +9089,31 @@ "type": "string" } } + }, + { + "name": "filter_professor_id", + "required": true, + "in": "query", + "kind": "schema", + "schema": { + "type": "array", + "nullable": false, + "items": { + "nullable": false, + "type": "string" + } + } } ], "responses": { "200": { "nullable": false, - "description": "Resultados da busca de HorarioGeradoAulas.", + "description": "Resultados da busca a ProfessorDisponibilidades.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoAulaListResultView" + "$ref": "#/components/schemas/ProfessorDisponibilidadeListResultView" } } } @@ -9097,7 +9125,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Horarios Gerados Aula"], + "tags": ["professores-disponibilidades"], "security": [ { "bearer": [] @@ -9105,18 +9133,18 @@ ] }, "post": { - "operationId": "HorarioGeradoAulaCreate", + "operationId": "ProfessorDisponibilidadeCreate", "summary": "", "description": "Sem descrição.", "parameters": [], "requestBody": { "required": true, - "description": "Dados de entrada para a criação de um HorarioGeradoAula.", + "description": "Dados de entrada para a criação de uma ProfessorDisponibilidade.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoAulaInputCreateView" + "$ref": "#/components/schemas/ProfessorDisponibilidadeInputCreateView" } } } @@ -9124,12 +9152,12 @@ "responses": { "200": { "nullable": false, - "description": "Visão FindOne de um HorarioGeradoAula.", + "description": "Visão FindOne de uma ProfessorDisponibilidade.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoAulaFindOneResultView" + "$ref": "#/components/schemas/ProfessorDisponibilidadeFindOneResultView" } } } @@ -9141,7 +9169,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Horarios Gerados Aula"], + "tags": ["professores-disponibilidades"], "security": [ { "bearer": [] @@ -9149,9 +9177,9 @@ ] } }, - "/horarios-gerados-aula/{id}": { + "/professores-disponibilidades/{id}": { "get": { - "operationId": "HorarioGeradoAulaFindOneById", + "operationId": "ProfessorDisponibilidadeFindOneById", "summary": "", "description": "Sem descrição.", "parameters": [ @@ -9167,19 +9195,19 @@ "type": "string", "format": "uuid", "description": "Identificador do registro (uuid).", - "x-unispec-constraint-entity-exists": "HorarioGeradoAula" + "x-unispec-constraint-entity-exists": "ProfessorDisponibilidade" } } ], "responses": { "200": { "nullable": false, - "description": "Visão FindOne de um HorarioGeradoAula.", + "description": "Visão FindOne de uma ProfessorDisponibilidade.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoAulaFindOneResultView" + "$ref": "#/components/schemas/ProfessorDisponibilidadeFindOneResultView" } } } @@ -9191,7 +9219,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Horarios Gerados Aula"], + "tags": ["professores-disponibilidades"], "security": [ { "bearer": [] @@ -9199,7 +9227,7 @@ ] }, "patch": { - "operationId": "HorarioGeradoAulaUpdateOneById", + "operationId": "ProfessorDisponibilidadeUpdateOneById", "summary": "", "description": "Sem descrição.", "parameters": [ @@ -9215,18 +9243,18 @@ "type": "string", "format": "uuid", "description": "Identificador do registro (uuid).", - "x-unispec-constraint-entity-exists": "HorarioGeradoAula" + "x-unispec-constraint-entity-exists": "ProfessorDisponibilidade" } } ], "requestBody": { "required": true, - "description": "Dados de entrada para a atualização de um HorarioGeradoAula.", + "description": "Dados de entrada para a atualização de uma ProfessorDisponibilidade.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoAulaInputUpdateView" + "$ref": "#/components/schemas/ProfessorDisponibilidadeInputUpdateView" } } } @@ -9234,12 +9262,12 @@ "responses": { "200": { "nullable": false, - "description": "Visão FindOne de um HorarioGeradoAula.", + "description": "Visão FindOne de uma ProfessorDisponibilidade.", "kind": "type", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HorarioGeradoAulaFindOneResultView" + "$ref": "#/components/schemas/ProfessorDisponibilidadeFindOneResultView" } } } @@ -9251,7 +9279,7 @@ "description": "Registro não encontrado." } }, - "tags": ["Horarios Gerados Aula"], + "tags": ["professores-disponibilidades"], "security": [ { "bearer": [] @@ -9259,7 +9287,7 @@ ] }, "delete": { - "operationId": "HorarioGeradoAulaDeleteOneById", + "operationId": "ProfessorDisponibilidadeDeleteOneById", "summary": "", "description": "Sem descrição.", "parameters": [ @@ -9275,7 +9303,7 @@ "type": "string", "format": "uuid", "description": "Identificador do registro (uuid).", - "x-unispec-constraint-entity-exists": "HorarioGeradoAula" + "x-unispec-constraint-entity-exists": "ProfessorDisponibilidade" } } ], @@ -9299,247 +9327,1543 @@ "description": "Registro não encontrado." } }, - "tags": ["Horarios Gerados Aula"], + "tags": ["professores-disponibilidades"], "security": [ { "bearer": [] } ] } - } - }, - "info": { - "title": "Ladesa - API", - "description": "API para a consulta e manipulação de dados e procedimentos relacionados ao Sistema de Gestão Acadêmico.", - "version": "0.0", - "contact": {} - }, - "tags": [ - { - "name": "Base", - "description": "Ladesa - Base" - }, - { - "name": "Arquivos", - "description": "Armazenamento / Arquivos" - }, - { - "name": "Autenticacao", - "description": "" - }, - { - "name": "Usuarios", - "description": "Autenticação / Usuários" - }, - { - "name": "Estados", - "description": "Ambientes / Estados" - }, - { - "name": "Cidades", - "description": "Ambientes / Cidades" - }, - { - "name": "Campi", - "description": "Ambientes / Campi" - }, - { - "name": "Blocos", - "description": "Ambientes / Campi / Blocos" - }, - { - "name": "Ambientes", - "description": "Ambientes / Campi / Blocos / Ambiente" - }, - { - "name": "Reservas", - "description": "Ambientes / Campi / Blocos / Ambiente / Reservas" - }, - { - "name": "Vinculos", - "description": "Autenticação / Usuários / Vínculos" - }, - { - "name": "Modalidades", - "description": "Ensino / Modalidade" - }, - { - "name": "Cursos", - "description": "Ensino / Cursos" - }, - { - "name": "Disciplinas", - "description": "Ensino / Disciplinas" - }, - { - "name": "Turmas", - "description": "Ensino / Turmas" - }, - { - "name": "Diarios", - "description": "Ensino / Diarios" - }, - { - "name": "DiarioProfessor", - "description": "Ensino / Diário Professor" - }, - { - "name": "Calendarios Letivos", - "description": "Calendario / Calendarios Letivos" - } - ], - "servers": [], - "components": { - "securitySchemes": { - "bearer": { - "scheme": "bearer", - "bearerFormat": "JWT", - "type": "http" - } }, - "schemas": { - "PaginatedResultMetaView": { - "type": "object", - "properties": { - "itemsPerPage": { - "type": "integer", - "nullable": false, - "description": "Quantidade de itens por página." - }, - "totalItems": { - "type": "integer", - "nullable": false, - "description": "Total de itens." - }, - "currentPage": { - "type": "integer", - "nullable": false, - "description": "Página atual." + "/horarios-gerados": { + "get": { + "operationId": "HorarioGeradoList", + "summary": "", + "description": "Sem descrição.", + "parameters": [ + { + "name": "page", + "required": false, + "in": "query", + "description": "Página de consulta.", + "kind": "schema", + "schema": { + "minimum": 1, + "description": "Página de consulta.", + "type": "integer" + } }, - "totalPages": { - "type": "integer", - "nullable": false, - "description": "Quantidade total de páginas." + { + "name": "limit", + "required": false, + "in": "query", + "description": "Limite da quantidade de resultados por página.", + "kind": "schema", + "schema": { + "minimum": 1, + "description": "Limite da quantidade de resultados por página.", + "type": "integer" + } }, - "search": { - "type": "string", - "nullable": false, - "description": "Termo textual da busca." + { + "name": "search", + "required": false, + "in": "query", + "description": "Busca textual.", + "kind": "schema", + "schema": { + "description": "Busca textual.", + "type": "string" + } }, - "sortBy": { - "type": "array", - "nullable": false, + { + "name": "sortBy", + "required": false, + "in": "query", "description": "Ordenação.", - "items": { + "kind": "schema", + "schema": { + "type": "array", "nullable": false, - "description": "Configuração de ordenação de uma propriedade.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/PaginationSortByView.json", - "type": "object", - "properties": { - "property": { - "type": "string", - "pattern": "^[\\D\\.]+$", - "description": "Propriedade ordenada." - }, - "mode": { - "type": "string", - "pattern": "^(ASC|DESC)$", - "description": "Modo de ordenação." + "items": { + "nullable": false, + "type": "string" + } + } + } + ], + "responses": { + "200": { + "nullable": false, + "description": "Resultados da busca de HorariosGerados.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoListResultView" } - }, - "required": ["property", "mode"], - "deprecated": true, - "x-unispec-kind": "entity", - "x-unispec-entity-id": "PaginatedSortByView", - "additionalProperties": false + } } }, - "filter": { - "type": "array", - "nullable": false, - "description": "Filtros.", - "items": { - "nullable": false, - "description": "Configuração de filtro por restrições de uma propriedade.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/PaginationFilterView.json", - "type": "object", - "properties": { - "property": { - "type": "string", - "description": "Propriedade filtrada." - }, - "restrictions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Restrições de filtragem." + "403": { + "description": "O solicitante não tem permissão para executar esta ação." + }, + "404": { + "description": "Registro não encontrado." + } + }, + "tags": ["horarios-gerados"], + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "operationId": "HorarioGeradoCreate", + "summary": "", + "description": "Sem descrição.", + "parameters": [], + "requestBody": { + "required": true, + "description": "Dados de entrada para a criação de um HorarioGerado.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoInputCreateView" + } + } + } + }, + "responses": { + "200": { + "nullable": false, + "description": "Visão FindOne de um HorarioGerado.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoFindOneResultView" } - }, - "required": ["property", "restrictions"], - "deprecated": true, - "x-unispec-kind": "entity", - "x-unispec-entity-id": "PaginatedFilterView", - "additionalProperties": false + } + } + }, + "403": { + "description": "O solicitante não tem permissão para executar esta ação." + }, + "404": { + "description": "Registro não encontrado." + } + }, + "tags": ["horarios-gerados"], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/horarios-gerados/{id}": { + "get": { + "operationId": "HorarioGeradoFindOneById", + "summary": "", + "description": "Sem descrição.", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "Identificador do registro (uuid).", + "kind": "schema", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "type": "string", + "format": "uuid", + "description": "Identificador do registro (uuid).", + "x-unispec-constraint-entity-exists": "HorarioGerado" + } + } + ], + "responses": { + "200": { + "nullable": false, + "description": "Visão FindOne de um HorarioGerado.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoFindOneResultView" + } + } + } + }, + "403": { + "description": "O solicitante não tem permissão para executar esta ação." + }, + "404": { + "description": "Registro não encontrado." + } + }, + "tags": ["horarios-gerados"], + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "operationId": "HorarioGeradoUpdateOneById", + "summary": "", + "description": "Sem descrição.", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "Identificador do registro (uuid).", + "kind": "schema", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "type": "string", + "format": "uuid", + "description": "Identificador do registro (uuid).", + "x-unispec-constraint-entity-exists": "HorarioGerado" + } + } + ], + "requestBody": { + "required": true, + "description": "Dados de entrada para a atualização de um HorarioGerado.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoInputUpdateView" + } + } + } + }, + "responses": { + "200": { + "nullable": false, + "description": "Visão FindOne de um HorarioGerado.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoFindOneResultView" + } + } + } + }, + "403": { + "description": "O solicitante não tem permissão para executar esta ação." + }, + "404": { + "description": "Registro não encontrado." + } + }, + "tags": ["horarios-gerados"], + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "operationId": "HorarioGeradoDeleteOneById", + "summary": "", + "description": "Sem descrição.", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "Identificador do registro (uuid).", + "kind": "schema", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "type": "string", + "format": "uuid", + "description": "Identificador do registro (uuid).", + "x-unispec-constraint-entity-exists": "HorarioGerado" + } + } + ], + "responses": { + "200": { + "nullable": false, + "description": "", + "kind": "schema", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "403": { + "description": "O solicitante não tem permissão para executar esta ação." + }, + "404": { + "description": "Registro não encontrado." + } + }, + "tags": ["horarios-gerados"], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/horarios-gerados-aula": { + "get": { + "operationId": "HorarioGeradoAulaList", + "summary": "", + "description": "Sem descrição.", + "parameters": [ + { + "name": "page", + "required": false, + "in": "query", + "description": "Página de consulta.", + "kind": "schema", + "schema": { + "minimum": 1, + "description": "Página de consulta.", + "type": "integer" } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "Limite da quantidade de resultados por página.", + "kind": "schema", + "schema": { + "minimum": 1, + "description": "Limite da quantidade de resultados por página.", + "type": "integer" + } + }, + { + "name": "search", + "required": false, + "in": "query", + "description": "Busca textual.", + "kind": "schema", + "schema": { + "description": "Busca textual.", + "type": "string" + } + }, + { + "name": "sortBy", + "required": false, + "in": "query", + "description": "Ordenação.", + "kind": "schema", + "schema": { + "type": "array", + "nullable": false, + "items": { + "nullable": false, + "type": "string" + } + } + } + ], + "responses": { + "200": { + "nullable": false, + "description": "Resultados da busca de HorarioGeradoAulas.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoAulaListResultView" + } + } + } + }, + "403": { + "description": "O solicitante não tem permissão para executar esta ação." + }, + "404": { + "description": "Registro não encontrado." + } + }, + "tags": ["horarios-gerados-aula"], + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "operationId": "HorarioGeradoAulaCreate", + "summary": "", + "description": "Sem descrição.", + "parameters": [], + "requestBody": { + "required": true, + "description": "Dados de entrada para a criação de um HorarioGeradoAula.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoAulaInputCreateView" + } + } + } + }, + "responses": { + "200": { + "nullable": false, + "description": "Visão FindOne de um HorarioGeradoAula.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoAulaFindOneResultView" + } + } + } + }, + "403": { + "description": "O solicitante não tem permissão para executar esta ação." + }, + "404": { + "description": "Registro não encontrado." + } + }, + "tags": ["horarios-gerados-aula"], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/horarios-gerados-aula/{id}": { + "get": { + "operationId": "HorarioGeradoAulaFindOneById", + "summary": "", + "description": "Sem descrição.", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "Identificador do registro (uuid).", + "kind": "schema", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "type": "string", + "format": "uuid", + "description": "Identificador do registro (uuid).", + "x-unispec-constraint-entity-exists": "HorarioGeradoAula" + } + } + ], + "responses": { + "200": { + "nullable": false, + "description": "Visão FindOne de um HorarioGeradoAula.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoAulaFindOneResultView" + } + } + } + }, + "403": { + "description": "O solicitante não tem permissão para executar esta ação." + }, + "404": { + "description": "Registro não encontrado." + } + }, + "tags": ["horarios-gerados-aula"], + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "operationId": "HorarioGeradoAulaUpdateOneById", + "summary": "", + "description": "Sem descrição.", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "Identificador do registro (uuid).", + "kind": "schema", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "type": "string", + "format": "uuid", + "description": "Identificador do registro (uuid).", + "x-unispec-constraint-entity-exists": "HorarioGeradoAula" + } + } + ], + "requestBody": { + "required": true, + "description": "Dados de entrada para a atualização de um HorarioGeradoAula.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoAulaInputUpdateView" + } + } + } + }, + "responses": { + "200": { + "nullable": false, + "description": "Visão FindOne de um HorarioGeradoAula.", + "kind": "type", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HorarioGeradoAulaFindOneResultView" + } + } + } + }, + "403": { + "description": "O solicitante não tem permissão para executar esta ação." + }, + "404": { + "description": "Registro não encontrado." + } + }, + "tags": ["horarios-gerados-aula"], + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "operationId": "HorarioGeradoAulaDeleteOneById", + "summary": "", + "description": "Sem descrição.", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "Identificador do registro (uuid).", + "kind": "schema", + "schema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "type": "string", + "format": "uuid", + "description": "Identificador do registro (uuid).", + "x-unispec-constraint-entity-exists": "HorarioGeradoAula" + } + } + ], + "responses": { + "200": { + "nullable": false, + "description": "", + "kind": "schema", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "403": { + "description": "O solicitante não tem permissão para executar esta ação." + }, + "404": { + "description": "Registro não encontrado." + } + }, + "tags": ["horarios-gerados-aula"], + "security": [ + { + "bearer": [] + } + ] + } + } + }, + "info": { + "title": "Ladesa - API", + "description": "API para a consulta e manipulação de dados e procedimentos relacionados ao Sistema de Gestão Acadêmico.", + "version": "0.0", + "contact": {} + }, + "tags": [ + { + "name": "base", + "description": "Base" + }, + { + "name": "arquivos", + "description": "Base / Armazenamento / Arquivos" + }, + { + "name": "estados", + "description": "Base / Lugares / Estados" + }, + { + "name": "cidades", + "description": "Base / Lugares / Estados / Cidades" + }, + { + "name": "autenticacao", + "description": "" + }, + { + "name": "usuarios", + "description": "Autenticação / Usuários" + }, + { + "name": "campi", + "description": "Ambientes / Campi" + }, + { + "name": "blocos", + "description": "Ambientes / Campi / Blocos" + }, + { + "name": "ambientes", + "description": "Ambientes / Campi / Blocos / Ambiente" + }, + { + "name": "reservas", + "description": "Ambientes / Campi / Blocos / Ambiente / Reservas" + }, + { + "name": "perfis", + "description": "Autorização / Usuários / Perfis" + }, + { + "name": "niveis-formacoes", + "description": "Ensino Institucional / Níveis de Formações" + }, + { + "name": "modalidades", + "description": "Ensino Institucional / Modalidades" + }, + { + "name": "ofertas-formacoes", + "description": "Ensino Institucional / Ofertas de Formações" + }, + { + "name": "ofertas-formacoes-niveis-formacoes", + "description": "Ensino Institucional / Ofertas de Formações / Níveis de Formação" + }, + { + "name": "cursos", + "description": "Ensino Institucional / Cursos" + }, + { + "name": "disciplinas", + "description": "Ensino Institucional / Disciplinas" + }, + { + "name": "grades-horarios-ofertas-formacoes", + "description": "Calendário / Grades de Horário para Ofertas de Formações" + }, + { + "name": "grades-horarios-ofertas-formacoes-intervalos-de-tempo", + "description": "Calendário / Grades de Horário para Ofertas de Formações / Intervalos de Tempo" + }, + { + "name": "calendarios-letivos", + "description": "Calendário / Calendarios Letivos" + }, + { + "name": "dias-calendarios", + "description": "Calendário / Calendarios Letivos / Dias" + }, + { + "name": "etapas", + "description": "Calendário / Calendarios Letivos / Etapas" + }, + { + "name": "eventos", + "description": "Calendário / Calendarios Letivos / Eventos" + }, + { + "name": "turmas", + "description": "Ensino Discente / Turmas" + }, + { + "name": "diarios", + "description": "Ensino Discente / Diarios" + }, + { + "name": "diarios-professor", + "description": "Ensino Discente / Professores em Diários" + }, + { + "name": "aulas", + "description": "Ensino Discente / Aulas" + } + ], + "servers": [], + "components": { + "securitySchemes": { + "bearer": { + "scheme": "bearer", + "bearerFormat": "JWT", + "type": "http" + } + }, + "schemas": { + "PaginatedResultMetaView": { + "type": "object", + "properties": { + "itemsPerPage": { + "type": "integer", + "nullable": false, + "description": "Quantidade de itens por página." + }, + "totalItems": { + "type": "integer", + "nullable": false, + "description": "Total de itens." + }, + "currentPage": { + "type": "integer", + "nullable": false, + "description": "Página atual." + }, + "totalPages": { + "type": "integer", + "nullable": false, + "description": "Quantidade total de páginas." + }, + "search": { + "type": "string", + "nullable": false, + "description": "Termo textual da busca." + }, + "sortBy": { + "type": "array", + "nullable": false, + "description": "Ordenação.", + "items": { + "nullable": false, + "description": "Configuração de ordenação de uma propriedade.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/PaginationSortByView.json", + "type": "object", + "properties": { + "property": { + "type": "string", + "pattern": "^[\\D\\.]+$", + "description": "Propriedade ordenada." + }, + "mode": { + "type": "string", + "pattern": "^(ASC|DESC)$", + "description": "Modo de ordenação." + } + }, + "required": ["property", "mode"], + "deprecated": true, + "x-unispec-kind": "entity", + "x-unispec-entity-id": "PaginatedSortByView", + "additionalProperties": false + } + }, + "filter": { + "type": "array", + "nullable": false, + "description": "Filtros.", + "items": { + "nullable": false, + "description": "Configuração de filtro por restrições de uma propriedade.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/PaginationFilterView.json", + "type": "object", + "properties": { + "property": { + "type": "string", + "description": "Propriedade filtrada." + }, + "restrictions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Restrições de filtragem." + } + }, + "required": ["property", "restrictions"], + "deprecated": true, + "x-unispec-kind": "entity", + "x-unispec-entity-id": "PaginatedFilterView", + "additionalProperties": false + } + } + }, + "required": ["itemsPerPage", "totalItems", "currentPage", "totalPages", "search", "sortBy", "filter"] + }, + "EstadoFindOneResultView": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "nullable": false, + "description": "Identificador do registro (numérico).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/numeric_id.json", + "minimum": 1 + }, + "nome": { + "type": "string", + "nullable": false, + "description": "Nome oficial do estado." + }, + "sigla": { + "type": "string", + "nullable": false, + "description": "Sigla do estado.", + "x-unispec-constraint-estado-sigla": true + } + }, + "required": ["id", "nome", "sigla"] + }, + "PaginatedResultLinksView": { + "type": "object", + "properties": { + "first": { + "type": "string", + "nullable": true + }, + "previous": { + "type": "string", + "nullable": true + }, + "current": { + "type": "string", + "nullable": true + }, + "next": { + "type": "string", + "nullable": true + }, + "last": { + "type": "string", + "nullable": true + } + }, + "required": ["first", "previous", "current", "next", "last"] + }, + "EstadoListResultView": { + "type": "object", + "properties": { + "meta": { + "nullable": false, + "description": "Metadados da busca.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PaginatedResultMetaView" + } + ] + }, + "data": { + "nullable": false, + "description": "Visão FindOne de um estado.", + "kind": "type", + "type": "array", + "items": { + "$ref": "#/components/schemas/EstadoFindOneResultView" + } + }, + "links": { + "nullable": false, + "description": "Links da busca.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PaginatedResultLinksView" + } + ] + } + }, + "required": ["meta", "data", "links"] + }, + "CidadeFindOneResultView": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "nullable": false, + "description": "Identificador do registro (numérico).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/numeric_id.json", + "minimum": 1 + }, + "nome": { + "type": "string", + "nullable": false, + "description": "Nome oficial da cidade." + }, + "estado": { + "nullable": false, + "description": "Visão FindOne de um estado.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/EstadoFindOneResultView" + } + ] + } + }, + "required": ["id", "nome", "estado"] + }, + "CidadeListResultView": { + "type": "object", + "properties": { + "meta": { + "nullable": false, + "description": "Metadados da busca.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PaginatedResultMetaView" + } + ] + }, + "data": { + "nullable": false, + "description": "Visão FindOne de uma cidade.", + "kind": "type", + "type": "array", + "items": { + "$ref": "#/components/schemas/CidadeFindOneResultView" + } + }, + "links": { + "nullable": false, + "description": "Links da busca.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PaginatedResultLinksView" + } + ] + } + }, + "required": ["meta", "data", "links"] + }, + "ArquivoFindOneResultView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid" + }, + "name": { + "type": "string", + "nullable": true, + "description": "Nome do arquivo." + }, + "mimeType": { + "type": "string", + "nullable": true, + "description": "Formato do arquivo." + }, + "sizeBytes": { + "type": "integer", + "nullable": true, + "description": "Tamanho do arquivo (em bytes)." + }, + "storageType": { + "type": "string", + "nullable": false, + "description": "Estratégia de armazenamento do conteúdo." + }, + "dateCreated": { + "type": "string", + "nullable": false, + "description": "Data e hora da criação do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateUpdated": { + "type": "string", + "nullable": false, + "description": "Data e hora da alteração do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateDeleted": { + "type": "string", + "nullable": true, + "description": "Data e hora da exclusão do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date-time" + } + }, + "required": ["id", "name", "mimeType", "sizeBytes", "storageType", "dateCreated", "dateUpdated", "dateDeleted"] + }, + "ImagemArquivoFindOneFromImagemResultView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid" + }, + "largura": { + "type": "integer", + "nullable": false, + "description": "Largura da imagem." + }, + "altura": { + "type": "integer", + "nullable": false, + "description": "Altura da imagem." + }, + "formato": { + "type": "string", + "nullable": false, + "description": "Formato da imagem." + }, + "mimeType": { + "type": "string", + "nullable": false, + "description": "Mime-type da imagem." + }, + "arquivo": { + "nullable": false, + "description": "Dados de saída para encontrar um arquivo por id.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/ArquivoFindOneResultView" + } + ] + }, + "dateCreated": { + "type": "string", + "nullable": false, + "description": "Data e hora da criação do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateUpdated": { + "type": "string", + "nullable": false, + "description": "Data e hora da alteração do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateDeleted": { + "type": "string", + "nullable": true, + "description": "Data e hora da exclusão do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date-time" + } + }, + "required": ["id", "largura", "altura", "formato", "mimeType", "arquivo", "dateCreated", "dateUpdated", "dateDeleted"] + }, + "ImagemFindOneResultView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid" + }, + "descricao": { + "type": "string", + "nullable": true, + "description": "Descrição da imagem." + }, + "versoes": { + "nullable": false, + "description": "Visão FindOneFromImagem de uma versão de imagem.", + "kind": "type", + "type": "array", + "items": { + "$ref": "#/components/schemas/ImagemArquivoFindOneFromImagemResultView" + } + }, + "dateCreated": { + "type": "string", + "nullable": false, + "description": "Data e hora da criação do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateUpdated": { + "type": "string", + "nullable": false, + "description": "Data e hora da alteração do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateDeleted": { + "type": "string", + "nullable": true, + "description": "Data e hora da exclusão do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date-time" + } + }, + "required": ["id", "descricao", "versoes", "dateCreated", "dateUpdated", "dateDeleted"] + }, + "UsuarioFindOneResultView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid" + }, + "nome": { + "type": "string", + "nullable": true, + "description": "Nome do usuário.", + "minLength": 1 + }, + "matriculaSiape": { + "type": "string", + "nullable": true, + "description": "Matrícula SIAPE do usuário.", + "minLength": 1 + }, + "email": { + "type": "string", + "nullable": true, + "description": "E-mail do usuário.", + "format": "email" + }, + "isSuperUser": { + "type": "boolean", + "nullable": false, + "description": "Diz que o usuário tem poderes de administrador." + }, + "imagemCapa": { + "nullable": true, + "description": "Visão FindOne de uma imagem.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/ImagemFindOneResultView" + } + ] + }, + "imagemPerfil": { + "nullable": true, + "description": "Visão FindOne de uma imagem.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/ImagemFindOneResultView" + } + ] + }, + "dateCreated": { + "type": "string", + "nullable": false, + "description": "Data e hora da criação do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateUpdated": { + "type": "string", + "nullable": false, + "description": "Data e hora da alteração do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateDeleted": { + "type": "string", + "nullable": true, + "description": "Data e hora da exclusão do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date-time" + } + }, + "required": ["id", "nome", "matriculaSiape", "email", "isSuperUser", "imagemCapa", "imagemPerfil", "dateCreated", "dateUpdated", "dateDeleted"] + }, + "EnderecoFindOneResultView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid" + }, + "cep": { + "type": "string", + "nullable": false, + "description": "Código postal (CEP).", + "x-unispec-constraint-cep": true + }, + "logradouro": { + "type": "string", + "nullable": false, + "description": "Logradouro." + }, + "numero": { + "type": "integer", + "nullable": false, + "description": "Número.", + "minimum": 0, + "maximum": 99999 + }, + "bairro": { + "type": "string", + "nullable": false, + "description": "Bairro." + }, + "complemento": { + "type": "string", + "nullable": true, + "description": "Complemento." + }, + "pontoReferencia": { + "type": "string", + "nullable": true, + "description": "Ponto de referência." + }, + "cidade": { + "nullable": false, + "description": "Visão FindOne de uma cidade.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CidadeFindOneResultView" + } + ] + }, + "dateCreated": { + "type": "string", + "nullable": false, + "description": "Data e hora da criação do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateUpdated": { + "type": "string", + "nullable": false, + "description": "Data e hora da alteração do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateDeleted": { + "type": "string", + "nullable": true, + "description": "Data e hora da exclusão do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date-time" + } + }, + "required": ["id", "cep", "logradouro", "numero", "bairro", "complemento", "pontoReferencia", "cidade", "dateCreated", "dateUpdated", "dateDeleted"] + }, + "CampusFindOneResultView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid" + }, + "nomeFantasia": { + "type": "string", + "nullable": false, + "description": "Nome fantasia do campus.", + "minLength": 1 + }, + "razaoSocial": { + "type": "string", + "nullable": false, + "description": "Razão social do campus.", + "minLength": 1 + }, + "apelido": { + "type": "string", + "nullable": false, + "description": "Apelido do campus.", + "minLength": 1 + }, + "cnpj": { + "type": "string", + "nullable": false, + "description": "CNPJ do campus.", + "minLength": 1 + }, + "endereco": { + "nullable": false, + "description": "Visão FindOne de um endereço.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/EnderecoFindOneResultView" + } + ] + }, + "dateCreated": { + "type": "string", + "nullable": false, + "description": "Data e hora da criação do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateUpdated": { + "type": "string", + "nullable": false, + "description": "Data e hora da alteração do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateDeleted": { + "type": "string", + "nullable": true, + "description": "Data e hora da exclusão do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date-time" } }, - "required": ["itemsPerPage", "totalItems", "currentPage", "totalPages", "search", "sortBy", "filter"] + "required": ["id", "nomeFantasia", "razaoSocial", "apelido", "cnpj", "endereco", "dateCreated", "dateUpdated", "dateDeleted"] }, - "EstadoFindOneResultView": { + "PerfilFindOneResultView": { "type": "object", "properties": { "id": { - "type": "integer", + "type": "string", "nullable": false, - "description": "Identificador do registro (numérico).", + "description": "Identificador do registro (uuid).", "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/numeric_id.json", - "minimum": 1 + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid" }, - "nome": { + "ativo": { + "type": "boolean", + "nullable": false, + "description": "Indica se o vínculo está ativo." + }, + "cargo": { "type": "string", "nullable": false, - "description": "Nome oficial do estado." + "description": "Cargo do usuário no vínculo." }, - "sigla": { + "campus": { + "nullable": false, + "description": "Visão FindOne de um campus.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CampusFindOneResultView" + } + ] + }, + "usuario": { + "nullable": false, + "description": "Visão FindOne de um Usuário.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/UsuarioFindOneResultView" + } + ] + }, + "dateCreated": { "type": "string", "nullable": false, - "description": "Sigla do estado.", - "x-unispec-constraint-estado-sigla": true + "description": "Data e hora da criação do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateUpdated": { + "type": "string", + "nullable": false, + "description": "Data e hora da alteração do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateDeleted": { + "type": "string", + "nullable": true, + "description": "Data e hora da exclusão do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date-time" } }, - "required": ["id", "nome", "sigla"] + "required": ["id", "ativo", "cargo", "campus", "usuario", "dateCreated", "dateUpdated", "dateDeleted"] }, - "PaginatedResultLinksView": { + "AuthWhoAmIInputView": { "type": "object", "properties": { - "first": { + "usuario": { + "nullable": true, + "description": "Usuário autenticado.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/UsuarioFindOneResultView" + } + ] + }, + "perfisAtivos": { + "nullable": false, + "description": "Visão FindOne de um Vínculo.", + "kind": "type", + "type": "array", + "items": { + "$ref": "#/components/schemas/PerfilFindOneResultView" + } + } + }, + "required": ["usuario", "perfisAtivos"] + }, + "AuthLoginInputView": { + "type": "object", + "properties": { + "matriculaSiape": { "type": "string", - "nullable": true + "nullable": false, + "description": "Matrícula SIAPE." }, - "previous": { + "senha": { "type": "string", - "nullable": true + "nullable": false, + "description": "Senha do usuário." + } + }, + "required": ["matriculaSiape", "senha"] + }, + "AuthSessionCredentialsView": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "nullable": true, + "description": "Token de acesso." }, - "current": { + "token_type": { "type": "string", - "nullable": true + "nullable": true, + "description": "Tipo do token." }, - "next": { + "id_token": { "type": "string", - "nullable": true + "nullable": true, + "description": "Token de identificação." }, - "last": { + "refresh_token": { "type": "string", - "nullable": true + "nullable": true, + "description": "Token de refresh." + }, + "expires_in": { + "type": "integer", + "nullable": true, + "description": "Tempo de expiração do token." + }, + "expires_at": { + "type": "integer", + "nullable": true, + "description": "Tempo de expiração do token." + }, + "session_state": { + "type": "string", + "nullable": true, + "description": "Estado da sessão." + }, + "scope": { + "type": "string", + "nullable": true, + "description": "Escopo da autenticação." } }, - "required": ["first", "previous", "current", "next", "last"] + "required": ["access_token", "token_type", "id_token", "refresh_token", "expires_in", "expires_at", "session_state", "scope"] }, - "EstadoListResultView": { + "AuthRefreshInputView": { + "type": "object", + "properties": { + "refreshToken": { + "type": "string", + "nullable": false, + "description": "Token de refresh." + } + }, + "required": ["refreshToken"] + }, + "AuthSetInitialPasswordInputView": { + "type": "object", + "properties": { + "matriculaSiape": { + "type": "string", + "nullable": false, + "description": "Matrícula SIAPE." + }, + "senha": { + "type": "string", + "nullable": false, + "description": "Nova senha." + } + }, + "required": ["matriculaSiape", "senha"] + }, + "UsuarioListResultView": { "type": "object", "properties": { "meta": { @@ -9554,11 +10878,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um estado.", + "description": "Visão FindOne de um Usuário.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/EstadoFindOneResultView" + "$ref": "#/components/schemas/UsuarioFindOneResultView" } }, "links": { @@ -9572,38 +10896,56 @@ ] } }, - "required": ["meta", "data", "links"] + "required": ["meta", "data", "links"] + }, + "UsuarioInputCreateView": { + "type": "object", + "properties": { + "nome": { + "type": "string", + "nullable": true, + "description": "Nome do usuário.", + "minLength": 1 + }, + "matriculaSiape": { + "type": "string", + "nullable": true, + "description": "Matrícula SIAPE do usuário.", + "minLength": 1 + }, + "email": { + "type": "string", + "nullable": true, + "description": "E-mail do usuário.", + "format": "email" + } + }, + "required": ["nome", "matriculaSiape", "email"] }, - "CidadeFindOneResultView": { + "UsuarioInputUpdateView": { "type": "object", "properties": { - "id": { - "type": "integer", - "nullable": false, - "description": "Identificador do registro (numérico).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/numeric_id.json", - "minimum": 1 - }, "nome": { "type": "string", - "nullable": false, - "description": "Nome oficial da cidade." + "nullable": true, + "description": "Nome do usuário.", + "minLength": 1 }, - "estado": { - "nullable": false, - "description": "Visão FindOne de um estado.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/EstadoFindOneResultView" - } - ] + "matriculaSiape": { + "type": "string", + "nullable": true, + "description": "Matrícula SIAPE do usuário.", + "minLength": 1 + }, + "email": { + "type": "string", + "nullable": true, + "description": "E-mail do usuário.", + "format": "email" } - }, - "required": ["id", "nome", "estado"] + } }, - "CidadeListResultView": { + "PerfilListResultView": { "type": "object", "properties": { "meta": { @@ -9618,11 +10960,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de uma cidade.", + "description": "Visão FindOne de um Vínculo.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/CidadeFindOneResultView" + "$ref": "#/components/schemas/PerfilFindOneResultView" } }, "links": { @@ -9638,7 +10980,7 @@ }, "required": ["meta", "data", "links"] }, - "ArquivoFindOneResultView": { + "CampusFindOneInputView": { "type": "object", "properties": { "id": { @@ -9647,55 +10989,13 @@ "description": "Identificador do registro (uuid).", "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid" - }, - "name": { - "type": "string", - "nullable": true, - "description": "Nome do arquivo." - }, - "mimeType": { - "type": "string", - "nullable": true, - "description": "Formato do arquivo." - }, - "sizeBytes": { - "type": "integer", - "nullable": true, - "description": "Tamanho do arquivo (em bytes)." - }, - "storageType": { - "type": "string", - "nullable": false, - "description": "Estratégia de armazenamento do conteúdo." - }, - "dateCreated": { - "type": "string", - "nullable": false, - "description": "Data e hora da criação do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" - }, - "dateUpdated": { - "type": "string", - "nullable": false, - "description": "Data e hora da alteração do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" - }, - "dateDeleted": { - "type": "string", - "nullable": true, - "description": "Data e hora da exclusão do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "format": "date-time" + "format": "uuid", + "x-unispec-constraint-entity-exists": "Campus" } }, - "required": ["id", "name", "mimeType", "sizeBytes", "storageType", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id"] }, - "ImagemArquivoFindOneFromImagemResultView": { + "UsuarioFindOneInputView": { "type": "object", "properties": { "id": { @@ -9704,206 +11004,99 @@ "description": "Identificador do registro (uuid).", "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid" - }, - "largura": { - "type": "integer", - "nullable": false, - "description": "Largura da imagem." - }, - "altura": { - "type": "integer", - "nullable": false, - "description": "Altura da imagem." - }, - "formato": { - "type": "string", - "nullable": false, - "description": "Formato da imagem." - }, - "mimeType": { - "type": "string", - "nullable": false, - "description": "Mime-type da imagem." - }, - "arquivo": { - "nullable": false, - "description": "Dados de saída para encontrar um arquivo por id.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/ArquivoFindOneResultView" - } - ] - }, - "dateCreated": { - "type": "string", - "nullable": false, - "description": "Data e hora da criação do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" - }, - "dateUpdated": { - "type": "string", - "nullable": false, - "description": "Data e hora da alteração do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" - }, - "dateDeleted": { - "type": "string", - "nullable": true, - "description": "Data e hora da exclusão do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "format": "date-time" + "format": "uuid", + "x-unispec-constraint-entity-exists": "Usuario" } }, - "required": ["id", "largura", "altura", "formato", "mimeType", "arquivo", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id"] }, - "ImagemFindOneResultView": { + "PerfilInputUpdateView": { "type": "object", "properties": { - "id": { - "type": "string", - "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid" - }, - "descricao": { - "type": "string", - "nullable": true, - "description": "Descrição da imagem." - }, - "versoes": { - "nullable": false, - "description": "Visão FindOneFromImagem de uma versão de imagem.", - "kind": "type", + "cargos": { "type": "array", + "nullable": false, + "description": "Cargos do usuário no vínculo.", "items": { - "$ref": "#/components/schemas/ImagemArquivoFindOneFromImagemResultView" + "nullable": false, + "type": "string" } }, - "dateCreated": { - "type": "string", + "campus": { "nullable": false, - "description": "Data e hora da criação do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" + "description": "Dados de entrada para encontrar um campus por id.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CampusFindOneInputView" + } + ] }, - "dateUpdated": { - "type": "string", + "usuario": { "nullable": false, - "description": "Data e hora da alteração do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" - }, - "dateDeleted": { - "type": "string", - "nullable": true, - "description": "Data e hora da exclusão do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "format": "date-time" + "description": "Dados de entrada para encontrar um Usuário por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/UsuarioFindOneInputView" + } + ] } }, - "required": ["id", "descricao", "versoes", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["cargos", "campus", "usuario"] }, - "UsuarioFindOneResultView": { + "CampusListResultView": { "type": "object", "properties": { - "id": { - "type": "string", - "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid" - }, - "nome": { - "type": "string", - "nullable": true, - "description": "Nome do usuário.", - "minLength": 1 - }, - "matriculaSiape": { - "type": "string", - "nullable": true, - "description": "Matrícula SIAPE do usuário.", - "minLength": 1 - }, - "email": { - "type": "string", - "nullable": true, - "description": "E-mail do usuário.", - "format": "email" - }, - "isSuperUser": { - "type": "boolean", + "meta": { "nullable": false, - "description": "Diz que o usuário tem poderes de administrador." - }, - "imagemCapa": { - "nullable": true, - "description": "Visão FindOne de uma imagem.", + "description": "Metadados da busca.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/ImagemFindOneResultView" + "$ref": "#/components/schemas/PaginatedResultMetaView" } ] }, - "imagemPerfil": { - "nullable": true, - "description": "Visão FindOne de uma imagem.", + "data": { + "nullable": false, + "description": "Visão FindOne de um campus.", + "kind": "type", + "type": "array", + "items": { + "$ref": "#/components/schemas/CampusFindOneResultView" + } + }, + "links": { + "nullable": false, + "description": "Links da busca.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/ImagemFindOneResultView" + "$ref": "#/components/schemas/PaginatedResultLinksView" } ] - }, - "dateCreated": { - "type": "string", - "nullable": false, - "description": "Data e hora da criação do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" - }, - "dateUpdated": { - "type": "string", - "nullable": false, - "description": "Data e hora da alteração do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" - }, - "dateDeleted": { - "type": "string", - "nullable": true, - "description": "Data e hora da exclusão do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "format": "date-time" } }, - "required": ["id", "nome", "matriculaSiape", "email", "isSuperUser", "imagemCapa", "imagemPerfil", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["meta", "data", "links"] }, - "EnderecoFindOneResultView": { + "CidadeFindOneInputView": { "type": "object", "properties": { "id": { - "type": "string", + "type": "integer", "nullable": false, - "description": "Identificador do registro (uuid).", + "description": "Identificador do registro (numérico).", "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid" - }, + "$id": "ladesa://schemas/v3/generics/numeric_id.json", + "minimum": 1 + } + }, + "required": ["id"] + }, + "EnderecoInputView": { + "type": "object", + "properties": { "cep": { "type": "string", "nullable": false, @@ -9939,51 +11132,60 @@ }, "cidade": { "nullable": false, - "description": "Visão FindOne de uma cidade.", + "description": "Dados de entrada para encontrar uma cidade por id.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CidadeFindOneResultView" + "$ref": "#/components/schemas/CidadeFindOneInputView" } ] + } + }, + "required": ["cep", "logradouro", "numero", "bairro", "complemento", "pontoReferencia", "cidade"] + }, + "CampusInputCreateView": { + "type": "object", + "properties": { + "nomeFantasia": { + "type": "string", + "nullable": false, + "description": "Nome fantasia do campus.", + "minLength": 1 }, - "dateCreated": { + "razaoSocial": { "type": "string", "nullable": false, - "description": "Data e hora da criação do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" + "description": "Razão social do campus.", + "minLength": 1 }, - "dateUpdated": { + "apelido": { "type": "string", "nullable": false, - "description": "Data e hora da alteração do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" + "description": "Apelido do campus.", + "minLength": 1 }, - "dateDeleted": { + "cnpj": { "type": "string", - "nullable": true, - "description": "Data e hora da exclusão do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "format": "date-time" + "nullable": false, + "description": "CNPJ do campus.", + "minLength": 1 + }, + "endereco": { + "nullable": false, + "description": "Dados de entrada para um endereco.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/EnderecoInputView" + } + ] } }, - "required": ["id", "cep", "logradouro", "numero", "bairro", "complemento", "pontoReferencia", "cidade", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["nomeFantasia", "razaoSocial", "apelido", "cnpj", "endereco"] }, - "CampusFindOneResultView": { + "CampusInputUpdateView": { "type": "object", "properties": { - "id": { - "type": "string", - "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid" - }, "nomeFantasia": { "type": "string", "nullable": false, @@ -10010,11 +11212,56 @@ }, "endereco": { "nullable": false, - "description": "Visão FindOne de um endereço.", + "description": "Dados de entrada para um endereco.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/EnderecoFindOneResultView" + "$ref": "#/components/schemas/EnderecoInputView" + } + ] + } + } + }, + "BlocoFindOneResultView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid" + }, + "nome": { + "type": "string", + "nullable": false, + "description": "Nome do Bloco.", + "minLength": 1 + }, + "codigo": { + "type": "string", + "nullable": false, + "description": "Código do Bloco.", + "minLength": 1 + }, + "campus": { + "nullable": false, + "description": "Visão FindOne de um campus.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CampusFindOneResultView" + } + ] + }, + "imagemCapa": { + "nullable": true, + "description": "Visão FindOne de uma imagem.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/ImagemFindOneResultView" } ] }, @@ -10041,10 +11288,100 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "format": "date-time" } - }, - "required": ["id", "nomeFantasia", "razaoSocial", "apelido", "cnpj", "endereco", "dateCreated", "dateUpdated", "dateDeleted"] + }, + "required": ["id", "nome", "codigo", "campus", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] + }, + "BlocoListResultView": { + "type": "object", + "properties": { + "meta": { + "nullable": false, + "description": "Metadados da busca.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PaginatedResultMetaView" + } + ] + }, + "data": { + "nullable": false, + "description": "Visão FindOne de um bloco.", + "kind": "type", + "type": "array", + "items": { + "$ref": "#/components/schemas/BlocoFindOneResultView" + } + }, + "links": { + "nullable": false, + "description": "Links da busca.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PaginatedResultLinksView" + } + ] + } + }, + "required": ["meta", "data", "links"] + }, + "BlocoInputCreateView": { + "type": "object", + "properties": { + "nome": { + "type": "string", + "nullable": false, + "description": "Nome do Bloco.", + "minLength": 1 + }, + "codigo": { + "type": "string", + "nullable": false, + "description": "Código do Bloco.", + "minLength": 1 + }, + "campus": { + "nullable": false, + "description": "Dados de entrada para encontrar um campus por id.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CampusFindOneInputView" + } + ] + } + }, + "required": ["nome", "codigo", "campus"] + }, + "BlocoInputUpdateView": { + "type": "object", + "properties": { + "nome": { + "type": "string", + "nullable": false, + "description": "Nome do Bloco.", + "minLength": 1 + }, + "codigo": { + "type": "string", + "nullable": false, + "description": "Código do Bloco.", + "minLength": 1 + }, + "campus": { + "nullable": false, + "description": "Dados de entrada para encontrar um campus por id.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CampusFindOneInputView" + } + ] + } + } }, - "PerfilFindOneResultView": { + "AmbienteFindOneResultView": { "type": "object", "properties": { "id": { @@ -10055,33 +11392,50 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "ativo": { - "type": "boolean", + "nome": { + "type": "string", "nullable": false, - "description": "Indica se o vínculo está ativo." + "description": "Nome do ambiente/sala.", + "minLength": 1 }, - "cargo": { + "descricao": { + "type": "string", + "nullable": true, + "description": "Descrição do ambiente/sala." + }, + "codigo": { "type": "string", "nullable": false, - "description": "Cargo do usuário no vínculo." + "description": "Código do ambiente/sala.", + "minLength": 1 }, - "campus": { + "capacidade": { + "type": "integer", + "nullable": true, + "description": "Capacidade do ambiente/sala." + }, + "tipo": { + "type": "string", + "nullable": true, + "description": "Tipo do ambiente/sala. Ex.: sala aula, auditório, laboratório de química." + }, + "bloco": { "nullable": false, - "description": "Visão FindOne de um campus.", + "description": "Visão FindOne de um bloco.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CampusFindOneResultView" + "$ref": "#/components/schemas/BlocoFindOneResultView" } ] }, - "usuario": { - "nullable": false, - "description": "Visão FindOne de um Usuário.", + "imagemCapa": { + "nullable": true, + "description": "Visão FindOne de uma imagem.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/UsuarioFindOneResultView" + "$ref": "#/components/schemas/ImagemFindOneResultView" } ] }, @@ -10109,123 +11463,9 @@ "format": "date-time" } }, - "required": ["id", "ativo", "cargo", "campus", "usuario", "dateCreated", "dateUpdated", "dateDeleted"] - }, - "AuthWhoAmIInputView": { - "type": "object", - "properties": { - "usuario": { - "nullable": true, - "description": "Usuário autenticado.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/UsuarioFindOneResultView" - } - ] - }, - "perfisAtivos": { - "nullable": false, - "description": "Visão FindOne de um Vínculo.", - "kind": "type", - "type": "array", - "items": { - "$ref": "#/components/schemas/PerfilFindOneResultView" - } - } - }, - "required": ["usuario", "perfisAtivos"] - }, - "AuthLoginInputView": { - "type": "object", - "properties": { - "matriculaSiape": { - "type": "string", - "nullable": false, - "description": "Matrícula SIAPE." - }, - "senha": { - "type": "string", - "nullable": false, - "description": "Senha do usuário." - } - }, - "required": ["matriculaSiape", "senha"] - }, - "AuthSessionCredentialsView": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "nullable": true, - "description": "Token de acesso." - }, - "token_type": { - "type": "string", - "nullable": true, - "description": "Tipo do token." - }, - "id_token": { - "type": "string", - "nullable": true, - "description": "Token de identificação." - }, - "refresh_token": { - "type": "string", - "nullable": true, - "description": "Token de refresh." - }, - "expires_in": { - "type": "integer", - "nullable": true, - "description": "Tempo de expiração do token." - }, - "expires_at": { - "type": "integer", - "nullable": true, - "description": "Tempo de expiração do token." - }, - "session_state": { - "type": "string", - "nullable": true, - "description": "Estado da sessão." - }, - "scope": { - "type": "string", - "nullable": true, - "description": "Escopo da autenticação." - } - }, - "required": ["access_token", "token_type", "id_token", "refresh_token", "expires_in", "expires_at", "session_state", "scope"] - }, - "AuthRefreshInputView": { - "type": "object", - "properties": { - "refreshToken": { - "type": "string", - "nullable": false, - "description": "Token de refresh." - } - }, - "required": ["refreshToken"] - }, - "AuthSetInitialPasswordInputView": { - "type": "object", - "properties": { - "matriculaSiape": { - "type": "string", - "nullable": false, - "description": "Matrícula SIAPE." - }, - "senha": { - "type": "string", - "nullable": false, - "description": "Nova senha." - } - }, - "required": ["matriculaSiape", "senha"] + "required": ["id", "nome", "descricao", "codigo", "capacidade", "tipo", "bloco", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] }, - "UsuarioListResultView": { + "AmbienteListResultView": { "type": "object", "properties": { "meta": { @@ -10240,11 +11480,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um Usuário.", + "description": "Visão FindOne de um ambiente.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/UsuarioFindOneResultView" + "$ref": "#/components/schemas/AmbienteFindOneResultView" } }, "links": { @@ -10260,104 +11500,107 @@ }, "required": ["meta", "data", "links"] }, - "UsuarioInputCreateView": { + "BlocoFindOneInputView": { "type": "object", "properties": { - "nome": { - "type": "string", - "nullable": true, - "description": "Nome do usuário.", - "minLength": 1 - }, - "matriculaSiape": { - "type": "string", - "nullable": true, - "description": "Matrícula SIAPE do usuário.", - "minLength": 1 - }, - "email": { + "id": { "type": "string", - "nullable": true, - "description": "E-mail do usuário.", - "format": "email" + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid", + "x-unispec-constraint-entity-exists": "Bloco" } }, - "required": ["nome", "matriculaSiape", "email"] + "required": ["id"] }, - "UsuarioInputUpdateView": { + "AmbienteInputCreateView": { "type": "object", "properties": { "nome": { "type": "string", - "nullable": true, - "description": "Nome do usuário.", + "nullable": false, + "description": "Nome do ambiente/sala.", "minLength": 1 }, - "matriculaSiape": { + "descricao": { "type": "string", "nullable": true, - "description": "Matrícula SIAPE do usuário.", - "minLength": 1 + "description": "Descrição do ambiente/sala." }, - "email": { + "codigo": { "type": "string", - "nullable": true, - "description": "E-mail do usuário.", - "format": "email" - } - } - }, - "PerfilListResultView": { - "type": "object", - "properties": { - "meta": { "nullable": false, - "description": "Metadados da busca.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/PaginatedResultMetaView" - } - ] + "description": "Código do ambiente/sala.", + "minLength": 1 }, - "data": { - "nullable": false, - "description": "Visão FindOne de um Vínculo.", - "kind": "type", - "type": "array", - "items": { - "$ref": "#/components/schemas/PerfilFindOneResultView" - } + "capacidade": { + "type": "integer", + "nullable": true, + "description": "Capacidade do ambiente/sala." }, - "links": { + "tipo": { + "type": "string", + "nullable": true, + "description": "Tipo do ambiente/sala. Ex.: sala aula, auditório, laboratório de química." + }, + "bloco": { "nullable": false, - "description": "Links da busca.", + "description": "Dados de entrada para encontrar um bloco por id.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/PaginatedResultLinksView" + "$ref": "#/components/schemas/BlocoFindOneInputView" } ] } }, - "required": ["meta", "data", "links"] + "required": ["nome", "descricao", "codigo", "capacidade", "tipo", "bloco"] }, - "CampusFindOneInputView": { + "AmbienteInputUpdateView": { "type": "object", "properties": { - "id": { + "nome": { "type": "string", "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "Campus" + "description": "Nome do ambiente/sala.", + "minLength": 1 + }, + "descricao": { + "type": "string", + "nullable": true, + "description": "Descrição do ambiente/sala." + }, + "codigo": { + "type": "string", + "nullable": false, + "description": "Código do ambiente/sala.", + "minLength": 1 + }, + "capacidade": { + "type": "integer", + "nullable": true, + "description": "Capacidade do ambiente/sala." + }, + "tipo": { + "type": "string", + "nullable": true, + "description": "Tipo do ambiente/sala. Ex.: sala aula, auditório, laboratório de química." + }, + "bloco": { + "nullable": false, + "description": "Dados de entrada para encontrar um bloco por id.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/BlocoFindOneInputView" + } + ] } - }, - "required": ["id"] + } }, - "UsuarioFindOneInputView": { + "ReservaFindOneResultView": { "type": "object", "properties": { "id": { @@ -10366,48 +11609,78 @@ "description": "Identificador do registro (uuid).", "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "Usuario" - } - }, - "required": ["id"] - }, - "PerfilInputUpdateView": { - "type": "object", - "properties": { - "cargos": { - "type": "array", + "format": "uuid" + }, + "situacao": { + "type": "string", "nullable": false, - "description": "Cargos do usuário no vínculo.", - "items": { - "nullable": false, - "type": "string" - } + "description": "Situação da reserva.", + "minLength": 1 }, - "campus": { + "motivo": { + "type": "string", + "nullable": true, + "description": "Motivo da reserva.", + "minLength": 1 + }, + "tipo": { + "type": "string", + "nullable": true, + "description": "Tipo da reserva.", + "minLength": 1 + }, + "rrule": { + "type": "string", "nullable": false, - "description": "Dados de entrada para encontrar um campus por id.", + "description": "Regra RRule para a recorrência da reserva. Segue a RFC 5545 do iCalendar." + }, + "usuario": { + "nullable": false, + "description": "Visão FindOne de um Usuário.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CampusFindOneInputView" + "$ref": "#/components/schemas/UsuarioFindOneResultView" } ] }, - "usuario": { + "ambiente": { "nullable": false, - "description": "Dados de entrada para encontrar um Usuário por ID.", + "description": "Visão FindOne de um ambiente.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/UsuarioFindOneInputView" + "$ref": "#/components/schemas/AmbienteFindOneResultView" } ] + }, + "dateCreated": { + "type": "string", + "nullable": false, + "description": "Data e hora da criação do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateUpdated": { + "type": "string", + "nullable": false, + "description": "Data e hora da alteração do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateDeleted": { + "type": "string", + "nullable": true, + "description": "Data e hora da exclusão do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date-time" } }, - "required": ["cargos", "campus", "usuario"] + "required": ["id", "situacao", "motivo", "tipo", "rrule", "usuario", "ambiente", "dateCreated", "dateUpdated", "dateDeleted"] }, - "CampusListResultView": { + "ReservaListResultView": { "type": "object", "properties": { "meta": { @@ -10422,11 +11695,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um campus.", + "description": "Visão FindOne de uma Reserva.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/CampusFindOneResultView" + "$ref": "#/components/schemas/ReservaFindOneResultView" } }, "links": { @@ -10442,149 +11715,119 @@ }, "required": ["meta", "data", "links"] }, - "CidadeFindOneInputView": { + "AmbienteFindOneInputView": { "type": "object", "properties": { "id": { - "type": "integer", + "type": "string", "nullable": false, - "description": "Identificador do registro (numérico).", + "description": "Identificador do registro (uuid).", "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/numeric_id.json", - "minimum": 1 + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid", + "x-unispec-constraint-entity-exists": "Ambiente" } }, "required": ["id"] }, - "EnderecoInputView": { + "ReservaInputCreateView": { "type": "object", "properties": { - "cep": { - "type": "string", - "nullable": false, - "description": "Código postal (CEP).", - "x-unispec-constraint-cep": true - }, - "logradouro": { + "situacao": { "type": "string", "nullable": false, - "description": "Logradouro." - }, - "numero": { - "type": "integer", - "nullable": false, - "description": "Número.", - "minimum": 0, - "maximum": 99999 + "description": "Situação da reserva.", + "minLength": 1 }, - "bairro": { + "motivo": { "type": "string", - "nullable": false, - "description": "Bairro." + "nullable": true, + "description": "Motivo da reserva.", + "minLength": 1 }, - "complemento": { + "tipo": { "type": "string", "nullable": true, - "description": "Complemento." + "description": "Tipo da reserva.", + "minLength": 1 }, - "pontoReferencia": { + "rrule": { "type": "string", - "nullable": true, - "description": "Ponto de referência." + "nullable": false, + "description": "Regra RRule para a recorrência da reserva. Segue a RFC 5545 do iCalendar." }, - "cidade": { + "usuario": { "nullable": false, - "description": "Dados de entrada para encontrar uma cidade por id.", + "description": "Dados de entrada para encontrar um Usuário por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CidadeFindOneInputView" + "$ref": "#/components/schemas/UsuarioFindOneInputView" } ] - } - }, - "required": ["cep", "logradouro", "numero", "bairro", "complemento", "pontoReferencia", "cidade"] - }, - "CampusInputCreateView": { - "type": "object", - "properties": { - "nomeFantasia": { - "type": "string", - "nullable": false, - "description": "Nome fantasia do campus.", - "minLength": 1 - }, - "razaoSocial": { - "type": "string", - "nullable": false, - "description": "Razão social do campus.", - "minLength": 1 - }, - "apelido": { - "type": "string", - "nullable": false, - "description": "Apelido do campus.", - "minLength": 1 - }, - "cnpj": { - "type": "string", - "nullable": false, - "description": "CNPJ do campus.", - "minLength": 1 }, - "endereco": { + "ambiente": { "nullable": false, - "description": "Dados de entrada para um endereco.", + "description": "Dados de entrada para encontrar um ambiente por id.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/EnderecoInputView" + "$ref": "#/components/schemas/AmbienteFindOneInputView" } ] } }, - "required": ["nomeFantasia", "razaoSocial", "apelido", "cnpj", "endereco"] + "required": ["situacao", "motivo", "tipo", "rrule", "usuario", "ambiente"] }, - "CampusInputUpdateView": { + "ReservaInputUpdateView": { "type": "object", "properties": { - "nomeFantasia": { + "situacao": { "type": "string", "nullable": false, - "description": "Nome fantasia do campus.", + "description": "Situação da reserva.", "minLength": 1 }, - "razaoSocial": { + "motivo": { "type": "string", - "nullable": false, - "description": "Razão social do campus.", + "nullable": true, + "description": "Motivo da reserva.", "minLength": 1 }, - "apelido": { + "tipo": { "type": "string", - "nullable": false, - "description": "Apelido do campus.", + "nullable": true, + "description": "Tipo da reserva.", "minLength": 1 }, - "cnpj": { + "rrule": { "type": "string", "nullable": false, - "description": "CNPJ do campus.", - "minLength": 1 + "description": "Regra RRule para a recorrência da reserva. Segue a RFC 5545 do iCalendar." + }, + "usuario": { + "nullable": false, + "description": "Dados de entrada para encontrar um Usuário por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/UsuarioFindOneInputView" + } + ] }, - "endereco": { + "ambiente": { "nullable": false, - "description": "Dados de entrada para um endereco.", + "description": "Dados de entrada para encontrar um ambiente por id.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/EnderecoInputView" + "$ref": "#/components/schemas/AmbienteFindOneInputView" } ] } } }, - "BlocoFindOneResultView": { + "NivelFormacaoFindOneResultView": { "type": "object", "properties": { "id": { @@ -10595,38 +11838,12 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "nome": { - "type": "string", - "nullable": false, - "description": "Nome do Bloco.", - "minLength": 1 - }, - "codigo": { + "slug": { "type": "string", "nullable": false, - "description": "Código do Bloco.", + "description": "Apelido do nível de formação.", "minLength": 1 }, - "campus": { - "nullable": false, - "description": "Visão FindOne de um campus.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/CampusFindOneResultView" - } - ] - }, - "imagemCapa": { - "nullable": true, - "description": "Visão FindOne de uma imagem.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/ImagemFindOneResultView" - } - ] - }, "dateCreated": { "type": "string", "nullable": false, @@ -10651,9 +11868,9 @@ "format": "date-time" } }, - "required": ["id", "nome", "codigo", "campus", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "slug", "dateCreated", "dateUpdated", "dateDeleted"] }, - "BlocoListResultView": { + "NivelFormacaoListResultView": { "type": "object", "properties": { "meta": { @@ -10668,11 +11885,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um bloco.", + "description": "Visão FindOne de um nível de formação.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/BlocoFindOneResultView" + "$ref": "#/components/schemas/NivelFormacaoFindOneResultView" } }, "links": { @@ -10688,62 +11905,30 @@ }, "required": ["meta", "data", "links"] }, - "BlocoInputCreateView": { + "NivelFormacaoInputCreateView": { "type": "object", "properties": { - "nome": { - "type": "string", - "nullable": false, - "description": "Nome do Bloco.", - "minLength": 1 - }, - "codigo": { + "slug": { "type": "string", "nullable": false, - "description": "Código do Bloco.", + "description": "Apelido do nível de formação.", "minLength": 1 - }, - "campus": { - "nullable": false, - "description": "Dados de entrada para encontrar um campus por id.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/CampusFindOneInputView" - } - ] } }, - "required": ["nome", "codigo", "campus"] + "required": ["slug"] }, - "BlocoInputUpdateView": { + "NivelFormacaoInputUpdateView": { "type": "object", "properties": { - "nome": { - "type": "string", - "nullable": false, - "description": "Nome do Bloco.", - "minLength": 1 - }, - "codigo": { + "slug": { "type": "string", "nullable": false, - "description": "Código do Bloco.", + "description": "Apelido do nível de formação.", "minLength": 1 - }, - "campus": { - "nullable": false, - "description": "Dados de entrada para encontrar um campus por id.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/CampusFindOneInputView" - } - ] } } }, - "AmbienteFindOneResultView": { + "ModalidadeFindOneResultView": { "type": "object", "properties": { "id": { @@ -10754,53 +11939,12 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "nome": { - "type": "string", - "nullable": false, - "description": "Nome do ambiente/sala.", - "minLength": 1 - }, - "descricao": { - "type": "string", - "nullable": true, - "description": "Descrição do ambiente/sala." - }, - "codigo": { + "slug": { "type": "string", "nullable": false, - "description": "Código do ambiente/sala.", + "description": "Apelido da modalidade.", "minLength": 1 }, - "capacidade": { - "type": "integer", - "nullable": true, - "description": "Capacidade do ambiente/sala." - }, - "tipo": { - "type": "string", - "nullable": true, - "description": "Tipo do ambiente/sala. Ex.: sala aula, auditório, laboratório de química." - }, - "bloco": { - "nullable": false, - "description": "Visão FindOne de um bloco.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/BlocoFindOneResultView" - } - ] - }, - "imagemCapa": { - "nullable": true, - "description": "Visão FindOne de uma imagem.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/ImagemFindOneResultView" - } - ] - }, "dateCreated": { "type": "string", "nullable": false, @@ -10825,9 +11969,9 @@ "format": "date-time" } }, - "required": ["id", "nome", "descricao", "codigo", "capacidade", "tipo", "bloco", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "slug", "dateCreated", "dateUpdated", "dateDeleted"] }, - "AmbienteListResultView": { + "ModalidadeListResultView": { "type": "object", "properties": { "meta": { @@ -10840,129 +11984,52 @@ } ] }, - "data": { - "nullable": false, - "description": "Visão FindOne de um ambiente.", - "kind": "type", - "type": "array", - "items": { - "$ref": "#/components/schemas/AmbienteFindOneResultView" - } - }, - "links": { - "nullable": false, - "description": "Links da busca.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/PaginatedResultLinksView" - } - ] - } - }, - "required": ["meta", "data", "links"] - }, - "BlocoFindOneInputView": { - "type": "object", - "properties": { - "id": { - "type": "string", - "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "Bloco" - } - }, - "required": ["id"] - }, - "AmbienteInputCreateView": { - "type": "object", - "properties": { - "nome": { - "type": "string", - "nullable": false, - "description": "Nome do ambiente/sala.", - "minLength": 1 - }, - "descricao": { - "type": "string", - "nullable": true, - "description": "Descrição do ambiente/sala." - }, - "codigo": { - "type": "string", - "nullable": false, - "description": "Código do ambiente/sala.", - "minLength": 1 - }, - "capacidade": { - "type": "integer", - "nullable": true, - "description": "Capacidade do ambiente/sala." - }, - "tipo": { - "type": "string", - "nullable": true, - "description": "Tipo do ambiente/sala. Ex.: sala aula, auditório, laboratório de química." - }, - "bloco": { - "nullable": false, - "description": "Dados de entrada para encontrar um bloco por id.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/BlocoFindOneInputView" - } - ] - } - }, - "required": ["nome", "descricao", "codigo", "capacidade", "tipo", "bloco"] - }, - "AmbienteInputUpdateView": { - "type": "object", - "properties": { - "nome": { - "type": "string", - "nullable": false, - "description": "Nome do ambiente/sala.", - "minLength": 1 - }, - "descricao": { - "type": "string", - "nullable": true, - "description": "Descrição do ambiente/sala." - }, - "codigo": { - "type": "string", - "nullable": false, - "description": "Código do ambiente/sala.", - "minLength": 1 - }, - "capacidade": { - "type": "integer", - "nullable": true, - "description": "Capacidade do ambiente/sala." - }, - "tipo": { - "type": "string", - "nullable": true, - "description": "Tipo do ambiente/sala. Ex.: sala aula, auditório, laboratório de química." + "data": { + "nullable": false, + "description": "Visão FindOne de uma modalidade.", + "kind": "type", + "type": "array", + "items": { + "$ref": "#/components/schemas/ModalidadeFindOneResultView" + } }, - "bloco": { + "links": { "nullable": false, - "description": "Dados de entrada para encontrar um bloco por id.", + "description": "Links da busca.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/BlocoFindOneInputView" + "$ref": "#/components/schemas/PaginatedResultLinksView" } ] } + }, + "required": ["meta", "data", "links"] + }, + "ModalidadeInputCreateView": { + "type": "object", + "properties": { + "slug": { + "type": "string", + "nullable": false, + "description": "Apelido da modalidade.", + "minLength": 1 + } + }, + "required": ["slug"] + }, + "ModalidadeInputUpdateView": { + "type": "object", + "properties": { + "slug": { + "type": "string", + "nullable": false, + "description": "Apelido da modalidade.", + "minLength": 1 + } } }, - "ReservaFindOneResultView": { + "OfertaFormacaoFindOneResultView": { "type": "object", "properties": { "id": { @@ -10973,46 +12040,25 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "situacao": { + "nome": { "type": "string", "nullable": false, - "description": "Situação da reserva.", - "minLength": 1 - }, - "motivo": { - "type": "string", - "nullable": true, - "description": "Motivo da reserva.", - "minLength": 1 - }, - "tipo": { - "type": "string", - "nullable": true, - "description": "Tipo da reserva.", + "description": "Nome da oferta de formação.", "minLength": 1 }, - "rrule": { + "slug": { "type": "string", "nullable": false, - "description": "Regra RRule para a recorrência da reserva. Segue a RFC 5545 do iCalendar." - }, - "usuario": { - "nullable": false, - "description": "Visão FindOne de um Usuário.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/UsuarioFindOneResultView" - } - ] + "description": "Apelido da oferta de formação.", + "minLength": 1 }, - "ambiente": { + "modalidade": { "nullable": false, - "description": "Visão FindOne de um ambiente.", + "description": "Modalidade da oferta de formação.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/AmbienteFindOneResultView" + "$ref": "#/components/schemas/ModalidadeFindOneResultView" } ] }, @@ -11040,9 +12086,9 @@ "format": "date-time" } }, - "required": ["id", "situacao", "motivo", "tipo", "rrule", "usuario", "ambiente", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "nome", "slug", "modalidade", "dateCreated", "dateUpdated", "dateDeleted"] }, - "ReservaListResultView": { + "OfertaFormacaoListResultView": { "type": "object", "properties": { "meta": { @@ -11057,11 +12103,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de uma Reserva.", + "description": "Visão FindOne de uma oferta de formação.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/ReservaFindOneResultView" + "$ref": "#/components/schemas/OfertaFormacaoFindOneResultView" } }, "links": { @@ -11077,7 +12123,7 @@ }, "required": ["meta", "data", "links"] }, - "AmbienteFindOneInputView": { + "ModalidadeFindOneInputView": { "type": "object", "properties": { "id": { @@ -11087,109 +12133,67 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid", - "x-unispec-constraint-entity-exists": "Ambiente" + "x-unispec-constraint-entity-exists": "Modalidade" } }, "required": ["id"] }, - "ReservaInputCreateView": { + "OfertaFormacaoInputCreateView": { "type": "object", "properties": { - "situacao": { + "nome": { "type": "string", "nullable": false, - "description": "Situação da reserva.", - "minLength": 1 - }, - "motivo": { - "type": "string", - "nullable": true, - "description": "Motivo da reserva.", - "minLength": 1 - }, - "tipo": { - "type": "string", - "nullable": true, - "description": "Tipo da reserva.", + "description": "Nome da oferta de formação.", "minLength": 1 }, - "rrule": { + "slug": { "type": "string", "nullable": false, - "description": "Regra RRule para a recorrência da reserva. Segue a RFC 5545 do iCalendar." - }, - "usuario": { - "nullable": false, - "description": "Dados de entrada para encontrar um Usuário por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/UsuarioFindOneInputView" - } - ] + "description": "Apelido da oferta de formação.", + "minLength": 1 }, - "ambiente": { + "modalidade": { "nullable": false, - "description": "Dados de entrada para encontrar um ambiente por id.", + "description": "Modalidade da oferta de formação.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/AmbienteFindOneInputView" + "$ref": "#/components/schemas/ModalidadeFindOneInputView" } ] } }, - "required": ["situacao", "motivo", "tipo", "rrule", "usuario", "ambiente"] + "required": ["nome", "slug", "modalidade"] }, - "ReservaInputUpdateView": { + "OfertaFormacaoInputUpdateView": { "type": "object", "properties": { - "situacao": { + "nome": { "type": "string", "nullable": false, - "description": "Situação da reserva.", - "minLength": 1 - }, - "motivo": { - "type": "string", - "nullable": true, - "description": "Motivo da reserva.", - "minLength": 1 - }, - "tipo": { - "type": "string", - "nullable": true, - "description": "Tipo da reserva.", + "description": "Nome da oferta de formação.", "minLength": 1 }, - "rrule": { + "slug": { "type": "string", "nullable": false, - "description": "Regra RRule para a recorrência da reserva. Segue a RFC 5545 do iCalendar." - }, - "usuario": { - "nullable": false, - "description": "Dados de entrada para encontrar um Usuário por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/UsuarioFindOneInputView" - } - ] + "description": "Apelido da oferta de formação.", + "minLength": 1 }, - "ambiente": { + "modalidade": { "nullable": false, - "description": "Dados de entrada para encontrar um ambiente por id.", + "description": "Modalidade da oferta de formação.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/AmbienteFindOneInputView" + "$ref": "#/components/schemas/ModalidadeFindOneInputView" } ] } } }, - "NivelFormacaoFindOneResultView": { + "OfertaFormacaoNivelFormacaoFindOneResultView": { "type": "object", "properties": { "id": { @@ -11200,11 +12204,15 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "slug": { - "type": "string", + "ofertaFormacao": { "nullable": false, - "description": "Apelido do nível de formação.", - "minLength": 1 + "description": "Visão FindOne de uma oferta de formação.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/OfertaFormacaoFindOneResultView" + } + ] }, "dateCreated": { "type": "string", @@ -11230,9 +12238,9 @@ "format": "date-time" } }, - "required": ["id", "slug", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "ofertaFormacao", "dateCreated", "dateUpdated", "dateDeleted"] }, - "NivelFormacaoListResultView": { + "OfertaFormacaoNivelFormacaoListResultView": { "type": "object", "properties": { "meta": { @@ -11247,11 +12255,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um nível de formação.", + "description": "Visão FindOne de uma oferta de formação.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/NivelFormacaoFindOneResultView" + "$ref": "#/components/schemas/OfertaFormacaoNivelFormacaoFindOneResultView" } }, "links": { @@ -11267,30 +12275,22 @@ }, "required": ["meta", "data", "links"] }, - "NivelFormacaoInputCreateView": { + "OfertaFormacaoFindOneInputView": { "type": "object", "properties": { - "slug": { + "id": { "type": "string", "nullable": false, - "description": "Apelido do nível de formação.", - "minLength": 1 + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid", + "x-unispec-constraint-entity-exists": "OfertaFormacao" } }, - "required": ["slug"] - }, - "NivelFormacaoInputUpdateView": { - "type": "object", - "properties": { - "slug": { - "type": "string", - "nullable": false, - "description": "Apelido do nível de formação.", - "minLength": 1 - } - } + "required": ["id"] }, - "ModalidadeFindOneResultView": { + "NivelFormacaoFindOneInputView": { "type": "object", "properties": { "id": { @@ -11299,99 +12299,64 @@ "description": "Identificador do registro (uuid).", "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid" - }, - "slug": { - "type": "string", - "nullable": false, - "description": "Apelido da modalidade.", - "minLength": 1 - }, - "dateCreated": { - "type": "string", - "nullable": false, - "description": "Data e hora da criação do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" - }, - "dateUpdated": { - "type": "string", - "nullable": false, - "description": "Data e hora da alteração do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" - }, - "dateDeleted": { - "type": "string", - "nullable": true, - "description": "Data e hora da exclusão do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "format": "date-time" + "format": "uuid", + "x-unispec-constraint-entity-exists": "NivelFormacao" } }, - "required": ["id", "slug", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id"] }, - "ModalidadeListResultView": { + "OfertaFormacaoNivelFormacaoInputCreateView": { "type": "object", "properties": { - "meta": { + "ofertaFormacao": { "nullable": false, - "description": "Metadados da busca.", + "description": "Dados de entrada para encontrar uma oferta de formação por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/PaginatedResultMetaView" + "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" } ] }, - "data": { - "nullable": false, - "description": "Visão FindOne de uma modalidade.", - "kind": "type", - "type": "array", - "items": { - "$ref": "#/components/schemas/ModalidadeFindOneResultView" - } - }, - "links": { + "nivelFormcao": { "nullable": false, - "description": "Links da busca.", + "description": "Dados de entrada para encontrar um nível de formação por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/PaginatedResultLinksView" + "$ref": "#/components/schemas/NivelFormacaoFindOneInputView" } ] } }, - "required": ["meta", "data", "links"] + "required": ["ofertaFormacao", "nivelFormcao"] }, - "ModalidadeInputCreateView": { + "OfertaFormacaoNivelFormacaoInputUpdateView": { "type": "object", "properties": { - "slug": { - "type": "string", + "ofertaFormacao": { "nullable": false, - "description": "Apelido da modalidade.", - "minLength": 1 - } - }, - "required": ["slug"] - }, - "ModalidadeInputUpdateView": { - "type": "object", - "properties": { - "slug": { - "type": "string", + "description": "Dados de entrada para encontrar uma oferta de formação por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" + } + ] + }, + "nivelFormcao": { "nullable": false, - "description": "Apelido da modalidade.", - "minLength": 1 + "description": "Dados de entrada para encontrar um nível de formação por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/NivelFormacaoFindOneInputView" + } + ] } } }, - "OfertaFormacaoFindOneResultView": { + "CursoFindOneResultView": { "type": "object", "properties": { "id": { @@ -11405,22 +12370,42 @@ "nome": { "type": "string", "nullable": false, - "description": "Nome da oferta de formação.", + "description": "Nome do curso.", "minLength": 1 }, - "slug": { + "nomeAbreviado": { "type": "string", "nullable": false, - "description": "Apelido da oferta de formação.", + "description": "Nome abreviado do curso.", "minLength": 1 }, - "modalidade": { + "campus": { "nullable": false, - "description": "Modalidade da oferta de formação.", + "description": "Visão FindOne de um campus.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/ModalidadeFindOneResultView" + "$ref": "#/components/schemas/CampusFindOneResultView" + } + ] + }, + "ofertaFormacao": { + "nullable": false, + "description": "Visão FindOne de uma oferta de formação.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/OfertaFormacaoFindOneResultView" + } + ] + }, + "imagemCapa": { + "nullable": true, + "description": "Visão FindOne de uma imagem.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/ImagemFindOneResultView" } ] }, @@ -11448,9 +12433,9 @@ "format": "date-time" } }, - "required": ["id", "nome", "slug", "modalidade", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "nome", "nomeAbreviado", "campus", "ofertaFormacao", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] }, - "OfertaFormacaoListResultView": { + "CursoListResultView": { "type": "object", "properties": { "meta": { @@ -11465,11 +12450,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de uma oferta de formação.", + "description": "Visão FindOne de um Curso.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/OfertaFormacaoFindOneResultView" + "$ref": "#/components/schemas/CursoFindOneResultView" } }, "links": { @@ -11485,77 +12470,82 @@ }, "required": ["meta", "data", "links"] }, - "ModalidadeFindOneInputView": { - "type": "object", - "properties": { - "id": { - "type": "string", - "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "Modalidade" - } - }, - "required": ["id"] - }, - "OfertaFormacaoInputCreateView": { + "CursoInputCreateView": { "type": "object", "properties": { "nome": { "type": "string", "nullable": false, - "description": "Nome da oferta de formação.", + "description": "Nome do curso.", "minLength": 1 }, - "slug": { + "nomeAbreviado": { "type": "string", "nullable": false, - "description": "Apelido da oferta de formação.", + "description": "Nome abreviado do curso.", "minLength": 1 }, - "modalidade": { + "campus": { "nullable": false, - "description": "Modalidade da oferta de formação.", + "description": "Dados de entrada para encontrar um campus por id.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/ModalidadeFindOneInputView" + "$ref": "#/components/schemas/CampusFindOneInputView" + } + ] + }, + "ofertaFormacao": { + "nullable": false, + "description": "Dados de entrada para encontrar uma oferta de formação por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" } ] } }, - "required": ["nome", "slug", "modalidade"] + "required": ["nome", "nomeAbreviado", "campus", "ofertaFormacao"] }, - "OfertaFormacaoInputUpdateView": { + "CursoInputUpdateView": { "type": "object", "properties": { "nome": { "type": "string", "nullable": false, - "description": "Nome da oferta de formação.", + "description": "Nome do curso.", "minLength": 1 }, - "slug": { + "nomeAbreviado": { "type": "string", "nullable": false, - "description": "Apelido da oferta de formação.", + "description": "Nome abreviado do curso.", "minLength": 1 }, - "modalidade": { + "campus": { "nullable": false, - "description": "Modalidade da oferta de formação.", + "description": "Dados de entrada para encontrar um campus por id.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/ModalidadeFindOneInputView" + "$ref": "#/components/schemas/CampusFindOneInputView" + } + ] + }, + "ofertaFormacao": { + "nullable": false, + "description": "Dados de entrada para encontrar uma oferta de formação por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" } ] } } }, - "OfertaFormacaoNivelFormacaoFindOneResultView": { + "DisciplinaFindOneResultView": { "type": "object", "properties": { "id": { @@ -11566,13 +12556,32 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "ofertaFormacao": { + "nome": { + "type": "string", "nullable": false, - "description": "Visão FindOne de uma oferta de formação.", + "description": "Nome da disciplina.", + "minLength": 1 + }, + "nomeAbreviado": { + "type": "string", + "nullable": false, + "description": "Nome abreviado da disciplina.", + "minLength": 1 + }, + "cargaHoraria": { + "type": "integer", + "nullable": false, + "description": "Carga horária da disciplina.", + "minimum": 1, + "maximum": 65535 + }, + "imagemCapa": { + "nullable": true, + "description": "Visão FindOne de uma imagem.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/OfertaFormacaoFindOneResultView" + "$ref": "#/components/schemas/ImagemFindOneResultView" } ] }, @@ -11600,9 +12609,9 @@ "format": "date-time" } }, - "required": ["id", "ofertaFormacao", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "nome", "nomeAbreviado", "cargaHoraria", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] }, - "OfertaFormacaoNivelFormacaoListResultView": { + "DisciplinaListResultView": { "type": "object", "properties": { "meta": { @@ -11617,11 +12626,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de uma oferta de formação.", + "description": "Visão FindOne de uma Disciplina.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/OfertaFormacaoNivelFormacaoFindOneResultView" + "$ref": "#/components/schemas/DisciplinaFindOneResultView" } }, "links": { @@ -11637,88 +12646,56 @@ }, "required": ["meta", "data", "links"] }, - "OfertaFormacaoFindOneInputView": { + "DisciplinaInputCreateView": { "type": "object", "properties": { - "id": { + "nome": { "type": "string", "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "OfertaFormacao" - } - }, - "required": ["id"] - }, - "NivelFormacaoFindOneInputView": { - "type": "object", - "properties": { - "id": { + "description": "Nome da disciplina.", + "minLength": 1 + }, + "nomeAbreviado": { "type": "string", "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "NivelFormacao" - } - }, - "required": ["id"] - }, - "OfertaFormacaoNivelFormacaoInputCreateView": { - "type": "object", - "properties": { - "ofertaFormacao": { - "nullable": false, - "description": "Dados de entrada para encontrar uma oferta de formação por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" - } - ] + "description": "Nome abreviado da disciplina.", + "minLength": 1 }, - "nivelFormcao": { + "cargaHoraria": { + "type": "integer", "nullable": false, - "description": "Dados de entrada para encontrar um nível de formação por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/NivelFormacaoFindOneInputView" - } - ] + "description": "Carga horária da disciplina.", + "minimum": 1, + "maximum": 65535 } }, - "required": ["ofertaFormacao", "nivelFormcao"] + "required": ["nome", "nomeAbreviado", "cargaHoraria"] }, - "OfertaFormacaoNivelFormacaoInputUpdateView": { + "DisciplinaInputUpdateView": { "type": "object", "properties": { - "ofertaFormacao": { + "nome": { + "type": "string", "nullable": false, - "description": "Dados de entrada para encontrar uma oferta de formação por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" - } - ] + "description": "Nome da disciplina.", + "minLength": 1 }, - "nivelFormcao": { + "nomeAbreviado": { + "type": "string", "nullable": false, - "description": "Dados de entrada para encontrar um nível de formação por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/NivelFormacaoFindOneInputView" - } - ] + "description": "Nome abreviado da disciplina.", + "minLength": 1 + }, + "cargaHoraria": { + "type": "integer", + "nullable": false, + "description": "Carga horária da disciplina.", + "minimum": 1, + "maximum": 65535 } } }, - "CursoFindOneResultView": { + "CalendarioLetivoFindOneResultView": { "type": "object", "properties": { "id": { @@ -11732,14 +12709,14 @@ "nome": { "type": "string", "nullable": false, - "description": "Nome do curso.", - "minLength": 1 + "description": "Nome do calendário letivo." }, - "nomeAbreviado": { - "type": "string", + "ano": { + "type": "integer", "nullable": false, - "description": "Nome abreviado do curso.", - "minLength": 1 + "description": "Ano do calendário letivo.", + "minimum": 0, + "maximum": 65535 }, "campus": { "nullable": false, @@ -11761,16 +12738,6 @@ } ] }, - "imagemCapa": { - "nullable": true, - "description": "Visão FindOne de uma imagem.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/ImagemFindOneResultView" - } - ] - }, "dateCreated": { "type": "string", "nullable": false, @@ -11795,9 +12762,9 @@ "format": "date-time" } }, - "required": ["id", "nome", "nomeAbreviado", "campus", "ofertaFormacao", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "nome", "ano", "campus", "ofertaFormacao", "dateCreated", "dateUpdated", "dateDeleted"] }, - "CursoListResultView": { + "CalendarioLetivoListResultView": { "type": "object", "properties": { "meta": { @@ -11812,11 +12779,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um Curso.", + "description": "Visão FindOne de um calendário letivo.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/CursoFindOneResultView" + "$ref": "#/components/schemas/CalendarioLetivoFindOneResultView" } }, "links": { @@ -11832,20 +12799,20 @@ }, "required": ["meta", "data", "links"] }, - "CursoInputCreateView": { + "CalendarioLetivoInputCreateView": { "type": "object", "properties": { "nome": { "type": "string", "nullable": false, - "description": "Nome do curso.", - "minLength": 1 + "description": "Nome do calendário letivo." }, - "nomeAbreviado": { - "type": "string", + "ano": { + "type": "integer", "nullable": false, - "description": "Nome abreviado do curso.", - "minLength": 1 + "description": "Ano do calendário letivo.", + "minimum": 0, + "maximum": 65535 }, "campus": { "nullable": false, @@ -11868,22 +12835,22 @@ ] } }, - "required": ["nome", "nomeAbreviado", "campus", "ofertaFormacao"] + "required": ["nome", "ano", "campus", "ofertaFormacao"] }, - "CursoInputUpdateView": { + "CalendarioLetivoInputUpdateView": { "type": "object", "properties": { "nome": { "type": "string", "nullable": false, - "description": "Nome do curso.", - "minLength": 1 + "description": "Nome do calendário letivo." }, - "nomeAbreviado": { - "type": "string", + "ano": { + "type": "integer", "nullable": false, - "description": "Nome abreviado do curso.", - "minLength": 1 + "description": "Ano do calendário letivo.", + "minimum": 0, + "maximum": 65535 }, "campus": { "nullable": false, @@ -11907,7 +12874,7 @@ } } }, - "DisciplinaFindOneResultView": { + "GradeHorarioOfertaFormacaoFindOneResultView": { "type": "object", "properties": { "id": { @@ -11918,32 +12885,23 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "nome": { - "type": "string", - "nullable": false, - "description": "Nome da disciplina.", - "minLength": 1 - }, - "nomeAbreviado": { - "type": "string", + "campus": { "nullable": false, - "description": "Nome abreviado da disciplina.", - "minLength": 1 + "description": "Visão FindOne de um campus.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CampusFindOneResultView" + } + ] }, - "cargaHoraria": { - "type": "integer", + "ofertaFormacao": { "nullable": false, - "description": "Carga horária da disciplina.", - "minimum": 1, - "maximum": 65535 - }, - "imagemCapa": { - "nullable": true, - "description": "Visão FindOne de uma imagem.", + "description": "Visão FindOne de uma oferta de formação.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/ImagemFindOneResultView" + "$ref": "#/components/schemas/OfertaFormacaoFindOneResultView" } ] }, @@ -11971,9 +12929,9 @@ "format": "date-time" } }, - "required": ["id", "nome", "nomeAbreviado", "cargaHoraria", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "campus", "ofertaFormacao", "dateCreated", "dateUpdated", "dateDeleted"] }, - "DisciplinaListResultView": { + "GradeHorarioOfertaFormacaoListResultView": { "type": "object", "properties": { "meta": { @@ -11988,11 +12946,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de uma Disciplina.", + "description": "Visão FindOne de uma oferta de formação.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/DisciplinaFindOneResultView" + "$ref": "#/components/schemas/GradeHorarioOfertaFormacaoFindOneResultView" } }, "links": { @@ -12008,56 +12966,58 @@ }, "required": ["meta", "data", "links"] }, - "DisciplinaInputCreateView": { + "GradeHorarioOfertaFormacaoInputCreateView": { "type": "object", "properties": { - "nome": { - "type": "string", - "nullable": false, - "description": "Nome da disciplina.", - "minLength": 1 - }, - "nomeAbreviado": { - "type": "string", + "campus": { "nullable": false, - "description": "Nome abreviado da disciplina.", - "minLength": 1 + "description": "Dados de entrada para encontrar um campus por id.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CampusFindOneInputView" + } + ] }, - "cargaHoraria": { - "type": "integer", + "ofertaFormacao": { "nullable": false, - "description": "Carga horária da disciplina.", - "minimum": 1, - "maximum": 65535 + "description": "Dados de entrada para encontrar uma oferta de formação por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" + } + ] } }, - "required": ["nome", "nomeAbreviado", "cargaHoraria"] + "required": ["campus", "ofertaFormacao"] }, - "DisciplinaInputUpdateView": { + "GradeHorarioOfertaFormacaoInputUpdateView": { "type": "object", "properties": { - "nome": { - "type": "string", - "nullable": false, - "description": "Nome da disciplina.", - "minLength": 1 - }, - "nomeAbreviado": { - "type": "string", + "campus": { "nullable": false, - "description": "Nome abreviado da disciplina.", - "minLength": 1 + "description": "Dados de entrada para encontrar um campus por id.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CampusFindOneInputView" + } + ] }, - "cargaHoraria": { - "type": "integer", + "ofertaFormacao": { "nullable": false, - "description": "Carga horária da disciplina.", - "minimum": 1, - "maximum": 65535 + "description": "Dados de entrada para encontrar uma oferta de formação por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" + } + ] } } }, - "CalendarioLetivoFindOneResultView": { + "IntervaloDeTempoFindOneResultView": { "type": "object", "properties": { "id": { @@ -12068,35 +13028,76 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "nome": { + "periodoInicio": { "type": "string", "nullable": false, - "description": "Nome do calendário letivo." + "description": "Horário que o intervalo de tempo inicia.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/time.json", + "format": "time" }, - "ano": { - "type": "integer", + "periodoFim": { + "type": "string", "nullable": false, - "description": "Ano do calendário letivo.", - "minimum": 0, - "maximum": 65535 + "description": "Horário que o intervalo de tempo termina.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/time.json", + "format": "time" + }, + "dateCreated": { + "type": "string", + "nullable": false, + "description": "Data e hora da criação do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateUpdated": { + "type": "string", + "nullable": false, + "description": "Data e hora da alteração do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateDeleted": { + "type": "string", + "nullable": true, + "description": "Data e hora da exclusão do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date-time" + } + }, + "required": ["id", "periodoInicio", "periodoFim", "dateCreated", "dateUpdated", "dateDeleted"] + }, + "GradeHorarioOfertaFormacaoIntervaloDeTempoFindOneResultView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid" }, - "campus": { + "gradeHorarioOfertaFormacao": { "nullable": false, - "description": "Visão FindOne de um campus.", + "description": "Visão FindOne de uma oferta de formação.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CampusFindOneResultView" + "$ref": "#/components/schemas/GradeHorarioOfertaFormacaoFindOneResultView" } ] }, - "ofertaFormacao": { + "intervaloDeTempo": { "nullable": false, - "description": "Visão FindOne de uma oferta de formação.", + "description": "Visão FindOne de um Intervalo de Tempo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/OfertaFormacaoFindOneResultView" + "$ref": "#/components/schemas/IntervaloDeTempoFindOneResultView" } ] }, @@ -12124,9 +13125,9 @@ "format": "date-time" } }, - "required": ["id", "nome", "ano", "campus", "ofertaFormacao", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "gradeHorarioOfertaFormacao", "intervaloDeTempo", "dateCreated", "dateUpdated", "dateDeleted"] }, - "CalendarioLetivoListResultView": { + "GradeHorarioOfertaFormacaoIntervaloDeTempoListResultView": { "type": "object", "properties": { "meta": { @@ -12141,11 +13142,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um calendário letivo.", + "description": "Visão FindOne de uma oferta de formação.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/CalendarioLetivoFindOneResultView" + "$ref": "#/components/schemas/GradeHorarioOfertaFormacaoIntervaloDeTempoFindOneResultView" } }, "links": { @@ -12161,82 +13162,95 @@ }, "required": ["meta", "data", "links"] }, - "CalendarioLetivoInputCreateView": { + "GradeHorarioOfertaFormacaoFindOneInputView": { "type": "object", "properties": { - "nome": { + "id": { "type": "string", "nullable": false, - "description": "Nome do calendário letivo." - }, - "ano": { - "type": "integer", + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid", + "x-unispec-constraint-entity-exists": "GradeHorarioOfertaFormacao" + } + }, + "required": ["id"] + }, + "IntervaloDeTempoInputView": { + "type": "object", + "properties": { + "periodoInicio": { + "type": "string", "nullable": false, - "description": "Ano do calendário letivo.", - "minimum": 0, - "maximum": 65535 + "description": "Horário que o intervalo de tempo inicia.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/time.json", + "format": "time" }, - "campus": { + "periodoFim": { + "type": "string", "nullable": false, - "description": "Dados de entrada para encontrar um campus por id.", + "description": "Horário que o intervalo de tempo termina.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/time.json", + "format": "time" + } + }, + "required": ["periodoInicio", "periodoFim"] + }, + "GradeHorarioOfertaFormacaoIntervaloDeTempoInputCreateView": { + "type": "object", + "properties": { + "gradeHorarioOfertaFormacao": { + "nullable": false, + "description": "Dados de entrada para encontrar uma oferta de formação por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CampusFindOneInputView" + "$ref": "#/components/schemas/GradeHorarioOfertaFormacaoFindOneInputView" } ] }, - "ofertaFormacao": { + "intervaloDeTempo": { "nullable": false, - "description": "Dados de entrada para encontrar uma oferta de formação por ID.", + "description": "Dados de entrada para um Intervalo de Tempo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" + "$ref": "#/components/schemas/IntervaloDeTempoInputView" } ] } }, - "required": ["nome", "ano", "campus", "ofertaFormacao"] + "required": ["gradeHorarioOfertaFormacao", "intervaloDeTempo"] }, - "CalendarioLetivoInputUpdateView": { + "GradeHorarioOfertaFormacaoIntervaloDeTempoInputUpdateView": { "type": "object", "properties": { - "nome": { - "type": "string", - "nullable": false, - "description": "Nome do calendário letivo." - }, - "ano": { - "type": "integer", - "nullable": false, - "description": "Ano do calendário letivo.", - "minimum": 0, - "maximum": 65535 - }, - "campus": { + "gradeHorarioOfertaFormacao": { "nullable": false, - "description": "Dados de entrada para encontrar um campus por id.", + "description": "Dados de entrada para encontrar uma oferta de formação por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CampusFindOneInputView" + "$ref": "#/components/schemas/GradeHorarioOfertaFormacaoFindOneInputView" } ] }, - "ofertaFormacao": { + "intervaloDeTempo": { "nullable": false, - "description": "Dados de entrada para encontrar uma oferta de formação por ID.", + "description": "Dados de entrada para um Intervalo de Tempo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" + "$ref": "#/components/schemas/IntervaloDeTempoInputView" } ] } } }, - "GradeHorarioOfertaFormacaoFindOneResultView": { + "EventoFindOneResultView": { "type": "object", "properties": { "id": { @@ -12247,23 +13261,28 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "campus": { + "nome": { + "type": "string", + "nullable": true, + "description": "Nome do evento." + }, + "rrule": { + "type": "string", "nullable": false, - "description": "Visão FindOne de um campus.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/CampusFindOneResultView" - } - ] + "description": "Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar." }, - "ofertaFormacao": { + "cor": { + "type": "string", + "nullable": true, + "description": "Cor da Evento." + }, + "calendario": { "nullable": false, - "description": "Visão FindOne de uma oferta de formação.", + "description": "Visão FindOne de um calendário letivo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/OfertaFormacaoFindOneResultView" + "$ref": "#/components/schemas/CalendarioLetivoFindOneResultView" } ] }, @@ -12291,9 +13310,9 @@ "format": "date-time" } }, - "required": ["id", "campus", "ofertaFormacao", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "nome", "rrule", "cor", "calendario", "dateCreated", "dateUpdated", "dateDeleted"] }, - "GradeHorarioOfertaFormacaoListResultView": { + "EventoListResultView": { "type": "object", "properties": { "meta": { @@ -12308,11 +13327,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de uma oferta de formação.", + "description": "Visão FindOne de um Evento.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/GradeHorarioOfertaFormacaoFindOneResultView" + "$ref": "#/components/schemas/EventoFindOneResultView" } }, "links": { @@ -12328,111 +13347,77 @@ }, "required": ["meta", "data", "links"] }, - "GradeHorarioOfertaFormacaoInputCreateView": { + "CalendarioLetivoFindOneInputView": { "type": "object", "properties": { - "campus": { - "nullable": false, - "description": "Dados de entrada para encontrar um campus por id.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/CampusFindOneInputView" - } - ] - }, - "ofertaFormacao": { + "id": { + "type": "string", "nullable": false, - "description": "Dados de entrada para encontrar uma oferta de formação por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" - } - ] + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid", + "x-unispec-constraint-entity-exists": "CalendarioLetivo" } }, - "required": ["campus", "ofertaFormacao"] + "required": ["id"] }, - "GradeHorarioOfertaFormacaoInputUpdateView": { + "EventoInputCreateView": { "type": "object", "properties": { - "campus": { - "nullable": false, - "description": "Dados de entrada para encontrar um campus por id.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/CampusFindOneInputView" - } - ] + "nome": { + "type": "string", + "nullable": true }, - "ofertaFormacao": { + "rrule": { + "type": "string", + "nullable": false + }, + "cor": { + "type": "string", + "nullable": true + }, + "calendario": { "nullable": false, - "description": "Dados de entrada para encontrar uma oferta de formação por ID.", + "description": "Dados de entrada para encontrar um calendário letivo por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/OfertaFormacaoFindOneInputView" + "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" } ] } - } + }, + "required": ["nome", "rrule", "cor", "calendario"] }, - "IntervaloDeTempoFindOneResultView": { + "EventoInputUpdateView": { "type": "object", "properties": { - "id": { - "type": "string", - "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid" - }, - "periodoInicio": { + "nome": { "type": "string", - "nullable": false, - "description": "Horário que o intervalo de tempo inicia.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/time.json", - "format": "time" + "nullable": true }, - "periodoFim": { + "rrule": { "type": "string", - "nullable": false, - "description": "Horário que o intervalo de tempo termina.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/time.json", - "format": "time" + "nullable": false }, - "dateCreated": { + "cor": { "type": "string", - "nullable": false, - "description": "Data e hora da criação do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" + "nullable": true }, - "dateUpdated": { - "type": "string", + "calendario": { "nullable": false, - "description": "Data e hora da alteração do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date_time.json", - "format": "date-time" - }, - "dateDeleted": { - "type": "string", - "nullable": true, - "description": "Data e hora da exclusão do registro.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "format": "date-time" + "description": "Dados de entrada para encontrar um calendário letivo por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" + } + ] } - }, - "required": ["id", "periodoInicio", "periodoFim", "dateCreated", "dateUpdated", "dateDeleted"] + } }, - "GradeHorarioOfertaFormacaoIntervaloDeTempoFindOneResultView": { + "DiaCalendarioFindOneResultView": { "type": "object", "properties": { "id": { @@ -12443,23 +13428,31 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "gradeHorarioOfertaFormacao": { + "data": { + "type": "string", "nullable": false, - "description": "Visão FindOne de uma oferta de formação.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/GradeHorarioOfertaFormacaoFindOneResultView" - } - ] + "description": "Data.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, - "intervaloDeTempo": { + "diaLetivo": { + "type": "boolean", "nullable": false, - "description": "Visão FindOne de um Intervalo de Tempo.", + "description": "Define que o dia é letivo." + }, + "feriado": { + "type": "boolean", + "nullable": false, + "description": "Define que o dia é feriado." + }, + "calendario": { + "nullable": false, + "description": "Visão FindOne de um calendário letivo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/IntervaloDeTempoFindOneResultView" + "$ref": "#/components/schemas/CalendarioLetivoFindOneResultView" } ] }, @@ -12487,9 +13480,9 @@ "format": "date-time" } }, - "required": ["id", "gradeHorarioOfertaFormacao", "intervaloDeTempo", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "data", "diaLetivo", "feriado", "calendario", "dateCreated", "dateUpdated", "dateDeleted"] }, - "GradeHorarioOfertaFormacaoIntervaloDeTempoListResultView": { + "DiaCalendarioListResultView": { "type": "object", "properties": { "meta": { @@ -12504,11 +13497,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de uma oferta de formação.", + "description": "Visão FindOne de um DiaCalendario.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/GradeHorarioOfertaFormacaoIntervaloDeTempoFindOneResultView" + "$ref": "#/components/schemas/DiaCalendarioFindOneResultView" } }, "links": { @@ -12524,95 +13517,70 @@ }, "required": ["meta", "data", "links"] }, - "GradeHorarioOfertaFormacaoFindOneInputView": { - "type": "object", - "properties": { - "id": { - "type": "string", - "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "GradeHorarioOfertaFormacao" - } - }, - "required": ["id"] - }, - "IntervaloDeTempoInputView": { + "DiaCalendarioInputCreateView": { "type": "object", "properties": { - "periodoInicio": { + "data": { "type": "string", "nullable": false, - "description": "Horário que o intervalo de tempo inicia.", + "description": "Date ISO 8601.", "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/time.json", - "format": "time" + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, - "periodoFim": { - "type": "string", - "nullable": false, - "description": "Horário que o intervalo de tempo termina.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/time.json", - "format": "time" - } - }, - "required": ["periodoInicio", "periodoFim"] - }, - "GradeHorarioOfertaFormacaoIntervaloDeTempoInputCreateView": { - "type": "object", - "properties": { - "gradeHorarioOfertaFormacao": { - "nullable": false, - "description": "Dados de entrada para encontrar uma oferta de formação por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/GradeHorarioOfertaFormacaoFindOneInputView" - } - ] + "feriado": { + "type": "boolean", + "nullable": false }, - "intervaloDeTempo": { - "nullable": false, - "description": "Dados de entrada para um Intervalo de Tempo.", + "diaLetivo": { + "type": "boolean", + "nullable": false + }, + "calendario": { + "nullable": true, + "description": "Dados de entrada para encontrar um calendário letivo por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/IntervaloDeTempoInputView" + "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" } ] } }, - "required": ["gradeHorarioOfertaFormacao", "intervaloDeTempo"] + "required": ["data", "feriado", "diaLetivo", "calendario"] }, - "GradeHorarioOfertaFormacaoIntervaloDeTempoInputUpdateView": { + "DiaCalendarioInputUpdateView": { "type": "object", "properties": { - "gradeHorarioOfertaFormacao": { + "data": { + "type": "string", "nullable": false, - "description": "Dados de entrada para encontrar uma oferta de formação por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/GradeHorarioOfertaFormacaoFindOneInputView" - } - ] + "description": "Date ISO 8601.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, - "intervaloDeTempo": { - "nullable": false, - "description": "Dados de entrada para um Intervalo de Tempo.", + "feriado": { + "type": "boolean", + "nullable": false + }, + "diaLetivo": { + "type": "boolean", + "nullable": false + }, + "calendario": { + "nullable": true, + "description": "Dados de entrada para encontrar um calendário letivo por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/IntervaloDeTempoInputView" + "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" } ] } } }, - "EventoFindOneResultView": { + "EtapaFindOneResultView": { "type": "object", "properties": { "id": { @@ -12623,20 +13591,33 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "nome": { - "type": "string", + "numero": { + "type": "integer", "nullable": true, - "description": "Nome do evento." + "description": "Número da etapa.", + "minimum": 0, + "maximum": 255 }, - "rrule": { + "dataInicio": { "type": "string", "nullable": false, - "description": "Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar." + "description": "Data de início.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" + }, + "dataTermino": { + "type": "string", + "nullable": false, + "description": "Data de término.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, "cor": { "type": "string", "nullable": true, - "description": "Cor da Evento." + "description": "Cor da etapa." }, "calendario": { "nullable": false, @@ -12672,9 +13653,9 @@ "format": "date-time" } }, - "required": ["id", "nome", "rrule", "cor", "calendario", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "numero", "dataInicio", "dataTermino", "cor", "calendario", "dateCreated", "dateUpdated", "dateDeleted"] }, - "EventoListResultView": { + "EtapaListResultView": { "type": "object", "properties": { "meta": { @@ -12689,11 +13670,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um Evento.", + "description": "Visão FindOne de uma Etapa.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/EventoFindOneResultView" + "$ref": "#/components/schemas/EtapaFindOneResultView" } }, "links": { @@ -12709,31 +13690,30 @@ }, "required": ["meta", "data", "links"] }, - "CalendarioLetivoFindOneInputView": { + "EtapaInputCreateView": { "type": "object", "properties": { - "id": { + "numero": { + "type": "integer", + "nullable": true, + "minimum": 0, + "maximum": 255 + }, + "dataInicio": { "type": "string", "nullable": false, - "description": "Identificador do registro (uuid).", + "description": "Date ISO 8601.", "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "CalendarioLetivo" - } - }, - "required": ["id"] - }, - "EventoInputCreateView": { - "type": "object", - "properties": { - "nome": { - "type": "string", - "nullable": true + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, - "rrule": { + "dataTermino": { "type": "string", - "nullable": false + "nullable": false, + "description": "Date ISO 8601.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, "cor": { "type": "string", @@ -12750,18 +13730,32 @@ ] } }, - "required": ["nome", "rrule", "cor", "calendario"] + "required": ["numero", "dataInicio", "dataTermino", "cor", "calendario"] }, - "EventoInputUpdateView": { + "EtapaInputUpdateView": { "type": "object", "properties": { - "nome": { + "numero": { + "type": "integer", + "nullable": true, + "minimum": 0, + "maximum": 255 + }, + "dataInicio": { "type": "string", - "nullable": true + "nullable": false, + "description": "Date ISO 8601.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, - "rrule": { + "dataTermino": { "type": "string", - "nullable": false + "nullable": false, + "description": "Date ISO 8601.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, "cor": { "type": "string", @@ -12779,7 +13773,7 @@ } } }, - "DiaCalendarioFindOneResultView": { + "TurmaFindOneResultView": { "type": "object", "properties": { "id": { @@ -12790,31 +13784,39 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "data": { + "periodo": { "type": "string", "nullable": false, - "description": "Data.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" - }, - "diaLetivo": { - "type": "boolean", - "nullable": false, - "description": "Define que o dia é letivo." - }, - "feriado": { - "type": "boolean", - "nullable": false, - "description": "Define que o dia é feriado." + "description": "Período da Turma.", + "minLength": 1 }, - "calendario": { + "curso": { "nullable": false, - "description": "Visão FindOne de um calendário letivo.", + "description": "Visão FindOne de um Curso.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CalendarioLetivoFindOneResultView" + "$ref": "#/components/schemas/CursoFindOneResultView" + } + ] + }, + "ambientePadraoAula": { + "nullable": true, + "description": "Visão FindOne de um ambiente.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/AmbienteFindOneResultView" + } + ] + }, + "imagemCapa": { + "nullable": true, + "description": "Visão FindOne de uma imagem.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/ImagemFindOneResultView" } ] }, @@ -12842,9 +13844,9 @@ "format": "date-time" } }, - "required": ["id", "data", "diaLetivo", "feriado", "calendario", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "periodo", "curso", "ambientePadraoAula", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] }, - "DiaCalendarioListResultView": { + "TurmaListResultView": { "type": "object", "properties": { "meta": { @@ -12859,11 +13861,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um DiaCalendario.", + "description": "Visão FindOne de uma Turma.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/DiaCalendarioFindOneResultView" + "$ref": "#/components/schemas/TurmaFindOneResultView" } }, "links": { @@ -12879,70 +13881,85 @@ }, "required": ["meta", "data", "links"] }, - "DiaCalendarioInputCreateView": { + "CursoFindOneInputView": { "type": "object", "properties": { - "data": { + "id": { "type": "string", "nullable": false, - "description": "Date ISO 8601.", + "description": "Identificador do registro (uuid).", "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" - }, - "feriado": { - "type": "boolean", - "nullable": false + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid", + "x-unispec-constraint-entity-exists": "Curso" + } + }, + "required": ["id"] + }, + "TurmaInputCreateView": { + "type": "object", + "properties": { + "periodo": { + "type": "string", + "nullable": false, + "description": "Período da Turma.", + "minLength": 1 }, - "diaLetivo": { - "type": "boolean", - "nullable": false + "curso": { + "nullable": false, + "description": "Dados de entrada para encontrar um Curso por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CursoFindOneInputView" + } + ] }, - "calendario": { - "nullable": true, - "description": "Dados de entrada para encontrar um calendário letivo por ID.", + "ambientePadraoAula": { + "nullable": false, + "description": "Dados de entrada para encontrar um ambiente por id.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" + "$ref": "#/components/schemas/AmbienteFindOneInputView" } ] } }, - "required": ["data", "feriado", "diaLetivo", "calendario"] + "required": ["periodo", "curso", "ambientePadraoAula"] }, - "DiaCalendarioInputUpdateView": { + "TurmaInputUpdateView": { "type": "object", "properties": { - "data": { + "periodo": { "type": "string", "nullable": false, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" - }, - "feriado": { - "type": "boolean", - "nullable": false + "description": "Período da Turma.", + "minLength": 1 }, - "diaLetivo": { - "type": "boolean", - "nullable": false + "curso": { + "nullable": false, + "description": "Dados de entrada para encontrar um Curso por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CursoFindOneInputView" + } + ] }, - "calendario": { - "nullable": true, - "description": "Dados de entrada para encontrar um calendário letivo por ID.", + "ambientePadraoAula": { + "nullable": false, + "description": "Dados de entrada para encontrar um ambiente por id.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" + "$ref": "#/components/schemas/AmbienteFindOneInputView" } ] } } }, - "EtapaFindOneResultView": { + "DiarioFindOneResultView": { "type": "object", "properties": { "id": { @@ -12953,41 +13970,58 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "numero": { - "type": "integer", - "nullable": true, - "description": "Número da etapa.", - "minimum": 0, - "maximum": 255 + "ativo": { + "type": "boolean", + "nullable": false, + "description": "Situação do diário." }, - "dataInicio": { - "type": "string", + "calendarioLetivo": { "nullable": false, - "description": "Data de início.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" + "description": "Visão FindOne de um calendário letivo.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/CalendarioLetivoFindOneResultView" + } + ] }, - "dataTermino": { - "type": "string", + "turma": { "nullable": false, - "description": "Data de término.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" + "description": "Visão FindOne de uma Turma.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/TurmaFindOneResultView" + } + ] }, - "cor": { - "type": "string", + "disciplina": { + "nullable": false, + "description": "Visão FindOne de uma Disciplina.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/DisciplinaFindOneResultView" + } + ] + }, + "ambientePadrao": { "nullable": true, - "description": "Cor da etapa." + "description": "Visão FindOne de um ambiente.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/AmbienteFindOneResultView" + } + ] }, - "calendario": { - "nullable": false, - "description": "Visão FindOne de um calendário letivo.", + "imagemCapa": { + "nullable": true, + "description": "Visão FindOne de uma imagem.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CalendarioLetivoFindOneResultView" + "$ref": "#/components/schemas/ImagemFindOneResultView" } ] }, @@ -13015,73 +14049,131 @@ "format": "date-time" } }, - "required": ["id", "numero", "dataInicio", "dataTermino", "cor", "calendario", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "ativo", "calendarioLetivo", "turma", "disciplina", "ambientePadrao", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] + }, + "DiarioListResultView": { + "type": "object", + "properties": { + "meta": { + "nullable": false, + "description": "Metadados da busca.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PaginatedResultMetaView" + } + ] + }, + "data": { + "nullable": false, + "description": "Visão FindOne de um diário.", + "kind": "type", + "type": "array", + "items": { + "$ref": "#/components/schemas/DiarioFindOneResultView" + } + }, + "links": { + "nullable": false, + "description": "Links da busca.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PaginatedResultLinksView" + } + ] + } + }, + "required": ["meta", "data", "links"] + }, + "TurmaFindOneInputView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid", + "x-unispec-constraint-entity-exists": "Turma" + } + }, + "required": ["id"] + }, + "DisciplinaFindOneInputView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid", + "x-unispec-constraint-entity-exists": "Disciplina" + } + }, + "required": ["id"] }, - "EtapaListResultView": { + "DiarioInputCreateView": { "type": "object", "properties": { - "meta": { + "ativo": { + "type": "boolean", + "nullable": false + }, + "calendarioLetivo": { "nullable": false, - "description": "Metadados da busca.", + "description": "Dados de entrada para encontrar um calendário letivo por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/PaginatedResultMetaView" + "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" } ] }, - "data": { + "turma": { "nullable": false, - "description": "Visão FindOne de uma Etapa.", + "description": "Dados de entrada para encontrar uma Turma por ID.", "kind": "type", - "type": "array", - "items": { - "$ref": "#/components/schemas/EtapaFindOneResultView" - } + "allOf": [ + { + "$ref": "#/components/schemas/TurmaFindOneInputView" + } + ] }, - "links": { + "disciplina": { "nullable": false, - "description": "Links da busca.", + "description": "Dados de entrada para encontrar uma Disciplina por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/PaginatedResultLinksView" + "$ref": "#/components/schemas/DisciplinaFindOneInputView" + } + ] + }, + "ambientePadrao": { + "nullable": true, + "description": "Dados de entrada para encontrar um ambiente por id.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/AmbienteFindOneInputView" } ] } }, - "required": ["meta", "data", "links"] + "required": ["ativo", "calendarioLetivo", "turma", "disciplina", "ambientePadrao"] }, - "EtapaInputCreateView": { + "DiarioInputUpdateView": { "type": "object", "properties": { - "numero": { - "type": "integer", - "nullable": true, - "minimum": 0, - "maximum": 255 - }, - "dataInicio": { - "type": "string", - "nullable": false, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" - }, - "dataTermino": { - "type": "string", - "nullable": false, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" - }, - "cor": { - "type": "string", - "nullable": true + "ativo": { + "type": "boolean", + "nullable": false }, - "calendario": { + "calendarioLetivo": { "nullable": false, "description": "Dados de entrada para encontrar um calendário letivo por ID.", "kind": "type", @@ -13090,52 +14182,40 @@ "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" } ] - } - }, - "required": ["numero", "dataInicio", "dataTermino", "cor", "calendario"] - }, - "EtapaInputUpdateView": { - "type": "object", - "properties": { - "numero": { - "type": "integer", - "nullable": true, - "minimum": 0, - "maximum": 255 }, - "dataInicio": { - "type": "string", + "turma": { "nullable": false, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" + "description": "Dados de entrada para encontrar uma Turma por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/TurmaFindOneInputView" + } + ] }, - "dataTermino": { - "type": "string", + "disciplina": { "nullable": false, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" - }, - "cor": { - "type": "string", - "nullable": true + "description": "Dados de entrada para encontrar uma Disciplina por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/DisciplinaFindOneInputView" + } + ] }, - "calendario": { - "nullable": false, - "description": "Dados de entrada para encontrar um calendário letivo por ID.", + "ambientePadrao": { + "nullable": true, + "description": "Dados de entrada para encontrar um ambiente por id.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" + "$ref": "#/components/schemas/AmbienteFindOneInputView" } ] } } }, - "TurmaFindOneResultView": { + "DiarioProfessorFindOneResultView": { "type": "object", "properties": { "id": { @@ -13146,39 +14226,28 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "periodo": { - "type": "string", + "situacao": { + "type": "boolean", "nullable": false, - "description": "Período da Turma.", - "minLength": 1 + "description": "Situação do vínculo." }, - "curso": { + "perfil": { "nullable": false, - "description": "Visão FindOne de um Curso.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/CursoFindOneResultView" - } - ] - }, - "ambientePadraoAula": { - "nullable": true, - "description": "Visão FindOne de um ambiente.", + "description": "Visão FindOne de um Vínculo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/AmbienteFindOneResultView" + "$ref": "#/components/schemas/PerfilFindOneResultView" } ] }, - "imagemCapa": { - "nullable": true, - "description": "Visão FindOne de uma imagem.", + "diario": { + "nullable": false, + "description": "Visão FindOne de um diário.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/ImagemFindOneResultView" + "$ref": "#/components/schemas/DiarioFindOneResultView" } ] }, @@ -13206,9 +14275,9 @@ "format": "date-time" } }, - "required": ["id", "periodo", "curso", "ambientePadraoAula", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "situacao", "perfil", "diario", "dateCreated", "dateUpdated", "dateDeleted"] }, - "TurmaListResultView": { + "DiarioProfessorListResultView": { "type": "object", "properties": { "meta": { @@ -13223,11 +14292,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de uma Turma.", + "description": "Visão FindOne de um DiarioProfessor.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/TurmaFindOneResultView" + "$ref": "#/components/schemas/DiarioProfessorFindOneResultView" } }, "links": { @@ -13243,7 +14312,7 @@ }, "required": ["meta", "data", "links"] }, - "CursoFindOneInputView": { + "PerfilFindOneInputView": { "type": "object", "properties": { "id": { @@ -13253,75 +14322,86 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid", - "x-unispec-constraint-entity-exists": "Curso" + "x-unispec-constraint-entity-exists": "Perfil" } }, "required": ["id"] }, - "TurmaInputCreateView": { + "DiarioFindOneInputView": { "type": "object", "properties": { - "periodo": { + "id": { "type": "string", "nullable": false, - "description": "Período da Turma.", - "minLength": 1 + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid", + "x-unispec-constraint-entity-exists": "Diario" + } + }, + "required": ["id"] + }, + "DiarioProfessorInputCreateView": { + "type": "object", + "properties": { + "situacao": { + "type": "boolean", + "nullable": false }, - "curso": { + "perfil": { "nullable": false, - "description": "Dados de entrada para encontrar um Curso por ID.", + "description": "Dados de entrada para encontrar um Vínculo por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CursoFindOneInputView" + "$ref": "#/components/schemas/PerfilFindOneInputView" } ] }, - "ambientePadraoAula": { + "diario": { "nullable": false, - "description": "Dados de entrada para encontrar um ambiente por id.", + "description": "Dados de entrada para encontrar um diário por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/AmbienteFindOneInputView" + "$ref": "#/components/schemas/DiarioFindOneInputView" } ] } }, - "required": ["periodo", "curso", "ambientePadraoAula"] + "required": ["situacao", "perfil", "diario"] }, - "TurmaInputUpdateView": { + "DiarioProfessorInputUpdateView": { "type": "object", "properties": { - "periodo": { - "type": "string", - "nullable": false, - "description": "Período da Turma.", - "minLength": 1 + "situacao": { + "type": "boolean", + "nullable": false }, - "curso": { + "perfil": { "nullable": false, - "description": "Dados de entrada para encontrar um Curso por ID.", + "description": "Dados de entrada para encontrar um Vínculo por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CursoFindOneInputView" + "$ref": "#/components/schemas/PerfilFindOneInputView" } ] }, - "ambientePadraoAula": { + "diario": { "nullable": false, - "description": "Dados de entrada para encontrar um ambiente por id.", + "description": "Dados de entrada para encontrar um diário por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/AmbienteFindOneInputView" + "$ref": "#/components/schemas/DiarioFindOneInputView" } ] } } }, - "DiarioFindOneResultView": { + "AulaFindOneResultView": { "type": "object", "properties": { "id": { @@ -13332,42 +14412,40 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "ativo": { - "type": "boolean", + "data": { + "type": "string", "nullable": false, - "description": "Situação do diário." + "description": "Data da aula.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, - "calendarioLetivo": { - "nullable": false, - "description": "Visão FindOne de um calendário letivo.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/CalendarioLetivoFindOneResultView" - } - ] + "modalidade": { + "type": "string", + "nullable": true, + "description": "Modalidade da aula." }, - "turma": { + "intervaloDeTempo": { "nullable": false, - "description": "Visão FindOne de uma Turma.", + "description": "Visão FindOne de um Intervalo de Tempo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/TurmaFindOneResultView" + "$ref": "#/components/schemas/IntervaloDeTempoFindOneResultView" } ] }, - "disciplina": { + "diario": { "nullable": false, - "description": "Visão FindOne de uma Disciplina.", + "description": "Visão FindOne de um diário.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/DisciplinaFindOneResultView" + "$ref": "#/components/schemas/DiarioFindOneResultView" } ] }, - "ambientePadrao": { + "ambiente": { "nullable": true, "description": "Visão FindOne de um ambiente.", "kind": "type", @@ -13377,16 +14455,6 @@ } ] }, - "imagemCapa": { - "nullable": true, - "description": "Visão FindOne de uma imagem.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/ImagemFindOneResultView" - } - ] - }, "dateCreated": { "type": "string", "nullable": false, @@ -13411,9 +14479,9 @@ "format": "date-time" } }, - "required": ["id", "ativo", "calendarioLetivo", "turma", "disciplina", "ambientePadrao", "imagemCapa", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "data", "modalidade", "intervaloDeTempo", "diario", "ambiente", "dateCreated", "dateUpdated", "dateDeleted"] }, - "DiarioListResultView": { + "AulaListResultView": { "type": "object", "properties": { "meta": { @@ -13428,11 +14496,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um diário.", + "description": "Visão FindOne de uma Aula.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/DiarioFindOneResultView" + "$ref": "#/components/schemas/AulaFindOneResultView" } }, "links": { @@ -13448,74 +14516,42 @@ }, "required": ["meta", "data", "links"] }, - "TurmaFindOneInputView": { - "type": "object", - "properties": { - "id": { - "type": "string", - "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "Turma" - } - }, - "required": ["id"] - }, - "DisciplinaFindOneInputView": { + "AulaInputCreateView": { "type": "object", "properties": { - "id": { + "data": { "type": "string", "nullable": false, - "description": "Identificador do registro (uuid).", + "description": "Date ISO 8601.", "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "Disciplina" - } - }, - "required": ["id"] - }, - "DiarioInputCreateView": { - "type": "object", - "properties": { - "ativo": { - "type": "boolean", - "nullable": false + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, - "calendarioLetivo": { - "nullable": false, - "description": "Dados de entrada para encontrar um calendário letivo por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" - } - ] + "modalidade": { + "type": "string", + "nullable": true }, - "turma": { + "intervaloDeTempo": { "nullable": false, - "description": "Dados de entrada para encontrar uma Turma por ID.", + "description": "Dados de entrada para um Intervalo de Tempo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/TurmaFindOneInputView" + "$ref": "#/components/schemas/IntervaloDeTempoInputView" } ] }, - "disciplina": { + "diario": { "nullable": false, - "description": "Dados de entrada para encontrar uma Disciplina por ID.", + "description": "Dados de entrada para encontrar um diário por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/DisciplinaFindOneInputView" + "$ref": "#/components/schemas/DiarioFindOneInputView" } ] }, - "ambientePadrao": { + "ambiente": { "nullable": true, "description": "Dados de entrada para encontrar um ambiente por id.", "kind": "type", @@ -13526,58 +14562,184 @@ ] } }, - "required": ["ativo", "calendarioLetivo", "turma", "disciplina", "ambientePadrao"] + "required": ["data", "modalidade", "intervaloDeTempo", "diario", "ambiente"] }, - "DiarioInputUpdateView": { + "AulaInputUpdateView": { "type": "object", "properties": { - "ativo": { - "type": "boolean", - "nullable": false + "data": { + "type": "string", + "nullable": false, + "description": "Date ISO 8601.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" }, - "calendarioLetivo": { + "modalidade": { + "type": "string", + "nullable": true + }, + "intervaloDeTempo": { "nullable": false, - "description": "Dados de entrada para encontrar um calendário letivo por ID.", + "description": "Dados de entrada para um Intervalo de Tempo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/CalendarioLetivoFindOneInputView" + "$ref": "#/components/schemas/IntervaloDeTempoInputView" } ] }, - "turma": { + "diario": { "nullable": false, - "description": "Dados de entrada para encontrar uma Turma por ID.", + "description": "Dados de entrada para encontrar um diário por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/TurmaFindOneInputView" + "$ref": "#/components/schemas/DiarioFindOneInputView" } ] }, - "disciplina": { - "nullable": false, - "description": "Dados de entrada para encontrar uma Disciplina por ID.", + "ambiente": { + "nullable": true, + "description": "Dados de entrada para encontrar um ambiente por id.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/DisciplinaFindOneInputView" + "$ref": "#/components/schemas/AmbienteFindOneInputView" } ] + } + } + }, + "DisponibilidadeFindOneResultView": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": false, + "description": "Identificador do registro (uuid).", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/uuid.json", + "format": "uuid" }, - "ambientePadrao": { + "dataInicio": { + "type": "string", + "nullable": false, + "description": "Data de início.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" + }, + "dataFim": { + "type": "string", "nullable": true, - "description": "Dados de entrada para encontrar um ambiente por id.", + "description": "Data de término.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date" + }, + "dateCreated": { + "type": "string", + "nullable": false, + "description": "Data e hora da criação do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateUpdated": { + "type": "string", + "nullable": false, + "description": "Data e hora da alteração do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date_time.json", + "format": "date-time" + }, + "dateDeleted": { + "type": "string", + "nullable": true, + "description": "Data e hora da exclusão do registro.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date-time" + } + }, + "required": ["id", "dataInicio", "dataFim", "dateCreated", "dateUpdated", "dateDeleted"] + }, + "DisponibilidadeListResultView": { + "type": "object", + "properties": { + "meta": { + "nullable": false, + "description": "Metadados da busca.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/AmbienteFindOneInputView" + "$ref": "#/components/schemas/PaginatedResultMetaView" } ] + }, + "data": { + "nullable": false, + "description": "Visão FindOne de uma Disponibilidade.", + "kind": "type", + "type": "array", + "items": { + "$ref": "#/components/schemas/DisponibilidadeFindOneResultView" + } + }, + "links": { + "nullable": false, + "description": "Links da busca.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PaginatedResultLinksView" + } + ] + } + }, + "required": ["meta", "data", "links"] + }, + "DisponibilidadeInputCreateView": { + "type": "object", + "properties": { + "dataInicio": { + "type": "string", + "nullable": false, + "description": "Date ISO 8601.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" + }, + "dataFim": { + "type": "string", + "nullable": true, + "description": "Date ISO 8601.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date" + } + }, + "required": ["dataInicio", "dataFim"] + }, + "DisponibilidadeInputUpdateView": { + "type": "object", + "properties": { + "dataInicio": { + "type": "string", + "nullable": false, + "description": "Date ISO 8601.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "ladesa://schemas/v3/generics/date.json", + "format": "date" + }, + "dataFim": { + "type": "string", + "nullable": true, + "description": "Date ISO 8601.", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "format": "date" } } }, - "DiarioProfessorFindOneResultView": { + "DisponibilidadeDiaFindOneResultView": { "type": "object", "properties": { "id": { @@ -13588,28 +14750,28 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "situacao": { - "type": "boolean", + "rrule": { + "type": "string", "nullable": false, - "description": "Situação do vínculo." + "description": "Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar." }, - "perfil": { + "intervaloDeTempo": { "nullable": false, - "description": "Visão FindOne de um Vínculo.", + "description": "Visão FindOne de um Intervalo de Tempo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/PerfilFindOneResultView" + "$ref": "#/components/schemas/IntervaloDeTempoFindOneResultView" } ] }, - "diario": { + "disponibilidade": { "nullable": false, - "description": "Visão FindOne de um diário.", + "description": "Visão FindOne de uma Disponibilidade.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/DiarioFindOneResultView" + "$ref": "#/components/schemas/DisponibilidadeFindOneResultView" } ] }, @@ -13637,9 +14799,9 @@ "format": "date-time" } }, - "required": ["id", "situacao", "perfil", "diario", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "rrule", "intervaloDeTempo", "disponibilidade", "dateCreated", "dateUpdated", "dateDeleted"] }, - "DiarioProfessorListResultView": { + "DisponibilidadeDiaListResultView": { "type": "object", "properties": { "meta": { @@ -13654,11 +14816,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de um DiarioProfessor.", + "description": "Visão FindOne de um DisponibilidadeDia.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/DiarioProfessorFindOneResultView" + "$ref": "#/components/schemas/DisponibilidadeDiaFindOneResultView" } }, "links": { @@ -13674,7 +14836,7 @@ }, "required": ["meta", "data", "links"] }, - "PerfilFindOneInputView": { + "DisponibilidadeFindOneInputView": { "type": "object", "properties": { "id": { @@ -13684,86 +14846,73 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid", - "x-unispec-constraint-entity-exists": "Perfil" + "x-unispec-constraint-entity-exists": "Disponibilidade" } }, "required": ["id"] }, - "DiarioFindOneInputView": { + "DisponibilidadeDiaInputCreateView": { "type": "object", "properties": { - "id": { + "rrule": { "type": "string", "nullable": false, - "description": "Identificador do registro (uuid).", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/uuid.json", - "format": "uuid", - "x-unispec-constraint-entity-exists": "Diario" - } - }, - "required": ["id"] - }, - "DiarioProfessorInputCreateView": { - "type": "object", - "properties": { - "situacao": { - "type": "boolean", - "nullable": false + "description": "Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar." }, - "perfil": { + "intervaloDeTempo": { "nullable": false, - "description": "Dados de entrada para encontrar um Vínculo por ID.", + "description": "Dados de entrada para um Intervalo de Tempo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/PerfilFindOneInputView" + "$ref": "#/components/schemas/IntervaloDeTempoInputView" } ] }, - "diario": { + "disponibilidade": { "nullable": false, - "description": "Dados de entrada para encontrar um diário por ID.", + "description": "Dados de entrada para encontrar uma Disponibilidade por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/DiarioFindOneInputView" + "$ref": "#/components/schemas/DisponibilidadeFindOneInputView" } ] } }, - "required": ["situacao", "perfil", "diario"] + "required": ["rrule", "intervaloDeTempo", "disponibilidade"] }, - "DiarioProfessorInputUpdateView": { + "DisponibilidadeDiaInputUpdateView": { "type": "object", "properties": { - "situacao": { - "type": "boolean", - "nullable": false + "rrule": { + "type": "string", + "nullable": false, + "description": "Regra RRule para a recorrência do evento. Segue a RFC 5545 do iCalendar." }, - "perfil": { + "intervaloDeTempo": { "nullable": false, - "description": "Dados de entrada para encontrar um Vínculo por ID.", + "description": "Dados de entrada para um Intervalo de Tempo.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/PerfilFindOneInputView" + "$ref": "#/components/schemas/IntervaloDeTempoInputView" } ] }, - "diario": { + "disponibilidade": { "nullable": false, - "description": "Dados de entrada para encontrar um diário por ID.", + "description": "Dados de entrada para encontrar uma Disponibilidade por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/DiarioFindOneInputView" + "$ref": "#/components/schemas/DisponibilidadeFindOneInputView" } ] } } }, - "AulaFindOneResultView": { + "TurmaDisponibilidadeFindOneResultView": { "type": "object", "properties": { "id": { @@ -13774,46 +14923,23 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "data": { - "type": "string", - "nullable": false, - "description": "Data da aula.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" - }, - "modalidade": { - "type": "string", - "nullable": true, - "description": "Modalidade da aula." - }, - "intervaloDeTempo": { + "disponibilidade": { "nullable": false, - "description": "Visão FindOne de um Intervalo de Tempo.", + "description": "Visão FindOne de uma Disponibilidade.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/IntervaloDeTempoFindOneResultView" + "$ref": "#/components/schemas/DisponibilidadeFindOneResultView" } ] }, - "diario": { + "turma": { "nullable": false, - "description": "Visão FindOne de um diário.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/DiarioFindOneResultView" - } - ] - }, - "ambiente": { - "nullable": true, - "description": "Visão FindOne de um ambiente.", + "description": "Visão FindOne de uma Turma.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/AmbienteFindOneResultView" + "$ref": "#/components/schemas/TurmaFindOneResultView" } ] }, @@ -13841,9 +14967,9 @@ "format": "date-time" } }, - "required": ["id", "data", "modalidade", "intervaloDeTempo", "diario", "ambiente", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "disponibilidade", "turma", "dateCreated", "dateUpdated", "dateDeleted"] }, - "AulaListResultView": { + "TurmaDisponibilidadeListResultView": { "type": "object", "properties": { "meta": { @@ -13858,11 +14984,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de uma Aula.", + "description": "Visão FindOne de uma TurmaDisponibilidade.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/AulaFindOneResultView" + "$ref": "#/components/schemas/TurmaDisponibilidadeFindOneResultView" } }, "links": { @@ -13878,102 +15004,58 @@ }, "required": ["meta", "data", "links"] }, - "AulaInputCreateView": { + "TurmaDisponibilidadeInputCreateView": { "type": "object", "properties": { - "data": { - "type": "string", - "nullable": false, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" - }, - "modalidade": { - "type": "string", - "nullable": true - }, - "intervaloDeTempo": { + "disponibilidade": { "nullable": false, - "description": "Dados de entrada para um Intervalo de Tempo.", + "description": "Dados de entrada para encontrar uma Disponibilidade por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/IntervaloDeTempoInputView" + "$ref": "#/components/schemas/DisponibilidadeFindOneInputView" } ] }, - "diario": { + "turma": { "nullable": false, - "description": "Dados de entrada para encontrar um diário por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/DiarioFindOneInputView" - } - ] - }, - "ambiente": { - "nullable": true, - "description": "Dados de entrada para encontrar um ambiente por id.", + "description": "Dados de entrada para encontrar uma Turma por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/AmbienteFindOneInputView" + "$ref": "#/components/schemas/TurmaFindOneInputView" } ] } }, - "required": ["data", "modalidade", "intervaloDeTempo", "diario", "ambiente"] + "required": ["disponibilidade", "turma"] }, - "AulaInputUpdateView": { + "TurmaDisponibilidadeInputUpdateView": { "type": "object", "properties": { - "data": { - "type": "string", - "nullable": false, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" - }, - "modalidade": { - "type": "string", - "nullable": true - }, - "intervaloDeTempo": { + "disponibilidade": { "nullable": false, - "description": "Dados de entrada para um Intervalo de Tempo.", + "description": "Dados de entrada para encontrar uma Disponibilidade por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/IntervaloDeTempoInputView" + "$ref": "#/components/schemas/DisponibilidadeFindOneInputView" } ] }, - "diario": { + "turma": { "nullable": false, - "description": "Dados de entrada para encontrar um diário por ID.", - "kind": "type", - "allOf": [ - { - "$ref": "#/components/schemas/DiarioFindOneInputView" - } - ] - }, - "ambiente": { - "nullable": true, - "description": "Dados de entrada para encontrar um ambiente por id.", + "description": "Dados de entrada para encontrar uma Turma por ID.", "kind": "type", "allOf": [ { - "$ref": "#/components/schemas/AmbienteFindOneInputView" + "$ref": "#/components/schemas/TurmaFindOneInputView" } ] } } }, - "DisponibilidadeFindOneResultView": { + "ProfessorDisponibilidadeFindOneResultView": { "type": "object", "properties": { "id": { @@ -13984,20 +15066,25 @@ "$id": "ladesa://schemas/v3/generics/uuid.json", "format": "uuid" }, - "dataInicio": { - "type": "string", + "disponibilidade": { "nullable": false, - "description": "Data de início.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" + "description": "Visão FindOne de uma Disponibilidade.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/DisponibilidadeFindOneResultView" + } + ] }, - "dataFim": { - "type": "string", - "nullable": true, - "description": "Data de término.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "format": "date" + "perfil": { + "nullable": false, + "description": "Visão FindOne de um Vínculo.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PerfilFindOneResultView" + } + ] }, "dateCreated": { "type": "string", @@ -14023,9 +15110,9 @@ "format": "date-time" } }, - "required": ["id", "dataInicio", "dataFim", "dateCreated", "dateUpdated", "dateDeleted"] + "required": ["id", "disponibilidade", "perfil", "dateCreated", "dateUpdated", "dateDeleted"] }, - "DisponibilidadeListResultView": { + "ProfessorDisponibilidadeListResultView": { "type": "object", "properties": { "meta": { @@ -14040,11 +15127,11 @@ }, "data": { "nullable": false, - "description": "Visão FindOne de uma Disponibilidade.", + "description": "Visão FindOne de uma ProfessorDisponibilidade.", "kind": "type", "type": "array", "items": { - "$ref": "#/components/schemas/DisponibilidadeFindOneResultView" + "$ref": "#/components/schemas/ProfessorDisponibilidadeFindOneResultView" } }, "links": { @@ -14060,44 +15147,54 @@ }, "required": ["meta", "data", "links"] }, - "DisponibilidadeInputCreateView": { + "ProfessorDisponibilidadeInputCreateView": { "type": "object", "properties": { - "dataInicio": { - "type": "string", + "disponibilidade": { "nullable": false, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" + "description": "Dados de entrada para encontrar uma Disponibilidade por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/DisponibilidadeFindOneInputView" + } + ] }, - "dataFim": { - "type": "string", - "nullable": true, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "format": "date" + "perfil": { + "nullable": false, + "description": "Dados de entrada para encontrar um Vínculo por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PerfilFindOneInputView" + } + ] } }, - "required": ["dataInicio", "dataFim"] + "required": ["disponibilidade", "perfil"] }, - "DisponibilidadeInputUpdateView": { + "ProfessorDisponibilidadeInputUpdateView": { "type": "object", "properties": { - "dataInicio": { - "type": "string", + "disponibilidade": { "nullable": false, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "ladesa://schemas/v3/generics/date.json", - "format": "date" + "description": "Dados de entrada para encontrar uma Disponibilidade por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/DisponibilidadeFindOneInputView" + } + ] }, - "dataFim": { - "type": "string", - "nullable": true, - "description": "Date ISO 8601.", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "format": "date" + "perfil": { + "nullable": false, + "description": "Dados de entrada para encontrar um Vínculo por ID.", + "kind": "type", + "allOf": [ + { + "$ref": "#/components/schemas/PerfilFindOneInputView" + } + ] } } },