diff --git a/.eslintrc.json b/.eslintrc.json
index 02e51f7..e539716 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -6,26 +6,22 @@
},
"extends": [
"eslint:recommended",
- "plugin:vue/essential",
- "plugin:vue/base",
- "plugin:vue/strongly-recommended",
- "plugin:vue/recommended"
+ "plugin:vue/essential"
],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
- "ecmaVersion": 2018,
- "sourceType": "module"
+ "ecmaVersion": 2018
},
"plugins": [
"vue"
],
"rules": {
"indent": [
- "off",
- 2
+ "error",
+ 4
],
"linebreak-style": [
"error",
@@ -36,10 +32,8 @@
"single"
],
"semi": [
- "off",
- "always"
- ],
- "no-console": "off",
- "strict": "off"
+ "error",
+ "never"
+ ]
}
}
diff --git a/app/Http/Controllers/ToDoController.php b/app/Http/Controllers/ToDoController.php
index 9b3f6a6..719236d 100644
--- a/app/Http/Controllers/ToDoController.php
+++ b/app/Http/Controllers/ToDoController.php
@@ -14,6 +14,10 @@ class ToDoController extends Controller
{
$this->authorize('create', ToDoList::class);
+ $lastToDo = $toDoList->toDos()->orderBy('order', 'desc')->first();
+
+ request()['order'] = ($lastToDo) ? $lastToDo->order + 1 : 1;
+
$toDo = $toDoList->toDos()->create($this->validateData());
return (new ToDoResource($toDo))
@@ -32,10 +36,34 @@ class ToDoController extends Controller
->setStatusCode(200);
}
+ public function destroy(ToDoList $toDoList, ToDo $toDo)
+ {
+ $this->authorize('delete', $toDoList);
+
+ $toDo->delete();
+
+ return response([], 204);
+ }
+
+ public function changeOrder(ToDoList $toDoList, ToDo $toDo)
+ {
+ $this->authorize('update', $toDoList);
+
+ $toDoChanged = $toDoList->toDos()->where('order', (int) request()['new-order'])->first();
+
+ $toDoChanged->update(['order' => (int) $toDo->order]);
+ $toDo->update(['order' => (int) request()['new-order']]);
+
+ return (new ToDoResource($toDo))
+ ->response()
+ ->setStatusCode(200);
+ }
+
private function validateData()
{
return request()->validate([
'name' => 'required',
+ 'order' => 'integer|min:1|max:1000000',
]);
}
}
diff --git a/app/Http/Controllers/ToDoListController.php b/app/Http/Controllers/ToDoListController.php
index 98fa2a3..e3ad9e2 100644
--- a/app/Http/Controllers/ToDoListController.php
+++ b/app/Http/Controllers/ToDoListController.php
@@ -8,6 +8,13 @@ use Illuminate\Http\Request;
class ToDoListController extends Controller
{
+ public function index()
+ {
+ $this->authorize('viewAny', ToDoList::class);
+
+ return ToDoListResource::collection(request()->user()->toDoLists);
+ }
+
public function store()
{
$this->authorize('create', ToDoList::class);
diff --git a/app/Http/Resources/ToDo.php b/app/Http/Resources/ToDo.php
index 6341a48..0fbf4c0 100644
--- a/app/Http/Resources/ToDo.php
+++ b/app/Http/Resources/ToDo.php
@@ -21,7 +21,7 @@ class ToDo extends JsonResource
'attributes' => [
'data' => [
'name' => $this->name,
- 'order' => $this->order,
+ 'order' => (int) $this->order,
'checked_at' => optional($this->checked_at)->diffForHumans(),
'last_updated' => $this->updated_at->diffForHumans(),
]
diff --git a/app/Http/Resources/ToDoList.php b/app/Http/Resources/ToDoList.php
index 534445f..7de7c44 100644
--- a/app/Http/Resources/ToDoList.php
+++ b/app/Http/Resources/ToDoList.php
@@ -23,7 +23,7 @@ class ToDoList extends JsonResource
'data' => [
'name' => $this->name,
'to_dos' => new ToDoCollection($this->toDos),
- 'posted_by' => new UserResource($this->user),
+ 'posted_by' => new UserResource($this->author),
'last_updated' => $this->updated_at->diffForHumans(),
// 'cover_image' => new ImageResource($this->coverImage),
]
diff --git a/app/Models/ToDoList.php b/app/Models/ToDoList.php
index c258cbc..e2cbb44 100644
--- a/app/Models/ToDoList.php
+++ b/app/Models/ToDoList.php
@@ -16,7 +16,7 @@ class ToDoList extends Model
return '/to-do-lists/' . $this->id;
}
- public function users(): BelongsTo
+ public function author(): BelongsTo
{
return $this->belongsTo(User::class);
}
diff --git a/app/Models/User.php b/app/Models/User.php
index 3d8cfcd..7d0fe28 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -59,6 +59,11 @@ class User extends Authenticatable
return $this->hasMany(Memo::class);
}
+ public function toDoLists() : HasMany
+ {
+ return $this->hasMany(ToDoList::class);
+ }
+
public function images(): MorphMany
{
return $this->morphMany(Image::class, 'imageable');
@@ -83,9 +88,4 @@ class User extends Authenticatable
$userImage->path = 'images/default-cover.jpg';
});
}
-
- public function toDoLists(): HasMany
- {
- return $this->hasMany(ToDoList::class);
- }
}
diff --git a/database/factories/ToDoItemFactory.php b/database/factories/ToDoItemFactory.php
new file mode 100644
index 0000000..6a3e32a
--- /dev/null
+++ b/database/factories/ToDoItemFactory.php
@@ -0,0 +1,16 @@
+define(ToDo::class, function (Faker $faker) {
+ $toDoList = factory(\App\Models\ToDoList::class);
+ return [
+ 'to_do_list_id' => $toDoList,
+ 'name' => $faker->words(3, [false]),
+ // 'order' => $toDoList->toDos->orderBy('id', 'desc')->first()->order + 1,
+// 'checket_at' => now(),
+ ];
+});
diff --git a/database/migrations/2020_04_19_144900_create_to_do_lists_table.php b/database/migrations/2020_04_19_144900_create_to_do_lists_table.php
index dc8bd15..a76f084 100644
--- a/database/migrations/2020_04_19_144900_create_to_do_lists_table.php
+++ b/database/migrations/2020_04_19_144900_create_to_do_lists_table.php
@@ -17,6 +17,7 @@ class CreateToDoListsTable extends Migration
$table->id();
$table->unsignedBigInteger('user_id');
$table->string('name');
+ $table->integer('order')->default(1);
$table->timestamps();
});
}
diff --git a/database/migrations/2020_04_19_190733_create_to_dos_table.php b/database/migrations/2020_04_19_190733_create_to_dos_table.php
index 75061c7..caf9e56 100644
--- a/database/migrations/2020_04_19_190733_create_to_dos_table.php
+++ b/database/migrations/2020_04_19_190733_create_to_dos_table.php
@@ -17,7 +17,7 @@ class CreateToDosTable extends Migration
$table->id();
$table->unsignedBigInteger('to_do_list_id');
$table->string('name');
- $table->integer('order')->default(0);
+ $table->integer('order')->default(1);
$table->timestamp('checked_at')->nullable();
$table->timestamps();
});
diff --git a/package.json b/package.json
index 879612a..3ea767e 100644
--- a/package.json
+++ b/package.json
@@ -8,14 +8,20 @@
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
- "eslint": "./node_modules/.bin/eslint resources/assets/js/ test/ --ext .js,.vue"
+ "eslint": "./node_modules/.bin/eslint resources/js/ --ext .js,.vue",
+ "lint": "eslint --ext .js,.vue resources/js/"
},
"devDependencies": {
"axios": "^0.19",
"babel-eslint": "^10.1.0",
"cross-env": "^7.0",
"eslint": "^6.8.0",
+ "eslint-config-standard": "^14.1.1",
"eslint-loader": "^3.0.3",
+ "eslint-plugin-import": "^2.20.2",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^4.2.1",
+ "eslint-plugin-standard": "^4.0.1",
"eslint-plugin-vue": "^6.2.2",
"laravel-mix": "^5.0.1",
"laravel-mix-eslint": "^0.1.3",
diff --git a/resources/js/app.js b/resources/js/app.js
index d5a8523..4abac1b 100644
--- a/resources/js/app.js
+++ b/resources/js/app.js
@@ -2,12 +2,13 @@ import Vue from 'vue'
import router from './router'
import App from './components/App'
import store from './store'
-import SvgVue from 'svg-vue';
+import SvgVue from 'svg-vue'
-Vue.use(SvgVue);
+Vue.use(SvgVue)
-require('./bootstrap');
+require('./bootstrap')
+// eslint-disable-next-line no-unused-vars
const app = new Vue({
el: '#app',
@@ -15,4 +16,4 @@ const app = new Vue({
App
},
router, store,
-});
+})
diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js
index f5817b0..8603aa6 100644
--- a/resources/js/bootstrap.js
+++ b/resources/js/bootstrap.js
@@ -1,7 +1,5 @@
-window._ = require('lodash');
-
-window.axios = require('axios');
-
-window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
+window._ = require('lodash')
+window.axios = require('axios')
+window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'
diff --git a/resources/js/components/AlertBox.vue b/resources/js/components/AlertBox.vue
index c7b51a8..430cea1 100644
--- a/resources/js/components/AlertBox.vue
+++ b/resources/js/components/AlertBox.vue
@@ -8,19 +8,19 @@
diff --git a/resources/js/components/App.vue b/resources/js/components/App.vue
index 8a80cbe..05e6296 100644
--- a/resources/js/components/App.vue
+++ b/resources/js/components/App.vue
@@ -11,30 +11,31 @@
diff --git a/resources/js/components/Avatar.vue b/resources/js/components/Avatar.vue
index 1683f02..1511269 100644
--- a/resources/js/components/Avatar.vue
+++ b/resources/js/components/Avatar.vue
@@ -7,8 +7,8 @@
diff --git a/resources/js/components/InputField.vue b/resources/js/components/InputField.vue
index 8cc8758..bc562dd 100644
--- a/resources/js/components/InputField.vue
+++ b/resources/js/components/InputField.vue
@@ -1,68 +1,69 @@
Error Here