Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 8 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
@@ -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.
90 changes: 90 additions & 0 deletions wordpress-back-end-challenge.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<?php
/*
Plugin Name: Wordpress Back-End Challenge plugin
Description: Plugin voltado para o teste de dev PHP
Version: 1.0
Author: Igor Gabriel de Sousa Silva
Text Domain: Plugin Teste WP
*/

global $wpdb;
$table_name = 'like_posts';
$charset_collate = $wpdb->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');