TIST-27: UserMenu model and ajax endpoint to add #17

Merged
steve_dekart merged 3 commits from TIST-27 into develop 2025-06-29 10:03:40 +02:00
5 changed files with 135 additions and 7 deletions
Showing only changes of commit c3967b9abc - Show all commits

View File

@ -3,6 +3,7 @@
namespace Lycoreco\Apps\Ajax\Controllers;
use Lycoreco\Includes\BaseController;
use Lycoreco\Includes\Model\ValidationError;
class AjaxController extends BaseController
{
@ -32,8 +33,15 @@ class AjaxController extends BaseController
try {
$context['result'] = $action();
} catch (\Exception $ex) {
}
catch (ValidationError $ex) {
$context['result'] = get_ajax_error($ex->getMessage(), 400);
return $context;
}
catch (\Exception $ex) {
http_response_code(500);
$context['result'] = get_ajax_error($ex->getMessage());
return $context;
}

View File

@ -1,2 +1,2 @@
<?php
echo $context['result'];
echo json_encode($context['result'], JSON_PRETTY_PRINT);

View File

@ -1,6 +1,9 @@
<?php
use Lycoreco\Apps\Recipes\Models\RecipeModel;
use Lycoreco\Apps\Recipes\Models\{
RecipeModel,
RecipeUserMenu
};
function get_ajax_error($message, $error_code = 500)
{
@ -9,13 +12,14 @@ function get_ajax_error($message, $error_code = 500)
$error = array();
$error['error'] = $message;
return json_encode($error, JSON_PRETTY_PRINT);
return $error;
}
/**
* Ajax actions
*/
function ajax_search() {
function ajax_search()
{
$search_query = $_POST['query'] ?? null;
if (!isset($search_query)) {
return get_ajax_error("Missing 'query' parameter.", 400);
@ -37,5 +41,59 @@ function ajax_search() {
$result['count'] = count($recipes);
$result['result'] = $recipes;
return json_encode($result, JSON_PRETTY_PRINT);
}
return $result;
}
function ajax_usermenu()
{
$recipe_id = $_POST['recipe_id'] ?? null;
$dayofweek = $_POST['dayofweek'] ?? null;
if (!CURRENT_USER) {
return get_ajax_error('You are not authorized', 401);
}
if (!isset($recipe_id)) {
return get_ajax_error("Missing 'recipe_id' parameter.", 400);
}
if (!isset($dayofweek)) {
return get_ajax_error("Missing 'dayofweek' parameter.", 400);
}
$result = array();
$user_menu = RecipeUserMenu::get(array(
[
'name' => 'obj.recipe_id',
'type' => '=',
'value' => $recipe_id
],
[
'name' => 'obj.user_id',
'type' => '=',
'value' => CURRENT_USER->get_id()
]
));
// If user choose optiopn 'remove'
if($dayofweek == 'remove') {
if($user_menu) {
$user_menu->delete();
$result['success'] = 'This recipe was removed from your list';
return $result;
}
else {
return get_ajax_error("This recipe in your menu is not exists", 400);
}
}
// If not exists, add new recipe in user menu
if(!$user_menu) {
$user_menu = new RecipeUserMenu();
$user_menu->field_recipe_id = $recipe_id;
$user_menu->field_user_id = CURRENT_USER->get_id();
}
$user_menu->field_dayofweek = $dayofweek;
$user_menu->save();
$result['success'] = 'You have successfully added the recipe to your menu.';
return $result;
}

View File

@ -0,0 +1,57 @@
<?php
namespace Lycoreco\Apps\Recipes\Models;
use Lycoreco\Includes\Model\BaseModel;
class RecipeUserMenu extends BaseModel
{
public $field_dayofweek;
public $field_recipe_id;
public $field_user_id;
public $field_created_at;
static protected $table_name = 'recipe_usermenu';
static protected $table_fields = [
'id' => 'int',
'dayofweek' => 'string',
'recipe_id' => 'int',
'user_id' => 'int',
'created_at' => 'DateTime'
];
public static function init_table()
{
$result = db_query('CREATE TABLE ' . static::$table_name . ' (
id INT AUTO_INCREMENT PRIMARY KEY,
dayofweek VARCHAR(150) NOT NULL,
recipe_id INT NOT NULL,
user_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);');
return $result;
}
public function valid()
{
require_once INCLUDES_PATH . '/Const/recipes.php';
if(!in_array($this->field_dayofweek, DAY_OF_WEEKS))
return ['Day of Week is not valid'];
$recipe = RecipeModel::get(array(
[
'name' => 'obj.id',
'type' => '=',
'value' => $this->field_recipe_id
]
));
if(!$recipe)
return ['Recipe is not exists'];
return true;
}
}

View File

@ -0,0 +1,5 @@
<?php
define('DAY_OF_WEEKS', array(
'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'
));