From 5361c151e55b564f609090e5d013318dc07fe448 Mon Sep 17 00:00:00 2001 From: Harry Zhou Date: Sat, 10 Jun 2017 07:26:39 +0800 Subject: [PATCH] Elegantilize contact list 1. Split getContact into getHistoryContact and getNewContact 2. Now contacts with new messages will go on top of the list --- app/Http/Controllers/MessageController.php | 43 +++++++++---------- app/Http/routes.php | 4 +- app/MessageContact.php | 2 +- ...9_230602_create_message_contacts_table.php | 1 + public/js/message.js | 28 +++++++++--- resources/views/message/message.blade.php | 1 + 6 files changed, 49 insertions(+), 30 deletions(-) diff --git a/app/Http/Controllers/MessageController.php b/app/Http/Controllers/MessageController.php index 6d2db22..415ebc8 100644 --- a/app/Http/Controllers/MessageController.php +++ b/app/Http/Controllers/MessageController.php @@ -31,8 +31,10 @@ class MessageController extends Controller $user_id = $request->session()->get('user_id'); $contact_id = $request->contact_id; Message::where('receiver_id', $user_id)->where('sender_id', $contact_id) - ->orWhere('receiver_id', $contact_id)->where('sender_id', $user_id) ->update(['is_read' => true]); + MessageContact::where('user_id', $user_id) + ->where('contact_id', $contact_id) + ->update(['unread_count' => 0]); $messages = Message::where('receiver_id', $user_id)->where('sender_id', $contact_id) ->orWhere('receiver_id', $contact_id)->where('sender_id', $user_id) ->orderBy('id', 'desc') @@ -47,14 +49,13 @@ class MessageController extends Controller $contact_id = $request->contact_id; $messages = Message::where('is_read', false) ->where('receiver_id', $user_id)->where('sender_id', $contact_id) - ->orWhere('receiver_id', $contact_id)->where('sender_id', $user_id) - ->where('is_read', false) ->get(); Message::where('is_read', false) ->where('receiver_id', $user_id)->where('sender_id', $contact_id) - ->orWhere('receiver_id', $contact_id)->where('sender_id', $user_id) - ->where('is_read', false) ->update(['is_read' => true]); + MessageContact::where('user_id', $user_id) + ->where('contact_id', $contact_id) + ->update(['unread_count' => 0]); return json_encode($messages); } @@ -65,16 +66,6 @@ class MessageController extends Controller return $count; } - public function readMessage(Request $request, $id) - { - $data = Message::find($id); - if ($request->session()->get('user_id') != $data->receiver_id) - return json_encode(['result' => false, 'msg' => 'Auth Failure.']); - $data->is_read = true; - $data->save(); - return json_encode(['result' => true, 'msg' => 'success']); - } - public function deleteMessage(Request $request, $id) { $data = Message::find($id); @@ -110,6 +101,7 @@ class MessageController extends Controller 'contact_id' => $user_id ]); $contact->last_contact_time = time(); + $contact->unread_count += 1; $contact->save(); return json_encode(['result' => true, 'msg' => $message]); } @@ -119,7 +111,7 @@ class MessageController extends Controller return View::make('message.sendMessage'); } - public function getMessageContact(Request $request) + public function getHistoryMessageContact(Request $request) { $user_id = $request->session()->get('user_id'); $contacts = MessageContact::where('user_id', $user_id) @@ -128,12 +120,19 @@ class MessageController extends Controller $query->select('id', 'nickname'); }]) ->paginate(10); - foreach ($contacts as $c) { - $c->unread_count = Message::where('receiver_id', $user_id) - ->where('sender_id', $c->contact_id) - ->where('is_read', false) - ->count(); - } + return json_encode($contacts); + } + + public function getNewMessageContact(Request $request) + { + $user_id = $request->session()->get('user_id'); + $contacts = MessageContact::where('user_id', $user_id) + ->where('unread_count', '>', 0) + ->orderBy('last_contact_time', 'desc') + ->with(['contact' => function ($query) { + $query->select('id', 'nickname'); + }]) + ->get(); return json_encode($contacts); } diff --git a/app/Http/routes.php b/app/Http/routes.php index 38ce231..f4caab8 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -65,7 +65,8 @@ Route::group(['middleware' => ['web']],function () { Route::get('/user/fav/edit', "UserController@editFavlist"); Route::delete('/user/fav/del', "UserController@delFavlist"); - Route::get('/message/contacts', "MessageController@getMessageContact"); + Route::get('/message/getHistoryMessageContact', "MessageController@getHistoryMessageContact"); + Route::get('/message/getNewMessageContact', "MessageController@getNewMessageContact"); Route::get('/message/getHistoryMessage', "MessageController@getHistoryMessage"); Route::get('/message/getNewMessage', "MessageController@getNewMessage"); }); @@ -107,7 +108,6 @@ Route::group(['middleware' => ['web']],function () { Route::get('/test/sendmessagepage', "MessageController@sendMessagepage")->middleware('su'); Route::post('/message', "MessageController@sendMessage")->middleware('auth'); Route::get('/message/num', "MessageController@getUnreadMsgNum")->middleware('auth'); - Route::put('/message/{id}', "MessageController@readMessage")->middleware('auth'); Route::delete('/message/{id}', "MessageController@deleteMessage")->middleware('auth'); Route::get('/trans/{trans_id}', "TransactionController@showTrans")->middleware('auth'); diff --git a/app/MessageContact.php b/app/MessageContact.php index 8506429..9e04b68 100644 --- a/app/MessageContact.php +++ b/app/MessageContact.php @@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model; class MessageContact extends Model { - protected $fillable = ['user_id', 'contact_id']; + protected $fillable = ['user_id', 'contact_id', 'unread_count']; public function contact() { return $this->belongsTo('App\User', 'contact_id'); diff --git a/database/migrations/2017_06_09_230602_create_message_contacts_table.php b/database/migrations/2017_06_09_230602_create_message_contacts_table.php index 6f8acaa..f0f5c7e 100644 --- a/database/migrations/2017_06_09_230602_create_message_contacts_table.php +++ b/database/migrations/2017_06_09_230602_create_message_contacts_table.php @@ -18,6 +18,7 @@ class CreateMessageContactsTable extends Migration $table->integer('user_id'); $table->integer('contact_id'); $table->integer('last_contact_time'); + $table->integer('unread_count')->default(0); $table->timestamps(); }); } diff --git a/public/js/message.js b/public/js/message.js index f80157d..518a388 100644 --- a/public/js/message.js +++ b/public/js/message.js @@ -22,7 +22,7 @@ Vue.component('contact-list', { this.$nextTick(function () { this.$on('getContactEvent', function () { this.clearContact(); - this.getContact(); + this.getHistoryContact(); }) }) }, @@ -32,9 +32,9 @@ Vue.component('contact-list', { this.last_page = null; this.contacts = []; }, - getContact: function () { + getHistoryContact: function () { var vm = this; - axios.get('/message/contacts?page=' + (this.current_page + 1).toString()) + axios.get('/message/getHistoryMessageContact?page=' + (this.current_page + 1).toString()) .then(function (response) { vm.current_page = response.data.current_page; vm.last_page = response.data.last_page; @@ -45,6 +45,20 @@ Vue.component('contact-list', { vm.errorMessage = error; }) }, + getNewContact: function () { + var vm = this; + axios.get('/message/getNewMessageContact') + .then(function (response) { + for (var i in response.data) + { + vm.contacts = vm.contacts.filter(t => t.contact_id !== response.data[i].contact_id); + vm.contacts.unshift(response.data[i]); + } + }) + .catch(function (error) { + vm.errorMessage = error; + }) + }, loadDialog: function (id, index) { var vm = this; this.$emit('load-dialog', id); @@ -73,8 +87,7 @@ Vue.component('message-dialog', { mounted: function () { this.$nextTick(function () { this.$on('loadDialogHandler', function (id) { - this.current_page = 0; - this.last_page = null; + this.clearMessage(); this.getHistoryMessage(id); }) }) @@ -122,6 +135,11 @@ Vue.component('message-dialog', { this.contact_id = contact_id; } }, + clearMessage: function() { + this.current_page = 0; + this.last_page = null; + this.messages = []; + }, sendMessage: function () { var vm = this; vm.token = $('#token').val(); diff --git a/resources/views/message/message.blade.php b/resources/views/message/message.blade.php index e9ead0d..3d8455e 100644 --- a/resources/views/message/message.blade.php +++ b/resources/views/message/message.blade.php @@ -33,6 +33,7 @@