added yoga stuff, i18n, workout tracking and a dashboard to track progress

This commit is contained in:
2025-10-04 17:55:30 +03:00
parent 1ed9235451
commit d1bc362fab
32 changed files with 1790 additions and 63 deletions
+40
View File
@@ -0,0 +1,40 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class WorkoutSession extends Model
{
use HasFactory;
protected $fillable = [
'user_id',
'workout_id',
'started_at',
'completed_at',
];
protected $casts = [
'started_at' => 'datetime',
'completed_at' => 'datetime',
];
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function workout(): BelongsTo
{
return $this->belongsTo(Workout::class);
}
public function items(): HasMany
{
return $this->hasMany(WorkoutSessionItem::class, 'session_id');
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class WorkoutSessionItem extends Model
{
use HasFactory;
protected $fillable = [
'session_id',
'workout_exercise_id',
'done',
];
protected $casts = [
'done' => 'boolean',
];
public function session(): BelongsTo
{
return $this->belongsTo(WorkoutSession::class, 'session_id');
}
public function workoutExercise(): BelongsTo
{
return $this->belongsTo(WorkoutExercise::class);
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class YogaCategory extends Model
{
use HasFactory;
protected $fillable = [
'external_id',
'name',
'description',
];
public function poses(): HasMany
{
return $this->hasMany(YogaPose::class, 'category_id');
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class YogaPose extends Model
{
use HasFactory;
protected $fillable = [
'external_id',
'category_id',
'slug',
'english_name',
'sanskrit_name_adapted',
'sanskrit_name',
'translation_name',
'description',
'benefits',
'url_svg',
'url_png',
'url_svg_alt',
];
public function category(): BelongsTo
{
return $this->belongsTo(YogaCategory::class, 'category_id');
}
}