Skip to content

Commit

Permalink
fixed bugs and improved performance by 60%
Browse files Browse the repository at this point in the history
  • Loading branch information
autonomynti committed Nov 25, 2023
1 parent 31c27ab commit d1a4887
Show file tree
Hide file tree
Showing 49 changed files with 877 additions and 2,268 deletions.
2 changes: 1 addition & 1 deletion src/Facade/FModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public static function __callStatic($name, $arguments)
fieldTypes: (new static)->fieldTypes
))->$name(...$arguments);
} catch (\Throwable $th) {
throw new \Exception("Call to undefined method ".static::class."::".$name."() .". 'Reason: ' .$th->getMessage(), 1);
throw new \Exception("Call to undefined method ".static::class."::".$name."().". ' Main Error:- ' .$th->getMessage(), 1);

}
}
Expand Down
56 changes: 36 additions & 20 deletions src/Firestore/Eloquent/FirestoreDataFormat.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
*/
namespace Roddy\FirestoreEloquent\Firestore\Eloquent;

use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\FirestoreConnectionTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\PaginateTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\UpdateTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\PaginateTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\UpdateTrait;
use Roddy\FirestoreEloquent\Firestore\Relations\FHasMany;
use Roddy\FirestoreEloquent\Firestore\Relations\FHasOne;

Expand All @@ -17,11 +16,13 @@ class FirestoreDataFormat
use FHasMany;
use UpdateTrait;
use PaginateTrait;
use FirestoreConnectionTrait;

private $data;
private ?string $documentId;
private bool $exists;

public function __construct(
private array $data,
private ?string $documentId,
private bool $exists,
private object $row,
private $collectionName,
private $model
)
Expand All @@ -40,6 +41,10 @@ public function __construct(
if(!config('firebase.projects.app.project_id', env('FIREBASE_PROJECT_ID'))){
throw new \Exception("FIREBASE_PROJECT_ID not set in .env file.");
}

$this->data = $row->data();
$this->documentId = $row->id();
$this->exists = count($this->data) > 0 ? true : false;
}

