Skip to content

Commit fb0271f

Browse files
author
Gareth Redfern
committed
add basic messaging model, controller, resources
1 parent e5ba57f commit fb0271f

File tree

7 files changed

+184
-0
lines changed

7 files changed

+184
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Models\Message;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Support\Facades\Auth;
8+
use App\Http\Resources\MessageResource;
9+
10+
class MessageController extends Controller
11+
{
12+
/**
13+
* Display a listing of the resource.
14+
*
15+
* @return \Illuminate\Http\Response
16+
*/
17+
public function index()
18+
{
19+
return MessageResource::collection(Message::paginate(10));
20+
}
21+
22+
/**
23+
* Store a newly created resource in storage.
24+
*
25+
* @param \Illuminate\Http\Request $request
26+
* @return \Illuminate\Http\Response
27+
*/
28+
public function store(Request $request)
29+
{
30+
$user = Auth::user();
31+
$message = new Message(['message' => $request->message]);
32+
$user->messages()->save($message);
33+
}
34+
35+
/**
36+
* Display the specified resource.
37+
*
38+
* @param int $id
39+
* @return \Illuminate\Http\Response
40+
*/
41+
public function show($id)
42+
{
43+
//
44+
}
45+
46+
/**
47+
* Update the specified resource in storage.
48+
*
49+
* @param \Illuminate\Http\Request $request
50+
* @param int $id
51+
* @return \Illuminate\Http\Response
52+
*/
53+
public function update(Request $request, $id)
54+
{
55+
//
56+
}
57+
58+
/**
59+
* Remove the specified resource from storage.
60+
*
61+
* @param int $id
62+
* @return \Illuminate\Http\Response
63+
*/
64+
public function destroy($id)
65+
{
66+
//
67+
}
68+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace App\Http\Resources;
4+
5+
use Illuminate\Http\Resources\Json\JsonResource;
6+
use Illuminate\Support\Carbon;
7+
8+
class MessageResource extends JsonResource
9+
{
10+
/**
11+
* Transform the resource into an array.
12+
*
13+
* @param \Illuminate\Http\Request $request
14+
* @return array
15+
*/
16+
public function toArray($request)
17+
{
18+
return [
19+
'id' => $this->id,
20+
'message' => $this->message,
21+
'user' => new UserBasicResource($this->user),
22+
'createdAt' => $this->created_at->diffForHumans(),
23+
'timestamp' => $this->created_at->unix(),
24+
];
25+
}
26+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace App\Http\Resources;
4+
5+
use Illuminate\Http\Resources\Json\JsonResource;
6+
7+
class UserBasicResource extends JsonResource
8+
{
9+
/**
10+
* Transform the resource into an array.
11+
*
12+
* @param \Illuminate\Http\Request $request
13+
* @return array
14+
*/
15+
public function toArray($request)
16+
{
17+
return [
18+
'id' => $this->id,
19+
'name' => $this->name,
20+
'email' => $this->email,
21+
];
22+
}
23+
}

app/Models/Message.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Models;
4+
5+
use Illuminate\Database\Eloquent\Factories\HasFactory;
6+
use Illuminate\Database\Eloquent\Model;
7+
8+
class Message extends Model
9+
{
10+
use HasFactory;
11+
12+
/**
13+
* The attributes that are mass assignable.
14+
*
15+
* @var array
16+
*/
17+
protected $fillable = [
18+
'message',
19+
];
20+
21+
public function user()
22+
{
23+
return $this->belongsTo(User::class);
24+
}
25+
}

app/Models/User.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,9 @@ public function isAdmin(): bool
4848
{
4949
return $this->is_admin;
5050
}
51+
52+
public function messages()
53+
{
54+
return $this->hasMany(Message::class);
55+
}
5156
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
class CreateMessagesTable extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*
12+
* @return void
13+
*/
14+
public function up()
15+
{
16+
Schema::create('messages', function (Blueprint $table) {
17+
$table->id();
18+
$table->foreignId('user_id')->constrained()->onDelete('cascade');
19+
$table->text('message');
20+
$table->timestamps();
21+
});
22+
}
23+
24+
/**
25+
* Reverse the migrations.
26+
*
27+
* @return void
28+
*/
29+
public function down()
30+
{
31+
Schema::dropIfExists('messages');
32+
}
33+
}

routes/api.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\Http\Controllers\UserController;
66
use App\Http\Controllers\TokenController;
77
use App\Http\Controllers\AvatarController;
8+
use App\Http\Controllers\MessageController;
89

910
/*
1011
|--------------------------------------------------------------------------
@@ -25,4 +26,7 @@
2526
Route::get('/users', [UserController::class, 'index']);
2627

2728
Route::post('/users/auth/avatar', [AvatarController::class, 'store']);
29+
30+
Route::post('/messages', [MessageController::class, 'store']);
31+
Route::get('/messages', [MessageController::class, 'index']);
2832
});

0 commit comments

Comments
 (0)