{"id":25268227,"url":"https://github.com/joschonarth/the-movie-api","last_synced_at":"2026-04-06T09:32:41.080Z","repository":{"id":276880161,"uuid":"928483601","full_name":"joschonarth/the-movie-api","owner":"joschonarth","description":"🎬 An API for managing a movie catalog, integrating with the TMDB API to fetch movie information.","archived":false,"fork":false,"pushed_at":"2025-04-21T19:30:54.000Z","size":757,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T16:20:55.806Z","etag":null,"topics":["axios","docker","eslint","fastify","nodejs","postgresql","prisma","swagger","tmdb","tmdb-api","tsup","typescript","vitest","zod"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joschonarth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-06T18:01:44.000Z","updated_at":"2025-04-21T19:30:58.000Z","dependencies_parsed_at":"2025-02-11T00:24:03.612Z","dependency_job_id":"1b54471b-97ca-462d-b8f3-59e28c02b916","html_url":"https://github.com/joschonarth/the-movie-api","commit_stats":null,"previous_names":["joschonarth/the-movie-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/joschonarth/the-movie-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fthe-movie-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fthe-movie-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fthe-movie-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fthe-movie-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joschonarth","download_url":"https://codeload.github.com/joschonarth/the-movie-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fthe-movie-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31466617,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T08:36:52.050Z","status":"ssl_error","status_checked_at":"2026-04-06T08:36:51.267Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axios","docker","eslint","fastify","nodejs","postgresql","prisma","swagger","tmdb","tmdb-api","tsup","typescript","vitest","zod"],"created_at":"2025-02-12T10:24:22.559Z","updated_at":"2026-04-06T09:32:41.064Z","avatar_url":"https://github.com/joschonarth.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e🎬 The Movie API\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e🎬 Uma \u003cb\u003eAPI RESTful\u003c/b\u003e para gerenciar um catálogo de filmes, integrada à API do \u003cb\u003eThe Movie Database (TMDB)\u003c/b\u003e para obter informações detalhadas sobre os filmes.\n  \u003cbr/\u003e\u003cbr/\u003e\n  \u003c!-- Último commit --\u003e\n  \u003cimg src=\"https://img.shields.io/github/last-commit/joschonarth/the-movie-api?style=for-the-badge\u0026color=a277ff\u0026labelColor=1C1E26\" alt=\"last-commit\"\u003e\n  \u003c!-- Linguagem principal --\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/top/joschonarth/the-movie-api?style=for-the-badge\u0026color=a277ff\u0026labelColor=1C1E26\" alt=\"top-language\"\u003e\n  \u003c!-- Contador de linguagens --\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/count/joschonarth/the-movie-api?style=for-the-badge\u0026color=a277ff\u0026labelColor=1C1E26\" alt=\"languages-count\"\u003e\n  \u003c!-- Licença --\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/joschonarth/the-movie-api?style=for-the-badge\u0026color=a277ff\u0026labelColor=1C1E26\" alt=\"license\"\u003e\n\u003c/p\u003e\n\n## 📑 Índice\n\n- [👀 Visão Geral](#-visão-geral)\n- [🛠️ Tecnologias Utilizadas](#️-tecnologias-utilizadas)\n- [⚙️ Funcionalidades](#️-funcionalidades)\n- [🚀 Como Executar o Projeto](#-como-executar-o-projeto)\n  - [📋 Pré-requisitos](#-pré-requisitos)\n  - [🔑 Obtenha a sua API Key do TMDB](#-obtenha-a-sua-api-key-do-tmdb)\n  - [🔧 Instalação](#-instalação)\n  - [▶️ Execução](#️-execução)\n  - [🐳 Rodando a aplicação com Docker](#-rodando-a-aplicação-com-docker)\n- [🔒 Autenticação](#-autenticação)\n- [📌 Tabela de Endpoints](#-tabela-de-endpoints)\n- [🔗 Endpoints](#-endpoints)\n- [📝 Documentação da API com Swagger](#-documentação-da-api-com-swagger)\n- [🧪 Testes](#-testes)\n- [🤝 Contribuições](#-contribuições)\n- [⭐ Apoie este Projeto](#-apoie-este-projeto)\n- [📜 Licença](#-licença)\n- [📞 Contato](#-contato)\n\n## 👀 Visão Geral\n\nO **The Movie API** é uma aplicação backend desenvolvida com foco em performance, escalabilidade e organização de código. Integrando-se à poderosa base de dados da **TMDB** (The Movie Database), esta API permite que usuários gerenciem uma lista personalizada de filmes, incluindo funcionalidades como adicionar à lista de desejos, atualizar o estado (assistido, a assistir, recomendado etc.), registrar avaliações e acompanhar um histórico detalhado de ações. Além disso, a aplicação conta com autenticação básica para segurança, documentação via Swagger, testes automatizados com Vitest e uma arquitetura moderna com Fastify, TypeScript e Prisma.\n\n## 🛠️ Tecnologias Utilizadas\n\n- 🟢 **Node.js**: Plataforma para execução do JavaScript no servidor.\n- 🟦 **TypeScript**: Superset do JavaScript com tipagem estática.\n- ⚡ **Fastify**: Framework web de alta performance para Node.js.\n- 🛢️ **Prisma**: ORM (Object Relational Mapper) para banco de dados.\n- 🗄️ **PostgreSQL**: Banco de dados relacional utilizado para armazenar informações.\n- 🐳 **Docker**: Containerização da aplicação.\n- 💎 **Zod**: Validação de esquemas e dados.\n- 📜 **Swagger**: Documentação automática da API.\n- ✨ **Axios**: Cliente HTTP para fazer requisições à API do TMDB.\n- ⚙️ **ESLint**: Linter para garantir a qualidade do código.\n- 🧪 **Vitest**: Framework de testes.\n- 🔨 **Tsup**: Ferramenta para bundling.\n\n## ⚙️ Funcionalidades\n\n- 🎥 **Adicionar filme à lista de desejos:** Adicione um filme à sua lista pessoal.\n- 📄 **Listar todos os filmes:** Retorne todos os filmes presentes na sua lista, com paginação e filtros.\n- 🔍 **Buscar informações de um filme específico:** Pesquise informações detalhadas sobre um filme.\n- 🔄 **Atualizar o estado de um filme:** Alterar o estado de um filme (de \"a assistir\" para \"assistido\", por exemplo).\n- ⭐ **Avaliar um filme:** Dê uma nota para o filme de 0 a 5.\n- 📖 **Histórico de ações:** Visualize o histórico de ações relacionadas a um filme (adicionado, avaliado, etc).\n- 📊 **Logs das requisições:** Visualize os logs das requisições feitas na API.\n\n## 🚀 Como Executar o Projeto\n\n### 📋 Pré-requisitos\n\n- 🟩 [Node.js 20](https://nodejs.org/en/download/)\n- 📦 [npm 10](https://www.npmjs.com/)\n\n### 🔑 Obtenha a sua API Key do TMDB\n\nAntes de acessar a aplicação, é necessário criar uma conta no **TMDB** e obter uma API Key.\n\n1. Acesse [The Movie Database (TMDB)](https://www.themoviedb.org/) e crie uma conta.\n2. Após criar a conta, vá até as [Configurações da API](https://www.themoviedb.org/settings/api) e gere sua API Key.\n3. Copie essa chave e configure no arquivo `.env` da aplicação a variável `TMDB_API_KEY` (veja a seção de instalação para mais detalhes).\n\n### 🔧 Instalação\n\n1. **Clone o repositório:**\n\n    ```bash\n    git clone https://github.com/joschonarth/the-movie-api.git\n    ```\n\n2. Acesse o diretório do projeto:\n\n    ```bash\n    cd the-movie-api\n    ```\n\n3. **Instale as dependências:**\n\n    ```bash\n    npm install\n    ```\n\n### ▶️ Execução\n\n1. **Crie um arquivo `.env` a partir do exemplo:**\n\n    O projeto já contém um arquivo `.env.example` com os exemplos de variáveis de ambiente que você precisa configurar. Copie para `.env` e preencha as informações de acordo com suas necessidades.\n\n2. **Configure o banco de dados:**\n\n    - **Com Docker**:\n\n      O projeto utiliza o **PostgreSQL** como banco de dados. Para rodar o banco de dados localmente via Docker, siga os passos abaixo:\n\n      1. No arquivo `.env`, configure a URL de conexão para o banco de dados com o seguinte valor:\n\n          ```env\n          DATABASE_URL=\"postgresql://docker:docker@localhost:5432/moviedb?schema=public\"\n          ```\n\n      2. Em seguida, inicie o banco de dados utilizando a imagem `bitnami/postgresql` com o comando:\n\n          ```bash\n          docker-compose up movie-api-pg -d\n          ```\n\n      Esse comando irá iniciar o banco de dados em um contêiner Docker com a configuração definida no arquivo [`docker-compose.yml`](./docker-compose.yml).\n\n    - **Com PostgreSQL Local**:\n\n      Caso você tenha o PostgreSQL instalado localmente, você precisará configurar a variável de ambiente `DATABASE_URL` com os dados de conexão para o banco de dados. A URL de conexão deve ter o seguinte formato:\n\n      ```env\n      DATABASE_URL=postgresql://\u003cusuario\u003e:\u003csenha\u003e@localhost:\u003cporta\u003e/\u003cnome_do_banco\u003e\n      ```\n\n      Certifique-se de ajustar `\u003cusuario\u003e`, `\u003csenha\u003e`, `\u003cporta\u003e` e `\u003cnome_do_banco\u003e` de acordo com a sua configuração.\n\n3. **Execute as migrações do banco de dados:**\n\n    ```bash\n    npx prisma migrate dev\n    ```\n\n4. **Rodando a aplicação localmente:**\n\n    Para rodar a aplicação localmente, execute o seguinte comando:\n\n    ```bash\n    npm run dev\n    ```\n\n    A aplicação estará disponível em [http://localhost:3333](http://localhost:3333).\n\n### 🐳 Rodando a aplicação com Docker\n\nEste projeto está containerizado usando o **Docker**. Para rodar a aplicação em um container Docker, siga os passos abaixo:\n\n1. Configure a URL de conexão adequada para o container Docker no arquivo `.env`:\n\n    ```bash\n    DATABASE_URL=postgresql://docker:docker@movie-api-pg:5432/moviedb?schema=public\n    ```\n\n2. Realize a build do projeto com o comando:\n\n    ```bash\n    npm run build\n    ```\n\n3. Em seguida, utilize o comando abaixo para subir a aplicação no Docker:\n\n    ```bash\n    docker-compose up --build\n    ```\n\nA aplicação estará disponível em [http://localhost:3333](http://localhost:3333) dentro do container.\n\n## 🔒 Autenticação\n\nTodas as rotas da API estão protegidas por **Basic Auth**. Para autenticação, utilize as seguintes variáveis de ambiente:\n\n```env\nADMIN_USER=admin\nADMIN_PASSWORD=admin123\n```\n\nSe estiver usando uma ferramenta como **Postman** para testar a API, siga os passos abaixo:\n\n1. Selecione a requisição desejada.\n2. Vá até a aba de **Authorization**.\n3. Em **Auth Type** escolha o método **Basic Auth**.\n4. Informe o usuário e senha configurados nas variáveis de ambiente.\n5. Envie a requisição normalmente.\n\nCaso esteja utilizando `cURL`, você pode passar as credenciais da seguinte forma:\n\n```sh\ncurl -u admin:admin123 http://localhost:3333/movie\n```\n\nCaso esteja utilizando `httpie`, você pode passar as credenciais da seguinte forma:\n\n```bash\nhttp -a admin:admin123 http://localhost:3333/movie\n```\n\n## 📌 Tabela de Endpoints\n\n| Método | Rota                  | Descrição                             |\n|--------|-----------------------|---------------------------------------|\n| POST   | `/movie`              | Adiciona um filme à lista de desejos  |\n| GET    | `/movie`              | Lista todos os filmes                 |\n| GET    | `/movie/:id`          | Busca um filme específico             |\n| PUT    | `/movie/:id/state`    | Atualiza o estado do filme            |\n| POST    | `/movie/:id/rate`    | Avalia um filme                       |\n| GET    | `/movie/:id/history`  | Histórico de ações do filme           |\n| GET    | `/log`                | Logs de requisições                   | \n\n## 🔗 Endpoints\n\n### 🎥 Adicionar Filme à Lista de Desejos\n\n- **Descrição:** Adiciona um filme à lista de desejos.\n- **Método**: `POST`\n- **URL**: `/movie`\n- **Corpo da Requisição:**  \n\n  ```json\n  {\n    \"title\": \"Interstellar\"\n  }\n  ```\n\n- **Exemplo de Resposta:**  \n\n  ```json\n  {\n    \"id\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n    \"title\": \"Interstellar\",\n    \"synopsis\": \"The adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.\",\n    \"releaseYear\": 2014,\n    \"genre\": \"Adventure, Drama, Science Fiction\",\n    \"state\": \"TO_WATCH\",\n    \"createdAt\": \"2025-04-21T13:41:58.833Z\",\n    \"rating\": null\n  }\n  ```\n\n### 📄 Listar Filmes\n\n- **Descrição:** Retorna uma lista de filmes cadastrados. Possui suporte a paginação e filtros.\n- **Método**: `GET`\n- **URL**: `/movie`\n- **Query Params**:\n    - `state`: Filtra os filmes pelo estado. Pode ser \"`to_watch`\", \"`watched`\", \"`rated`\" \"`recommended`\", \"`no_recommended`\".\n    - `limit`: Define o número máximo de filmes por página. Exemplo: `limit=10`.\n    - `page`: Define a página de busca. Exemplo: `page=1`.\n\n- **Exemplo de Requisição**:\n\n  ```url\n  GET /movie?state=watched\u0026limit=10\u0026page=1\n  ```\n\n- **Exemplo de Resposta:**\n\n  ```json\n    {\n        \"data\": [\n            {\n            \"id\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n            \"title\": \"Interstellar\",\n            \"synopsis\": \"The adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.\",\n            \"releaseYear\": 2014,\n            \"genre\": \"Adventure, Drama, Science Fiction\",\n            \"state\": \"WATCHED\",\n            \"rating\": null,\n            \"createdAt\": \"2025-02-09T19:16:02.882Z\"\n            }\n        ],\n        \"pagination\": {\n            \"limit\": 10,\n            \"currentPage\": 1,\n            \"totalPages\": 1,\n            \"totalItems\": 1\n        }\n    }\n  ```\n\n### 🔍 Buscar Filme\n\n- **Descrição:** Busca informações detalhadas de um filme específico.\n- **Método**: `GET`\n- **URL**: `/movie/:id`\n- **Parâmetros de URL:**  \n  - `id`: ID do filme.\n\n- **Exemplo de Resposta:**\n\n  ```json\n  {\n    \"id\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n    \"title\": \"Interstellar\",\n    \"synopsis\": \"The adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.\",\n    \"releaseYear\": 2014,\n    \"genre\": \"Adventure, Drama, Science Fiction\",\n    \"state\": \"TO_WATCH\",\n    \"rating\": null,\n    \"createdAt\": \"2025-02-09T19:16:02.882Z\"\n  }\n  ```\n\n### 🔄 Atualizar o Estado de um Filme\n\n- **Descrição:** Atualiza o estado de um filme (ex: \"a assistir\" para \"assistido\").\n- **Método**: `PUT`\n- **URL**: `/movie/:id/state`\n- **Parâmetros de URL:**  \n  - `id`: ID do filme.\n- **Corpo da Requisição:**  \n\n  ```json\n  {\n    \"state\": \"watched\"\n  }\n  ```\n\n- **Exemplo de Resposta:**\n\n  ```json\n  {\n    \"id\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n    \"title\": \"Interstellar\",\n    \"synopsis\": \"The adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.\",\n    \"releaseYear\": 2014,\n    \"genre\": \"Adventure, Drama, Science Fiction\",\n    \"state\": \"WATCHED\",\n    \"rating\": null,\n    \"createdAt\": \"2025-02-09T19:16:02.882Z\"\n  }\n  ```\n\n### ⭐ Avaliar um Filme\n\n- **Descrição:** Avalia um filme de 0 a 5.\n- **Método**: `POST`\n- **URL**: `/movie/:id/rate`\n- **Parâmetros de URL:**  \n  - `id`: ID do filme.\n- **Corpo da Requisição:**  \n\n  ```json\n  {\n    \"rating\": 5\n  }\n  ```\n\n- **Exemplo de Resposta:**\n\n  ```json\n  {\n    \"id\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n    \"title\": \"Interstellar\",\n    \"synopsis\": \"The adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.\",\n    \"releaseYear\": 2014,\n    \"genre\": \"Adventure, Drama, Science Fiction\",\n    \"state\": \"RATED\",\n    \"rating\": 5,\n    \"createdAt\": \"2025-02-09T19:16:02.882Z\"\n  }\n  ```\n\n### 📖 Histórico do Filme\n\n- **Descrição:** Exibe o histórico de ações de um filme.\n- **Método**: `GET`\n- **URL**: `/movie/:id/history`\n- **Parâmetros de URL:**  \n  - `id`: ID do filme.\n\n- **Exemplo de Resposta:**\n\n  ```json\n  {\n    \"movieId\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n    \"title\": \"Interstellar\",\n    \"history\": [\n      {\n        \"method\": \"GET\",\n        \"url\": \"/movie/ae44ae5b-7d56-483a-8283-289c784ee91d\",\n        \"status\": 200,\n        \"timestamp\": \"2025-02-09T19:17:32.334Z\",\n        \"user\": \"a945afc7-f5c3-40ee-a865-94f3623d8c16\"\n      },\n      {\n        \"method\": \"PUT\",\n        \"url\": \"/movie/ae44ae5b-7d56-483a-8283-289c784ee91d/state\",\n        \"status\": 200,\n        \"timestamp\": \"2025-02-09T19:18:05.061Z\",\n        \"user\": \"a945afc7-f5c3-40ee-a865-94f3623d8c16\"\n      },\n      {\n        \"method\": \"POST\",\n        \"url\": \"/movie/ae44ae5b-7d56-483a-8283-289c784ee91d/rate\",\n        \"status\": 200,\n        \"timestamp\": \"2025-02-09T19:18:37.476Z\",\n        \"user\": \"a945afc7-f5c3-40ee-a865-94f3623d8c16\"\n      },\n      {\n        \"method\": \"GET\",\n        \"url\": \"/movie/ae44ae5b-7d56-483a-8283-289c784ee91d/history\",\n        \"status\": 200,\n        \"timestamp\": \"2025-02-09T19:19:06.466Z\",\n        \"user\": \"a945afc7-f5c3-40ee-a865-94f3623d8c16\"\n      }\n    ]\n  }\n\n  ```\n\n### 📊 Logs das Requisições\n\n- **Descrição:** Exibe os logs de todas as requisições feitas à API.\n- **Método**: `GET`\n- **URL**: `/log`\n\n- **Exemplo de Resposta:**\n\n  ```json\n  [\n    {\n      \"id\": \"971962dd-2ce5-4c27-b3cc-3da71fe9d550\",\n      \"type\": \"REQUEST\",\n      \"method\": \"GET\",\n      \"url\": \"/movie/ae44ae5b-7d56-483a-8283-289c784ee91d/history\",\n      \"status\": 200,\n      \"timestamp\": \"2025-02-09T19:19:06.466Z\",\n      \"movieId\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n      \"userId\": \"a945afc7-f5c3-40ee-a865-94f3623d8c16\"\n    },\n    {\n      \"id\": \"1b540827-705a-4ee2-afba-536ef3d91558\",\n      \"type\": \"REQUEST\",\n      \"method\": \"POST\",\n      \"url\": \"/movie/ae44ae5b-7d56-483a-8283-289c784ee91d/rate\",\n      \"status\": 200,\n      \"timestamp\": \"2025-02-09T19:18:37.476Z\",\n      \"movieId\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n      \"userId\": \"a945afc7-f5c3-40ee-a865-94f3623d8c16\"\n    },\n    {\n      \"id\": \"261cab53-f903-4d38-8422-b64000017b78\",\n      \"type\": \"REQUEST\",\n      \"method\": \"PUT\",\n      \"url\": \"/movie/ae44ae5b-7d56-483a-8283-289c784ee91d/state\",\n      \"status\": 200,\n      \"timestamp\": \"2025-02-09T19:18:05.061Z\",\n      \"movieId\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n      \"userId\": \"a945afc7-f5c3-40ee-a865-94f3623d8c16\"\n    },\n    {\n      \"id\": \"b7f4ca7b-54aa-4e04-9d9d-85682ef065bf\",\n      \"type\": \"REQUEST\",\n      \"method\": \"GET\",\n      \"url\": \"/movie/ae44ae5b-7d56-483a-8283-289c784ee91d\",\n      \"status\": 200,\n      \"timestamp\": \"2025-02-09T19:17:32.334Z\",\n      \"movieId\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n      \"userId\": \"a945afc7-f5c3-40ee-a865-94f3623d8c16\"\n    },\n    {\n      \"id\": \"b61a3012-ad80-4f20-9955-815169876a53\",\n      \"type\": \"REQUEST\",\n      \"method\": \"GET\",\n      \"url\": \"/movie\",\n      \"status\": 200,\n      \"timestamp\": \"2025-02-09T19:16:55.628Z\",\n      \"movieId\": null,\n      \"userId\": \"a945afc7-f5c3-40ee-a865-94f3623d8c16\"\n    },\n    {\n      \"id\": \"e0e7f05d-27d0-465a-82ae-52dbf58142d0\",\n      \"type\": \"REQUEST\",\n      \"method\": \"POST\",\n      \"url\": \"/movie\",\n      \"status\": 201,\n      \"timestamp\": \"2025-02-09T19:16:02.278Z\",\n      \"movieId\": \"ae44ae5b-7d56-483a-8283-289c784ee91d\",\n      \"userId\": \"a945afc7-f5c3-40ee-a865-94f3623d8c16\"\n    }\n  ]\n  ```\n\n## 📝 Documentação da API com Swagger\n\nA documentação da API foi criada utilizando **Swagger**. Você pode acessá-la em [http://localhost:3333/docs](http://localhost:3333/docs) após rodar a aplicação.\n\n## 🧪 Testes\n\nEste projeto utiliza o **Vitest** para garantir a confiabilidade e o funcionamento correto dos recursos implementados. Para executar os testes, utilize os seguintes comandos:\n\n- **Executar testes:**\n\n  ```bash\n  npm run test\n  ```\n\n- **Executar testes em modo de observação:**\n\n  ```bash\n  npm run test:watch\n  ```\n\n- **Executar testes com cobertura:**\n\n  ```bash\n  npm run test:coverage\n  ```\n\n## 🤝 Contribuições\n\nContribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias ou correções. ✨\n\n## ⭐ Apoie este Projeto\n\nSe este projeto te ajudou ou te inspirou de alguma forma, não esqueça de deixar uma ⭐ no repositório! Isso faz toda a diferença! 🚀\n\n## 📜 Licença\n\nEste projeto está licenciado sob a [MIT License](LICENSE).\n\n## 📞 Contato\n\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/joschonarth/)\n[![Gmail](https://img.shields.io/badge/Gmail-D14836?style=for-the-badge\u0026logo=gmail\u0026logoColor=white)](mailto:joschonarth@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoschonarth%2Fthe-movie-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoschonarth%2Fthe-movie-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoschonarth%2Fthe-movie-api/lists"}