@@ -52,27 +52,27 @@ let methodNotAllowed (env: OwinEnv) =
52
52
env.[ Constants.responseReasonPhrase] <- " Method Not Allowed"
53
53
async.Return()
54
54
55
- let makeItemUri env index =
55
+ let private makeItemUri env index =
56
56
let environ = Environment.toEnvironment env
57
57
let baseUri = Uri( environ.GetBaseUri() .Value)
58
58
if environ.RequestPathBase = " /" then
59
59
Uri( baseUri, sprintf " /%i " index)
60
60
else
61
61
Uri( baseUri, sprintf " %s /%i " environ.RequestPathBase index)
62
62
63
+ let private makeTodo env ( todo : NewTodo ) =
64
+ { Url = makeItemUri env todo.Id
65
+ Title = todo.Title
66
+ Completed = todo.Completed
67
+ Order = todo.Order }
68
+
63
69
(**
64
70
* Root resource handlers
65
71
*)
66
72
67
73
let getTodos ( env : OwinEnv ) = async {
68
74
let! todos = store.GetAll()
69
- let todos ' =
70
- todos
71
- |> Array.map ( fun x ->
72
- { Url = makeItemUri env x.Id
73
- Title = x.Title
74
- Completed = x.Completed
75
- Order = x.Order })
75
+ let todos ' = todos |> Array.map ( makeTodo env)
76
76
let result = serialize todos'
77
77
let stream : Stream = unbox env.[ Constants.responseBody]
78
78
do ! stream.AsyncWrite( result, 0 , result.Length) }
@@ -87,11 +87,7 @@ let postTodo (env: OwinEnv) = async {
87
87
let! index = store.Post newTodo
88
88
89
89
// Return the new todo item
90
- let todo =
91
- { Url = makeItemUri env index
92
- Title = newTodo.Title
93
- Completed = newTodo.Completed
94
- Order = newTodo.Order }
90
+ let todo = makeTodo env { newTodo with Id = index }
95
91
env.[ Constants.responseStatusCode] <- 201
96
92
env.[ Constants.responseReasonPhrase] <- " Created"
97
93
let headers : OwinHeaders = unbox env.[ Constants.responseHeaders]
@@ -115,11 +111,7 @@ let getTodo index (env: OwinEnv) = async {
115
111
let! todo = store.Get index
116
112
match todo with
117
113
| Some todo ->
118
- let todo ' =
119
- { Url = makeItemUri env index
120
- Title = todo.Title
121
- Completed = todo.Completed
122
- Order = todo.Order }
114
+ let todo ' = makeTodo env todo
123
115
let result = serialize todo'
124
116
let stream : Stream = unbox env.[ Constants.responseBody]
125
117
do ! stream.AsyncWrite( result, 0 , result.Length)
@@ -137,11 +129,7 @@ let patchTodo index (env: OwinEnv) = async {
137
129
match newTodo with
138
130
| Some newTodo ->
139
131
// Return the new todo item
140
- let todo =
141
- { Url = makeItemUri env index
142
- Title = newTodo.Title
143
- Completed = newTodo.Completed
144
- Order = newTodo.Order }
132
+ let todo = makeTodo env newTodo
145
133
env.[ Constants.responseStatusCode] <- 200
146
134
env.[ Constants.responseReasonPhrase] <- " OK"
147
135
let result = serialize todo
0 commit comments