/**
Expand All @@ -64,8 +69,8 @@ public function __set($name, $value)
*/
public function __get($name)
{
if(count($this->data) < 1){
return [];
if(count($this->data) < 1){ // If the document does not exist.
return null;
}

if (array_key_exists($name, $this->data)) {
Expand Down Expand Up @@ -126,6 +131,18 @@ public function exists()
return $this->exists;
}

public function updateSubDocument(array $data, array $fillable = [], array $required = [], array $fieldTypes = [], $primaryKey = 'id')
{
return $this->fupdate(
data: $data,
row: $this->row,
primaryKey: $primaryKey,
fillable: $fillable,
required: $required,
fieldTypes: $fieldTypes,
);
}

/**
* Update the Firestore document with the given data.
*
Expand Down Expand Up @@ -185,10 +202,9 @@ public function update(array $data)

$class = $namespace.'\\'.$modelName;

$this->fupdate(
return $this->fupdate(
data: $data,
firestore: $this->fConnection($this->collectionName),
documentId: $this->documentId,
row: $this->row,
primaryKey: (new $class)->primaryKey,
fillable: (new $class)->fillable,
required: (new $class)->required,
Expand All @@ -209,7 +225,11 @@ public function update(array $data)
*/
public function delete()
{
$this->fConnection($this->collectionName)->document($this->documentId)->delete();
try {
return $this->row->reference()->delete();
} catch (\Exception $e) {
throw new \Exception($e->getMessage());
}
}

/**
Expand Down Expand Up @@ -252,15 +272,11 @@ public function hasMany(string $model, string $foreignKey, ?string $localKey = n

public function collection($subCollectionName)
{
$documentId = $this->documentId;
$model = $this->model;
$collection = $this->collectionName;

return new SubDocumentModel(
row: $this->row,
subCollectionName: $subCollectionName,
documentId: $documentId,
model: $model,
collection: $collection
model: $this->model,
collection: $this->collectionName
);
}
}
127 changes: 82 additions & 45 deletions src/Firestore/Eloquent/FirestoreModelClass.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@

namespace Roddy\FirestoreEloquent\Firestore\Eloquent;

use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\AllTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\AndWhereTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\CreateTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\DeleteManyTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\FindTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\FirestoreConnectionTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\FirstOrFailTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\FirstTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\GetTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\OrWhereTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\PaginateTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\UpdateManyTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\traits\WhereTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\AllTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\AndWhereTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\CreateTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\DeleteManyTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\FindTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\FirestoreConnectionTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\FirstOrFailTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\FirstTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\GetTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\OrWhereTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\PaginateTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\UpdateManyTrait;
use Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\WhereTrait;

class FirestoreModelClass
{
Expand Down Expand Up @@ -92,7 +92,7 @@ public function __construct(
* Retrieve all documents from the Firestore database matching the current query parameters.
*
* @return array The list of documents matching the current query parameters.
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\GetTrait::fget()
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\GetTrait::fget()
*
* @example
* ```php
Expand All @@ -115,7 +115,7 @@ public function get()
* Retrieve the first document from the Firestore database matching the current query parameters.
*
* @return mixed The first document matching the current query parameters.
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\FirstTrait::fFirst()
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\FirstTrait::fFirst()
*
* @example
* ```php
Expand All @@ -124,9 +124,9 @@ public function get()
*/
public function first()
{


return $this->fFirst(
path: $this->path,
direction: $this->direction,
query: $this->query,
collection: $this->collection,
model: $this->model
Expand All @@ -138,7 +138,7 @@ public function first()
*
* @return mixed The first document matching the current query parameters.
* @throws \Exception If no document is found.
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\FirstOrFailTrait::fFirstOrFail()
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\FirstOrFailTrait::fFirstOrFail()
*
* @example
* ```php
Expand All @@ -147,8 +147,9 @@ public function first()
*/
public function firstOrFail()
{

return $this->fFirstOrFail(
path: $this->path,
direction: $this->direction,
query: $this->query,
collection: $this->collection,
model: $this->model
Expand All @@ -159,7 +160,7 @@ public function firstOrFail()
* Retrieve all documents from the Firestore database .
*
* @return array The list of documents.
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\AllTrait::fAll()
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\AllTrait::fAll()
*
* @example
* ```php
Expand All @@ -183,7 +184,7 @@ public function all()
*
* @param string $documentId The ID of the document to retrieve.
* @return \Roddy\FirestoreEloquent\Firestore\Eloquent\FirestoreDataFormat The document with the given ID.
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\FindTrait::fFind()
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\FindTrait::fFind()
*
* @example
* ```php
Expand All @@ -208,7 +209,7 @@ public function find(string $documentId)
* @param array $filter The filter to apply to the query.
* @return Returns a new instance of the model with the query applied.
* @throws \Exception
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\WhereTrait::fWhere()
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\WhereTrait::fWhere()
*
* @example
* ```php
Expand Down Expand Up @@ -313,7 +314,7 @@ public function orderByAsc(string $path)
*
* @throws \Exception
*
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\AndWhereTrait::fAndWhere();
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\AndWhereTrait::fAndWhere();
*
* @example
* ```php
Expand All @@ -335,7 +336,7 @@ public function andWhere(array $filters)
*
* @throws \Exception
*
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\OrWhereTrait::fOrWhere();
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\OrWhereTrait::fOrWhere();
*
* @example
* ```php
Expand All @@ -357,7 +358,7 @@ public function orWhere(array $filters)
*
* @throws \Exception
*
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\UpdateManyTrait::fUpdateMany()
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\UpdateManyTrait::fUpdateMany()
* @example
* ```php
* User::where(['age' => 20])->updateMany(['age' => 25]); // Update all users with age 20
Expand All @@ -374,14 +375,15 @@ public function orWhere(array $filters)
public function updateMany(array $data)
{

$this->fUpdateMany(data: $data,
query: $this->query,
firestore: $this->fConnection($this->collection),
primaryKey: $this->primaryKey,
fillable: $this->fillable,
required: $this->required,
fieldTypes: $this->fieldTypes
);
return $this->fUpdateMany(data: $data,
query: $this->query,
primaryKey: $this->primaryKey,
fillable: $this->fillable,
required: $this->required,
fieldTypes: $this->fieldTypes,
model: $this->model,
collection: $this->collection
);
}

/**
Expand All @@ -391,7 +393,7 @@ public function updateMany(array $data)
*
* @throws \Exception
*
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\DeleteManyTrait::fDeleteMany()
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\DeleteManyTrait::fDeleteMany()
*
* @example
* ```php
Expand All @@ -406,7 +408,7 @@ public function deleteMany()
$query = $this->query;
}

$this->fDeleteMany(query: $query, firestore: $this->fConnection($this->collection));
return $this->fDeleteMany(query: $query);
}

/**
Expand All @@ -418,19 +420,17 @@ public function deleteMany()
*
* @throws \Exception
*
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\traits\CreateTrait::fCreate()
* @see \Roddy\FirestoreEloquent\Firestore\Eloquent\QueryHelpers\CreateTrait::fCreate()
*
* @example
* ```php
* $newUser = User::create(['name' => 'John', 'age' => 20]); // Create a new user
* $newUser->name; // John
* ```
*/
public function create(array $data, $id = '')
public function create(array $data)
{


return $this->fCreate(data: $data, id: $id,
return $this->fCreate(data: $data,
firestore: $this->fConnection($this->collection),
fillable: $this->fillable,
required: $this->required,
Expand All @@ -457,13 +457,15 @@ public function create(array $data, $id = '')
public function paginate(int $limit, string $name = 'page'): object
{
if(!$this->query){
$this->query = $this->fConnection($this->collection);
$query = $this->fConnection($this->collection);
}else{
$query = $this->query;
}

return (object) $this->fPaginate(
path: $this->path,
direction: $this->direction,
query: $this->query,
query: $query,
model: $this->model,
collection: $this->collection,
name: $name,
Expand All @@ -490,10 +492,45 @@ public function count()
public function limit($number)
{
if(!$this->query){
$query = $this->fConnection($this->collection);
if($this->path){
if(!$this->direction){
$query = $this->fConnection($this->collection)->orderBy($this->path)->limit($number);
}else{
$query = $this->fConnection($this->collection)->orderBy($this->path, $this->direction)->limit($number);
}
}else{
$query = $this->fConnection($this->collection)->limit($number);
}
}else{
$query = $this->query;
if($this->path){
if(!$this->direction){
$query = $this->query->orderBy($this->path)->limit($number);
}else{
$query = $this->query->orderBy($this->path, $this->direction)->limit($number);
}
}else{
$query = $this->query->limit($number);
}
}

if($number == 1){
foreach($query->documents()->rows() as $row){
return new FirestoreDataFormat(
row: $row,
collectionName: $this->collection,
model: $this->model
);
}
}else{
$result = [];
foreach($query->documents()->rows() as $row){
array_push($result, new FirestoreDataFormat(
row: $row,
collectionName: $this->collection,
model: $this->model
));
}
return $result;
}
return $query->limit($number);
}
}
Loading

0 comments on commit d1a4887

Please sign in to comment.