Skip to content

Commit 6f5547d

Browse files
committed
Chapter 12 finished
1 parent 92eb588 commit 6f5547d

File tree

8 files changed

+65
-36
lines changed

8 files changed

+65
-36
lines changed

Chapter 12/myProject/Sources/App/Modules/Admin/Controllers/AdminController.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,17 @@ protocol AdminController: AdminListController,
1313
AdminUpdateController,
1414
AdminDeleteController
1515
{
16-
16+
func setupRoutes(_ routes: RoutesBuilder)
1717
}
1818

1919
extension AdminController {
2020

21+
func setupRoutes(_ routes: RoutesBuilder) {
22+
setupListRoutes(routes)
23+
setupDetailRoutes(routes)
24+
setupCreateRoutes(routes)
25+
setupUpdateRoutes(routes)
26+
setupDeleteRoutes(routes)
27+
}
2128
}
2229

Chapter 12/myProject/Sources/App/Modules/Admin/Controllers/AdminCreateController.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ protocol AdminCreateController: CreateController {
1515
func createAction(_ req: Request) async throws -> Response
1616
func createContext(_ req: Request, _ editor: CreateModelEditor) -> AdminEditorPageContext
1717
func createBreadcrumbs(_ req: Request) -> [LinkContext]
18+
func setupCreateRoutes(_ routes: RoutesBuilder)
1819
}
1920

2021
extension AdminCreateController {
@@ -66,4 +67,10 @@ extension AdminCreateController {
6667
LinkContext(label: Self.modelName.plural.capitalized, dropLast: 1),
6768
]
6869
}
70+
71+
func setupCreateRoutes(_ routes: RoutesBuilder) {
72+
let baseRoutes = getBaseRoutes(routes)
73+
baseRoutes.get("create", use: createView)
74+
baseRoutes.post("create", use: createAction)
75+
}
6976
}

Chapter 12/myProject/Sources/App/Modules/Admin/Controllers/AdminDeleteController.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ protocol AdminDeleteController: DeleteController {
2424
func deleteTemplate(_ req: Request, _ model: DatabaseModel, _ form: DeleteForm) -> TemplateRepresentable
2525
func deleteInfo(_ model: DatabaseModel) -> String
2626
func deleteContext(_ req: Request, _ model: DatabaseModel, _ form: DeleteForm) -> AdminDeletePageContext
27+
func setupDeleteRoutes(_ routes: RoutesBuilder)
2728
}
2829

2930
extension AdminDeleteController {
@@ -55,5 +56,14 @@ extension AdminDeleteController {
5556
type: "model",
5657
form: form.getContext(req))
5758
}
59+
60+
func setupDeleteRoutes(_ routes: RoutesBuilder) {
61+
let baseRoutes = getBaseRoutes(routes)
62+
63+
let existingModelRoutes = baseRoutes.grouped(ApiModel.pathIdComponent)
64+
65+
existingModelRoutes.get("delete", use: deleteView)
66+
existingModelRoutes.post("delete", use: deleteAction)
67+
}
5868
}
5969

Chapter 12/myProject/Sources/App/Modules/Admin/Controllers/AdminDetailController.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ protocol AdminDetailController: DetailController {
1515
func detailContext(_ req: Request, _ model: DatabaseModel) -> AdminDetailPageContext
1616
func detailBreadcrumbs(_ req: Request, _ model: DatabaseModel) -> [LinkContext]
1717
func detailNavigation(_ req: Request, _ model: DatabaseModel) -> [LinkContext]
18+
func setupDetailRoutes(_ routes: RoutesBuilder)
1819
}
1920

2021
extension AdminDetailController {
@@ -51,4 +52,12 @@ extension AdminDetailController {
5152
LinkContext(label: "Update", path: "update"),
5253
]
5354
}
55+
56+
func setupDetailRoutes(_ routes: RoutesBuilder) {
57+
let baseRoutes = getBaseRoutes(routes)
58+
59+
let existingModelRoutes = baseRoutes.grouped(ApiModel.pathIdComponent)
60+
61+
existingModelRoutes.get(use: detailView)
62+
}
5463
}

Chapter 12/myProject/Sources/App/Modules/Admin/Controllers/AdminListController.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ protocol AdminListController: ListController {
1717
func listBreadcrumbs(_ req: Request) -> [LinkContext]
1818
func listContext(_ req: Request, _ list: [DatabaseModel]) -> AdminListPageContext
1919
func listTemplate(_ req: Request, _ list: [DatabaseModel]) -> TemplateRepresentable
20+
func setupListRoutes(_ routes: RoutesBuilder)
2021
}
2122

