{"info":{"_postman_id":"c3726644-56b0-4acb-b484-a946d65981ab","name":"exam-scheduler","description":"<html><head></head><body><p>Especificações da API para o back-end da aplicação exam-scheduler construída para a UNIFAA durante a matéria - Real Challenges ADS.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"31836170","collectionId":"c3726644-56b0-4acb-b484-a946d65981ab","publishedId":"2sAY545doe","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2024-11-18T19:36:36.000Z"},"item":[{"name":"Polos","item":[{"name":"adicionar polo","id":"6389d384-681e-444a-959f-bafc3ad03f80","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Polo A\",\r\n  \"numberOfComputers\": 7\r\n}\r\n","options":{"raw":{"language":"json"}}},"url":"/support-center","description":"<h4 id=\"descrição\">Descrição</h4>\n<p>Cria um polo no sistema.</p>\n<h4 id=\"request-body\">Request Body</h4>\n<p><code>name</code> (<code>string, required</code>): Nome do polo.</p>\n<p><code>numberOfComputers</code> (<code>number, required</code>): Número de computadores disponíveis.</p>\n","urlObject":{"path":["support-center"],"query":[],"variable":[]}},"response":[],"_postman_id":"6389d384-681e-444a-959f-bafc3ad03f80"},{"name":"obter polos","event":[{"listen":"test","script":{"id":"87880186-4c0a-45e4-beaf-f2336196333c","exec":[""],"type":"text/javascript","packages":{}}}],"id":"37ff8c28-6d1d-4f51-b8cf-5940e6b97364","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/support-center","description":"<h4 id=\"descrição\">Descrição</h4>\n<p>Retorna uma lista de todos os polos cadastrados no sistema.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"supportCenters\": [\n    {\n      \"id\": \"1\",\n      \"name\": \"Polo A\",\n      \"numberOfComputers\": 7\n    },\n    {\n      \"id\": \"2\",\n      \"name\": \"Polo B\",\n      \"numberOfComputers\": 5\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["support-center"],"query":[],"variable":[]}},"response":[],"_postman_id":"37ff8c28-6d1d-4f51-b8cf-5940e6b97364"},{"name":"atualizar polo","id":"c9b5aa20-3b45-4dc7-a42a-a569027c83d7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Centro C\",\r\n  \"numberOfComputers\": 12\r\n}","options":{"raw":{"language":"json"}}},"url":"/support-center/{supportCenterId}","description":"<h4 id=\"descrição\">Descrição</h4>\n<p>Atualiza as informações de um polo existente no sistema. É necessário fornecer o <code>id</code> do polo a ser atualizado.</p>\n<h3 id=\"request-body\">Request Body</h3>\n<ul>\n<li><p><code>name</code> (string, required): Nome do polo.</p>\n</li>\n<li><p><code>numberOfComputers</code> (number, required): Número de computadores disponíveis.</p>\n</li>\n</ul>\n","urlObject":{"path":["support-center","{supportCenterId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"c9b5aa20-3b45-4dc7-a42a-a569027c83d7"},{"name":"excluir polo","id":"ff6caa8e-fae5-4e1f-98bb-a7e629330eb8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"/support-center/{supportCenterId}","description":"<h4 id=\"descrição\">Descrição</h4>\n<p>Excluir polo. É necessário fornecer o <code>id</code> do polo a ser removido.</p>\n","urlObject":{"path":["support-center","{supportCenterId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"ff6caa8e-fae5-4e1f-98bb-a7e629330eb8"}],"id":"6608cd86-b675-49a8-88db-124178942fc6","_postman_id":"6608cd86-b675-49a8-88db-124178942fc6","description":""},{"name":"Horários de funcionamento","item":[{"name":"adicionar horário de funcionamento","id":"97edd57a-fba2-4be9-8fe6-3b2e41c14ff0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"weekDays\": [1, 2, 3, 4, 5],\r\n  \"openTime\": \"08:00\",\r\n  \"closeTime\": \"18:00\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/support-center/{supportCenterId}/operating-hours","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Define os horários de funcionamento para um polo no sistema.</p>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li><p><code>weekDays</code> (array of numbers, required): Dias da semana em que o polo está aberto, representados como números (0 = domingo, 6 = sábado).</p>\n</li>\n<li><p><code>openTime</code> (string, required): Horário de abertura no formato HH:mm.</p>\n</li>\n<li><p><code>closeTime</code> (string, required): Horário de fechamento no formato HH:mm.</p>\n</li>\n</ul>\n","urlObject":{"path":["support-center","{supportCenterId}","operating-hours"],"query":[],"variable":[]}},"response":[],"_postman_id":"97edd57a-fba2-4be9-8fe6-3b2e41c14ff0"},{"name":"obter horários de funcionamento","id":"e7cd505d-a4e5-4761-b150-da6150d4f9f2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/support-center/{supportCenterId}/operating-hours","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna a lista de horários de funcionamento cadastrados no sistema.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"operatingHours\": [\n    {\n      \"id\": \"1\",\n      \"supportCenter\": \"Polo A\",\n      \"weekDay\": 1,\n      \"openTime\": \"08:00:00\",\n      \"closeTime\": \"18:00:00\"\n    },\n    {\n      \"id\": \"2\",\n      \"supportCenter\": \"Polo A\",\n      \"weekDay\": 2,\n      \"openTime\": \"08:00:00\",\n      \"closeTime\": \"18:00:00\"\n    },\n    {\n      \"id\": \"3\",\n      \"supportCenter\": \"Polo A\",\n      \"weekDay\": 3,\n      \"openTime\": \"08:00:00\",\n      \"closeTime\": \"18:00:00\"\n    },\n    {\n      \"id\": \"4\",\n      \"supportCenter\": \"Polo A\",\n      \"weekDay\": 4,\n      \"openTime\": \"08:00:00\",\n      \"closeTime\": \"18:00:00\"\n    },\n    {\n      \"id\": \"5\",\n      \"supportCenter\": \"Polo A\",\n      \"weekDay\": 5,\n      \"openTime\": \"08:00:00\",\n      \"closeTime\": \"18:00:00\"\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["support-center","{supportCenterId}","operating-hours"],"query":[],"variable":[]}},"response":[],"_postman_id":"e7cd505d-a4e5-4761-b150-da6150d4f9f2"},{"name":"atualizar horário de funcionamento","id":"6a1b391c-fdf5-452d-ac2a-36b283346638","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"weekDay\": 1,\r\n  \"openTime\": \"09:00:00\",\r\n  \"closeTime\": \"15:00:00\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/support-center/{supportCenterId}/operating-hours/{operatingHoursId}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Atualiza as informações de um horário de funcionamento existente. É necessário fornecer o <code>id</code> do horário a ser atualizado.</p>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li><p><code>weekDay</code> (number, required): Dia da semana em que o polo está aberto, representado como um número (0 = domingo, 6 = sábado).</p>\n</li>\n<li><p><code>openTime</code> (string, required): Novo horário de abertura no formato HH:mm.</p>\n</li>\n<li><p><code>closeTime</code> (string, required): Novo horário de fechamento no formato HH:mm.</p>\n</li>\n</ul>\n","urlObject":{"path":["support-center","{supportCenterId}","operating-hours","{operatingHoursId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"6a1b391c-fdf5-452d-ac2a-36b283346638"},{"name":"excluir horário de funcionamento","id":"c5440e99-576c-47e5-869a-6a0e9a94f0a3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"/support-center/id/operating-hours/id","description":"<h4 id=\"descrição\">Descrição</h4>\n<p>Excluir horário de funcionamento. É necessário fornecer o <code>id</code> do horário de funcionamento a ser removido.</p>\n","urlObject":{"path":["support-center","id","operating-hours","id"],"query":[],"variable":[]}},"response":[],"_postman_id":"c5440e99-576c-47e5-869a-6a0e9a94f0a3"}],"id":"8944dce4-fba7-435e-add8-7e21d91a84a9","_postman_id":"8944dce4-fba7-435e-add8-7e21d91a84a9","description":""},{"name":"Datas/horários disponíveis","item":[{"name":"adicionar datas e horários","id":"6ab2a60a-da37-4a3d-9906-30d4847e7753","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"startDate\": \"2024-11-10\",\r\n  \"endDate\": \"2024-11-17\",\r\n  \"weekDays\": [1, 2, 3, 4, 5, 6]\r\n}\r\n","options":{"raw":{"language":"json"}}},"url":"/support-center/{supportCenterId}/available-slots","description":"<h4 id=\"descrição\">Descrição</h4>\n<p>Gera horários disponíveis automaticamente para agendamentos de avaliações nos dias da semana especificados, dentro do período definido pelas datas de início e fim.</p>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li><p><code>startDate</code> (string, required): Data de início no formato YYYY-MM-DD.</p>\n</li>\n<li><p><code>endDate</code> (string, required): Data de término no formato YYYY-MM-DD.</p>\n</li>\n<li><p><code>weekDays</code> (array of numbers, required): Dias da semana para os quais os horários serão gerados, representados como números (0 = domingo, 6 = sábado).</p>\n</li>\n</ul>\n","urlObject":{"path":["support-center","{supportCenterId}","available-slots"],"query":[],"variable":[]}},"response":[],"_postman_id":"6ab2a60a-da37-4a3d-9906-30d4847e7753"},{"name":"obter horários","id":"58473298-f2c0-4aef-acb6-7ea5f1bbc1bb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/support-center/{supportCenterId}/available-slots?date={YYYY-MM-DD}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna os horários disponíveis para agendamento de avaliações, incluindo a quantidade de slots disponíveis para cada horário. É necessário enviar a data no formato <code>YYYY-MM-DD</code> como paramêtro na URL.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"slots\": [\n    {\n      \"id\": \"1\", \n      \"time\": \"08:00:00\",\n      \"availableSlots\": 2\n    },\n    {\n      \"id\": \"2\", \n      \"time\": \"09:00:00\",\n      \"availableSlots\": 2\n    },\n    {\n      \"id\": \"3\", \n      \"time\": \"10:00:00\",\n      \"availableSlots\": 2\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["support-center","{supportCenterId}","available-slots"],"query":[{"key":"date","value":"{YYYY-MM-DD}"}],"variable":[]}},"response":[],"_postman_id":"58473298-f2c0-4aef-acb6-7ea5f1bbc1bb"},{"name":"obter datas","id":"080b3887-9a3f-4c39-aeed-9269c2183b9d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/support-center/{supportCenterId}/available-dates","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna uma lista de datas disponíveis para agendamento de avaliações.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"availableDates\": [\n    \"2024-11-19\",\n    \"2024-11-20\",\n    \"2024-11-21\",\n    \"2024-11-22\"\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["support-center","{supportCenterId}","available-dates"],"query":[],"variable":[]}},"response":[],"_postman_id":"080b3887-9a3f-4c39-aeed-9269c2183b9d"},{"name":"deletar data","id":"933aaaa4-62cf-4725-9293-cda3e3f31f1b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"/support-center/{supportCenterId}/available-slots?date={YYYY-MM-DD}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Exclui uma data disponível para agendamento de avaliações. É necessário fornecer a data no formato <code>YYYY-MM-DD</code> como parâmetro na URL.</p>\n","urlObject":{"path":["support-center","{supportCenterId}","available-slots"],"query":[{"key":"date","value":"{YYYY-MM-DD}"}],"variable":[]}},"response":[],"_postman_id":"933aaaa4-62cf-4725-9293-cda3e3f31f1b"},{"name":"deletar todas as datas","id":"fd1c411a-1130-44f2-a67e-2ac02de709f4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"/support-center/{supportCenterId}/available-dates","description":"<h4 id=\"descrição\">Descrição</h4>\n<p>Deleta todas as datas disponíveis de um polo.</p>\n","urlObject":{"path":["support-center","{supportCenterId}","available-dates"],"query":[],"variable":[]}},"response":[],"_postman_id":"fd1c411a-1130-44f2-a67e-2ac02de709f4"}],"id":"7d028ebd-414c-490e-8f47-eadfc7d1803c","_postman_id":"7d028ebd-414c-490e-8f47-eadfc7d1803c","description":""},{"name":"Períodos","item":[{"name":"adicionar período","id":"c7ec809b-cd4e-44c3-879e-787da1e9aa41","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"startDate\": \"2024-10-21\",\r\n  \"endDate\": \"2024-12-18\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/period","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Define um período para matrícula, especificando uma data de início e uma data de término.</p>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li><p><code>startDate</code> (string, required): Data de início no formato <code>YYYY-MM-DD</code>.</p>\n</li>\n<li><p><code>endDate</code> (string, required): Data de término no formato <code>YYYY-MM-DD</code>.</p>\n</li>\n</ul>\n","urlObject":{"path":["period"],"query":[],"variable":[]}},"response":[],"_postman_id":"c7ec809b-cd4e-44c3-879e-787da1e9aa41"},{"name":"obter períodos","id":"043be3be-abf4-4345-b774-421531b3e1eb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/period","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna a lista de períodos.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"periods\": [\n    {\n      \"id\": \"1\",\n      \"startDate\": \"2024-01-01\",\n      \"endDate\": \"2024-06-30\"\n    },\n    {\n      \"id\": \"2\",\n      \"startDate\": \"2024-07-01\",\n      \"endDate\": \"2024-12-31\"\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["period"],"query":[],"variable":[]}},"response":[],"_postman_id":"043be3be-abf4-4345-b774-421531b3e1eb"},{"name":"atualizar período","id":"6c04acd3-0c20-4ca5-bf06-65375d2ef772","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"startDate\": \"2024-02-10\",\r\n  \"endDate\": \"2024-06-21\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/period/{periodId}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Atualiza as informações de um período. É necessário fornecer o <code>id</code> do período a ser atualizado.</p>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li><p><code>startDate</code> (string, required): Nova data de início no formato <code>YYYY-MM-DD</code>.</p>\n</li>\n<li><p><code>endDate</code> (string, required): Nova data de término no formato <code>YYYY-MM-DD</code>.</p>\n</li>\n</ul>\n","urlObject":{"path":["period","{periodId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"6c04acd3-0c20-4ca5-bf06-65375d2ef772"},{"name":"deletar período","id":"7abf322e-7303-4c0e-bcd2-2260d4635267","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"/period/{periodId}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Exclui um período. É necessário fornecer o <code>id</code> do período a ser removido.</p>\n","urlObject":{"path":["period","{periodId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7abf322e-7303-4c0e-bcd2-2260d4635267"}],"id":"d9918762-1011-4ccb-9c7d-f6514333581e","_postman_id":"d9918762-1011-4ccb-9c7d-f6514333581e","description":""},{"name":"Disciplinas","item":[{"name":"adicionar disciplina","id":"e43af027-7799-4aa8-83c1-138a4f60ed42","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"name\": \"IA - Machine Learning\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/discipline","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Cria uma nova disciplina no sistema.</p>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li><code>name</code> (string, required): Nome da disciplina.</li>\n</ul>\n","urlObject":{"path":["discipline"],"query":[],"variable":[]}},"response":[],"_postman_id":"e43af027-7799-4aa8-83c1-138a4f60ed42"},{"name":"obter disciplinas","id":"819a27a8-23fb-4411-89e5-fe469ab8c9f4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/discipline","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna a lista de todas as disciplinas cadastradas no sistema.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"disciplines\": [\n    {\n      \"id\": \"1\",\n      \"name\": \"IA - Machine Learning\"\n    },\n    {\n      \"id\": \"2\",\n      \"name\": \"Desenvolvimento Web\"\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["discipline"],"query":[],"variable":[]}},"response":[],"_postman_id":"819a27a8-23fb-4411-89e5-fe469ab8c9f4"},{"name":"atualizar disciplina","id":"2300c0d3-3b39-47d6-8b8f-05592ccd880e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"UX/UI - Melhorando a experiência do usuário\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/discipline/{disciplineId}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Atualiza as informações de uma disciplina existente. É necessário fornecer o <code>id</code> da disciplina a ser atualizada.</p>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li><code>name</code> (string, required): Novo nome da disciplina.</li>\n</ul>\n","urlObject":{"path":["discipline","{disciplineId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"2300c0d3-3b39-47d6-8b8f-05592ccd880e"},{"name":"excluir disciplina","id":"7d9d76fc-7607-430a-a6b3-ff8081a15d99","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"/discipline/{disciplineId}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Exclui uma disciplina do sistema. É necessário fornecer o <code>id</code> da disciplina a ser removida.</p>\n","urlObject":{"path":["discipline","{disciplineId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7d9d76fc-7607-430a-a6b3-ff8081a15d99"}],"id":"552fc07c-94fc-4f46-bbd3-e9ef192ab704","_postman_id":"552fc07c-94fc-4f46-bbd3-e9ef192ab704","description":""},{"name":"Estudantes","item":[{"name":"adicionar estudante","id":"da43cef0-432d-407d-b9bc-e7eb7b996d1a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n  {\r\n    \"ra\": \"E32354\",\r\n    \"name\": \"Charles Munoz\",\r\n    \"email\": \"charles@acme.com\",\r\n    \"birthDate\": \"2001-03-16\",\r\n    \"supportCenter\": \"id\"\r\n  },\r\n  {\r\n    \"ra\": \"E37946\",\r\n    \"name\": \"Laurie Campbell\",\r\n    \"email\": \"lauriecampbell@acme.com\",\r\n    \"birthDate\": \"2000-10-20\",\r\n    \"supportCenter\": \"id\"\r\n  },\r\n  {\r\n    \"ra\": \"E22682\",\r\n    \"name\": \"John Doe\",\r\n    \"email\": \"john@acme.com\",\r\n    \"birthDate\": \"2001-01-01\",\r\n    \"supportCenter\": \"id\"\r\n  }\r\n]","options":{"raw":{"language":"json"}}},"url":"/students","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Cria um ou mais estudantes no sistema.</p>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<p>A lista de estudantes deve ser fornecida em um array de objetos, com os seguintes campos:</p>\n<ul>\n<li><p><code>ra</code> (string, required): Número de registro acadêmico do estudante.</p>\n</li>\n<li><p><code>name</code> (string, required): Nome do estudante.</p>\n</li>\n<li><p><code>email</code> (string, required): E-mail do estudante.</p>\n</li>\n<li><p><code>birthDate</code> (string, required): Data de nascimento no formato <code>YYYY-MM-DD</code>.</p>\n</li>\n<li><p><code>supportCenter</code> (string, required): ID do centro de suporte relacionado ao estudante.</p>\n</li>\n</ul>\n","urlObject":{"path":["students"],"query":[],"variable":[]}},"response":[],"_postman_id":"da43cef0-432d-407d-b9bc-e7eb7b996d1a"},{"name":"obter estudantes","id":"6ae1319b-3df6-4e23-92f2-d93e487a9b65","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/students","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna a lista de todos os estudantes cadastrados no sistema.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"students\": [\n    {\n      \"id\": \"1\",\n      \"ra\": \"E22682\",\n      \"name\": \"John Doe\",\n      \"email\": \"john@acme.com\",\n      \"birthDate\": \"01-01-2001\",\n      \"supportCenter\": \"Polo A\"\n    },\n    {\n      \"id\": \"2\",\n      \"ra\": \"E32354\",\n      \"name\": \"Charles Munoz\",\n      \"email\": \"charles@acme.com\",\n      \"birthDate\": \"16-03-2001\",\n      \"supportCenter\": \"Polo B\"\n    },\n    {\n      \"id\": \"3\",\n      \"ra\": \"E37946\",\n      \"name\": \"Laurie Campbell\",\n      \"email\": \"laurie@acme.com\",\n      \"birthDate\": \"20-10-2000\",\n      \"supportCenter\": \"Polo C\"\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["students"],"query":[],"variable":[]}},"response":[],"_postman_id":"6ae1319b-3df6-4e23-92f2-d93e487a9b65"},{"name":"obter estudante","id":"af39f621-8d34-4e73-9733-b36d528cb96c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/students/{studentId}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna as informações de um estudante específico. É necessário fornecer o <code>id</code> do aluno.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"student\": {\n    \"id\": \"1\",\n    \"ra\": \"E37946\",\n    \"name\": \"Laurie Campbell\",\n    \"email\": \"laurie@acme.com\",\n    \"birthDate\": \"20-10-2000\",\n    \"supportCenter\": {\n      \"id\": \"1\",\n      \"name\": \"Polo A\"\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["students","{studentId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"af39f621-8d34-4e73-9733-b36d528cb96c"},{"name":"atualizar estudante","id":"471f8c62-5d97-44bd-ad2b-b8cfddc1b80e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Laurie Campbell\",\r\n  \"email\": \"laurie@acme.com\",\r\n  \"supportCenter\": \"id\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/students/{studentRa}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Atualiza as informações de um estudante específico. É necessário fornecer o <code>ra</code> do estudante a ser atualizado.</p>\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li><p><code>name</code> (string, required): Nome do estudante.</p>\n</li>\n<li><p><code>email</code> (string, required): E-mail do estudante.</p>\n</li>\n<li><p><code>supportCenter</code> (string, required): ID do centro de suporte relacionado ao estudante.</p>\n</li>\n</ul>\n","urlObject":{"path":["students","{studentRa}"],"query":[],"variable":[]}},"response":[],"_postman_id":"471f8c62-5d97-44bd-ad2b-b8cfddc1b80e"},{"name":"excluir estudante","id":"95771451-c89a-415d-8171-005b42122ba8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"/students/{studentRa}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Exclui um estudante do sistema. É necessário fornecer o <code>ra</code> do estudante a ser removido.</p>\n","urlObject":{"path":["students","{studentRa}"],"query":[],"variable":[]}},"response":[],"_postman_id":"95771451-c89a-415d-8171-005b42122ba8"}],"id":"ab449016-51c0-400d-bc78-a0a6bfb1e8e5","_postman_id":"ab449016-51c0-400d-bc78-a0a6bfb1e8e5","description":""},{"name":"Matrículas","item":[{"name":"adicionar matrícula","id":"143437c9-af1a-4430-8ab0-ebf8a4f4257f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n  \"studentRa\": [\"E32354\", \"E37946\", \"E22682\"],\r\n  \"disciplineId\": \"id\",\r\n  \"periodId\": \"id\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/enrollment","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Matrícula de um ou mais estudantes em uma disciplina específica durante um período determinado.</p>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li><p><code>studentRa</code> (array de strings, required): Lista de RAs dos estudantes que serão matriculados.</p>\n</li>\n<li><p><code>disciplineId</code> (string, required): ID da disciplina na qual os estudantes serão matriculados.</p>\n</li>\n<li><p><code>periodId</code> (string, required): ID do período em que a matrícula ocorrerá.</p>\n</li>\n</ul>\n","urlObject":{"path":["enrollment"],"query":[],"variable":[]}},"response":[],"_postman_id":"143437c9-af1a-4430-8ab0-ebf8a4f4257f"},{"name":"obter matrículas","id":"79dda15c-52a2-48c3-8874-4854d3d4fde2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/enrollment","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna a lista de todas as matrículas no sistema.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"enrollments\": [\n    {\n      \"id\": \"1\",\n      \"studentRa\": \"E22682\",\n      \"studentName\": \"John Doe\",\n      \"discipline\": \"IA - Machine Learning\",\n      \"periodStartDate\": \"2024-10-21T00:00:00.000Z\",\n      \"periodEndDate\": \"2024-12-18T00:00:00.000Z\"\n    },\n    {\n      \"id\": \"2\",\n      \"studentRa\": \"E32354\",\n      \"studentName\": \"Charles Munoz\",\n      \"discipline\": \"IA - Machine Learning\",\n      \"periodStartDate\": \"2024-10-21T00:00:00.000Z\",\n      \"periodEndDate\": \"2024-12-18T00:00:00.000Z\"\n    },\n    {\n      \"id\": \"3\",\n      \"studentRa\": \"E37946\",\n      \"studentName\": \"Laurie Campbell\",\n      \"discipline\": \"IA - Machine Learning\",\n      \"periodStartDate\": \"2024-10-21T00:00:00.000Z\",\n      \"periodEndDate\": \"2024-12-18T00:00:00.000Z\"\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["enrollment"],"query":[],"variable":[]}},"response":[],"_postman_id":"79dda15c-52a2-48c3-8874-4854d3d4fde2"},{"name":"obter matrícula","id":"21987f4c-0963-4d67-affc-17b22f614c73","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/enrollment/{studentRa}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna a lista de matrículas de um estudante específico.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"enrollments\": [\n    {\n      \"enrollmentId\": \"1\",\n      \"disciplineName\": \"IA - Machine Learning\",\n      \"periodStartDate\": \"2024-10-21T00:00:00.000Z\",\n      \"periodEndDate\": \"2024-12-18T00:00:00.000Z\"\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["enrollment","{studentRa}"],"query":[],"variable":[]}},"response":[],"_postman_id":"21987f4c-0963-4d67-affc-17b22f614c73"},{"name":"atualizar matrícula","id":"de79832f-1060-4bd6-81ef-3cb25e1527b2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"studentRa\": \"E12345\",\r\n  \"disciplineId\": \"id\",\r\n  \"periodId\": \"id\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/enrollment/{enrollmentId}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Atualiza a matrícula de um estudante em uma disciplina durante um período específico. É necessário fornecer o <code>id</code> da matrícula que será atualizada.</p>\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li><p><code>studentRa</code> (string, required): RA do estudante que será atualizado.</p>\n</li>\n<li><p><code>disciplineId</code> (string, required): ID da disciplina na qual o estudante será matriculado.</p>\n</li>\n<li><p><code>periodId</code> (string, required): ID do período em que o estudante será matriculado.</p>\n</li>\n</ul>\n","urlObject":{"path":["enrollment","{enrollmentId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"de79832f-1060-4bd6-81ef-3cb25e1527b2"},{"name":"excluir matrícula","id":"2d6a4021-8003-4fe9-aa7b-dcb13e4a9c8f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"/enrollment/{enrollmentId}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Exclui a matrícula de um estudante em uma disciplina durante um período específico. É necessário fornecer o <code>id</code> da matrícula que será excluída.</p>\n","urlObject":{"path":["enrollment","{enrollmentId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"2d6a4021-8003-4fe9-aa7b-dcb13e4a9c8f"}],"id":"5487805e-27d0-4e12-9a4d-511d5511b1f5","_postman_id":"5487805e-27d0-4e12-9a4d-511d5511b1f5","description":""},{"name":"Agendamentos","item":[{"name":"criar agendamento","id":"ef3af864-42f8-4561-99c1-1fdd91338f77","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"enrollmentId\": \"id\",\r\n    \"type\": \"mandatory\",\r\n    \"scheduledDate\": \"2024-11-16T16:00\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/schedule","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Agenda uma avaliação para um estudante em uma disciplina específica, com a possibilidade de ser uma avaliação obrigatória (mandatory) ou substitutiva (substitute).</p>\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li><p><code>enrollmentId</code> (string, required): ID da matrícula do estudante que será agendado.</p>\n</li>\n<li><p><code>type</code> (string, required): Tipo de avaliação, podendo ser <code>mandatory</code> (obrigatória) ou <code>substitute</code> (substitutiva).</p>\n</li>\n<li><p><code>scheduledDate</code> (string, required): Data e hora do agendamento da avaliação no formato <code>YYYY-MM-DDTHH:mm</code>.</p>\n</li>\n</ul>\n","urlObject":{"path":["schedule"],"query":[],"variable":[]}},"response":[],"_postman_id":"ef3af864-42f8-4561-99c1-1fdd91338f77"},{"name":"obter agendamentos por aluno","id":"aac220fe-5569-4d16-906b-01b067bd2268","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/schedule?q={studentRa}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna todos os agendamentos de avaliações para um estudante específico, identificado pelo <code>studentRa</code>. Cada agendamento retorna o tipo como A2 para obrigatória e A3 para substitutiva.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"schedules\": [\n    {\n      \"id\": \"1\",\n      \"enrollmentId\": \"1\",\n      \"discipline\": \"IA - Machine Learning\",\n      \"type\": \"A2\",\n      \"scheduledDate\": \"2024-11-16T14:00:00.000Z\"\n    },\n    {\n      \"id\": \"2\",\n      \"enrollmentId\": \"1\",\n      \"discipline\": \"IA - Machine Learning\",\n      \"type\": \"A3\",\n      \"scheduledDate\": \"2024-11-23T11:00:00.000Z\"\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["schedule"],"query":[{"key":"q","value":"{studentRa}"}],"variable":[]}},"response":[],"_postman_id":"aac220fe-5569-4d16-906b-01b067bd2268"},{"name":"obter agendamentos por polo","id":"36f50b8b-abbd-4b45-baf7-62b6be68ffd1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/schedule/support-center?q={supportCenterId}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Retorna os agendamentos de avaliações para um centro de suporte específico, filtrando para mostrar apenas os agendamentos de hoje ou futuros.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"schedules\": [\n    {\n      \"id\": \"1\",\n      \"studentName\": \"Charles Munoz\",\n      \"disciplineName\": \"IA - Machine Learning\",\n      \"scheduledDate\": \"2024-11-23T11:00:00.000Z\",\n      \"type\": \"A3\"\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["schedule","support-center"],"query":[{"key":"q","value":"{supportCenterId}"}],"variable":[]}},"response":[],"_postman_id":"36f50b8b-abbd-4b45-baf7-62b6be68ffd1"},{"name":"atualizar agendamento","id":"5d6a7b68-f179-4f44-ad8c-54caaf53f85a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"newScheduledDate\": \"2024-11-14T12:00\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/schedule/{scheduleId}","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Atualiza a data e hora de um agendamento de avaliação específico, fornecendo o <code>scheduleId</code> do agendamento a ser alterado.</p>\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li><code>newScheduledDate</code> (string, required): Nova data e hora para o agendamento, no formato <code>YYYY-MM-DDTHH:mm</code>.</li>\n</ul>\n","urlObject":{"path":["schedule","{scheduleId}"],"query":[],"variable":[]}},"response":[],"_postman_id":"5d6a7b68-f179-4f44-ad8c-54caaf53f85a"}],"id":"09788351-3d50-482a-96d9-e4f734306a65","_postman_id":"09788351-3d50-482a-96d9-e4f734306a65","description":""},{"name":"Autenticação","item":[{"name":"login","id":"cf5e5e3d-52ca-4238-a445-aba2fdb8844f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"user@email.com\",\r\n    \"password\": \"user-password\"\r\n}","options":{"raw":{"language":"json"}}},"url":"/login","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Realiza o login de um usuário e, além de retornar a resposta com a mensagem de sucesso, o papel do usuário e seu ID, o servidor também configura um <strong>cookie de autenticação</strong> para manter a sessão do usuário.</p>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><p><strong><code>email</code></strong> (string, required): Email do usuário.</p>\n</li>\n<li><p><code>password</code> (string, required): Senha do usuário.</p>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p>message (string): Mensagem indicando que o login foi bem-sucedido.</p>\n</li>\n<li><p>role (string): O papel do usuário. Pode ser <code>'admin'</code>, <code>'coordinator'</code> ou <code>'student'</code>.</p>\n</li>\n<li><p>id (string): ID único do usuário no sistema.</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Login bem-sucedido\",\n  \"role\": \"admin\",\n  \"id\": \"1\"\n}\n\n</code></pre>\n<h4 id=\"status-codes\"><strong>Status Codes:</strong></h4>\n<ul>\n<li><p><strong>200 OK</strong>: Login bem-sucedido. O cookie <code>authToken</code> é setado no navegador.</p>\n</li>\n<li><p><strong>401 Unauthorized</strong>: Credenciais inválidas (email ou senha incorretos).</p>\n</li>\n</ul>\n","urlObject":{"path":["login"],"query":[],"variable":[]}},"response":[],"_postman_id":"cf5e5e3d-52ca-4238-a445-aba2fdb8844f"},{"name":"logout","id":"f4ef7305-2191-4085-a95d-8692db6cefbc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"/logout","description":"<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Realiza o logout do usuário, removendo o cookie de autenticação e invalidando a sessão no sistema.</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Logout realizado com sucesso\"\n}\n\n</code></pre>\n<h4 id=\"status-codes\"><strong>Status Codes:</strong></h4>\n<ul>\n<li><strong>200 OK</strong>: Logout bem-sucedido, com remoção do cookie de autenticação.</li>\n</ul>\n<h4 id=\"observações\"><strong>Observações:</strong></h4>\n<ul>\n<li>Após o logout, o usuário precisará se autenticar novamente para obter um novo cookie de autenticação.</li>\n</ul>\n","urlObject":{"path":["logout"],"query":[],"variable":[]}},"response":[],"_postman_id":"f4ef7305-2191-4085-a95d-8692db6cefbc"},{"name":"verificar token","id":"3b06e6a1-8f11-4498-adc3-0e246af23634","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/verify-token","description":"<p>StartFragment</p>\n<h4 id=\"descrição\"><strong>Descrição</strong></h4>\n<p>Verifica a validade do token de autenticação fornecido. O token é esperado no cabeçalho da requisição (<code>Authorization: Bearer</code> ).</p>\n<h4 id=\"response\">Response</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Token válido\",\n  \"user\": {\n    \"id\": \"1\",\n    \"role\": \"admin\",\n    \"iat\": 1731965519,\n    \"exp\": 1732051919\n  }\n}\n\n</code></pre>\n<ul>\n<li><p><strong>message</strong>: Mensagem indicando que o token é válido.</p>\n</li>\n<li><p><strong>user</strong>: Informações sobre o usuário associado ao token.</p>\n<ul>\n<li><p><strong>id</strong>: ID do usuário.</p>\n</li>\n<li><p><strong>role</strong>: Papel do usuário (pode ser <code>admin</code>, <code>coordinator</code>, ou <code>student</code>).</p>\n</li>\n<li><p><strong>iat</strong>: Data de emissão do token (em formato Unix timestamp).</p>\n</li>\n<li><p><strong>exp</strong>: Data de expiração do token (em formato Unix timestamp).</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"erro\">Erro</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"Token não fornecido\"\n}\n\n</code></pre>\n<ul>\n<li><strong>message</strong>: Mensagem indicando que o token não foi fornecido na requisição ou é inválido.</li>\n</ul>\n<h4 id=\"status-codes\"><strong>Status Codes:</strong></h4>\n<ul>\n<li><p><strong>200 OK</strong>: Token válido, com os dados do usuário incluídos na resposta.</p>\n</li>\n<li><p><strong>401 Unauthorized</strong>: Caso o token não tenha sido fornecido, ou seja inválido/expirado.</p>\n</li>\n</ul>\n<h4 id=\"observações\"><strong>Observações:</strong></h4>\n<ul>\n<li><p>O <strong>token</strong> deve ser fornecido no cabeçalho <code>Authorization</code> como um <strong>Bearer token</strong>.</p>\n</li>\n<li><p>Se o token estiver expirado ou inválido, a resposta será 401 e o acesso será negado.</p>\n</li>\n</ul>\n","urlObject":{"path":["verify-token"],"query":[],"variable":[]}},"response":[],"_postman_id":"3b06e6a1-8f11-4498-adc3-0e246af23634"}],"id":"fc7003a9-53a0-45d4-b638-aedb5e95a492","_postman_id":"fc7003a9-53a0-45d4-b638-aedb5e95a492","description":""}]}