Initial Laravel API import
Some checks failed
continuous-integration/drone/push Build is failing

- Complete GGZ Ecademy Laravel backend application
- RESTful API for learning products, members, filters
- Authentication and authorization system
- Database migrations and seeders
- Custom CRUD generator commands
- Email notification system
- Integration with frontend applications
This commit is contained in:
Joris Slagter
2025-12-02 17:40:21 +01:00
parent 786b6b6a78
commit df155bb13d
341 changed files with 116385 additions and 2 deletions

View File

@@ -0,0 +1,65 @@
<?php
namespace App\Repositories;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Webmozart\Assert\Assert;
class Summary extends Model
{
protected $guarded = ['id'];
public function member(): BelongsTo
{
return $this->belongsTo(Member::class);
}
protected static function booted()
{
static::created(fn (self $summary) => static::cascadeAttributes($summary));
static::updated(fn (self $summary) => static::cascadeAttributes($summary));
static::deleting(fn (self $summary) => static::cascadeAttributes($summary));
}
/**
* @todo extract to generic subsystem
*/
private static function cascadeAttributes(self $summary): void
{
static::maybeCascadeAttribute($summary, 'updated_at', 'member', 'updated_at');
}
/**
* @todo extract to generic subsystem
*/
private static function maybeCascadeAttribute(
self $summary,
string $sourceAttribute,
string $relationship,
string $targetAttribute
): void
{
$target = $summary->{$relationship} ?? null;
if (is_null($target)) {
return;
}
/** @var Model $target */
Assert::isAOf($target, Model::class);
$target->withoutEvents(fn () => static::cascadeAttribute($summary, $target, $sourceAttribute, $targetAttribute));
}
/**
* @todo extract to generic subsystem
*/
private static function cascadeAttribute(self $summary, Model $target, string $sourceAttribute, string $targetAttribute): void
{
$target->update([
$targetAttribute => $summary->{$sourceAttribute},
'timestamps' => false,
]);
}
}