From 8694a589b6e2bb7e33874e200b1838ca62e69dc6 Mon Sep 17 00:00:00 2001 From: Pedro Marcusso Date: Sun, 27 Jul 2025 09:02:51 -0300 Subject: [PATCH 1/2] feat: implementa plugin de favoritos via REST API --- favorite-posts/favorite-posts.php | 16 ++++++++++++++++ favorite-posts/includes/functions.php | 23 +++++++++++++++++++++++ favorite-posts/includes/install.php | 20 ++++++++++++++++++++ favorite-posts/includes/routes.php | 11 +++++++++++ 4 files changed, 70 insertions(+) create mode 100644 favorite-posts/favorite-posts.php create mode 100644 favorite-posts/includes/functions.php create mode 100644 favorite-posts/includes/install.php create mode 100644 favorite-posts/includes/routes.php diff --git a/favorite-posts/favorite-posts.php b/favorite-posts/favorite-posts.php new file mode 100644 index 00000000..985f6961 --- /dev/null +++ b/favorite-posts/favorite-posts.php @@ -0,0 +1,16 @@ +prefix . 'favorite_posts'; + + $exists = $wpdb->get_var($wpdb->prepare( + "SELECT id FROM $table_name WHERE user_id = %d AND post_id = %d", + $user_id, $post_id + )); + + if ($exists) { + $wpdb->delete($table_name, ['id' => $exists]); + return ['status' => 'removed']; + } else { + $wpdb->insert($table_name, ['user_id' => $user_id, 'post_id' => $post_id]); + return ['status' => 'added']; + } +} diff --git a/favorite-posts/includes/install.php b/favorite-posts/includes/install.php new file mode 100644 index 00000000..9ffcc391 --- /dev/null +++ b/favorite-posts/includes/install.php @@ -0,0 +1,20 @@ +prefix . 'favorite_posts'; + $charset_collate = $wpdb->get_charset_collate(); + + $sql = "CREATE TABLE IF NOT EXISTS $table_name ( + id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, + user_id BIGINT(20) UNSIGNED NOT NULL, + post_id BIGINT(20) UNSIGNED NOT NULL, + PRIMARY KEY (id), + UNIQUE KEY user_post (user_id, post_id) + ) $charset_collate;"; + + require_once ABSPATH . 'wp-admin/includes/upgrade.php'; + dbDelta($sql); +} diff --git a/favorite-posts/includes/routes.php b/favorite-posts/includes/routes.php new file mode 100644 index 00000000..217c0afa --- /dev/null +++ b/favorite-posts/includes/routes.php @@ -0,0 +1,11 @@ +\d+)', [ + 'methods' => 'POST', + 'callback' => 'fp_toggle_favorite', + 'permission_callback' => function () { + return is_user_logged_in(); + } + ]); +}); From 9b9bae50e5feec53b4a62c86b2b45f24414da6d9 Mon Sep 17 00:00:00 2001 From: Pedro Marcusso <100154939+pedromarcusso09@users.noreply.github.com> Date: Tue, 3 Feb 2026 08:40:22 -0300 Subject: [PATCH 2/2] Revise README for Favorite Posts plugin Updated the README to reflect the plugin's purpose and installation instructions. --- README.md | 64 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index a4f6c256..02c8a938 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,37 @@ -# WordPress Back-end Challenge - -Desafio para os futuros programadores back-end em WordPress da Apiki. - -## Introdução - -Desenvolva um Plugin em WordPress que implemente a funcionalidade de favoritar posts para usuários logados usando a [WP REST API](https://developer.wordpress.org/rest-api/). - -**Especifícações**: - -* Possibilidade de favoritar e desfavoritar um post; -* Persistir os dados em uma [tabela a parte](https://codex.wordpress.org/Creating_Tables_with_Plugins); - -## Instruções - -1. Efetue o fork deste repositório e crie um branch com o seu nome e sobrenome. (exemplo: fulano-dasilva) -2. Após finalizar o desafio, crie um Pull Request. -3. Aguarde algum contribuidor realizar o code review. - -## Pré-requisitos - -* PHP >= 5.6 -* Orientado a objetos - -## Dúvidas - -Em caso de dúvidas, crie uma issue. +# Favorite Posts + +Plugin WordPress para favoritar posts via REST API. + +## Descrição +Este plugin permite que usuários autenticados marquem ou desmarquem posts como favoritos utilizando uma rota customizada na REST API do WordPress. Os favoritos são armazenados em uma tabela personalizada no banco de dados. + +## Instalação +1. Copie a pasta `favorite-posts` para o diretório `wp-content/plugins` do seu WordPress. +2. Ative o plugin pelo painel de administração do WordPress. + +## Como funciona +- Cria a tabela `wp_favorite_posts` para armazenar os favoritos (usuário x post). +- Disponibiliza uma rota na REST API para favoritar/desfavoritar posts. +- Apenas usuários autenticados podem utilizar a funcionalidade. + +## Endpoints da API + +### Favoritar/Desfavoritar Post +- **Endpoint:** `/wp-json/favorite-posts/v1/toggle/{post_id}` +- **Método:** `POST` +- **Autenticação:** Necessária (usuário logado) +- **Parâmetros:** + - `post_id` (na URL): ID do post a ser favoritado/desfavoritado +- **Resposta:** + - `{ "status": "added" }` se o post foi favoritado + - `{ "status": "removed" }` se o post foi removido dos favoritos + +#### Exemplo de requisição +```bash +curl -X POST \ + -H "Authorization: Bearer " \ + https://seusite.com/wp-json/favorite-posts/v1/toggle/123 +``` + +## Autor +Pedro Marcusso