diff --git a/README.md b/README.md index a4f6c256..67b5d18b 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,10 @@ -# WordPress Back-end Challenge +##Algumas informações sobre o teste +->Requisitos: Para testar o plugin é necessário instalar no WP o Plugin "JWT Authentication for WP REST API" e gerar o token com o endpoint "/wp-json/jwt-auth/v1/token", passando em fields o "username" e o "password", e o token gerado passado na hora da requisição como Bearer Token; +->Adicionar no arquivo wp-config.php: "define('JWT_AUTH_SECRET_KEY', 'sua chave aleatoria(pode ser qualquer valor)');" e "define('JWT_AUTH_CORS_ENABLE', true);" -Desafio para os futuros programadores back-end em WordPress da Apiki. +#EndPoint +-> '/wp-json/testewp/v1/like' +- O token Bearer é necessário. +- Parâmetros necessários: 'post_id'. -## 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. +-> Lógica: Se uma curtida já tiver sido adicionada à um post por um determinado usuário, da próxima vez que esse mesmo usuário fizer a requisição será deletada a curtida, funcionando o like e o unlike. \ No newline at end of file diff --git a/wordpress-back-end-challenge.php b/wordpress-back-end-challenge.php new file mode 100644 index 00000000..73fc924b --- /dev/null +++ b/wordpress-back-end-challenge.php @@ -0,0 +1,90 @@ +get_charset_collate(); + $query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table_name ) ); + + if ( ! $wpdb->get_var( $query ) == $table_name ) { + $sql = "CREATE TABLE $table_name ( + id mediumint(9) NOT NULL AUTO_INCREMENT, + user_id BIGINT(20) UNSIGNED NOT NULL, + FOREIGN KEY (user_id) REFERENCES wp_users(id), + post_id BIGINT(20) UNSIGNED NOT NULL, + FOREIGN KEY (post_id) REFERENCES wp_posts(id), + created_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, + updated_at datetime, + PRIMARY KEY (id) + ) $charset_collate;"; + + require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); + dbDelta($sql); + } + +function like_post_user($request) { + global $wpdb; + + if($request['post_id'] != '' && $request['post_id'] != null ) { + $post_id = $request['post_id']; + $user_id = $GLOBALS['user_id']; + $table_name = 'like_posts'; + $results = $wpdb->get_row("SELECT * FROM $table_name WHERE post_id = '$post_id' AND user_id = '$user_id'"); + + if($results) { + $delete = $wpdb->delete( $table_name, array( 'user_id' => $user_id, 'post_id' => $post_id ) ); + $response = array( + 'success' => true, + 'message' => 'Curtida deletada com Sucesso!', + 'data' => $delete + ); + } else { + $like = $wpdb->insert('like_posts', array( + 'user_id' => $GLOBALS['user_id'], + 'post_id' => $request['post_id'], + 'created_at' => date('Y-m-d H:i:s') + )); + $response = array( + 'success' => true, + 'message' => 'Curtida adicionada com sucesso!', + 'data' => $like + ); + } + + } else { + $response = array( + 'success' => false, + 'message' => 'Confira novamente os parâmetros passados e tente de novo.' + ); + } + + return rest_ensure_response($response); +} + +function register_routes_like_post(){ + + + register_rest_route('testewp/v1', 'like', array( + 'methods' => 'POST', + 'callback' => 'like_post_user', + 'permission_callback' => 'permission_callback' + )); + +} + function permission_callback() { + if(is_user_logged_in()){ + $GLOBALS['user_id'] = get_current_user_id(); + return true; + } + return false; + } + +add_action( 'rest_api_init', 'register_routes_like_post'); + +