<?php
namespace SHServ\Middleware;
class Entity {
use \SHServ\Helpers\GetSetImplementation {
get as parent_get;
}
use \SHServ\Helpers\PetInstancesImplementation;
protected $entity_tablename;
protected $entity_id;
protected $field_name_of_update_at = "update_at";
protected $was_filled = false;
public function __construct(String $entity_tablename, Int $entity_id, Array $data = []) {
$this -> entity_tablename = $entity_tablename;
$this -> entity_id = $entity_id;
if(count($data)) {
$this -> fill($data);
}
}
public function fill(Array $data = []) {
if(count($data)) {
$this -> data = $data;
} else {
$this -> select_from_db();
}
$this -> was_filled = true;
}
protected function select_from_db() {
list($this -> data) = $this -> thin_builder() -> select(
$this -> entity_tablename,
[],
['id', '=', $this -> entity_id],
['id'],
'DESC',
[0, 1]
);
}
public function get(String $field_name): Mixed {
if(!$this -> was_filled()) {
$this -> fill();
}
return $this -> parent_get($field_name);
}
public function was_filled(): Bool {
return $this -> was_filled;
}
public function thin_builder(): \Fury\Modules\ThinBuilder\ThinBuilder {
return app() -> thin_builder;
}
public function id(): Int {
return $this -> entity_id;
}
public function update(): Array|Bool {
if(!count($this -> modified_fields)){
return [];
}
$where = [ ["id", "=", $this -> entity_id] ];
$this -> modified_fields[$this -> field_name_of_update_at] = date("Y-m-d H:i:s");
if(!$this -> thin_builder() -> update($this -> entity_tablename, $this -> modified_fields, $where)) {
return false;
}
$result = $this -> modified_fields;
$this -> modified_fields = [];
return $result;
}
public static function get_fields(): Array {
return static::$fields;
}
protected function remove_entity() {
return app() -> thin_builder -> delete(static::$table_name, [ "id", "=", $this -> id() ]);
}
}