@@ -24,15 +24,16 @@ public final class AdminPanelUserController
2424
2525 public func renderList( _ req: Request ) throws -> Future < Response > {
2626 let config : AdminPanelConfig < U > = try req. make ( )
27- let paginator : Future < OffsetPaginator < U > > = try U . query ( on: req ) . paginate ( for : req)
28- return paginator
29- . flatMap ( to: Response . self) { paginator in
30- return try req. privateContainer
31- . make ( LeafRenderer . self )
27+ return try U . query ( on: req)
28+ . paginate ( for : req )
29+ . flatMap ( to: Response . self) { ( paginator: OffsetPaginator ) in
30+ try req
31+ . view ( )
3232 . render (
3333 config. views. adminPanelUser. index,
3434 MultipleUsers ( users: paginator. data ?? [ ] ) ,
35- userInfo: try paginator. userInfo ( )
35+ userInfo: try paginator. userInfo ( ) ,
36+ on: req
3637 )
3738 . encode ( for: req)
3839 }
@@ -42,29 +43,25 @@ public final class AdminPanelUserController
4243
4344 public func renderCreate( _ req: Request ) throws -> Future < Response > {
4445 let config : AdminPanelConfig < U > = try req. make ( )
45- try req. populateFields ( U . self)
46- return try req. privateContainer
47- . make ( LeafRenderer . self)
48- . render ( config. views. adminPanelUser. editAndCreate)
46+ try req. addFields ( forType: U . self)
47+
48+ return try req
49+ . view ( )
50+ . render ( config. views. adminPanelUser. editAndCreate, on: req)
4951 . encode ( for: req)
5052 }
5153
5254 public func create( _ req: Request ) throws -> Future < Response > {
5355 let config : AdminPanelConfig < U > = try req. make ( )
54- let submission = try req. content. decode ( U . Submission. self)
5556
56- return submission
57- . createValid ( on: req)
57+ return U
58+ . create ( on: req)
5859 . save ( on: req)
5960 . flatTry { user in
60- return submission. flatTry { submission in
61- return try user. didCreate ( with: submission, on: req)
62- }
63- . transform ( to: ( ) )
61+ try user. didCreate ( on: req)
6462 }
65- . map ( to: Response . self) { user in
66- req
67- . redirect ( to: " /admin/users " )
63+ . map { user in
64+ req. redirect ( to: config. endpoints. adminPanelUserBasePath)
6865 . flash (
6966 . success,
7067 " The user with email ' \( user [ keyPath: U . usernameKey] ) ' " +
@@ -73,58 +70,57 @@ public final class AdminPanelUserController
7370 }
7471 . catchFlatMap ( handleValidationError (
7572 path: config. views. adminPanelUser. editAndCreate,
76- on: req)
77- )
73+ on: req
74+ ) )
7875 }
7976
8077 // MARK: Edit user
8178
8279 public func renderEditMe( _ req: Request ) throws -> Future < Response > {
83- let user = try req. requireAuthenticated ( U . self)
84- return try renderEdit ( req, user: Future . transform ( to: user, on: req) )
80+ return try renderEdit ( req, user: try req. requireAuthenticated ( U . self) )
8581 }
8682
8783 public func renderEditUser( _ req: Request ) throws -> Future < Response > {
88- let user = try req. parameters. next ( U . self)
89- return try renderEdit ( req, user: user)
84+ return try req. parameters
85+ . next ( U . self)
86+ . flatMap { user in
87+ try self . renderEdit ( req, user: user)
88+ }
9089 }
9190
92- private func renderEdit( _ req: Request , user: Future < U > ) throws -> Future < Response > {
91+ private func renderEdit( _ req: Request , user: U ) throws -> Future < Response > {
9392 let adminPanelUser : U = try req. requireAuthenticated ( )
93+ try adminPanelUser. requireRole ( user. role) // A user may not edit a user of a higher role
9494
95+ try req. addFields ( given: user)
9596 let config : AdminPanelConfig < U > = try req. make ( )
96- return user
97- . try { user in
98- // A user cannot edit another user of a higher role
99- try adminPanelUser. requireRole ( user. role)
100- }
101- . populateFields ( on: req)
102- . flatMap { user in
103- try req. privateContainer
104- . make ( LeafRenderer . self)
105- . render ( config. views. adminPanelUser. editAndCreate, SingleUser ( user: user) )
106- . encode ( for: req)
107- }
97+
98+ return try req
99+ . view ( )
100+ . render ( config. views. adminPanelUser. editAndCreate, SingleUser ( user: user) , on: req)
101+ . encode ( for: req)
108102 }
109103
110104 public func editMe( _ req: Request ) throws -> Future < Response > {
111105 let user = try req. requireAuthenticated ( U . self)
112- return try edit ( req, user: Future . transform ( to : user, on : req ) )
106+ return try edit ( req, user: user)
113107 }
114108
115109 public func editUser( _ req: Request ) throws -> Future < Response > {
116- let user = try req. parameters. next ( U . self)
117- return try edit ( req, user: user)
110+ return try req. parameters. next ( U . self)
111+ . flatMap { user in
112+ try self . edit ( req, user: user)
113+ }
118114 }
119115
120- private func edit( _ req: Request , user: Future < U > ) throws -> Future < Response > {
116+ private func edit( _ req: Request , user: U ) throws -> Future < Response > {
121117 let config : AdminPanelConfig < U > = try req. make ( )
118+
122119 return user
123- . updateValid ( on: req)
120+ . applyUpdate ( on: req)
124121 . save ( on: req)
125122 . map ( to: Response . self) { user in
126- req
127- . redirect ( to: " /admin/users " )
123+ req. redirect ( to: config. endpoints. adminPanelUserBasePath)
128124 . flash (
129125 . success,
130126 " The user with username ' \( user [ keyPath: U . usernameKey] ) ' " +
@@ -133,27 +129,29 @@ public final class AdminPanelUserController
133129 }
134130 . catchFlatMap ( handleValidationError (
135131 path: config. views. adminPanelUser. editAndCreate,
136- context: user . map ( to : SingleUser . self ) { . init ( user: $0 ) } ,
137- on: req)
138- )
132+ context: SingleUser ( user: user ) ,
133+ on: req
134+ ) )
139135 }
140136
141137 // MARK: Delete user
142138
143139 public func delete( _ req: Request ) throws -> Future < Response > {
144140 let auth = try req. requireAuthenticated ( U . self)
145141 let user = try req. parameters. next ( U . self)
146- return user. delete ( on: req)
142+ let config : AdminPanelConfig < U > = try req. make ( )
143+
144+ return user
145+ . delete ( on: req)
147146 . map ( to: Response . self) { user in
148147 guard auth [ keyPath: U . usernameKey] != user [ keyPath: U . usernameKey] else {
149148 return req
150- . redirect ( to: " /admin/login " )
149+ . redirect ( to: config . endpoints . adminPanelUserBasePath )
151150 . flash ( . success, " Your user has now been deleted. " )
152-
153151 }
154152
155153 return req
156- . redirect ( to: " /admin/users " )
154+ . redirect ( to: config . endpoints . adminPanelUserBasePath )
157155 . flash (
158156 . success,
159157 " The user with username ' \( user [ keyPath: U . usernameKey] ) ' " +
0 commit comments