2223
extension AdminListController {
@@ -57,4 +58,10 @@ extension AdminListController {
5758
func listTemplate(_ req: Request, _ list: [DatabaseModel]) -> TemplateRepresentable {
5859
AdminListPageTemplate(listContext(req, list))
5960
}
61+
62+
func setupListRoutes(_ routes: RoutesBuilder) {
63+
let baseRoutes = getBaseRoutes(routes)
64+
65+
baseRoutes.get(use: listView)
66+
}
6067
}

Chapter 12/myProject/Sources/App/Modules/Admin/Controllers/AdminUpdateController.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ protocol AdminUpdateController: UpdateController {
1717
func updateContext(_ req: Request, _ editor: UpdateModelEditor) async -> AdminEditorPageContext
1818
func updateBreadcrumbs(_ req: Request, _ model: DatabaseModel) -> [LinkContext]
1919
func updateNavigation(_ req: Request, _ model: DatabaseModel) -> [LinkContext]
20+
func setupUpdateRoutes(_ routes: RoutesBuilder)
2021
}
2122

2223
extension AdminUpdateController {
@@ -78,4 +79,12 @@ extension AdminUpdateController {
7879
LinkContext(label: "Details", dropLast: 1),
7980
]
8081
}
82+
func setupUpdateRoutes(_ routes: RoutesBuilder) {
83+
let baseRoutes = getBaseRoutes(routes)
84+
85+
let existingModelRoutes = baseRoutes.grouped(ApiModel.pathIdComponent)
86+
87+
existingModelRoutes.get("update", use: updateView)
88+
existingModelRoutes.post("update", use: updateAction)
89+
}
8190
}

Chapter 12/myProject/Sources/App/Modules/Blog/BlogRouter.swift

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,49 +9,27 @@ import Vapor
99

1010
struct BlogRouter: RouteCollection {
1111

12-
let controller = BlogFrontendController()
12+
let frontendController = BlogFrontendController()
13+
1314
let postAdminController = BlogPostAdminController()
15+
let postApiController = BlogPostApiController()
16+
1417
let categoryAdminController = BlogCategoryAdminController()
1518
let categoryApiController = BlogCategoryApiController()
1619

1720
func boot(routes: RoutesBuilder) throws {
18-
routes.get("blog", use: controller.blogView)
19-
routes.get(.anything, use: controller.postView)
21+
routes.get("blog", use: frontendController.blogView)
22+
routes.get(.anything, use: frontendController.postView)
2023

21-
let blog = routes
24+
let admin = routes
2225
.grouped(AuthenticatedUser.redirectMiddleware(path: "/"))
23-
.grouped("admin", "blog")
26+
.grouped("admin")
2427

25-
let categories = blog.grouped("categories")
26-
categories.get(use: categoryAdminController.listView)
27-
categories.get("create", use: categoryAdminController.createView)
28-
categories.post("create", use: categoryAdminController.createAction)
29-
let categoryId = categories.grouped(":categoryId")
30-
categoryId.get(use: categoryAdminController.detailView)
31-
categoryId.get("update", use: categoryAdminController.updateView)
32-
categoryId.post("update", use: categoryAdminController.updateAction)
33-
categoryId.get("delete", use: categoryAdminController.deleteView)
34-
categoryId.post("delete", use: categoryAdminController.deleteAction)
35-
36-
let posts = blog.grouped("posts")
37-
posts.get(use: postAdminController.listView)
38-
let postId = posts.grouped(":postId")
39-
postId.get(use: postAdminController.detailView)
40-
posts.get("create", use: postAdminController.createView)
41-
posts.post("create", use: postAdminController.createAction)
42-
postId.get("update", use: postAdminController.updateView)
43-
postId.post("update", use: postAdminController.updateAction)
44-
postId.get("delete", use: postAdminController.deleteView)
45-
postId.post("delete", use: postAdminController.deleteAction)
28+
postAdminController.setupRoutes(admin)
29+
categoryAdminController.setupRoutes(admin)
4630

47-
let blogApi = routes.grouped("api", "blog")
48-
let categoriesApi = blogApi.grouped("categories")
49-
categoriesApi.get(use: categoryApiController.listApi)
50-
let categoryApiId = categoriesApi.grouped(":categoryId")
51-
categoryApiId.get(use: categoryApiController.detailApi)
52-
categoriesApi.post(use: categoryApiController.createApi)
53-
categoryApiId.put(use: categoryApiController.updateApi)
54-
categoryApiId.patch(use: categoryApiController.patchApi)
55-
categoryApiId.delete(use: categoryApiController.deleteApi)
31+
let api = routes.grouped("api")
32+
postApiController.setupRoutes(api)
33+
categoryApiController.setupRoutes(api)
5634
}
5735
}

Chapter 12/myProject/Sources/App/Modules/Blog/Objects/BlogCategory.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ extension Blog {
1111

1212
enum Category: ApiModelInterface {
1313
typealias Module = Blog
14+
15+
static let pathKey: String = "categories"
1416
}
1517
}
1618

0 commit comments

Comments
 (0)