Skip to content

Commit fd57b08

Browse files
committed
Refactor a bit
1 parent 0f8b0b1 commit fd57b08

File tree

64 files changed

+438
-382
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+438
-382
lines changed

Sources/Website/Controllers/Areas/Administration/ArticleAdminController.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ struct ArticleAdminController {
99
func getIndex(_ request: Request) async throws -> View {
1010

1111
let page: Int = request.query["page"] ?? 1
12+
let limit: Int = request.query["limit"] ?? 10
1213

13-
let pagination = try await request.unit.article.find()
14+
guard let pagination = try await request.unit.article.find()
1415
.map(ArticleModel.Output.init)
15-
.page(page: page, per: 10)
16+
.page(at: page, per: limit) else {
17+
18+
throw Abort(.notFound)
19+
}
1620

1721
let viewModel = ArticleAdminPageModel.IndexView(pagination: pagination)
1822

Sources/Website/Controllers/Areas/Administration/AssetAdminController.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ struct AssetAdminController {
99
func getIndex(_ request: Request) async throws -> View {
1010

1111
let page: Int = request.query["page"] ?? 1
12+
let limit: Int = request.query["limit"] ?? 10
1213

13-
let pagination = try await request.unit.asset.find()
14+
guard let pagination = try await request.unit.asset.find()
1415
.map(AssetModel.Output.init)
15-
.page(page: page, per: 10)
16+
.page(at: page, per: limit) else {
17+
18+
throw Abort(.notFound)
19+
}
1620

1721
let viewModel = AssetAdminPageModel.IndexView(pagination: pagination)
1822

Sources/Website/Controllers/Areas/Administration/CommentAdminController.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ struct CommentAdminController {
99
func getIndex(_ request: Request) async throws -> View {
1010

1111
let page: Int = request.query["page"] ?? 1
12+
let limit: Int = request.query["limit"] ?? 10
1213

13-
let pagination = try await request.unit.comment.find()
14+
guard let pagination = try await request.unit.comment.find()
1415
.map(CommentModel.Output.init)
15-
.page(page: page, per: 10)
16+
.page(at: page, per: limit) else {
17+
18+
throw Abort(.notFound)
19+
}
1620

1721
let viewModel = CommentAdminPageModel.IndexView(pagination: pagination)
1822

Sources/Website/Controllers/Areas/Administration/FeedAdminController.swift renamed to Sources/Website/Controllers/Areas/Administration/PostAdminController.swift

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,48 @@
11
import HTMLKitVapor
22
import Vapor
33

4-
// [/area/admin/feed]
5-
struct FeedAdminController {
4+
// [/area/admin/post]
5+
struct PostAdminController {
66

77
// [/]
88
@Sendable
99
func getIndex(_ request: Request) async throws -> View {
1010

1111
let page: Int = request.query["page"] ?? 1
12+
let limit: Int = request.query["limit"] ?? 10
1213

13-
let pagination = try await request.unit.feed.find()
14-
.map(FeedModel.Output.init)
15-
.page(page: page, per: 10)
14+
guard let pagination = try await request.unit.post.find()
15+
.map(PostModel.Output.init)
16+
.page(at: page, per: limit) else {
17+
18+
throw Abort(.badRequest)
19+
}
1620

17-
let viewModel = FeedAdminPageModel.IndexView(pagination: pagination)
21+
let viewModel = PostAdminPageModel.IndexView(pagination: pagination)
1822

19-
return try await request.htmlkit.render(FeedAdminPage.IndexView(viewModel: viewModel))
23+
return try await request.htmlkit.render(PostAdminPage.IndexView(viewModel: viewModel))
2024
}
2125

2226
// [/create]
2327
@Sendable
2428
func getCreate(_ request: Request) async throws -> View {
2529

26-
let viewModel = FeedAdminPageModel.CreateView()
30+
let viewModel = PostAdminPageModel.CreateView()
2731

28-
return try await request.htmlkit.render(FeedAdminPage.CreateView(viewModel: viewModel))
32+
return try await request.htmlkit.render(PostAdminPage.CreateView(viewModel: viewModel))
2933
}
3034

3135
// [/create/:model]
3236
@Sendable
3337
func postCreate(_ request: Request) async throws -> Response {
3438

35-
try FeedModel.Input.validate(content: request)
39+
try PostModel.Input.validate(content: request)
3640

37-
let model = try request.content.decode(FeedModel.Input.self)
41+
let model = try request.content.decode(PostModel.Input.self)
3842

39-
try await request.unit.feed.insert(entity: FeedEntity(input: model))
43+
try await request.unit.post.insert(entity: PostEntity(input: model))
4044

41-
return request.redirect(to: "/area/admin/feed")
45+
return request.redirect(to: "/area/admin/posts")
4246
}
4347

4448
// [/:id/edit]
@@ -49,13 +53,13 @@ struct FeedAdminController {
4953
throw Abort(.badRequest)
5054
}
5155

52-
guard let entity = try await request.unit.feed.find(id: id) else {
56+
guard let entity = try await request.unit.post.find(id: id) else {
5357
throw Abort(.notFound)
5458
}
5559

56-
let viewModel = FeedAdminPageModel.EditView(feed: FeedModel.Output(entity: entity))
60+
let viewModel = PostAdminPageModel.EditView(post: PostModel.Output(entity: entity))
5761

58-
return try await request.htmlkit.render(FeedAdminPage.EditView(viewModel: viewModel))
62+
return try await request.htmlkit.render(PostAdminPage.EditView(viewModel: viewModel))
5963
}
6064

6165
// [/:id/edit/:model]
@@ -66,13 +70,13 @@ struct FeedAdminController {
6670
throw Abort(.badRequest)
6771
}
6872

69-
try FeedModel.Input.validate(content: request)
73+
try PostModel.Input.validate(content: request)
7074

71-
let model = try request.content.decode(FeedModel.Input.self)
75+
let model = try request.content.decode(PostModel.Input.self)
7276

73-
try await request.unit.feed.update(entity: FeedEntity(input: model), on: id)
77+
try await request.unit.post.update(entity: PostEntity(input: model), on: id)
7478

75-
return request.redirect(to: "/area/admin/feed")
79+
return request.redirect(to: "/area/admin/posts")
7680
}
7781

7882
// [/:id/delete]
@@ -83,17 +87,17 @@ struct FeedAdminController {
8387
throw Abort(.badRequest)
8488
}
8589

86-
try await request.unit.feed.delete(id: id)
90+
try await request.unit.post.delete(id: id)
8791

88-
return request.redirect(to: "/area/admin/feed")
92+
return request.redirect(to: "/area/admin/posts")
8993
}
9094
}
9195

92-
extension FeedAdminController: RouteCollection {
96+
extension PostAdminController: RouteCollection {
9397

9498
func boot(routes: RoutesBuilder) throws {
9599

96-
routes.group("feed") { routes in
100+
routes.group("posts") { routes in
97101

98102
routes.get("", use: self.getIndex)
99103
routes.get("create", use: self.getCreate)

Sources/Website/Controllers/Areas/Administration/ProjectAdminController.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ struct ProjectAdminController {
99
func getIndex(_ request: Request) async throws -> View {
1010

1111
let page: Int = request.query["page"] ?? 1
12+
let limit: Int = request.query["limit"] ?? 10
1213

13-
let pagination = try await request.unit.project.find()
14+
guard let pagination = try await request.unit.project.find()
1415
.map(ProjectModel.Output.init)
15-
.page(page: page, per: 10)
16+
.page(at: page, per: limit) else {
17+
18+
throw Abort(.notFound)
19+
}
1620

1721
let viewModel = ProjectAdminPageModel.IndexView(pagination: pagination)
1822

Sources/Website/Controllers/Areas/Administration/ReportAdminController.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ struct ReportAdminController {
88
@Sendable
99
func getIndex(_ request: Request) async throws -> View {
1010

11-
let projects = try await request.unit.project.group(column: "category")
11+
let reports = try await request.unit.report.find()
1212

13-
let viewModel = ReportAdminPageModel.IndexView(projects: projects)
13+
let models = reports.map(ReportModel.Output.init)
14+
15+
let viewModel = ReportAdminPageModel.IndexView(reports: models)
1416

1517
return try await request.htmlkit.render(ReportAdminPage.IndexView(viewModel: viewModel))
1618
}

Sources/Website/Controllers/Areas/Administration/SettingsAdminController.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import HTMLKitVapor
22
import Vapor
33

4-
// [/area/admin/setting]
4+
// [/area/admin/settings]
55
struct SettingAdminController {
66

77
// [/]
@@ -35,15 +35,15 @@ struct SettingAdminController {
3535
try await request.unit.setting.insert(entity: SettingEntity(input: input))
3636
}
3737

38-
return request.redirect(to: "/area/admin/setting")
38+
return request.redirect(to: "/area/admin/settings")
3939
}
4040
}
4141

4242
extension SettingAdminController: RouteCollection {
4343

4444
func boot(routes: RoutesBuilder) throws {
4545

46-
routes.group("setting") { routes in
46+
routes.group("settings") { routes in
4747

4848
routes.get("", use: self.getEdit)
4949
routes.post("", use: self.postEdit)

Sources/Website/Controllers/Areas/Administration/UserAdminController.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ struct UserAdminController {
99
func getIndex(_ request: Request) async throws -> View {
1010

1111
let page: Int = request.query["page"] ?? 1
12+
let limit: Int = request.query["limit"] ?? 10
1213

13-
let pagination = try await request.unit.user.find()
14+
guard let pagination = try await request.unit.user.find()
1415
.map(UserModel.Output.init)
15-
.page(page: page, per: 10)
16+
.page(at: page, per: limit) else {
17+
18+
throw Abort(.badRequest)
19+
}
1620

1721
let viewModel = UserAdminPageModel.IndexView(pagination: pagination)
1822

Sources/Website/Controllers/Areas/LoginAreaController.swift

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,18 @@ struct LoginAreaController {
2626
@Sendable
2727
func postLogin(_ request: Request) async throws -> Response {
2828

29+
guard let nonce = request.application.htmlkit.environment.retrieve(for: \Nonce.self) as? Nonce else {
30+
throw Abort(.internalServerError)
31+
}
32+
2933
try LoginModel.Input.validate(content: request)
3034

3135
let login = try request.content.decode(LoginModel.Input.self)
3236

33-
guard let nonce = request.application.htmlkit.environment.retrieve(for: \Nonce.self) as? Nonce else {
34-
throw Abort(.internalServerError)
37+
guard nonce.verify(nonce: login.nonce) else {
38+
return request.redirect(to: "/area/login/login")
3539
}
3640

37-
try nonce.verify(nonce: login.nonce)
38-
3941
guard let user = try await request.unit.user.find(email: login.email) else {
4042
return request.redirect(to: "/area/login/login")
4143
}
@@ -134,16 +136,18 @@ struct LoginAreaController {
134136
throw Abort(.badRequest)
135137
}
136138

139+
guard let nonce = request.application.htmlkit.environment.retrieve(for: \Nonce.self) as? Nonce else {
140+
throw Abort(.internalServerError)
141+
}
142+
137143
try ResetModel.Input.validate(content: request)
138144

139145
let reset = try request.content.decode(ResetModel.Input.self)
140146

141-
guard let nonce = request.application.htmlkit.environment.retrieve(for: \Nonce.self) as? Nonce else {
142-
throw Abort(.internalServerError)
147+
guard nonce.verify(nonce: reset.nonce) else {
148+
return request.redirect(to: "/area/login/\(id)/register")
143149
}
144150

145-
try nonce.verify(nonce: reset.nonce)
146-
147151
let digest = try await request.password.async.hash(reset.password)
148152

149153
try await request.unit.account.insert(entity: AccountEntity(password: digest, status: "unlocked", attempt: 0, userId: id))
@@ -188,16 +192,18 @@ struct LoginAreaController {
188192
throw Abort(.badRequest)
189193
}
190194

195+
guard let nonce = request.application.htmlkit.environment.retrieve(for: \Nonce.self) as? Nonce else {
196+
throw Abort(.internalServerError)
197+
}
198+
191199
try ResetModel.Input.validate(content: request)
192200

193201
let reset = try request.content.decode(ResetModel.Input.self)
194202

195-
guard let nonce = request.application.htmlkit.environment.retrieve(for: \Nonce.self) as? Nonce else {
196-
throw Abort(.internalServerError)
203+
guard nonce.verify(nonce: reset.nonce) else {
204+
throw Abort(.badRequest)
197205
}
198206

199-
try nonce.verify(nonce: reset.nonce)
200-
201207
guard let user = try await request.unit.user.find(id: id) else {
202208
throw Abort(.notFound)
203209
}

Sources/Website/Controllers/ArticlesPageController.swift renamed to Sources/Website/Controllers/BlogPageController.swift

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
11
import HTMLKitVapor
22
import Vapor
33

4-
// [/articles]
5-
struct ArticlesPageController {
4+
// [/blog]
5+
struct BlogPageController {
66

77
// [/]
88
@Sendable
99
func getIndex(_ request: Request) async throws -> View {
1010

1111
let page: Int = request.query["page"] ?? 1
12+
let limit: Int = request.query["limit"] ?? 10
1213

13-
let articles = try await request.unit.article.find(status: "published")
14+
guard let pagination = try await request.unit.article.find(status: "published")
1415
.map(ArticleModel.Output.init)
15-
.page(page: page, per: 10)
16-
16+
.page(at: page, per: limit) else {
17+
18+
throw Abort(.notFound)
19+
}
1720

18-
let viewModel = ArticlePageModel.IndexView(pagination: articles)
21+
let viewModel = BlogPageModel.IndexView(pagination: pagination)
1922

20-
return try await request.htmlkit.render(ArticlePage.IndexView(viewModel: viewModel))
23+
return try await request.htmlkit.render(BlogPage.IndexView(viewModel: viewModel))
2124
}
2225

2326
// [/:slug]
@@ -35,9 +38,9 @@ struct ArticlesPageController {
3538
// Create form token and store it to verify it in the post request
3639
request.application.htmlkit.environment.upsert(Nonce(), for: \Nonce.self)
3740

38-
let viewModel = ArticlePageModel.ShowView(article: ArticleModel.Output(entity: entity))
41+
let viewModel = BlogPageModel.ShowView(article: ArticleModel.Output(entity: entity))
3942

40-
return try await request.htmlkit.render(ArticlePage.ShowView(viewModel: viewModel))
43+
return try await request.htmlkit.render(BlogPage.ShowView(viewModel: viewModel))
4144
}
4245

4346
// [/:slug/:modal]
@@ -52,28 +55,30 @@ struct ArticlesPageController {
5255
throw Abort(.notFound)
5356
}
5457

55-
try CommentModel.Input.Public.validate(content: request)
56-
57-
var model = try request.content.decode(CommentModel.Input.Public.self)
58-
5958
guard let nonce = request.application.htmlkit.environment.retrieve(for: \Nonce.self) as? Nonce else {
6059
throw Abort(.internalServerError)
6160
}
6261

63-
try nonce.verify(nonce: model.nonce)
62+
try CommentModel.Input.Public.validate(content: request)
63+
64+
let model = try request.content.decode(CommentModel.Input.Public.self)
65+
66+
guard nonce.verify(nonce: model.nonce) else {
67+
throw Abort(.badRequest)
68+
}
6469

6570
try await request.unit.comment.insert(entity: CommentEntity(input: model, on: entity.requireID()))
6671

67-
return request.redirect(to: "/articles/\(slug)")
72+
return request.redirect(to: "/blog/\(slug)")
6873
}
6974

7075
}
7176

72-
extension ArticlesPageController: RouteCollection {
77+
extension BlogPageController: RouteCollection {
7378

7479
func boot(routes: RoutesBuilder) throws {
7580

76-
routes.group("articles") { routes in
81+
routes.group("blog") { routes in
7782

7883
routes.get("", use: self.getIndex)
7984
routes.get(":slug", use: self.getShow)

0 commit comments

Comments
 (0)