@@ -2,17 +2,22 @@ const shortid = require('shortid');
2
2
3
3
module . exports = ( ) => {
4
4
let todos = [ ] ;
5
+ let users = [ ] ;
5
6
6
7
const getTodos = filterFn => ( filterFn ? filterFn ( todos ) : todos ) ;
7
8
9
+ const getUserTodos = ( userId , filterFn ) =>
10
+ getTodos ( filterFn ) . filter ( todo => todo . userId === userId ) ;
11
+
8
12
const setTodos = initial => ( todos = initial ) ;
9
13
10
- const getTodoById = id => todos . find ( todo => todo . id === id ) ;
14
+ const getTodoById = ( id , userId ) => todos . find ( todo => todo . id === id && todo . userId === userId ) ;
11
15
12
- const addTodo = title => {
16
+ const addTodo = ( title , userId ) => {
13
17
const todo = {
14
18
id : shortid . generate ( ) ,
15
19
title,
20
+ userId,
16
21
completed : false
17
22
} ;
18
23
@@ -21,22 +26,44 @@ module.exports = () => {
21
26
} ;
22
27
23
28
const patchTodo = ( patchId , newProps ) =>
24
- todos . map ( todo =>
25
- todo . id === patchId ? Object . assign ( todo , newProps ) : todo
26
- ) ;
29
+ ( todos = todos . map ( todo => ( todo . id === patchId ? Object . assign ( todo , newProps ) : todo ) ) ) ;
30
+
31
+ const deleteTodo = deleteId => ( todos = todos . filter ( todo => todo . id !== deleteId ) ) ;
27
32
28
- const deleteTodo = deleteId =>
29
- ( todos = todos . filter ( todo => todo . id !== deleteId ) ) ;
33
+ const clearUserTodos = userId => {
34
+ todos = todos . filter ( todo => todo . userId !== userId ) ;
35
+ return [ ] ;
36
+ } ;
37
+
38
+ const clearUserCompletedTodos = userId => {
39
+ todos = todos . filter ( todo => ( ! todo . completed && todo . userId === userId ) || todo . userId !== userId ) ;
40
+ return todos . filter ( todo => todo . userId === userId ) ;
41
+ } ;
30
42
31
- const clearTodos = filterFn => ( filterFn ? filterFn ( todos ) : [ ] ) ;
43
+ const getUsers = ( ) => users ;
44
+
45
+ const setUsers = initial => ( users = initial ) ;
46
+
47
+ const getUserById = id => users . find ( user => user . id === id ) ;
48
+
49
+ const authenticateUser = ( username , password ) => {
50
+ const user = users . find ( user => user . username === username && user . password === password ) ;
51
+ return Object . assign ( { } , user , { password : undefined } ) ;
52
+ } ;
32
53
33
54
return {
34
55
getTodos,
56
+ getUserTodos,
35
57
setTodos,
36
58
getTodoById,
37
59
addTodo,
38
60
patchTodo,
39
61
deleteTodo,
40
- clearTodos
62
+ clearUserTodos,
63
+ clearUserCompletedTodos,
64
+ getUsers,
65
+ setUsers,
66
+ getUserById,
67
+ authenticateUser
41
68
} ;
42
69
} ;
0 commit comments