feat: add mood
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Mood;
|
||||
use App\Models\UserMood;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class MoodController extends Controller
|
||||
{
|
||||
// Store today's mood
|
||||
public function storeUserMood(Request $request)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'mood_id' => 'required|exists:moods,id',
|
||||
]);
|
||||
|
||||
$user = auth()->user();
|
||||
|
||||
$mood = UserMood::updateOrCreate(
|
||||
[
|
||||
'user_id' => $user->id,
|
||||
'date' => now()->toDateString(),
|
||||
],
|
||||
[
|
||||
'mood_id' => $data['mood_id'],
|
||||
]
|
||||
);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Mood saved successfully',
|
||||
'mood' => $mood->load('mood')
|
||||
]);
|
||||
}
|
||||
|
||||
// Get list of all moods user has set
|
||||
public function getUserMoods()
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
$moods = UserMood::where('user_id', $user->id)
|
||||
->with('mood')
|
||||
->orderBy('date', 'desc')
|
||||
->get();
|
||||
|
||||
return response()->json($moods);
|
||||
}
|
||||
|
||||
public function getAllMoods()
|
||||
{
|
||||
$moods = Mood::all();
|
||||
return response()->json($moods);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Mood extends Model
|
||||
{
|
||||
protected $fillable = ['name', 'emoji', 'description'];
|
||||
|
||||
public function userMoods()
|
||||
{
|
||||
return $this->hasMany(UserMood::class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class UserMood extends Model
|
||||
{
|
||||
protected $fillable = ['user_id', 'mood_id', 'date'];
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
public function mood()
|
||||
{
|
||||
return $this->belongsTo(Mood::class);
|
||||
}
|
||||
}
|
||||
+5
-2
@@ -11,8 +11,11 @@
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('user_mood', function (Blueprint $table) {
|
||||
Schema::create('moods', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('description')->nullable();
|
||||
$table->string('emoji');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
@@ -22,6 +25,6 @@ public function up(): void
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('user_mood');
|
||||
Schema::dropIfExists('moods');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('user_moods', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('user_id')->constrained()->onDelete('cascade');
|
||||
$table->foreignId('mood_id')->constrained('moods')->onDelete('cascade');
|
||||
$table->date('date');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('user_moods');
|
||||
}
|
||||
};
|
||||
@@ -8,20 +8,23 @@
|
||||
|
||||
class DatabaseSeeder extends Seeder
|
||||
{
|
||||
|
||||
public function run(): void
|
||||
{
|
||||
$this->call(MoodSeeder::class);
|
||||
}
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// User::factory(10)->create();
|
||||
$this->call([
|
||||
BreathingTemplateSeeder::class,
|
||||
]);
|
||||
// User::factory()->create([
|
||||
// 'name' => 'Test User',
|
||||
// 'email' => 'test@example.com',
|
||||
// public function run(): void
|
||||
// {
|
||||
// // User::factory(10)->create();
|
||||
// $this->call([
|
||||
// BreathingTemplateSeeder::class,
|
||||
// ]);
|
||||
}
|
||||
// // User::factory()->create([
|
||||
// // 'name' => 'Test User',
|
||||
// // 'email' => 'test@example.com',
|
||||
// // ]);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\Mood;
|
||||
|
||||
class MoodSeeder extends Seeder
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
$moods = [
|
||||
[
|
||||
'name' => 'خوشحال',
|
||||
'emoji' => '😊',
|
||||
'description' => 'احساس شادی و رضایت از شرایط زندگی یا لحظه حال.'
|
||||
],
|
||||
[
|
||||
'name' => 'غمگین',
|
||||
'emoji' => '😢',
|
||||
'description' => 'حس ناراحتی و اندوه که ممکن است به دلیل اتفاقی ناخوشایند باشد.'
|
||||
],
|
||||
[
|
||||
'name' => 'آرام',
|
||||
'emoji' => '😌',
|
||||
'description' => 'احساسی از آرامش و رهایی از استرس و تنش.'
|
||||
],
|
||||
[
|
||||
'name' => 'عصبانی',
|
||||
'emoji' => '😠',
|
||||
'description' => 'حس خشم یا ناراحتی شدید نسبت به موقعیتی خاص.'
|
||||
],
|
||||
[
|
||||
'name' => 'هیجانزده',
|
||||
'emoji' => '🤩',
|
||||
'description' => 'احساس شور و شوق فراوان برای تجربه یا رویدادی خاص.'
|
||||
],
|
||||
[
|
||||
'name' => 'خسته',
|
||||
'emoji' => '😴',
|
||||
'description' => 'کمبود انرژی و نیاز به استراحت یا خواب.'
|
||||
]
|
||||
];
|
||||
|
||||
foreach ($moods as $mood) {
|
||||
Mood::create($mood);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@
|
||||
use App\Http\Controllers\PackageNameController;
|
||||
use App\Http\Controllers\ProductController;
|
||||
use App\Http\Controllers\BreathingTemplate;
|
||||
use App\Http\Controllers\MoodController;
|
||||
|
||||
Route::get('package-names/{name}/products', [ProductController::class, 'index']);
|
||||
Route::prefix('auth')->controller(UserController::class)->group(function () {
|
||||
@@ -45,6 +46,15 @@
|
||||
Route::get('/profile', [UserController::class, 'profile']);
|
||||
|
||||
|
||||
///-- mood routes
|
||||
|
||||
Route::post('/moods/today', [MoodController::class, 'storeUserMood']);
|
||||
Route::get('/moods/history', [MoodController::class, 'getUserMoods']);
|
||||
|
||||
|
||||
// --------- get moods
|
||||
Route::get('/moods', [MoodController::class, 'getAllMoods']);
|
||||
|
||||
// Route::post('breathing-exercises', [BreathingExerciseController::class, 'store']);
|
||||
// Route::get('profile', [BreathingExerciseController::class, 'profile']);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user