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
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create('user_mood', function (Blueprint $table) {
|
Schema::create('moods', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
|
$table->string('name');
|
||||||
|
$table->string('description')->nullable();
|
||||||
|
$table->string('emoji');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -22,6 +25,6 @@ public function up(): void
|
|||||||
*/
|
*/
|
||||||
public function down(): 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
|
class DatabaseSeeder extends Seeder
|
||||||
{
|
{
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
$this->call(MoodSeeder::class);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Seed the application's database.
|
* Seed the application's database.
|
||||||
*/
|
*/
|
||||||
public function run(): void
|
// public function run(): void
|
||||||
{
|
// {
|
||||||
// User::factory(10)->create();
|
// // User::factory(10)->create();
|
||||||
$this->call([
|
// $this->call([
|
||||||
BreathingTemplateSeeder::class,
|
// BreathingTemplateSeeder::class,
|
||||||
]);
|
// ]);
|
||||||
// User::factory()->create([
|
// // User::factory()->create([
|
||||||
// 'name' => 'Test User',
|
// // 'name' => 'Test User',
|
||||||
// 'email' => 'test@example.com',
|
// // '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\PackageNameController;
|
||||||
use App\Http\Controllers\ProductController;
|
use App\Http\Controllers\ProductController;
|
||||||
use App\Http\Controllers\BreathingTemplate;
|
use App\Http\Controllers\BreathingTemplate;
|
||||||
|
use App\Http\Controllers\MoodController;
|
||||||
|
|
||||||
Route::get('package-names/{name}/products', [ProductController::class, 'index']);
|
Route::get('package-names/{name}/products', [ProductController::class, 'index']);
|
||||||
Route::prefix('auth')->controller(UserController::class)->group(function () {
|
Route::prefix('auth')->controller(UserController::class)->group(function () {
|
||||||
@@ -45,6 +46,15 @@
|
|||||||
Route::get('/profile', [UserController::class, 'profile']);
|
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::post('breathing-exercises', [BreathingExerciseController::class, 'store']);
|
||||||
// Route::get('profile', [BreathingExerciseController::class, 'profile']);
|
// Route::get('profile', [BreathingExerciseController::class, 'profile']);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user